Problem mit on, ON, off, OFF in DOIF

Begonnen von privat58, 10 August 2024, 09:40:28

Vorheriges Thema - Nächstes Thema

privat58

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

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

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:.* statezu
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

passibe

#3
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):
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 $retdie 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.

TomLee

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 ?

passibe

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 ...

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

passibe

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 ...

TomLee

#8
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.

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

passibe

#10
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!

privat58

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

privat58

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

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

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...

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

passibe

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.

eisman

#18
Zitat von: passibe am 11 August 2024, 13:22:48
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.
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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

passibe

In deiner readingList steht: $ret=json2nameValue($EVENT) [...] return $retDazwischen 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.

passibe

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.

eisman

Zitat von: passibe am 11 August 2024, 13:35:38In deiner readingList steht:
$ret=json2nameValue($EVENT) [...] return $retDazwischen 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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

Zeigt state evtl. den Status der Zeitabschaltung ?

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 ?


eisman

hi,

da passiert nichts,

außer, das im state timer eingetragen wird

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

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.

eisman

1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

Ok, danke. Nix unerwartetes zu sehen.