zigbee2mqtt mehrere Befehle hintereinander senden

Begonnen von suchmich1983, 28 Juli 2024, 01:28:05

Vorheriges Thema - Nächstes Thema

suchmich1983

Hallo zusammen,

ich hab schon viel gelesen und gesucht, aber es mag mir einfach nicht gelingen.

Ich habe zigbee2mqtt auf meiner FHEM Instanz installiert, eingerichtet und den angemeldeten gledopto Zigbee LED Controller kann ich auch bereits per FHEM schalten. An, Aus, Farbe ändern, alles kein Problem.

Wobei ich mich nun aber schwer tue, ist mehrere Befehle hintereinander zu senden.

Als Beispiel würde ich den angeschlossenen Strip erst zu blau und dann zu rot "faden" lassen.

Leider nimmt der Controller aber immer nur den letzten Befehl. Selbst wenn ich mehrere Befehle hintereinander an das Device schicke.
Als Beispiel:

set MQTT2_zigbee_0xa4c13850a55XXXX color FFFFFF;set MQTT2_zigbee_0xa4c13850a55XXXX color 4EFF47
Wird die Farbe des Strip nur zu "grün" geändert.

Sicher ist das ganz simpel, aber ich bekomme es einfach nicht hin. Hat jemand nen Tipp für mich?

Internals:
   CFGFN     
   CID        zigbee_0xa4c13850a55XXXX
   DEF        zigbee_0xa4c13850a55XXXX
   DEVICETOPIC zigbee2mqtt/0xa4c13850a55XXXX
   FUUID      66a3e662-f33f-c18f-0126-3903974491303df5
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     143
   NAME       MQTT2_zigbee_0xa4c13850a55XXXX
   NR         194429
   STATE      on
   TYPE       MQTT2_DEVICE
   myBroker_MSGCNT 143
   myBroker_TIME 2024-07-28 01:17:19
   READINGS:
     2024-07-26 20:09:38   IODev           myBroker
     2024-07-26 20:09:38   associatedWith  MQTT2_zigbee_fhem
     2024-07-26 20:11:45   attrTemplateVersion 20200904
     2024-07-28 01:17:19   brightness      75
     2024-07-28 01:17:19   color_mode      xy
     2024-07-28 01:17:19   color_x         0.1594
     2024-07-28 01:17:19   color_y         0.0768
     2024-07-28 01:17:19   linkquality     80
     2024-07-28 01:17:19   state           ON
     2024-07-28 01:17:19   update_installed_version 620834817
     2024-07-28 01:17:19   update_latest_version 620834817
     2024-07-28 01:17:19   update_state    idle
Attributes:
   devStateIcon {zigbee2mqtt_devStateIcon255($name)}
   devicetopic zigbee2mqtt/0xa4c13850a552900d
   genericDeviceType light
   homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
   icon       hue_filled_white_and_color_e27_b22
   model      zigbee2mqtt_light_rgb_rgb
   readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE
   setList    on:noArg $DEVICETOPIC/set {"state":"ON"}
  off:noArg $DEVICETOPIC/set {"state":"OFF"}
  brightness:colorpicker,BRI,0,5,255 $DEVICETOPIC/set {"state":"on","$EVTPART0":"$EVTPART1"}
color:colorpicker,RGB {"$DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
   stateFormat {lc ReadingsVal($name,"state",0)}
   webCmd     toggle:on:off:brightness:color

Danke und beste Grüße

suchmich1983

Ich habe vorhin noch mal probiert ein sleep zwischen den beiden Befehlen einzufügen.
Dann funktioniert es "wie erwartet", aber das ist so sicher nicht im Sinne des Erfinders!

set MQTT2_zigbee_0xa4c13850a55XXXX color FFFFFF;sleep 2;set MQTT2_zigbee_0xa4c13850a55XXXX color 4EFF47
Die Frage wäre also, wie ich es hinbekomme, dass erst Befehl 1 und dann Befehl 2 abgearbeitet wird. Aktuell würde Befehl 2 dem Befehl 1 "in die Parade fahren"...

Gibt es da eine Art Queue?

suchmich1983

habe das Thema mal nach MQTT verschoben. Hoffe und denke hier ist es besser aufgehoben.

Ich komme einfach nicht weiter. Kann fast nicht glauben das sonst noch nie jemand versucht hat dies einzubauen...

LG und besten Dank

schwatter

Das ist normal. Nutze sleep oder ein anderes Modul wie DOIF mit wait.

Gruß schwatter

suchmich1983

OK, danke dir, ich habs mir fast gedacht.

Hab es als seperaten Setlist umgesetzt, welche ich dann via DOIF aufrufe, so gehts

blau:noArg $DEVICETOPIC/set {"state":"on","brightness":"75","color":"#0305F9","transition":1}
rot:noArg $DEVICETOPIC/set {"brightness":"30","color":"#F01304","transition":1}
execute:noArg {fhem("set $NAME blau; sleep 1.2; set $NAME rot")}

Im DOIF dann der Auruf via:

set DEVICE execute