NEWS
Shelly->ioBroker->Zigbee/Ikea Reaktionszeit
-
Hallo zusammen,
ich habe ein paar Led Panele von Ikea. Nun möchte ich die nicht über die IKEA Fernbedienung sondern über ein normales Schalterprogramm steuern. Der aktuelle Aufbau sieht folgendermaßen aus:
- Doppeltaster ein einem Shelly 2PM Gen3 (als detached Switch)
- dieser per MQTT an ioBroker angebunden
- IKEA Panel per Zigbee USB Stick am ioBroker
- Plattform: Raspi 4
zur Steuerung habe ich ein Skript geschrieben (Javascript) mit folgendem Ablauf: - Trigger wenn sich der Schalterstatus ändert (Modus "gt", reagiert also nur auf die Änderung Aus->Ein)
- Schleife die für eine halbe Sekunde überprüft, ob noch gedrückt ist, wenn vorher losgelassen wird -> einfacher Schaltbefehl ein/aus, das funktioniert.
- wenn der Schalter an bleibt wird alle 30ms der Schalterzustand abgefragt und je nach Steuerrichtung die Helligkeit um eins erhöht oder verringert (per setState den Wert brightness der Lampe setzen)
- bei Erreichen von Grenzwerten kehrt sich die Richtung um
Grundsätzlich funktioniert das, allerdings läuft die Steuerung nach. Das heißt auch nach dem loslassen des Tasters ändert sich für eine gewisse Zeit (mehrere Sekunden) die Helligkeit. Ohne direktes Visuelles Feedback ist das natürlich nicht tauglich.
Nun suche ich nach der Ursache.Mir scheint dass auf der Eingangsseite das Ganze im Takt läuft, die Schreibbefehle zum Helligkeitswechsel aber in einer Warteschlange stehen. jetzt kenne ich mich mit dem Timing bei Zigbee gar nicht aus. Praktisch wären das etwa 33 Befehle pro Sekunde.
Praktisch ist des die Umsetzung eines Tastdimmers. Google hat mich leider nicht weitergeführt, vielleicht hat jemand schon was ähnliches gemacht und hat Tipps in welche Richtung ich suchen muss - oder ob es gar eine Sackgasse ist.
-
@huizhaecka Versuchs mal mit einer längeren Intervallzeit und einem höheren Increment. Ich steuere eine Aqara Lampe mit I=100ms/Step=2.
-
@huizhaecka alle 30 ms ansteuern ist unsinnig. Nach zigbee Standard darf die Kommunikation zum Gerät mehrere 100 ms dauern. Es gibt pro Gerät immer nur eine ‘Aktive’ Kommunikation, die nächste beginnt erst wenn die vorherige beendet wurde. Der zigbee Adapter queued die Steuerbefehle intern und sendet sie nacheinander.
Schau dir mal den DPbrightness_move
an. Wenn du da eine positive Zahl einträgst wird das Panel heller, negativ dunkler. Mit 0 beendest du das dimming. Die Größe der Zahl gibt an wie schnell das geht.Damit sollte dieser Ablauf gehen:
let click_timeout=null; let reverse_intervall=null; const BM = ‘deine_zigbee_device_id’ + ‘brightness_move’; const PS =‘deine_zigbee_device_id’ + ‘state’; on([id:’deine_taster_id’, change:’ne’}, function(obj) { const panel = getState(PS).val; let switch=true; if (obj.state.val && panel) { click_timeout = setTimeout({ switch=false; setState(‘zigbeepanelID.brigthness_move”, 10); // statt 10 kann ein Wert zwischen 1 und 50 gesetzt werden - je grösser der Wert desto schneller die Änderung. reverse_intervall = setInterval({ setState(BM, -getState(BM).val); ],5000); // in ms: Zeit für einen dimmvorgang kann bis auf 2000 reduziert werden },500); // in ms: Zeit bis angenommen wird das gedimmt werden soll. Kann bis auf 200 reduziert werden. } else { clearInterval(reverse_Intervall); clearTimeout(click_timeout); setState(BM, 0); if (switch) setState(PS, !panel); } });
Einziger Nachteil: der im iobroker dargestellte Wert für die Helligkeit wird mit Verzögerung aktualisiert, da er davon abhängt wann die Ikea Panels diesen melden. Deswegen macht es auch keinen Sinn vor dem dimmen den Wert abzufragen - er ist unter Umständen nicht aktuell.
Es gibt eine Möglichkeit den Wert vom Gerät zu holen - das hab ich aber nicht im Kopf. Wenn Interesse besteht kann ich das am Abend nachliefern.A.
-
@asgothian Danke! das wars schon, jetzt funktioniert es wie es soll.