Hallo,
da ich Stück für Stück von deconz nach Zigbee2MQTT umziehe ist mir ein Problem aufgefallen.
Ich habe ein paar schaltbare Steckdosen, die ich über ein DOIF nach unterschiedlichen Zeiten abschalte.
Das hat vorher geklappt, nun wechselt mit Zigbee2MQTT das state der Steckdose von on zu ON. Der wait_timer wird richtig gesetzt, verlängert sich aber immer wieder. Dadurch schaltet die Schteckdose nie ab.
Hat jemand auch das Problem?
ein list der Steckdose:
Internals:
.eventMapCmd ON:noArg OFF:noArg
CID zigbee_HUEDevice13_0xa4c138d0fdf36ca2
DEF zigbee_HUEDevice13_0xa4c138d0fdf36ca2
FUUID 6661f3f0-f33f-7b6c-feb0-731dd9548625c1a7
IODev MQTT2_FHEM_Server
LASTInputDev MQTT2_FHEM_Server
MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_127.0.0.1_45560
MQTT2_FHEM_Server_MSGCNT 368405
MQTT2_FHEM_Server_TIME 2024-08-10 09:37:24
MSGCNT 368405
NAME MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
NR 1400
STATE OFF
TYPE MQTT2_DEVICE
eventCount 38555
.DT:
DEVICETOPIC zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2
.attraggr:
.attreocr:
.*
.attrminint:
Helper:
DBLOG:
power:
logdb:
TIME 1723196408.54106
VALUE 0
power_outage_memory:
logdb:
TIME 1723091355.75968
VALUE off
OLDREADINGS:
READINGS:
2024-08-09 15:29:07 availability_state online
2024-08-10 09:37:24 child_lock UNLOCK
2024-08-10 09:37:24 countdown 0
2024-08-10 09:37:24 current 0
2024-08-10 09:37:24 device-applicationVersion 192
2024-08-10 09:37:24 device-dateCode
2024-08-10 09:37:24 device-friendlyName HUEDevice13_0xa4c138d0fdf36ca2
2024-08-10 09:37:24 device-hardwareVersion 1
2024-08-10 09:37:24 device-ieeeAddr 0xa4c138d0fdf36ca2
2024-08-10 09:37:24 device-manufacturerID 4417
2024-08-10 09:37:24 device-manufacturerName _TZ3000_typdpbpg
2024-08-10 09:37:24 device-model TS011F_plug_1
2024-08-10 09:37:24 device-networkAddress 40595
2024-08-10 09:37:24 device-powerSource Mains (single phase)
2024-08-10 09:37:24 device-softwareBuildID
2024-08-10 09:37:24 device-stackVersion 0
2024-08-10 09:37:24 device-type Router
2024-08-10 09:37:24 device-zclVersion 3
2024-08-10 09:37:24 device_applicationVersion 192
2024-08-10 09:37:24 device_dateCode
2024-08-10 09:37:24 device_friendlyName HUEDevice13_0xa4c138d0fdf36ca2
2024-08-10 09:37:24 device_hardwareVersion 1
2024-08-10 09:37:24 device_ieeeAddr 0xa4c138d0fdf36ca2
2024-08-10 09:37:24 device_manufacturerID 4417
2024-08-10 09:37:24 device_manufacturerName _TZ3000_typdpbpg
2024-08-10 09:37:24 device_model TS011F_plug_1
2024-08-10 09:37:24 device_networkAddress 40595
2024-08-10 09:37:24 device_powerSource Mains (single phase)
2024-08-10 09:37:24 device_stackVersion 0
2024-08-10 09:37:24 device_type Router
2024-08-10 09:37:24 device_zclVersion 3
2024-08-10 09:37:24 energy 7.03
2024-08-10 09:37:24 indicator_mode off/on
2024-08-10 09:37:24 last_seen 2024-08-10T09:37:24+02:00
2024-08-10 09:37:24 linkquality 47
2024-08-09 15:22:32 off set
2024-08-10 09:37:24 power 0
2024-08-10 09:37:24 power_outage_memory off
2024-08-10 09:37:24 state OFF
2024-08-10 09:37:24 update-installed_version 192
2024-08-10 09:37:24 update-latest_version 192
2024-08-10 09:37:24 update-state idle
2024-08-10 09:37:24 update_installed_version 192
2024-08-10 09:37:24 update_latest_version 192
2024-08-10 09:37:24 update_state idle
2024-08-10 09:37:24 voltage 228
Attributes:
alias HUEDevice13
devStateIcon {my $light = FW_makeImage(ReadingsVal($name,'state','off')); my $current = ReadingsVal($name,'current',0); my $pwr = ReadingsVal($name,'power',0); my $energy = ReadingsVal($name,'energy',0); qq(<div> <a href="/fhem?cmd.dummy=set $name toggle&XHR=1">$light</a> Aktuell: $current A Leistung.: $pwr W<b></b>)}
devicetopic zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2
event-on-change-reading .*
icon message_socket
model zigbee2mqtt_plug_w_energy_measuring
readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/availability:.* { json2nameValue($EVENT, 'availability_', $JSONMAP) }
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/energy:.* energy
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/state:.* state
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/power_outage_memory:.* power_outage_memory
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/indicator_mode:.* indicator_mode
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/child_lock:.* child_lock
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/current:.* current
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/update-state:.* update-state
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/update-installed_version:.* update-installed_version
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/update-latest_version:.* update-latest_version
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/voltage:.* voltage
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/power:.* power
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/linkquality:.* linkquality
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/countdown:.* countdown
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/last_seen:.* last_seen
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-friendlyName:.* device-friendlyName
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-model:.* device-model
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-ieeeAddr:.* device-ieeeAddr
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-networkAddress:.* device-networkAddress
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-type:.* device-type
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-manufacturerID:.* device-manufacturerID
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-powerSource:.* device-powerSource
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-applicationVersion:.* device-applicationVersion
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-stackVersion:.* device-stackVersion
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-zclVersion:.* device-zclVersion
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-hardwareVersion:.* device-hardwareVersion
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-dateCode:.* device-dateCode
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-softwareBuildID:.* device-softwareBuildID
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/device-manufacturerName:.* device-manufacturerName
room MQTT2_DEVICE
setList on:noArg $DEVICETOPIC/set {"state":"ON"}
off:noArg $DEVICETOPIC/set {"state":"OFF"}
toggle:noArg $DEVICETOPIC/set {"state":"TOGGLE"}
setStateList on off toggle
und ein list des DOIF:
Internals:
DEF ##Laptop X270 laden
([MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2:state] eq "on")(set MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2 off)
FUUID 619a6542-f33f-7b6c-e951-b1b32907e3da9cdb
MODEL FHEM
NAME Laptop_ladenX270
NOTIFYDEV global,MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
NR 1101
NTFY_ORDER 50-Laptop_ladenX270
STATE initialized
TYPE DOIF
VERSION 28546 2024-02-23 20:11:05
eventCount 14071
.attraggr:
.attrminint:
READINGS:
2024-08-10 09:37:43 Device MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
2024-08-10 09:24:26 cmd 0
2024-08-10 09:37:43 e_MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2_state OFF
2024-08-10 09:24:26 mode enabled
2024-08-10 09:24:26 state initialized
2024-08-10 09:37:24 wait_timer 10.08.2024 09:40:24 cmd_1 MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
Regex:
accu:
bar:
barAvg:
collect:
cond:
MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2:
0:
state ^MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2$:^state:
attr:
cmdState:
wait:
0:
180
waitdel:
condition:
0 ::ReadingValDoIf($hash,'MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2','state') eq "on"
do:
0:
0 set MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2 off
1:
helper:
NOTIFYDEV global,MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
event OFF
globalinit 1
last_timer 0
sleepdevice MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
sleepsubtimer 0
sleeptimer 0
timerdev MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
timerevent linkquality: 36,ON,last_seen: 2024-08-10T09:37:24+02:00
triggerDev MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2
timerevents:
linkquality: 36
ON
last_seen: 2024-08-10T09:37:24+02:00
timereventsState:
linkquality: 36
state: on
last_seen: 2024-08-10T09:37:24+02:00
triggerEvents:
OFF
triggerEventsState:
state: OFF
internals:
readings:
all MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2:state
trigger:
uiState:
uiTable:
Attributes:
do resetwait
room DOIF
wait 180
Das attr wait ist zum probieren auf 180sec eingestellt.
Danke mvh Steffen
hi,
ja.....
eventMap on:ON off:OFF
devStateIcon
{ my $Schalter = ReadingsVal($name,"state_l1","OFF");
my $Status = ReadingsVal($name,"availability","offline");
if($Status eq "online") {
if($Schalter eq "ON" or $Schalter eq "on") {
return "ON:it_television@#00FF00:OFF";
---> } elsif($Schalter eq "OFF" or $Schalter eq "off") {
return "OFF:it_television@#8C8C8C:ON";
} else {
return ".*:it_television@#FF0000:OFF";
}
} else {
return ".*:it_television@#FF0000:OFF";
}
}
und beide zustände abgefragt
gruss
Hallo,
nur so als erster Gedanke mal in den Raum geworfen (kann auch völlig daneben liegen).
Wenn du diesen ReadingList-Eintrag:
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/state:.* state
zu
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/state:.* {}
änderst, wird dann immer noch aus on ein ON ?
Was ich bis jetzt auch noch nicht verstanden habe wozu du ein DOIF verwendest um nach einer Zeit wieder auszuschalten, warum nicht on-for-timer verwenden ?
Gruß Thomas
Was @TomLee sagt funktioniert leider nicht, denn mit einer leeren {} hat die readingList nichts mehr, womit sie arbeiten kann.
Was du brauchst ist (siehe hier (https://wiki.fhem.de/wiki/MQTT2_DEVICE_-_Schritt_f%C3%BCr_Schritt#Bedingte_Hash-R%C3%BCckgaben)):
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/state:.* state
ändern zu
zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2/state:.* { { state => lc $EVENT } }
oder besser noch zu
$DEVICETOPIC/state:.* { { state => lc $EVENT } }
Das lc macht hier den Unterschied, damit wird der state auf Kleinschreibung geändert.
Generell ist deine readingList ein bisschen unnötig kompliziert, du könntest z.B. zigbee2mqtt/HUEDevice13_0xa4c138d0fdf36ca2 überall durch $DEVICETOPIC ersetzen. Und der Sinn dieser Zeile am Anfang,
my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret
die vielleicht irgendwie das mit der Kleinschreibung bewirken soll (?) erschließt sich mir auch nicht.
Ich habe übrigens bei fast allen Geräten in der readingList nur Folgendes stehen und fahre damit ganz gut:
$DEVICETOPIC:.* { json2nameValue(lc($EVENT)) }
$DEVICETOPIC/availability:.* availability
Funktioniert natürlich nur, wenn man keine Readings umbenennen möchte, dann muss man sich anders behelfen.
Wobei das bei dir nicht funktionieren dürfte, weil – wie mich ein bisschen wundert – z2m dir ja scheinbar eigene Unter-Topics für die jeweiligen Readings gibt? Also /state, /voltage, /power, usw? Bei mir kommt das alles als ein JSON-Objekt direkt unter dem Devicetopic. Nur /availabililty ist separat.
Zitat– wie mich ein bisschen wundert – z2m dir ja scheinbar eigene Unter-Topics für die jeweiligen Readings gibt? Also /state, /voltage, /power, usw? Bei mir kommt das alles als ein JSON-Objekt direkt unter dem Devicetopic. Nur /availabililty ist separat.
Wundert mich auch, darum hab ich vorgeschlagen den "neuen" state_Zweig auszuknipsen. Weil meine Vermutung ist das dieser den state aus dem
JSON-Objekt direkt unter dem Devicetopic überschreibt ?
Ach jetzt verstehe ich, was hier passiert.
Ja, du hast recht – diese ganzen weiteren Einträge in der readingList sind unnötig, also @privat58 du brauchst nur Folgende beiden:
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
$DEVICETOPIC/availability:.* { json2nameValue($EVENT, 'availability_', $JSONMAP) }
Den Rest kannst du löschen.
Die Frage ist jetzt nur, woher das kommt? Eventuell durch autocreate? Dann mal
attr MQTT2_zigbee_HUEDevice13_0xa4c138d0fdf36ca2 autocreate 0
ausführen, oder, noch besser direktattr MQTT2_FHEM_Server autocreate no
Dann ist man zwar gezwungen, alles händisch anzulegen, aber dann passiert auch nicht sowas ...
Hi,
bei mir schaut es so aus
readingList
$DEVICETOPIC/availability:.* availability
$DEVICETOPIC:.* { json2nameValue($EVENT) }
und Ergebnis ist immer noch ON / OFF und nicht on / off
gruss
Ja, da fehlt auch das lc.
$DEVICETOPIC:.* { json2nameValue(lc($EVENT)) }
Oder, wenn man – was ich ganz elegant finde – nur den state kleingeschrieben haben will, wie schon gesagt:
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
Availability natürlich noch extra dazu, das habe ich jetzt nicht mehr mit reinkopiert ...
Zitat von: passibe am 10 August 2024, 18:43:11Ach jetzt verstehe ich, was hier passiert.
Ja, du hast recht – diese ganzen weiteren Einträge in der readingList sind unnötig, also @privat58 du brauchst nur Folgende beiden:
Code Auswählen Erweitern
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
$DEVICETOPIC/availability:.* { json2nameValue($EVENT, 'availability_', $JSONMAP) }
Den Rest kannst du löschen.
Die ReadingList-Einträge würden doch dann wieder angelegt werden.
An
!dritter! Stelle einen Eintrag vornehmen der alle weiteren "Unterordner" ignoriert, sollte meiner Erfahrung nach so möglich sein (ungetestet):
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
$DEVICETOPIC/availability:.* availability
$DEVICETOPIC.* {}
Und hoffen das current, voltage und power in dem JSON-Objekt direkt unter dem Devicetopic mitkommen. (Hab kein Device mit Energiemessung).
Den Schalter finden der die Messages überhaupt freischaltet und wieder deaktivieren wäre wohl die einfachste Lösung.
Zitat von: passibe am 10 August 2024, 18:51:51Ja, da fehlt auch das lc.
$DEVICETOPIC:.* { json2nameValue(lc($EVENT)) }
Oder, wenn man – was ich ganz elegant finde – nur den state kleingeschrieben haben will, wie schon gesagt:
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
Availability natürlich noch extra dazu, das habe ich jetzt nicht mehr mit reinkopiert ...
cool, das wars.....
danke
gruss
Zitat von: TomLee am 10 August 2024, 19:20:54Die ReadingList-Einträge würden doch dann wieder angelegt werden.
Deshalb ja autocreate ausschalten, dann wird nix mehr angelegt.
Edit:
Zitat von: TomLee am 10 August 2024, 19:20:54Und hoffen das current, voltage und power in dem JSON-Objekt direkt unter dem Devicetopic mitkommen.
Ja, die kommen mit!
Hallo, vielen Dank erst einmal für die Hilfe. Ich ändere das mal und melde mich.
Das attrTemplate "zigbee2mqtt_plug_w_energy_measuring" wurde von mir übernommen und hatte da keinen Fehler gefunden.
Zum normalen on/off hatte es gereicht.
Die Steckdosen missbrauche ich teilweise zum automatischen abschalten von Geräten die geladen werden (z.Bsp. Laptop, Handy, Akkuschrauber...). Da schalte ich nur am Knopf ein und die gehen nach der eingestellten Zeit wieder aus.
mvh Steffen
Noch einmal eine Rückmeldung.
mit dem readingList
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
$DEVICETOPIC/availability:.* availability
$DEVICETOPIC.* {}
klappt das einwandfrei. Dadurch kann das state on/off wie bisher ausgewertet werden. Wichtig ist das attr event-on-change zu setzen, da ansonsten immer wieder neu getriggert wird beim aktualisieren des readings.
Das autocreate habe ich eingeschaltet gelassen und nur das attr readingList geändert.
Vielen Dank an Euch
mvh Steffen
hi,
ich habe gestern alles umgebaut, mit LC() geht es fast gut....
define SO_0103 MQTT2_DEVICE
attr SO_0103 IODev MQTT2C
attr SO_0103 alias Steckdose
attr SO_0103 cmdIcon on:general_an off:general_aus
attr SO_0103 devStateIcon { my $Schalter = ReadingsVal($name,"state_l3","off");;\
my $Status = ReadingsVal($name,"availability","offline");;\
if($Status eq "online") {\
if($Schalter eq "on") { \
return "on:message_socket_ch_3@#00FF00:off";;\
} elsif($Schalter eq "off") {\
return "off:message_socket_ch_3@#8C8C8C:on";;\
} else {\
return ".*:message_socket_ch_3@#FF0000:off";; \
}\
} else {\
return ".*:message_socket_ch_3@#FF0000:off";; \
}\
}
attr SO_0103 devicetopic zigbee2mqtt/EG/SO_0101
attr SO_0103 group socket
attr SO_0103 icon hue_filled_outlet@#00FF00
attr SO_0103 readingList $DEVICETOPIC/availability:.* availability\
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret->{state_l3}=lc($ret->{state_l3}) if defined $ret->{state_l3};; return $ret }
attr SO_0103 room Wohnzimmer,mqtt,multimedia
attr SO_0103 setList on {'zigbee2mqtt/EG/SO_0101/set {"state_l3":"on"}'}\
off {'zigbee2mqtt/EG/SO_0101/set {"state_l3":"off"}'}
attr SO_0103 stateFormat state_l3
attr SO_0103 webCmd on:off
# FUUID 6685a29a-f33f-544d-75b9-ccdcfe67977bfb8c
# FVERSION 10_MQTT2_DEVICE.pm:0.287700/2024-04-08
# IODev MQTT2C
# LASTInputDev MQTT2C
# MQTT2C_MSGCNT 179
# MQTT2C_TIME 2024-08-11 12:08:50
# MSGCNT 179
# NAME SO_0103
# NR 355
# STATE off
# TYPE MQTT2_DEVICE
# eventCount 187
# READINGS:
# 2024-08-10 19:41:51 IODev MQTT2C
# 2024-08-11 08:41:25 action on_l1
# 2024-08-07 15:25:38 availability online
# 2024-08-11 12:08:50 last_seen 2024-08-11T12:08:50+02:00
# 2024-08-11 12:08:50 linkquality 216
# 2024-07-06 13:43:00 power_on_behavior off
# 2024-08-11 12:08:50 power_on_behavior_l1 off
# 2024-08-10 20:45:13 state off
# 2024-08-11 12:08:50 state_l1 ON
# 2024-08-11 12:08:50 state_l2 OFF
# 2024-08-11 12:08:50 state_l3 off
#
setstate SO_0103 off
setstate SO_0103 2024-08-10 19:41:51 IODev MQTT2C
setstate SO_0103 2024-08-11 08:41:25 action on_l1
setstate SO_0103 2024-08-07 15:25:38 availability online
setstate SO_0103 2024-08-11 12:08:50 last_seen 2024-08-11T12:08:50+02:00
setstate SO_0103 2024-08-11 12:08:50 linkquality 216
setstate SO_0103 2024-07-06 13:43:00 power_on_behavior off
setstate SO_0103 2024-08-11 12:08:50 power_on_behavior_l1 off
setstate SO_0103 2024-08-10 20:45:13 state off
setstate SO_0103 2024-08-11 12:08:50 state_l1 ON
setstate SO_0103 2024-08-11 12:08:50 state_l2 OFF
setstate SO_0103 2024-08-11 12:08:50 state_l3 off
define SO_0203 MQTT2_DEVICE
attr SO_0203 IODev MQTT2C
attr SO_0203 alexaName TV-Steckdose
attr SO_0203 alexaRoom Wohnzimmer
attr SO_0203 alias Samsung TV
attr SO_0203 cmdIcon on:general_an off:general_aus
attr SO_0203 devStateIcon { my $Schalter = ReadingsVal($name,"state_l1","off");;\
my $Status = ReadingsVal($name,"availability","offline");;\
if($Status eq "online") {\
if($Schalter eq "on") { \
return "on:it_television@#FFFFFF:off";;\
} elsif($Schalter eq "off") {\
return "off:it_television@#8C8C8C:on";;\
} else {\
return ".*:it_television@#FF0000:off";; \
}\
} else {\
return ".*:it_television@#FF0000:off";;\
}\
}
attr SO_0203 devicetopic zigbee2mqtt/OG/SO_0201
attr SO_0203 group Steckdose
attr SO_0203 icon message_socket_ch_3@red
attr SO_0203 readingList $DEVICETOPIC/availability:.* availability\
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret->{state_l1}=lc($ret->{state_l1}) if defined $ret->{state_l1};; return $ret }
attr SO_0203 room Wohnzimmer,mqtt
attr SO_0203 setList on {'zigbee2mqtt/OG/SO_0201/set {"state_l1":"on"}'}\
off {'zigbee2mqtt/OG/SO_0201/set {"state_l1":"off"}'}
attr SO_0203 stateFormat state_l1
attr SO_0203 webCmd on:off
# FUUID 669fe370-f33f-c6aa-8f58-e1ea8999c4c06b91
# FVERSION 10_MQTT2_DEVICE.pm:0.287700/2024-04-08
# IODev MQTT2C
# LASTInputDev MQTT2C
# MQTT2C_MSGCNT 2418
# MQTT2C_TIME 2024-08-11 12:20:21
# MSGCNT 2418
# NAME SO_0203
# NR 502
# STATE off
# TYPE MQTT2_DEVICE
# eventCount 2428
# READINGS:
# 2024-08-06 08:02:46 IODev MQTT2C
# 2024-08-09 11:01:07 availability online
# 2024-08-11 12:20:21 last_seen 2024-08-11T12:20:21+02:00
# 2024-08-11 12:20:21 linkquality 255
# 2024-08-11 12:20:21 power_on_behavior_l1 previous
# 2024-08-11 12:20:21 state ON
# 2024-08-11 12:20:21 state_l1 off
# 2024-08-11 12:20:21 state_l2 OFF
# 2024-08-11 12:20:21 state_l3 OFF
#
setstate SO_0203 off
setstate SO_0203 2024-08-06 08:02:46 IODev MQTT2C
setstate SO_0203 2024-08-09 11:01:07 availability online
setstate SO_0203 2024-08-11 12:20:21 last_seen 2024-08-11T12:20:21+02:00
setstate SO_0203 2024-08-11 12:20:21 linkquality 255
setstate SO_0203 2024-08-11 12:20:21 power_on_behavior_l1 previous
setstate SO_0203 2024-08-11 12:20:21 state ON
setstate SO_0203 2024-08-11 12:20:21 state_l1 off
setstate SO_0203 2024-08-11 12:20:21 state_l2 OFF
setstate SO_0203 2024-08-11 12:20:21 state_l3 OFF
nur state bleibt bei einigen Devices auf ON oder OFF
Was für mich anhand der zwei List unklar ist, was genau wird in state übertragen ? Vermuten würd ich den Zustand des zuletzt geschalteten "Kanal" ? Dem widersprechen meinem Verständnis nach aber die Werte der zwei List...
Hi,
das kann ich leider nicht sagen, oder vielleicht doch:
{
"last_seen": "2024-08-11T13:11:12+02:00",
"linkquality": 255,
"power_on_behavior_l1": "previous",
"state": "ON",
"state_l1": "OFF",
"state_l2": "OFF",
"state_l3": "OFF"
}
zigbee2mqtt/OG/SO_0201
das ist was der MQTT-Explorer liefert...
(das ist eine von 3 Steckdosen)
Gerätename
SO_0201
Beschreibung
1- Fernseher/ Yamaha
2- Schrank
3- Kathrein
Zuletzt gesehen
1 minute ago
Verfügbarkeit
Online
Geräte-Typ
Router
Zigbee-Modell
TS011F
Zigbee-Hersteller
_TZ3000_1obwwnmq
Beschreibung
Silvercrest 3 gang switch, with 4 USB (EU, FR, CZ, BS)
Unterstützungsstatus
Unterstützt
IEEE-Addresse
0xbc33acfffec6d513
Netzwerk-Adresse
0x2717
Hersteller
Lidl
Modell
HG06338
Spannungsversorgung
Interview erfolgreich
Trifft zu
gruss
hi,
ich glaube ich weis es:
{
"action": "off_l3",
"last_seen": "2024-08-11T13:18:02+02:00",
"linkquality": 216,
"power_on_behavior_l1": "off",
"state_l1": "ON",
"state_l2": "OFF",
"state_l3": "OFF"
}
das ist eine andere Steckdosenleiste, gleicher Bauart
hier wird kein state angezeigt
gruss
Zitat von: eisman am 11 August 2024, 13:15:20{
"last_seen": "2024-08-11T13:11:12+02:00",
"linkquality": 255,
"power_on_behavior_l1": "previous",
"state": "ON",
"state_l1": "OFF",
"state_l2": "OFF",
"state_l3": "OFF"
}
Das Problem ist, dass dir json2nameValue($EVENT) jetzt das JSON-Objekt "state" in das state-Reading schreibt, obwohl du eigentlich ja nur z.B. state_l1 da haben willst. (Und auch nur state_l1 von deiner überarbeiteten readingList auf lowercase gesetzt wird.)
Du müsstest das wohl über jsonmap anpassen, oder du stellst alles auf state_l1 um (oder l2, l3, je nach dem) und ignorierst das state-Reading.
Zitat von: passibe am 11 August 2024, 13:22:48Zitat von: eisman am 11 August 2024, 13:15:20{
"last_seen": "2024-08-11T13:11:12+02:00",
"linkquality": 255,
"power_on_behavior_l1": "previous",
"state": "ON",
"state_l1": "OFF",
"state_l2": "OFF",
"state_l3": "OFF"
}
Das Problem ist, dass dir json2nameValue($EVENT) jetzt das JSON-Objekt "state" in das state-Reading schreibt, obwohl du eigentlich ja nur z.B. state_l1 da haben willst. (Und auch nur state_l1 von deiner überarbeiteten readingList auf lowercase gesetzt wird.)
Du müsstest das wohl über jsonmap anpassen, oder du stellst alles auf state_l1 um (oder l2, l3, je nach dem) und ignorierst das state-Reading.
hi,
das ist alles umgestellt, es funktioniert soweit auch alles,
ich weis nur nicht wo das state herkommt.
es dürfte nicht vorhanden sein....
da es in Z2M nicht vorhanden ist
gruss
In deiner readingList steht: $ret=json2nameValue($EVENT) [...] return $ret
Dazwischen wird noch für state_l1 lowercase gesetzt.
json2nameValue nimmt aber ALLE ihm übergebenen JSON-Objekte und parst sie. In deiner Nachricht aus MQTT-Explorer steht aber eben nicht nur state_l[1-3], sondern eben auch state, das von jsno2nameValue mitgeparst wird. Daher kommt das state.
Entweder du baust in die readingList irgendeine Logik ein, die das "state" rausfiltert (und state_l[1,-3] zu state umbenennt), oder du machst das mit jsonMap.
Achso: Wieso z2m manchmal state mitschickt und manchmal nicht – keine Ahnung.
Unterschiedliche Firmwarestände der Geräte vielleicht? Vielleicht gibts aber auch in z2m irgendwelche Filter, die man so einstellen kann, dass bestimmte Werte nicht mitgeschickt werden. Müsstest du mal nachschauen.
Zitat von: passibe am 11 August 2024, 13:35:38In deiner readingList steht:
$ret=json2nameValue($EVENT) [...] return $ret
Dazwischen wird noch für state_l1 lowercase gesetzt.
json2nameValue nimmt aber ALLE ihm übergebenen JSON-Objekte und parst sie. In deiner Nachricht aus MQTT-Explorer steht aber eben nicht nur state_l[1-3], sondern eben auch state, das von jsno2nameValue mitgeparst wird. Daher kommt das state.
Entweder du baust in die readingList irgendeine Logik ein, die das "state" rausfiltert (und state_l[1,-3] zu state umbenennt), oder du machst das mit jsonMap.
da habe ich leider keine stelle gefunden, steht state_i1 drin
und ich habe alle durchgeschaut und verglichen, na funktionell macht es keine Probleme, stört nur wenn man schnell drüber schaut.
danke für die Hilfe, die nicht geplant war :)
gruss und schönen Sonntag
Zeigt state evtl. den Status der Zeitabschaltung (https://www.zigbee2mqtt.io/devices/HG06338.html#on-with-timed-off-1) ?
Kannst Du mal prüfen ob das von deinem Device unterstützt wird, in dem Du diesen setter in der setList ergänzt und ausführst ?
timer:noArg $DEVICETOPIC/set {"state" : "ON", "on_time": 10}
Gehen dann alle Kanäle nach dem einschalten nach 10 Sekunden wieder aus ?
hi,
da passiert nichts,
außer, das im state timer eingetragen wird
gruss
Nur mal aus Interesse (vlt. hilfts ja weiter), kannst Du mal einen Screenshot des Reiters Details in der Geräteübersicht des Frontends (von dem Device welches state mit überträgt) zeigen.
klar doch.
gruss
Ok, danke. Nix unerwartetes zu sehen.