Beiträge von Zally

    Mein zweites Blockly-Skript macht da ja bereits eine Auswertung für. Differenz zwischen neuem Event-Count minus altem Event-Count gibt die Anzahl der Tasterdrücke aus. Einen Longpress werte ich da nun ja auch aus, allerdings dann erst beim loslassen des Tasters und leider nicht über den Wert "longpush" aus dem Relay-Objekt. Hier wird wie gesagt nicht zurückgesetzt, wenn man zweimal einen Longpush macht, man bekommt den zweiten also nicht mit. Wäre natürlich besser, weil man dann sofort ein Feedback geben kann, wenn man lange genug gedrückt hat. Aktuell muss man im zweifel immer etwas zu lange drücken, was etwas unschön ist.

    Hast du dir das im ioBroker auch ansehen können? Womit wertest du die CoAP Ereignisse aus? Das sind ja glaube ich Broadcasts, korrekt?

    Ich denke nicht, dass man einen Event-Count als Trigger verwenden sollte. Falls doch, frage ich mich, wieso bei einem leicht längeren Tastendruck (und ich meine nicht den longpress) dann das Input-Event kommt und bei einem sehr kurzen Druck nicht? Die Auswertung von Longpress klappt ebenfalls nicht (also Trigger an Longpress hängen), weil der Wert im iobroker beim Taster-Down zuvor nicht auf false zurückspringt. Sprich: Der erste Trigger lässt sich auswerten. Drückt man dann noch mal lang, gibt es auf longpress auch keine Zustandsänderung und man kann nicht reagieren, weil der Wert auf true stand und sich nie geändert hat.

    Ich kann die CoAP-Nachrichten aber immer noch nicht sehen, weil ich gar nicht weiß, wo ich diese Überwachen kann. Ich habe den Begriff nur ins Spiel gebracht, damit klar ist, dass ich die Botschaften des Shellys nicht via MQTT auswerte, sondern eben über CoAP und den Shelly-Adapter im ioBroker.

    Ich sehe nur, was in ioBroker ankommt oder eben nicht ankommt. Du hast ja viele Shellys da, es wäre natürlich prima, wenn du das mal nachstellen könntest. Also einfach einen Trigger für die verschiedenen Zustandsänderungen im ioBroker hinterlegen und schauen, was dann ankommt.

    Doch, der Strom kommt schon an. Denn der Event-Count zählt eins hoch. Nur das Input-Event kommt halt nicht an bei diesem sehr kurzen Tastendruck. Ich habe deswegen bei meinen i3 auch einen Trigger für den "Event-Count" verwendet, um festzustellen, dass ein Taster gedruckt wurde. Ich starte damit zum Beispiel meinen PC und da sieht man ja ggf. erst ein paar Sekunden später, ob er an gegangen ist. Das muss schon verlässlich klappen. An anderen Stellen steuert die Familie mit. Der WAF geht absolut in den Keller, wenn manche Taster nicht immer reagieren oder man länger drucken muss. Das ist dann halt auch nicht mehr SmartHome.

    Sehr kurz ist der kürzeste Menschenmögliche Tasterdruck, welcher noch von der Hardware erkannt werden kann. Du kannst ja mal mit meinem ersten Blockly nachstellen was passiert. Das hier in ioBroker nicht die Events Input: true direkt gefolgt von einem Input: false ankommt ist meiner Meinung nach ein Bug. Wo da nun der Fehler liegt (bei Shelly, ioBroker oder auch beim ioBroker Adapter für Shelly) kann ich nicht sagen.

    Der kürzest mögliche Tasterdruck führt im "Momentary" Modus noch zu einer Änderung des Schalterzustands. Im Detached Mode kommt das Signal aber in ioBroker nicht an.

    Ich kann die CoAP Nachrichten im ioBroker nicht sehen. Ich weiß also nicht, was da wirklich gesendet wird. Der Trigger im ioBroker wird erst ausgelöst, wenn sich der Event-Count nicht mehr ändert (drückt man 3 mal schnell hintereinander, kommen nicht 3 events im ioBroker an, sondern ein Event und der Counter ist 3 höher als vorher). Darauf basiert mein oben gezeigtes Skript nun.

    Es ist durchaus möglich, dass die ioBroker Implementation hier dann irgendwas verschluckt. Wo das genau passiert, weiß ich natürlich nicht. Ich habe das ja nur in der JavaScript Konsole beobachtet. Ist denn Shelly selbst nicht auch für die ioBroker Implementation der Ansprechpartner? Das würde die Sache natürlich vereinfachen. Wobei ich nun ja tatsächlich mit dem aktuellen Verhalten eine Lösung gefunden habe.

    Es geht auch im Modus Momentary, wobei der Schalter dann natürlich sinnlos hin und her schaltet. Wenn mal also Doppel-/Trippel-/etc.-Klick will, muss man Detached verwenden und dann selbst entscheiden.

    Ich nutze da nun zum Beispiel für das Treppenhaus: Klick-Count * 210 Sekunden = Dauer bis zum Ausschalten. Bei Longpress wird Dauerhaft eingeschaltet und es erfolgt eine Sprachausgabe, dass man sich selbst um das Ausschalten kümmern muss.

    Nachteil der Lösung ist dann halt, dass ohne ioBroker ja dann gar nichts mehr passiert (Systemausfall). Aber Mehrfachklick kann der Shelly von Haus aus ja leider nicht. Der Longpress ist leider auch immer noch defekt: Löst man das zweite mal einen Longpress aus, wechselt der Wert nie auf "false" zurück, weshalb man den zweiten Longpress nicht über den Longpress-Trigger erkennen kann.

    Für alle die es interessiert. Dies ist nun mein Blockly zur Erkennung von Einfach, Mehrfach und Longpresses:

    pasted-from-clipboard.png

    Denkbar wäre beim Longpress noch die Dauer näher zu betrachten. Man könnte nach 800ms zum Beispiel etwas anderes tun als nach 5 Sekunden (Spezialmodus für irgendwas). Ereignisse kann man da anbinden, wo die debug outputs vom Typ "warning" angezeigt werden. Die debugs können natürlich grundsätzlich raus. Der Longpress und auch die Multiklicks werden erst ausgelöst, wenn man den Taster loslässt bzw. aufhört mehrfach zu klicken. Ich habe das mit einem Taster an einem Shelly 1 im Detached Mode probiert. Bin mir aktuell nicht sicher, ob sich da bei einem Momentary auch so verhält.

    Ich kann das übrigens bestätigen. Sehr kurze Tastendrücke kommen nicht an. Weder bei einem i3, noch bei einem Shelly 1/2.5 im Detached mode.

    Ich finde das sehr ärgerlich. Ich habe die Anbindung via CoAP via ioBroker. Ich habe hier mal ein sehr einfaches Blockly Skript:

    pasted-from-clipboard.png

    Der obere Block reagiert auf "Input", der dadrunter auf "EventCount" und dann schließlich noch "longpush".

    Druckt man sehr kurz, kommt nur eine Event-Count Ausgabe. Drückt man etwas länger, bekommt man Input: true, Input: false und einen Event-Count.

    Habe ich jetzt konkret mit einem Shelly 1 im Detached Mode probiert. Hat man "Momentory" eingestellt, dann schaltet er bei sehr kurz und kurz drücken. Events gibt es trotzdem wie oben beschrieben (Switch wird in dem Fall dann aber geändert!). Beim i3 gibt es ja nur Input.

    Ich sehe das als Bug, das soll doch so nicht sein. Sehr ärgerlich, dass nicht alle Ereignisse via CoAP ankommen. Ich wollte eigentlich Mehrfachklicks und Longpush Events unterscheiden. Die fehlenden Ereignisse machen es einem da echt nicht leicht.