Hallo,
ich habe ein AM2301 Tempsensor via 2,5mm Klinke, an einen Sonoff mit Tasmota angeschlossen, was auch funktioniert.
Was ich nicht schaffe, ist aus dem JSON String die Readings herauszufiltern. :(
So kommt derzeit das JSON Reading rein:
SENSOR {"Time":"2018-04-22T18:56:06", "AM2301":{"Temperature":24.2, "Humidity":49.7}, "TempUnit":"C"}
2018-04-22 20:01:09 MQTT_DEVICE 4ch SENSOR: {"Time":"2018-04-22T19:01:00", "AM2301":{"Temperature":24.2, "Humidity":49.4}, "TempUnit":"C"}
Mein derzeitiges stateFormat:
stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"AM2301_Temperature",0), ReadingsVal($name,"AM2301_Humidity",0))}
Und das expandJSON Device:
defmod ej3 expandJSON SENSOR.*:.*:.{.*}
Kann mir jemand ein Denkanstoss geben, wo der Fehler liegt? Ich habe jetzt schon viel rumprobiert, aber irgendwie verstehe ich das ganze noch nicht wirklich. :(
Hier noch ein komplettes List vom Sonoff Device:
Internals:
IODev myBroker
NAME 4ch
NR 374
STATE Temperatur: 0.0 Grad Feuchte: 0.0
TYPE MQTT_DEVICE
READINGS:
2018-04-22 15:25:41 LWT Online
2018-04-22 19:46:58 POWER1 ON
2018-04-22 19:46:58 RESULT {"POWER1":"ON"}
2018-04-22 20:02:31 SENSOR {"Time":"2018-04-22T19:02:30", "AM2301":{"Temperature":24.2, "Humidity":49.1}, "TempUnit":"C"}
2018-04-22 20:02:31 STATE {"Time":"2018-04-22T19:02:30", "Uptime":46, "Vcc":3.170, "POWER1":"ON", "POWER2":"ON", "POWER3":"ON", "POWER4":"OFF", "Wifi":{"AP":2, "SSId":"Teffi007", "RSSI":76, "APMac":"5C:49:79:87:01:2F"}}
2018-04-22 20:02:01 UPTIME {"Time":"2018-04-22T19:02:00", "Uptime":46}
2018-04-22 20:02:31 transmission-state incoming publish received
message_ids:
publishSets:
:
topic 1
values:
sets:
subscribe:
+/4ch/+
tele/4ch/LWT
tele/4ch/SENSOR
tele/4ch/STATE
tele/4ch/UPTIME
cmnd/4ch/POWER1
stat/4ch/RESULT
stat/4ch/POWER1
subscribeExpr:
^[^/]+\/4ch\/([^/]+)$
^tele\/4ch\/LWT$
^tele\/4ch\/SENSOR$
^tele\/4ch\/STATE$
^tele\/4ch\/UPTIME$
^cmnd\/4ch\/POWER1$
^stat\/4ch\/RESULT$
^stat\/4ch\/POWER1$
subscribeReadings:
cmnd/4ch/POWER1:
cmd
name POWER1
stat/4ch/POWER1:
cmd
name POWER1
stat/4ch/RESULT:
cmd
name RESULT
tele/4ch/LWT:
cmd
name LWT
tele/4ch/SENSOR:
cmd
name SENSOR
tele/4ch/STATE:
cmd
name STATE
tele/4ch/UPTIME:
cmd
name UPTIME
Attributes:
DbLogExclude .*
IODev myBroker
autoSubscribeReadings +/4ch/+
publishSet 1
room 3_Wohnzimmer
stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"AM2301_Temperature",0), ReadingsVal($name,"AM2301_Humidity",0))}
subscribeReading_LWT tele/4ch/LWT
subscribeReading_POWER1 stat/4ch/POWER1
subscribeReading_RESULT stat/4ch/RESULT
subscribeReading_SENSOR tele/4ch/SENSOR
subscribeReading_STATE tele/4ch/STATE
subscribeReading_UPTIME tele/4ch/UPTIME
suppressReading 1
Viele Grüße
Mark
Kannst ja mal das TASMOTA_DEVICE (https://github.com/klein0r/fhem-tasmota) versuchen.
Das habe ich auch schon erfolglos versucht.. liegt vielleicht daran, das ich keine Räume habe.
Er hat /Smarthome/Buero/Sonoff
Bei mir heißt es nur /Sonoff und das funktioniert nicht...
Ich habe es jetzt hinbekommen...
Schuld war der expandJSON String:
defmod ej3 expandJSON SENSOR.*:.*:.{.*}
So funktioniert das:
defmod ej3 expandJSON 4ch.*:.*:.{.*}
Kann mir jemand evtl. sagen, wie ich nach SENSOR in Tasmota filtern kann, vielleicht so?
defmod ej3 expandJSON *.SENSOR.*:.*:.{.*}
Schon ziemlich kompliziert das ganze... :o
EDIT: gelöst, damit funktioniert das filtern nach SENSOR:
.:SENSOR.:.{.*}
Der Dank geht an Gerd! ;)
Deswegen ja das o.g. Modul. macht das alles viel einfacher.
Das MQTT-Topic kannst ja ändern.
Zitat von: gbomacfly am 22 April 2018, 22:11:21
Deswegen ja das o.g. Modul. macht das alles viel einfacher.
Das MQTT-Topic kannst ja ändern.
Das ist einfacher, wenn es funktioniert. Ich habe das schon ein paar mal vor Monaten probiert, aber das hat nicht hingehauen.
Heute noch mal probiert und ging nicht. Ich habe als topic nur ein: "4ch" und als full topic: "%prefix%/%topic%/" in den MQTT Einstellungen in Tasmota...
Das IODev hatte ich auch korrekt gesetzt...
Hast du das auch so, oder noch Räume davor?
EDIT:
Hier mal ein List vom TASMOTA_DEVICE und unten gibts noch ein Screenshot von der Tasmota MQTT Einstellung:
Internals:
CFGFN
DEF 4ch %prefix%/%topic%/
FULL_TOPIC %prefix%/4ch/
IODev myBroker
MODULE_VERSION 0.4
NAME 4ch_test
NOTIFYDEV 4ch %prefix%/%topic%/
NR 985
READY 1
STATE ???
TOPIC 4ch
TYPE TASMOTA_DEVICE
sets:
subscribe:
stat/POWER/4ch/
stat/UPGRADE/4ch/
stat/RESULT/4ch/
stat/STATUS/4ch/
stat/STATUS1/4ch/
stat/STATUS2/4ch/
stat/STATUS3/4ch/
stat/STATUS4/4ch/
stat/STATUS5/4ch/
stat/STATUS6/4ch/
stat/STATUS7/4ch/
stat/STATUS8/4ch/
stat/STATUS9/4ch/
stat/STATUS10/4ch/
stat/STATUS11/4ch/
tele/STATUS/4ch/
tele/LWT/4ch/
tele/ENERGY/4ch/
tele/INFO1/4ch/
tele/INFO2/4ch/
tele/INFO3/4ch/
tele/SENSOR/4ch/
tele/STATE/4ch/
tele/UPTIME/4ch/
tele/RESULT/4ch/
subscribeExpr:
^stat\/POWER\/4ch\/$
^stat\/UPGRADE\/4ch\/$
^stat\/RESULT\/4ch\/$
^stat\/STATUS\/4ch\/$
^stat\/STATUS1\/4ch\/$
^stat\/STATUS2\/4ch\/$
^stat\/STATUS3\/4ch\/$
^stat\/STATUS4\/4ch\/$
^stat\/STATUS5\/4ch\/$
^stat\/STATUS6\/4ch\/$
^stat\/STATUS7\/4ch\/$
^stat\/STATUS8\/4ch\/$
^stat\/STATUS9\/4ch\/$
^stat\/STATUS10\/4ch\/$
^stat\/STATUS11\/4ch\/$
^tele\/STATUS\/4ch\/$
^tele\/LWT\/4ch\/$
^tele\/ENERGY\/4ch\/$
^tele\/INFO1\/4ch\/$
^tele\/INFO2\/4ch\/$
^tele\/INFO3\/4ch\/$
^tele\/SENSOR\/4ch\/$
^tele\/STATE\/4ch\/$
^tele\/UPTIME\/4ch\/$
^tele\/RESULT\/4ch\/$
Attributes:
DbLogExclude .*
IODev myBroker
stateFormat transmission-state
Hier mal ein Beispiel von mir (Raw Def):
defmod SZ.Trockner TASMOTA_DEVICE SZ.Trockner
attr SZ.Trockner DbLogExclude .*
attr SZ.Trockner DbLogInclude sensor-energy-total,sensor-energy-power, sensor-energy-current,sensor-energy-voltage
attr SZ.Trockner IODev MQTTBroker
attr SZ.Trockner autoSubscribeReadings Home/Schlafzimmer/SZ.Trockner/tele/+
attr SZ.Trockner event-on-change-reading (?!.*time|.*vcc).*
attr SZ.Trockner group Trockner
attr SZ.Trockner icon scene_clothes_dryer
attr SZ.Trockner publishSet ON OFF cmnd/SZ.Trockner/POWER
attr SZ.Trockner room Geräte,Schlafzimmer
attr SZ.Trockner sortby 4
attr SZ.Trockner stateFormat {\
if (ReadingsVal("SZ.Trockner_Presence","presence","-") eq 'present') {\
if (ReadingsVal($name,"state","off") eq 'ON') {\
'<a href="/fhem?cmd.' . $name . '=set ' . $name . ' OFF&XHR=1"><img src="/fhem/images/default/10px-kreis-gruen.png"></a> <a href="http://' . ReadingsVal($name,"info2-ipaddress","0") . '" target="_blank">' . ReadingsVal($name,"info2-ipaddress","0") . '</a>' . '<br />' .\
ReadingsNum($name,"sensor-energy-voltage","0") . " V - " . ReadingsNum($name,"sensor-energy-power","0") . " W<br />" .\
ReadingsNum($name,"sensor-energy-current","0") . " A - " . ReadingsNum($name,"sensor-energy-total","0") . " kWh"\
} else {\
'<a href="/fhem?cmd.' . $name . '=set ' . $name . ' ON&XHR=1"><img src="/fhem/images/default/10px-kreis-rot.png"></a> <a href="http://' . ReadingsVal($name,"info2-ipaddress","0") . '" target="_blank">' . ReadingsVal($name,"info2-ipaddress","0") . '</a>'\
}\
} else { \
"Nicht verbunden!"\
};;;;\
}
attr SZ.Trockner userReadings running {(ReadingsVal("SZ.Trockner","sensor-energy-power",0) >25)?"ON":"OFF";;;;}
attr SZ.Trockner webCmd :
Danke dir erstmal für das Bespiel. :) Ich habe das noch mal probiert, aber bei mir will das einfach nicht funktionieren.
Ich habe das mit Räumen /Home/Wohnzimmer/ probiert und mit verschiedenen Variationen von /%prefix%/%topic%/ oder /%topic%/%prefix% ...
Einmal ging das on/off schalten, aber es kamen keine Readings rein und nach weiterem rumprobieren, hatte ich Readings, konnte aber nicht mehr schalten. ???
Ich lass das Modul weg, weil mit diesem expandJSON die Readings auch rein kommen:
define ej3 expandJSON .:SENSOR.:.{.*}
Hast du dir mal den Traffic des MQTT-Brokers angeschaut? Ich nutze dafür MQTT.fx, is für Mac, falls du Win hast, gibt es sicher etwas ähnliches.
Das hat mir am Anfang sehr geholfen.
Ich habe ein vergleichbares Problem mit einem 4fach Relais an einem Wemos D1 Mini, der mit Tasmota geflasht ist, mit MQTT_Device gelöst:
RawDefinition:
defmod Stehleuchte_gross MQTT_DEVICE
attr Stehleuchte_gross IODev mqtt
attr Stehleuchte_gross cmdIcon ON:radio_checked@#e56524 OFF:radio_unchecked
attr Stehleuchte_gross devStateIcon ON:general_an@#e56524:OFF OFF:general_aus:ON .*:message_attention@red
attr Stehleuchte_gross publishSet ON OFF /fhem/31_Eingang/TASMOTA028/cmnd/POWER1
attr Stehleuchte_gross room 31_Eingang
attr Stehleuchte_gross stateFormat state
attr Stehleuchte_gross subscribeReading_state /stat/TASMOTA028/POWER1
attr Stehleuchte_gross webCmd ON:OFF
defmod Stehleuchte_klein MQTT_DEVICE
attr Stehleuchte_klein IODev mqtt
attr Stehleuchte_klein cmdIcon ON:radio_checked@#e56524 OFF:radio_unchecked
attr Stehleuchte_klein devStateIcon ON:general_an@#e56524:OFF OFF:general_aus:ON .*:message_attention@red
attr Stehleuchte_klein publishSet ON OFF /fhem/31_Eingang/TASMOTA028/cmnd/POWER2
attr Stehleuchte_klein room 31_Eingang
attr Stehleuchte_klein stateFormat state
attr Stehleuchte_klein subscribeReading_state /stat/TASMOTA028/POWER2
attr Stehleuchte_klein webCmd ON:OFF
defmod Wandleuchte_Haustuere MQTT_DEVICE
attr Wandleuchte_Haustuere IODev mqtt
attr Wandleuchte_Haustuere cmdIcon ON:radio_checked@#e56524 OFF:radio_unchecked
attr Wandleuchte_Haustuere devStateIcon ON:general_an@#e56524:OFF OFF:general_aus:ON .*:message_attention@red
attr Wandleuchte_Haustuere publishSet ON OFF /fhem/31_Eingang/TASMOTA028/cmnd/POWER3
attr Wandleuchte_Haustuere room 31_Eingang
attr Wandleuchte_Haustuere stateFormat state
attr Wandleuchte_Haustuere subscribeReading_state /stat/TASMOTA028/POWER3
attr Wandleuchte_Haustuere webCmd ON:OFF
defmod Wandleuchte_EckeCarport MQTT_DEVICE
attr Wandleuchte_EckeCarport IODev mqtt
attr Wandleuchte_EckeCarport cmdIcon ON:radio_checked@#e56524 OFF:radio_unchecked
attr Wandleuchte_EckeCarport devStateIcon ON:general_an@#e56524:OFF OFF:general_aus:ON .*:message_attention@red
attr Wandleuchte_EckeCarport publishSet ON OFF /fhem/31_Eingang/TASMOTA028/cmnd/POWER4
attr Wandleuchte_EckeCarport room 31_Eingang
attr Wandleuchte_EckeCarport stateFormat state
attr Wandleuchte_EckeCarport subscribeReading_state /stat/TASMOTA028/POWER4
attr Wandleuchte_EckeCarport webCmd ON:OFF
Wenn ich es richtig verstanden habe, liegt es an Tasmota. Es gibt das zu subscribende Topic unabhängig von vorgenommenen Einstellungen immer nur so aus?!
Zitat von: mark79 am 22 April 2018, 22:17:10
Das ist einfacher, wenn es funktioniert. Ich habe das schon ein paar mal vor Monaten probiert, aber das hat nicht hingehauen.
Heute noch mal probiert und ging nicht. Ich habe als topic nur ein: "4ch" und als full topic: "%prefix%/%topic%/" in den MQTT Einstellungen in Tasmota...
Das IODev hatte ich auch korrekt gesetzt...
Hast du das auch so, oder noch Räume davor?
......
Ich hab den gleichen AM201 Sensor an einem SonoffTH und scheitere aber immer noch daran die Readings korrekt in FHEM einzulesen. Habe mittlerweile diverse Variationen im stateFormat ausprobiert, aktuell so:
stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0))}
aber auch diese Variante funktionierte nicht:
stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"AM2301_Temperature",0), ReadingsVal($name,"AM2301_Humidity",0))}
Das sind meine SubscribeReadings:
subscribeReading_Licht stat/sonoff/POWER1
subscribeReading_Sensor tele/sonoff/SENSOR
subscribeReading_Status stat/sonoff/STATUS
Tasmota liefert mir:
tele/sonoff/STATE {"Time":"2018.07.08 16:53:11","Uptime":"1 06:10:15","Vcc":3.438,"POWER":"OFF","Wifi":{"AP":2,"SSId":"Villa Stanisi","RSSI":100,"APMac":"24:65:11:CF:8D:4E"}}
Client mosqsub/31689-raspberry received PUBLISH (d0, q0, r0, m0, 'tele/sonoff/SENSOR', ... (91 bytes))
tele/sonoff/SENSOR {"Time":"2018.07.08 16:53:11","AM2301":{"Temperature":29.5,"Humidity":78.4},"TempUnit":"C"}
Client mosqsub/31689-raspberry sending PINGREQ
Client mosqsub/31689-raspberry received PINGRESP
und so kommt das laut Monitor auch im Device an:
2018-07-08 17:18:12 MQTT_DEVICE Sonoff_Pool Sensor: {"Time":"2018.07.08 16:18:11","AM2301":{"Temperature":29.5,"Humidity":78.4},"TempUnit":"C"}
Im definierten expandJSON Modul steht: (auch hier diverse Variationen ausprobiert:
Internals:
DEF .*\.Sen\..*:.*:.{.*}
trotzdem bekomme ich im Device diese nicht richtig angezeigt, sondern immer nur Temperatur: 0.0 Grad Feuchte: 0.0:
Internals:
IODev myBroker
NAME Sonoff_Pool
NR 69
STATE Temperatur: 0.0 Grad Feuchte: 0.0
TYPE MQTT_DEVICE
READINGS:
2018-07-08 17:33:12 Sensor {"Time":"2018.07.08 16:33:11","AM2301":{"Temperature":29.5,"Humidity":78.4},"TempUnit":"C"}
2018-07-07 17:36:11 state ON
2018-07-08 17:33:12 transmission-state incoming publish received
message_ids:
publishSets:
:
topic cmnd/sonoff/POWER1
values:
ON
OFF
sets:
OFF
ON
subscribe:
stat/sonoff/POWER1
tele/sonoff/SENSOR
stat/sonoff/STATUS
subscribeExpr:
^stat\/sonoff\/POWER1$
^tele\/sonoff\/SENSOR$
^stat\/sonoff\/STATUS$
subscribeQos:
stat/sonoff/POWER1 0
stat/sonoff/STATUS 0
tele/sonoff/SENSOR 0
subscribeReadings:
stat/sonoff/POWER1:
cmd
name Licht
stat/sonoff/STATUS:
cmd
name Status
tele/sonoff/SENSOR:
cmd
name Sensor
Attributes:
IODev myBroker
subscribeReading_Licht stat/sonoff/POWER1
subscribeReading_Sensor tele/sonoff/SENSOR
subscribeReading_Status stat/sonoff/STATUS
devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
icon temperature_humidity
publishSet ON OFF cmnd/sonoff/POWER1
room 1.8_Pool,MQTT
stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0))}
subscribeReading_Licht stat/sonoff/POWER1
subscribeReading_Sensor tele/sonoff/SENSOR
subscribeReading_Status stat/sonoff/STATUS
webCmd ON:OFF
Ich seh vermutlich irgendwas grundlegendes nicht, vielleicht kann mir jemand hier auf die Sprünge helfen, bzw. was ich noch probieren sollte?
Bei mir funktioniert das so:
defmod ej3 expandJSON .*:SENSOR.*:.{.*}
defmod WZ_TEMP_4CH MQTT_DEVICE
attr WZ_TEMP_4CH IODev myBroker
attr WZ_TEMP_4CH alias Temperatur
attr WZ_TEMP_4CH autoSubscribeReadings +/4ch/+
attr WZ_TEMP_4CH event-on-change-reading .*
attr WZ_TEMP_4CH group Heizung
attr WZ_TEMP_4CH icon temperature_humidity
attr WZ_TEMP_4CH publishSet 1
attr WZ_TEMP_4CH room 3_Wohnzimmer
attr WZ_TEMP_4CH stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f", ReadingsVal($name,"AM2301_Temperature",0), ReadingsVal($name,"AM2301_Humidity",0))}
attr WZ_TEMP_4CH subscribeReading_INFO1 tele/4ch/INFO1
attr WZ_TEMP_4CH subscribeReading_INFO2 tele/4ch/INFO2
attr WZ_TEMP_4CH subscribeReading_INFO3 tele/4ch/INFO3
attr WZ_TEMP_4CH subscribeReading_LWT tele/4ch/LWT
attr WZ_TEMP_4CH subscribeReading_POWER cmnd/4ch/POWER
attr WZ_TEMP_4CH subscribeReading_POWER1 stat/4ch/POWER1
attr WZ_TEMP_4CH subscribeReading_POWER2 cmnd/4ch/POWER2
attr WZ_TEMP_4CH subscribeReading_POWER3 cmnd/4ch/POWER3
attr WZ_TEMP_4CH subscribeReading_POWER4 cmnd/4ch/POWER4
attr WZ_TEMP_4CH subscribeReading_RESULT stat/4ch/RESULT
attr WZ_TEMP_4CH subscribeReading_SENSOR tele/4ch/SENSOR
attr WZ_TEMP_4CH subscribeReading_STATE tele/4ch/STATE
attr WZ_TEMP_4CH subscribeReading_UPTIME tele/4ch/UPTIME
attr WZ_TEMP_4CH suppressReading 1