I Use this Item for a rule:
rule "455/<id>/status/current"
when
Item Dyson455_Topic_Status_Current received update
then
val String content = Dyson455_Topic_Status_Current.state.toString()
val String msg = transform("JSONPATH", "$.msg", content)
logWarn("DysonUpdate",msg)
if (msg == "ENVIRONMENTAL-CURRENT-SENSOR-DATA") {
val String tact_str = transform("JSONPATH", "$.data.tact", content)
if (tact_str != "OFF") {
var double tact = Float.parseFloat(tact_str)
tact = (tact - 2731.5)/10
postUpdate(Dyson455_Tact, tact as Number)
}
val String hact_str = transform("JSONPATH", "$.data.hact", content)
if (hact_str != "OFF") {
val int hact = Integer.parseInt(hact_str)
postUpdate(Dyson455_Hact, hact as Number)
}
val int pact = Integer.parseInt(transform("JSONPATH", "$.data.pact", content))
postUpdate(Dyson455_Pact, pact as Number)
val String vact_str = transform("JSONPATH", "$.data.vact", content)
if (vact_str != "INIT") {
val int vact = Integer.parseInt(vact_str)
postUpdate(Dyson455_Vact, vact as Number)
}
} else if (msg == "CURRENT-STATE") {
val String fmod_str = transform("JSONPATH", "$.product-state.fmod", content)
switch fmod_str {
case "AUTO": postUpdate(Dyson455_Fmod, 2 as Number)
case "FAN": postUpdate(Dyson455_Fmod, 1 as Number)
case "OFF": postUpdate(Dyson455_Fmod, 0 as Number)
}
if (transform("JSONPATH", "$.product-state.rhtm", content) == "ON") {
postUpdate(Dyson455_Rhtm, ON)
} else {
postUpdate(Dyson455_Rhtm, OFF)
}
val String fnsp = transform("JSONPATH", "$.product-state.fnsp", content)
if (fnsp == "AUTO") {
postUpdate(Dyson455_Fnsp, 11 as Number)
} else {
postUpdate(Dyson455_Fnsp, Integer.parseInt(fnsp) as Number)
}
val int qtar = Integer.parseInt(transform("JSONPATH", "$.product-state.qtar", content))
postUpdate(Dyson455_Qtar, qtar as Number)
if (transform("JSONPATH", "$.product-state.oson", content) == "ON") {
postUpdate(Dyson455_Oson, ON)
} else {
postUpdate(Dyson455_Oson, OFF)
}
if (transform("JSONPATH", "$.product-state.nmod", content) == "ON") {
postUpdate(Dyson455_Nmod, ON)
} else {
postUpdate(Dyson455_Nmod, OFF)
}
val int filf = Integer.parseInt(transform("JSONPATH", "$.product-state.filf", content))
postUpdate(Dyson455_Filf, filf as Number)
if (transform("JSONPATH", "$.product-state.fnst", content) == "FAN") {
postUpdate(Dyson455_Fnst, 1)
} else {
postUpdate(Dyson455_Fnst, 0)
}
val String hmod_str = transform("JSONPATH", "$.product-state.hmod", content)
switch hmod_str {
case "AUTO": postUpdate(Dyson455_Hmod, 2 as Number)
case "HEAT": postUpdate(Dyson455_Hmod, 1 as Number)
case "OFF": postUpdate(Dyson455_Hmod, 0 as Number)
}
val String hmax_str = transform("JSONPATH", "$.product-state.hmax", content)
if (hmax_str != "OFF") {
var double hmax = Float.parseFloat(hmax_str)
hmax = (hmax - 2731.5)/10
postUpdate(Dyson455_Hmax, hmax as Number)
}
if (transform("JSONPATH", "$.product-state.hsta", content) == "HEAT") {
postUpdate(Dyson455_Hsta, 1)
} else {
postUpdate(Dyson455_Hsta, 0)
}
if (transform("JSONPATH", "$.product-state.ffoc", content) == "ON") {
postUpdate(Dyson455_Ffoc, ON)
} else {
postUpdate(Dyson455_Ffoc, OFF)
}
} else if (msg == "STATE-CHANGE") {
val String fmod_str = transform("JSONPATH", "$.product-state.fmod[1]", content)
switch fmod_str {
case "AUTO": postUpdate(Dyson455_Fmod, 2 as Number)
case "FAN": postUpdate(Dyson455_Fmod, 1 as Number)
case "OFF": postUpdate(Dyson455_Fmod, 0 as Number)
}
if (transform("JSONPATH", "$.product-state.rhtm[1]", content) == "ON") {
postUpdate(Dyson455_Rhtm, ON)
} else {
postUpdate(Dyson455_Rhtm, OFF)
}
val String fnsp = transform("JSONPATH", "$.product-state.fnsp[1]", content)
if (fnsp == "AUTO") {
postUpdate(Dyson455_Fnsp, 11 as Number)
} else {
postUpdate(Dyson455_Fnsp, Integer.parseInt(fnsp) as Number)
}
val int qtar = Integer.parseInt(transform("JSONPATH", "$.product-state.qtar[1]", content))
postUpdate(Dyson455_Qtar, qtar as Number)
if (transform("JSONPATH", "$.product-state.oson[1]", content) == "ON") {
postUpdate(Dyson455_Oson, ON)
} else {
postUpdate(Dyson455_Oson, OFF)
}
if (transform("JSONPATH", "$.product-state.nmod[1]", content) == "ON") {
postUpdate(Dyson455_Nmod, ON)
} else {
postUpdate(Dyson455_Nmod, OFF)
}
val int filf = Integer.parseInt(transform("JSONPATH", "$.product-state.filf[1]", content))
postUpdate(Dyson455_Filf, filf as Number)
if (transform("JSONPATH", "$.product-state.fnst[1]", content) == "FAN") {
postUpdate(Dyson455_Fnst, 1)
} else {
postUpdate(Dyson455_Fnst, 0)
}
val String hmod_str = transform("JSONPATH", "$.product-state.hmod[1]", content)
switch hmod_str {
case "AUTO": postUpdate(Dyson455_Hmod, 2 as Number)
case "HEAT": postUpdate(Dyson455_Hmod, 1 as Number)
case "OFF": postUpdate(Dyson455_Hmod, 0 as Number)
}
val String hmax_str = transform("JSONPATH", "$.product-state.hmax[1]", content)
if (hmax_str != "OFF") {
var double hmax = Float.parseFloat(hmax_str)
hmax = (hmax - 2731.5)/10
postUpdate(Dyson455_Hmax, hmax as Number)
}
if (transform("JSONPATH", "$.product-state.hsta[1]", content) == "HEAT") {
postUpdate(Dyson455_Hsta, 1)
} else {
postUpdate(Dyson455_Hsta, 0)
}
if (transform("JSONPATH", "$.product-state.ffoc[1]", content) == "ON") {
postUpdate(Dyson455_Ffoc, ON)
} else {
postUpdate(Dyson455_Ffoc, OFF)
}
}
end