[SOLVED] Convert and split String to Number

Hello everybody,

I’m desperately trying to split a string into a number. The problem is, the string is a little more complex.
So, this is the Sting:

Tonte:212 Chg:111 Att:110 Rech:11 Panne:0 min
Now i want to split like this(number):
Tonte=212
Chg=111
Att=110
Rech=11
Panne=0

I find some solution in the community, but not none realy helped me.
any Ideas?

best regards

Can you please post the raw format of the string? Have you looked at Jsonpath?

try

var String Message="Tonte:212 Chg:111 Att:110 Rech:11 Panne:0 min"
var String OptimizedMessage=Message.state.toString.replace(':','=')
var Torte = OptimizedMessage.split(" ").get(0)
var Chg = OptimizedMessage.split(" ").get(1)
...

Maybe space must be escaped by '\\ '. Not sure, I do not know how to solve this.

var String myString = "Tonte:212 Chg:111 Att:110 Rech:11 Panne:0 min"
var String1 = myString.split(" ").get(0) // "Tonte:212"
var TonteValue = Float::parseFloat(String1.split(":").get(1)) as Number //212

Or you can use RegEX with the folwing example:

In Openhab this becomes something like:
s/Tonte:+(\d+\.\d+)

also see this post:

1 Like

Very good point @Jostein89

I though of that, but regex is obscure enough without having to introduce a transformation on to of that.
I wanted to show the programmatic way of doing it.

Wow, thank you all for the fast reply.
I´ll try and let you know

like that?

String Automower_G2_Stats_Now “Statistik (heute): [%s]” <chart> (gAutomower) {mqtt=“<[mosquitto:Automower/AM_G2/State/Stats/Now:state:default]”}

var String myString = Automower_G2_Stats_Now

var String1 = myString.split(" ").get(0) // “Tonte:212”

var TonteValue = Float::parseFloat(String1.split(“:”).get(1)) as Number

var String2 = myString.split(" ").get(1) // “Chg:111”

var ChgValue = Float::parseFloat(String2.split(“:”).get(1)) as Number

var String3 = myString.split(" ").get(2) // “Att:110”

var AttValue = Float::parseFloat(String3.split(“:”).get(1)) as Number

var String4 = myString.split(" ").get(3) // “Rech:11”

var RechValue = Float::parseFloat(String4.split(“:”).get(1)) as Number

var String5 = myString.split(" ").get(4) // “Panne:0”

var PanneValue = Float::parseFloat(String5.split(“:”).get(1)) as Number

I also will try RegEX

Looks about right

ok, i´ll quick build a rule, test it and keep you informed.

THX

HI,

now this is the item:

String Automower_G2_Stats_Now "Statistik (heute):" <chart> (gAutomower) {mqtt="<[mosquitto:Automower/AM_G2/State/Stats/Now:state:default]"}

This is the rule:

rule "Format Automower Stats"
when
	//Item Automower_G2_Stats_Now received update 
	Time cron  "0/30 * * * * ?"
then

var String myString = Automower_G2_Stats_Now.state
var String1 = myString.split(" “).get(0) // “Tonte:212”
var TonteValue = Float::parseFloat(String1.split(”:").get(1)) as Number
logInfo(filename, "TonteValue: " + TonteValue.state )
Automower_G2_Stats_Mow.postUpdate(TonteValue)

	var String2 = myString.split(" ").get(1) // "Chg:111"
	var ChgValue = Float::parseFloat(String2.split(":").get(1)) as Number
	logInfo(filename, "ChgValue: " + ChgValue.state )
	Automower_G2_Stats_Charge.postUpdate(ChgValue)

	var String3 = myString.split(" ").get(2) // "Att:110"
	var AttValue = Float::parseFloat(String3.split(":").get(1)) as Number
	logInfo(filename, "AttValue: " + AttValue.state )
	Automower_G2_Stats_Wait.postUpdate(AttValue)

	var String4 = myString.split(" ").get(3) // "Rech:11"
	var RechValue = Float::parseFloat(String4.split(":").get(1)) as Number
	logInfo(filename, "RechValue: " + RechValue.state )
	Automower_G2_Stats_Search.postUpdate(RechValue)

	var String5 = myString.split(" ").get(4) // "Panne:0"
	var PanneValue = Float::parseFloat(String5.split(":").get(1)) as Number
	logInfo(filename, "PanneValue: " + PanneValue.state )
	Automower_G2_Stats_Error.postUpdate(PanneValue)
end

This is the error message:

[ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule ‘Format Automower Stats’: An error occurred during the script execution: Could not invoke method: java.lang.String.split(java.lang.String) on instance: Tonte:0 Chg:0 Att:1148 Rech:0 Panne:0 min

Tried to change the Item…same error

Hi,

ok, got it. The Problem is, the string Items seems to be not realy a String.

/-------------  transform Automower Stats  --------------------

rule "Format Automower Stats"
when
	//Item Automower_G2_Stats_Now received update 
	Time cron  "0/30 * * * * ?"
then
	var String myString = Automower_G2_Stats_Now.state.toString
	var String1 = myString.toString.split(" ").get(0) // "Tonte:111"
	var MowValue = Float::parseFloat(String1.split(":").get(1)) as Number
	logInfo(filename, "Automover Stats MowValue: " + MowValue )
	Automower_G2_Stats_Mow.postUpdate(MowValue)
	
	var String2 = myString.toString.split(" ").get(1) // "Chg:111"
	var ChgValue = Float::parseFloat(String2.split(":").get(1)) as Number
	logInfo(filename, "Automover Stats ChgValue: " + ChgValue )
	Automower_G2_Stats_Charge.postUpdate(ChgValue)

	var String3 = myString.toString.split(" ").get(2) // "Att:110"
	var WaitValue = Float::parseFloat(String3.split(":").get(1)) as Number
	logInfo(filename, "Automover Stats WaitValue: " + WaitValue )
	Automower_G2_Stats_Wait.postUpdate(WaitValue)

	var String4 = myString.toString.split(" ").get(3) // "Rech:11"
	var SearchValue = Float::parseFloat(String4.split(":").get(1)) as Number
	logInfo(filename, "Automover Stats SearchValue: " + SearchValue )
	Automower_G2_Stats_Search.postUpdate(SearchValue)

	var String5 = myString.toString.split(" ").get(4) // "Panne:0"
	var ErrorValue = Float::parseFloat(String5.split(":").get(1)) as Number
	logInfo(filename, "Automover Stats ErrorValue: " + ErrorValue )
	Automower_G2_Stats_Error.postUpdate(ErrorValue)
end

best regards

1 Like