Nun kannst Du diesen Channel mit verschiedenen String Items verknüpfen. Dabei legst Du ein Profile vom Typ JSONPATH an und trägst dort den entsprechenden Path ein. Zum Beispiel:
$.[?(@.adr=="2247C401")].state ergibt als Status dann I:0:00B4:00DB:00:00
Unter der Voraussetzung, dass die Nodes immer in der gleichen Reihenfolge kommen, kannst Du natürlich auch direkt adressieren, mit $.[6].state
Den String kannst Du dann innerhalb einer Rule noch mittels Item.state.toString.split(":").get(2) auf 00B4 eingrenzen. Natürlich kannst Du auch sämtliche Operationen innerhalb der Rule machen. Nehmen wir an, es gibt keine state transformation. Es kommt also der gesamte String in einem String Item httpInput an.
Code: Alles auswählen
rule "http thermostat"
when
Item httpInput changed
then
val strJSON = transform("REGEX","({XC_SUC}(.*))",httpInput.state.toString)
val strKuecheState = transform("JSONPATH","$.[?(@.adr=="2247C401")].state",strJSON)
val strKindState = transform("JSONPATH","$.[?(@.adr=="4CDDEB01")].state",strJSON)
val strKuecheValSoll = strKuecheState.split(":").get(2)
val strKuecheValIst = strKuecheState.split(":").get(3)
val strKindValSoll = strKindState.split(":").get(2)
val strKindValIst = strKindState.split(":").get(3)
val sollKueche = (Integer::parseInt(strKuecheValSoll,16)).floatValue / 10
val istKueche = (Integer::parseInt(strKuecheValIst,16)).floatValue / 10
val sollKind = (Integer::parseInt(strKindValSoll,16)).floatValue / 10
val istKind = (Integer::parseInt(strKindValIst,16)).floatValue / 10
KuecheSoll.postUpdate(sollKueche)
KuecheIst.postUpdate(istKueche)
KindSoll.postUpdate(sollKind)
KindIst.postUpdate(istKind)
end