Hallo,
Ich habe einen auf Tasmota geflashten SONOFF TH10 über MQTT am fhem-internen Broker angebunden. Schalten via fhem geht einwandfrei, Schaltzustand wird auch korrekt in fhem angezeigt. Ich hätte aber gerne den Schaltzustand (on/off) regelmäßig im Logfile, damit das vernünftig in einem Plot angezeigt wird.
Wenn ich mir die Tasomta Console anschaue, wird auch regelmäßig unter tele/tasmota_XYZ/STATE der JSON String gesendet, der u.a. den Schaltzustand unter POWER1 enthält. Mit dem MQTT Explorer sehe ich das auch auf dem MQTT Server ankommen, das reading "Time" wird auch aktualisiert. Leider aber nicht das Reading "state" und somit gibt es auch keinen Event. Das reading aktualisert sich nur, wenn tatsächlich geschaltet wird. Auch ein event-min-interval state:60 ändert daran nichts. Gibt es da einen Trick ?
List vom Device:
Internals:
CID DVES_06123D
DEF DVES_06123D
FUUID 64fc7d42-f33f-81da-9cd3-d15a7903e3e8341c
IODev m2s
LASTInputDev m2s
MSGCNT 4152
NAME MQTT2_DVES_06123D
NR 471
STATE off
TYPE MQTT2_DEVICE
eventCount 1024
m2s_CONN m2s_192.168.179.111_58532
m2s_MSGCNT 4152
m2s_TIME 2023-10-30 09:16:54
JSONMAP:
Channel_0 0
Channel_1 0
Channel_2 0
Channel_3 0
Channel_4 0
Channel_5 0
Color 0
Dimmer 0
HSBColor 0
POWER1 0
POWER2 0
POWER3 0
POWER4 0
READINGS:
2023-10-12 09:46:43 BootCount 21
2023-10-12 09:46:43 FallbackTopic cmnd/DVES_06123D_fb/
2023-10-12 09:46:43 GroupTopic cmnd/%topic%/%prefix%/
2023-10-30 09:16:54 Heap 24
2023-10-12 09:46:43 Hostname tasmota-06123D-0061
2023-10-16 13:34:44 IODev m2s
2023-10-12 09:46:43 IPAddress 192.168.179.111
2023-10-16 13:35:02 LWT Online
2023-10-30 09:16:54 LoadAvg 19
2023-10-12 09:46:43 Module Sonoff TH
2023-10-30 09:16:54 MqttCount 2
2023-09-09 16:22:34 OtaUrl http://ota.tasmota.com/tasmota/tasmota.bin.gz
2023-09-09 16:26:09 Password1 ****
2023-09-09 16:26:09 Password2 ****
2023-10-12 09:46:43 RestartReason Software/System restart
2023-10-30 08:54:02 Rule1_Free 511
2023-10-30 08:54:02 Rule1_Length 0
2023-10-30 08:54:02 Rule1_Once off
2023-10-30 08:54:02 Rule1_Rules
2023-10-30 08:54:02 Rule1_State off
2023-10-30 08:54:02 Rule1_StopOnError off
2023-09-09 16:26:09 SSId1 mywifi
2023-09-09 16:26:09 SSId2 mywifi2
2023-09-09 16:13:52 SaveData on
2023-09-09 16:13:52 SetOption26 on
2023-10-30 09:16:54 Sleep 50
2023-10-30 09:16:54 SleepMode Dynamic
2023-09-09 16:13:51 StateText1 off
2023-09-09 16:13:51 StateText2 on
2023-09-09 16:13:51 StateText3 toggle
2023-09-09 16:13:52 StateText4 hold
2023-10-30 09:16:54 Time 2023-10-30T09:16:54
2023-09-09 16:22:34 Upgrade Version 9.1.0 from http://ota.tasmota.com/tasmota/tasmota.bin.gz
2023-10-30 09:16:54 Uptime 18T00:30:31
2023-10-30 09:16:54 UptimeSec 1557031
2023-09-09 16:21:36 Vcc 3.418
2023-10-12 09:46:43 Version 13.1.0.2(tasmota)
2023-10-12 09:46:43 WebServerMode Admin
2023-10-30 09:16:54 Wifi_AP 2
2023-10-30 09:16:54 Wifi_BSSId DE:2C:6E:19:E9:B7
2023-10-30 09:16:54 Wifi_Channel 6
2023-10-30 09:16:54 Wifi_Downtime 0T00:00:18
2023-10-30 09:16:54 Wifi_LinkCount 1
2023-10-30 09:16:54 Wifi_Mode 11n
2023-10-30 09:16:54 Wifi_RSSI 100
2023-10-30 09:16:54 Wifi_SSId mywifi
2023-10-30 09:16:54 Wifi_Signal -25
2023-09-09 16:13:51 attrTemplateVersion 20210523
2023-10-30 04:34:00 state off
2023-10-16 13:35:39 subscriptions cmnd/%topic%/%prefix%/# cmnd/DVES_06123D_fb/# cmnd/tasmota_06123D/#
Attributes:
alias SONOFF TH1 Luftentfeuchter
autocreate 0
comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/cmnd/tasmota_06123D/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
event-min-interval state:60
event-on-change-reading state
event-on-update-reading state
icon hue_filled_outlet
jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 Channel_5:0 HSBColor:0 Color:0
model tasmota_basic_state_power1
readingList tele/tasmota_06123D/LWT:.* LWT
tele/tasmota_06123D/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_06123D/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_06123D/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ? json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_06123D/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
stat/tasmota_06123D/POWER1:.* state
stat/tasmota_06123D/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
room Heizungskeller,MQTT2_DEVICE
setList off:noArg cmnd/tasmota_06123D/POWER1 0
on:noArg cmnd/tasmota_06123D/POWER1 1
toggle:noArg cmnd/tasmota_06123D/POWER1 2
setOtaUrl:textField cmnd/tasmota_06123D/OtaUrl $EVTPART1
upgrade:noArg cmnd/tasmota_06123D/upgrade 1
setStateList on off toggle
Warum plottest Du state und nicht das Reading?
Ich würde POWER1 nicht auf state schreiben. Evtl. hat das Nebenwirkungen.
Ansonsten mal event-on... etc. löschen und beobachten. Bzw. die Wechselwirkung diese Attribute in der Comref nachlesen.
Zitat von: gadget am 30 Oktober 2023, 09:23:16wird auch regelmäßig unter tele/tasmota_XYZ/STATE der JSON String gesendet,
Das dieser Topic regelmäßig gesendet wird ist einfach nur unnötig und das macht die Probleme, den würd ich einfach abschalten mit
teleperiod 0 und die Verwendung irgendwelcher event-on-...-Attribute erübrigt sich meiner Erfahrung nach.
OT:
Folgenden Vorschlag hätt ich für die readingList um ein "sauberes Device" zu erhalten:
1.
Deine readingList-Einträge durch diese ersetzen:
attr MQTT2_DVES_06123D readingList tele/tasmota_06123D/LWT:.* LWT\
stat/tasmota_06123D/POWER1:.* state\
tele/tasmota_06123D/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
tele/tasmota_06123D/INFO2:.* { $EVENT =~ m,IPAddress.:.(.*)..., ? {ip=>$1} : undef }\
stat/tasmota_06123D.* {}\
tele/tasmota_06123D.* {}
2.
und einmal
deletereading MQTT2_DVES_06123D .*
ausführen.
3.
Tasmota-Device einmal spannungslos machen oder im UI schalten
Danke für die Vorschläge !
Das Mapping für state ist nicht auf meinem Mist gewachsen sondern kommt vom verwendeten attrTemplate. Die Vorschläge oben haben leider alle nicht zum Ziel geführt, aber mehr durch Zufall bin ich nun drauf gekommen, dass das attrTemplate "tasmota_set_power1_state_to_power" funktioniert. Das fügt zusätzlich ein
attr MQTT2_DVES_06123D userReadings state:POWER:.* { lc(ReadingsVal($name,"POWER","")) }
ein.