MQTT und Sonoff-TH

Begonnen von chris_kmn, 02 November 2017, 21:37:02

Vorheriges Thema - Nächstes Thema

chris_kmn

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

dev0


defmod ej3 expandJSON temp_.*:Sensor:.{.*}

chris_kmn

@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

andyx87

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.

dev0

Poste bitte ein "list" von SonoffTH161_Temp und vom expandJSON Device in Code Tags (# Button).

andyx87

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

dev0

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.

andyx87

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