FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: chris_kmn am 02 November 2017, 21:37:02

Titel: MQTT und Sonoff-TH
Beitrag von: chris_kmn am 02 November 2017, 21:37:02
Hallo zusammen,

ich komme beim Auslesen der Temperatur eines Sonoff-TH nicht mehr weiter :-( Alle Schalter funtionieren, die Readings werden auch eingelesen, aber ich glaube das expandJSON klappt nicht.

Device:
defmod temp_huette MQTT_DEVICE
attr temp_huette IODev mqtt
attr temp_huette icon temperature_humidity
attr temp_huette room Huette
attr temp_huette stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ".ReadingsVal($name,"Temperature",0).ReadingsVal($name,"Humidity",0))}
attr temp_huette subscribeReading_Sensor tele/sonoff-9/SENSOR

setstate temp_huette Temperatur: 0.0 Grad Feuchte: 0.0 00
setstate temp_huette 2017-11-02 21:26:18 Sensor {"Time":"2017-11-02T21:23:05", "AM2301":{"Temperature":10.1, "Humidity":96.2}, "TempUnit":"C"}
setstate temp_huette 2017-11-02 19:49:26 state active
setstate temp_huette 2017-11-02 21:26:18 transmission-state incoming publish received


expandJSON:
defmod ej3 expandJSON sonoff.*:.*:.{.*}
attr ej3 room Huette

setstate ej3 active
setstate ej3 2017-11-02 21:26:17 state active



Ich habe schon alle möglichen Kombinationen in der Regexp probiert, aber die Werte kommen nicht zur Anzeige.

Was mir aufgefallen ist ist der Auszug nach "jsonlist" für den Tempsensor. Es sieht so aus als würden die " nicht richtig dargestellt werden. Keine Ahnung ob das eine Relevanz hat :-(
"Readings": {
      "Sensor": { "Value":"{\u0022Time\u0022:\u00222017-11-02T21:23:05\u0022, \u0022AM2301\u0022:{\u0022Temperature\u0022:10.1, \u0022Humidity\u0022:96.2}, \u0022TempUnit\u0022:\u0022C\u0022}", "Time":"2017-11-02 21:26:18" },
      "state": { "Value":"active", "Time":"2017-11-02 19:49:26" },
      "transmission-state": { "Value":"incoming publish received", "Time":"2017-11-02 21:26:18" }


Diese "u0022" kommen nur bei dem Sensor vor. Die Schalter sehen so aus:
"Readings": {
      "Licht": { "Value":"ON", "Time":"2017-11-02 21:29:45" },
      "state": { "Value":"ON", "Time":"2017-11-02 21:29:45" },
      "transmission-state": { "Value":"incoming publish received", "Time":"2017-11-02 21:29:45" }


Hat da jemand einen Tip ? Den Sensor lese ich übrigens auch über die homebridge ins Homekit ein und dort funktioniert er einwandfrei.

Vielen Dank, Chris
Titel: Antw:MQTT und Sonoff-TH
Beitrag von: dev0 am 02 November 2017, 21:44:27

defmod ej3 expandJSON temp_.*:Sensor:.{.*}
Titel: Antw:MQTT und Sonoff-TH
Beitrag von: chris_kmn am 02 November 2017, 22:37:29
@dev0: vielen Dank !!!! Das war nicht die komplette Lösung, hat mich aber auf den richtigen Weg gebracht.

Das Sonoff formatiert den Sensornamen in die Wertenamen. Damit hat die Abfrage im ReadingsVal nicht funktioniert.

So funktioniert es jetzt:
defmod temp_huette MQTT_DEVICE
attr temp_huette IODev mqtt
attr temp_huette icon temperature_humidity
attr temp_huette room Huette
attr temp_huette stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ",ReadingsVal($name,"AM2301_Temperature",0),ReadingsVal($name,"AM2301_Humidity",0))}
attr temp_huette subscribeReading_Sensor tele/sonoff-9/SENSOR

setstate temp_huette Temperatur: 10.0 Grad Feuchte: 96.9
setstate temp_huette 2017-11-02 22:32:20 AM2301_Humidity 96.9
setstate temp_huette 2017-11-02 22:32:20 AM2301_Temperature 10
setstate temp_huette 2017-11-02 22:32:20 Sensor {"Time":"2017-11-02T22:29:36", "AM2301":{"Temperature":10.0, "Humidity":96.9}, "TempUnit":"C"}
setstate temp_huette 2017-11-02 22:32:20 TempUnit C
setstate temp_huette 2017-11-02 22:32:20 Time 2017-11-02T22:29:36
setstate temp_huette 2017-11-02 19:49:26 state active
setstate temp_huette 2017-11-02 22:32:20 transmission-state incoming publish received


Und natürlich mit deinem expandJSON. Wirklich tricky für einen Neuling.

Nochmals DANKE :-)

Chris
Titel: Antw:MQTT und Sonoff-TH
Beitrag von: andyx87 am 21 November 2017, 15:46:20
Hi,
ich als Neuling hab irgendwie so das gleiche Problem. Ich habe einen TH16 von Sonoff und möchte die Temperatur auslesen. Als Sensor verwende ich den DS18B20. Bekomme aber leider immer 0 Grad angezeigt. Mein Code:

defmod SonoffTH161_Temp MQTT_DEVICE
attr SonoffTH161_Temp IODev myBroker
attr SonoffTH161_Temp icon temperature_humidity
attr SonoffTH161_Temp stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"temperature",0))}
attr SonoffTH161_Temp subscribeReading_SENSOR tele/SonoffTH161/SENSOR

