Подниму тему. Думаю не один я задавался данным вопросом.
Как подружить MQTT JSON с OpenHab?
А именно JSON вида:
// "sensors":{"bmet":-13.6,"bmeh":51.1,"bmep":758.36,"dsw1":-14.1}
Решение не мое личное, а собрано из несколько источников. На уникальность не претендую.
Использую датчики: DS18B20, BME280. Для примера более чем достаточно
1. Пишем правило grmeteo.rules и сохраняем в папке rules.
// Обратите внимание, как необходимо прописывать переменную - $.sensors.dsw1.
Обязательное необходимо указывать sensors. с точкой!
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*
rule "MQTTGRMeteo"
when
Item GRMeteoAll received update
then
var String json = (GRMeteoAll.state as StringType).toString
// "sensors":{"bmet":-13.6,"bmeh":51.1,"bmep":758.36,"dsw1":-14.1}
var String dsw1 = ""
var String bmep = ""
var String bmeh = ""
dsw1 = dsw1 + transform("JSONPATH", "$.sensors.dsw1", json)
bmep = bmep + transform("JSONPATH", "$.sensors.bmep", json)
bmeh = bmeh + transform("JSONPATH", "$.sensors.bmeh", json)
if (dsw1 !=Uninitialized){
postUpdate(grtemp, dsw1)
}
if (bmep !=Uninitialized){
postUpdate(grbar, bmep)
}
if (bmeh !=Uninitialized){
postUpdate(grhum, bmeh)
}
end
2. Пишем grmeteo.items и сохраняем в папке items
// Обратите внимание. В первой строчке, где mqtt указываем имя своей ESPке или путь к своей ESPке если какая-то иная прошивка с параметрами.
Group GRMeteo
String GRMeteoAll { mqtt="<[mosquitto:/MyESP/json:state:default]" }
Number grtemp "Температура [%.1f °C]" <sun_clouds> (GRMeteo)
Number grbar "Давление [%.2f мм]" <barometer> (GRMeteo)
Number grhum "Влажность [%.1f %%]" <weatherhum> (GRMeteo)
3. Пишем grmeteo.sitemap и сохраняем в папке sitemaps
sitemap grmeteo label="GRMeteo"
{
Frame label="GRMeteo" {
Text item=grtemp
Text item=grbar
Text item=grhum
}
}
4.
Открываем - http://192.168.1.X:8080/openhab.app?sitemap=grmeteo
// Указываем свой IP
Радуемся результатом