Der Wert den der Sonoff in der Console ausgibt ist:
15:38:42 MQT: tele/SonoffTH161/SENSOR = {"Time":"2017-11-21T15:38:42", "DS18B20":{"Temperature":19.4}, "TempUnit":"C"}

Ich bekomme den nicht formatiert.
Titel: Antw:MQTT und Sonoff-TH
Beitrag von: dev0 am 21 November 2017, 17:13:23
Poste bitte ein "list" von SonoffTH161_Temp und vom expandJSON Device in Code Tags (# Button).
Titel: Antw:MQTT und Sonoff-TH
Beitrag von: andyx87 am 21 November 2017, 18:25:20
Meinst du das?
defmod SonoffTH161_Temp MQTT_DEVICE
attr SonoffTH161_Temp IODev myBroker
attr SonoffTH161_Temp icon temperature_humidity
attr SonoffTH161_Temp stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"temperature",0))}
attr SonoffTH161_Temp subscribeReading_SENSOR tele/SonoffTH161/SENSOR

setstate SonoffTH161_Temp Temperatur: 0.0 Grad
setstate SonoffTH161_Temp 2017-11-21 17:19:30 SENSOR {"Time":"2017-11-21T18:19:31", "DS18B20":{"Temperature":18.4}, "TempUnit":"C"}
setstate SonoffTH161_Temp 2017-11-21 17:19:30 transmission-state incoming publish received
Titel: Antw:MQTT und Sonoff-TH
Beitrag von: dev0 am 21 November 2017, 19:17:26
Ein möglicher Weg wäre ein expandJSON Device zu definieren, damit der JSON String in einzelne Reading aufgeteilt wird. Danach musst Du noch den Readingnamen im verwendeten ReadingsVal (stateFormat) auf das neu angelegte Reading anpassen.
Titel: Antw:MQTT und Sonoff-TH
Beitrag von: andyx87 am 21 November 2017, 19:41:14
Danke! Jetzt läufts. Habs folgendermaßen gelöst:
defmod SonoffTH161_Temp MQTT_DEVICE
attr SonoffTH161_Temp IODev myBroker
attr SonoffTH161_Temp icon temperature_humidity
attr SonoffTH161_Temp stateFormat Temperatur: SENSOR_DS18B20_Temperature C
attr SonoffTH161_Temp subscribeReading_SENSOR tele/SonoffTH161/SENSOR


defmod SonoffTH161_Read expandJSON SonoffTH161_Temp.*:.*:.{.*}

Jetzt ist der Ausgabewert beispielhaft: Temperatur: 18 C