NEWS
[Adapter] Shelly Adapter mit MQTT
-
@Stuebi danke für deine Erklärung. Dennoch halte ich die aktuelle Verhaltensweise nicht für richtig.
Der ioBroker und die installierten Adapter sind nicht dafür zuständig um darüber zu entscheiden welche Informationen relevant sind, sondern dafür die Informationen die verfügbar sind zusammenzutragen.
Der ioBroker kennzeichnet, absichtlich um dem von dir beschriebenen Missverständnis vorzubeugen, bei allen Aktualisierungen ob es sich um reine Aktualisierungen oder Änderungen handelt. Daher finde ich das Aktualisierungen nicht verworfen werden sollten nur weil sie keine Änderungen sind. Wenn jemand nur auf Änderungen reagieren möchte kann er selber entsprechend einschränken. Der Shelly sendet über CoAP Aktualisierungen aller Werte und über MQTT Aktualisierungen aller Werte. So sollte es auch in ioBroker abgebildet sein.
Wer detailliertere Informationen haben möchte sollte den geeigneteren MQTT Standard nutzen.
Wer das nicht braucht muss sich dann mit dem vereinfachten CoAP anfreunden.
Mein Anliegen ist nur das die Daten nicht vorab gefiltert werden sondern so zur Verfügung stehen wie das Gerät es vorsieht inklusive Aktualisierungen.Suggestivfrage: Warum sollte man MQTT dann überhaupt nutzen wenn es auf die beschränkten Möglichkeiten von CoAP kastriert wird?
CoAP und MQTT sind unterschiedliche Protokolle mit unterschiedlichen Verhaltensweisen.Zur Shelly Firmware: Der Shelly teilt zu jeder Tasterbetätigung mit ob es sich um einen Longpush gehandelt hat oder nicht. Ich sehe da keinen Fehler. Man müsste die verfügbaren Daten nur verwenden anstatt sie zu verwerfen.
-
@Stuebi Ich habe mal einen Pull Request gestellt, in dem ich die Anpassungen vorgenommen habe, um per Checkbox optional die Aktualisierungen die über MQTT kommen zu nutzen. Diese zu nutzen stünde ja jedem frei und ohne Aktivierung ändert sich an der Verhaltensweise nichts.
Bitte sei so nett den Vorschlag nicht direkt zu verwerfen und teste die Anpassung wenigstens.
https://github.com/schmupu/ioBroker.shelly/pull/209 -
@Diggewuff sagte in [Adapter] Shelly Adapter mit MQTT:
Der ioBroker und die installierten Adapter sind nicht dafür zuständig um darüber zu entscheiden welche Informationen relevant sind, sondern dafür die Informationen die verfügbar sind zusammenzutragen.
Der ioBroker kennzeichnet, absichtlich um dem von dir beschriebenen Missverständnis vorzubeugen, bei allen Aktualisierungen ob es sich um reine Aktualisierungen oder Änderungen handelt. Daher finde ich das Aktualisierungen nicht verworfen werden sollten nur weil sie keine Änderungen sind. Wenn jemand nur auf Änderungen reagieren möchte kann er selber entsprechend einschränken.Möchte speziell dazu mal meinen Senf dazu geben. Die Antwort ist in meinen Augen ein klares "kommt darauf an". Vor allem bei Adaptern die einen grossen State-Update Traffic mit "identischen Daten" machen kommt regelmässig dieses Thema auf. Eine hohe Anzahl von State updates sorgen für Last CPU-technisch, sorgen für erhöhtes I/O (was vor allem bei SD Karten Systemen immer so eine Sache ist) und je nachdem auch zu gefühlt langsameren Systemen. Daher gibt es mehrere Adapter, die aus diesen Überlegungen heraus bewusst es genau so machen wie der Shelly Adapter - meistens weil es andere User gab deren Systeme mit vielen "unnötigen Updates" überfordert waren.
Es ist also eine Balance und wenn ein Entwickler das so entscheidet dann ist das im ersten Schritt mal nicht falsch. Bei Shelly kommen die COAP Messages teilweise im Sekundentakt ... Du WILLST nicht das der Adapter diese ganzen Änderungen immer ungefiltert weitergibt. Von daher ist diese genrelle Entscheidung im Falle des Shelly Adapters in meinen Augen vollkommen gerechtfertigt.
Das das jetzt bei der "Longpush" Funktion so eine Nebeneffekt hat ist blöd und da muss man jetzt überlegen wie man das angeht. Auch das @Stuebi Coap und MQTT "identisch " funktionieren haben will ist nachvollziehbar. Und die Suggestivfrage (sorry) wenig hilfreich
Ingo
-
@apollon77
Hallo Ingo,
danke für dein konstruktives Feedback. Das Argument bezüglich der Updates im Sekundentakt kann ich nachvollziehen.
Gibt es im io Broker eigentlich eine Möglichkeit Systemevents auf auf Instanzebene auf Änderungen zu beschränken?
MQTT arbeitet da natürlich effizienter.
Daher habe ich mich in meinem pull request fürs erste darauf beschränkt, die Updates unter Verwendung von MQTT optional zur Verfügung zu stellen.
Was hälst du von der Idee?Ps: Sugestivfragen lasse ich nächstes mal weg. Da war ich gestern Abend etwas erregt über geringe Bereitschaft sich der Herausforderung anzunehmen.
-
@Diggewuff Am Ende ist jeder Adapter-Entwickler der "Guard" und muss für das implementierte System und Protokoll solche Entscheidungen treffen. Ich glaube nicht das es "geringe Bereitschafft" ist in dem Fall.
-
@apollon77
Es kann auch ein Missverständnis gewesen sein. Mal sehen was aus dem Pull request wird. Über Feedback zu meinem Vorschlag würde ich mich freuen.
@Stuebi
Wäre das nicht eine praktikable Lösung? -
Hallo zusammen,
erst einmal danke für den super tollen Adapter
Ich hab am Wochenende einen:
https://shelly.cloud/products/shelly-button-1-smart-home-automation-device/connected und freute mich, dass dieser auch funktioniert.
Der Buttonklick wird unter der variable "Event" angezeigt.
S für Short
SS für 2x Short
usw.Allerdings wird (wenn ich es richtige verstehe) (vielleicht mach ich auch etwas falsch?)
Wenn ich zuerst einmal kurz drücke und warte und dann noch einmal kurz drücke, nicht zweimal
der Wert "s" gesetzt, sondern nur einmal.
Wenn ich also auf die Variable "Event" "Lausche" bekomme ich den zweiten Klick (wenn es der gleiche Event wie der Vorgänger ist) nicht mit.Sollte man das anders Abfragen?
Oder sollte das Event ggf. doch doppelt gesetzt werden?Viele Grüße
BB -
@BlueBook , die Frage gab es schon ein einmal und wurde an Shelly weitergereicht. Wenn ich mich richtig erinnere, muss man warten bis der Button nicht mehr leuchtet. Anders geht es leider nicht.
-
@Stuebi Danke für die Info.
Ja, mit der Verzögerung hatte ich zuerst auch nicht gerechnet, ist für mich aber okay und auch verständlich, da der Button zum Strom sparen nicht dauerhaft ins WLAN connected ist.
Jeder Event braucht so seine 2-3 Sekunden. Man kann aber einstellen, wie lange der Button nach dem Klick aktiv bleibt - so könnte man schnelle Klicks hintereinander beschleunigen.Vielleicht hatte ich mich mit meiner Frage undeutlich ausgedrückt.
Folgendes Skript:
wird, wenn man zwei mal hintereinander die gleiche Aktion ausführt, nur einmal getriggert.
Anscheinend wird der Wert in der Variable "Event" nicht neu gesetzt - wenn der gleiche Event ein zweites Mal getriggert wird.
Zumindest steht in der Objektansicht bei Event noch der alte Zeitstempel.Das man zweimal hintereinander aber die gleich Aktion ausführt - wenn man z.B. eine Lampe darüber ein- und ausschaltet - halte ich für eine "normale" Anforderung. Diese bekomme ich aber schlecht abgebildet. Dies über die Uptime des Buttons abzufragen - wäre schon ein starker Workaround.
Daher meine Frage:
Hab ich hier einen Denkfehler?
Hat einer dieses Problem schon gelöst?
Oder sollte das Event nicht besser doppelt aus dem Adapter gesetzt werden, auch wenn es gleich ist?Gruß
BB -
@BlueBook ich glaube das es sich da um das gleiche Problem handelt, das ich auch habe.
@Diggewuff sagte in [Adapter] Shelly Adapter mit MQTT:
Der Shelly sendet einen wiederholten Longpress, aber dieser lässt sich nicht auswerten da der Adapter nur werte aktualisiert, wenn sie sich geändert haben. Werte die (nur) aktualisiert werden, werden absichtlich verworfen. Daher ist der Longpress nicht nutzbar. Ich habe das Thema einmal auf GitHub platziert und würde mich dort über Feedback dazu freuen, ob Ihr das so für sinnig haltet, oder ob Ihr auch denkt, dass Aktualisierungen die über MQTT oder CoAP eintreffen auch in die ioBroker states geschrieben werden sollten.
Diese Funktionsweise habe ich in einem Fork des Adapters angepasst, sodass man bei Verwendung von MQTT mit einem Haken in den Instanzeistellungen wählen kann, ob die werte auch aktualisiert werden sollen.
Wenn du möchtest, kannst du die Funktion gerne mal ausprobieren, vielleicht hilft es dir ja.
https://github.com/JoschaMiddendorf/ioBroker.shelly
Ich habe die Funktion auch als Pull Request eingereicht, sodass sie in den Adapter übernommen werden kann, wenn @Stuebi einverstanden ist, worauf ich sehr hoffe.
https://github.com/schmupu/ioBroker.shelly/pull/209
Der Request ist allerdings noch offen. -
@Diggewuff , Shelly stellt es sich wie folgt vor um Events wie Longpush / Shortpush abzufragen:
Right now such events are for example shortpush/longpush of buttons – devices will send a property of type “EV” to denote the exact event type
(“S” = shortpush, “L” = longpush), and a property of type “EVC” that will increment it’s value when a new event occurs (e.g. to be able
to know that two consecutive longpushes are actually two separate events). Please see “Input event” and “Input event counter” in the
property list below for additional information.
In the future, it’s possible that a type “EVV” (Event validity) will be added too, to denote how long an occurred event should be
considered “active” (e.g. for motion, vibration, etc.).Es ist zusätzlich zum Event der Event Counter laut Herstellervorgaben zu berücksichtigen.
-
@Diggewuff , ein kleines Update, ich habe Shelly gebeten, dass man analog zum MQTT Protokoll bei den CoAP Nachrichten nur die States in der payload mitschickt die sich wirklich ändern und nicht imm alle states. Mit dieser kleinen Anpassung wäre es ohne weiteres möglich, mehrere longpushes / shortpushes analog zu MQTT hintereinander auszuwerten.
Leider will der Shelly Entwickler von OpenHab diese Änderung nicht Ich habe parallel noch ein Ticket bei Shelly aufgegeben. Ich bin gespannt ob sich da etwas tut.
Das Lustige an der Geschichte ist, dass der Shelly DW2 mit Firmware 1.8 genau nur die Werte per CoAP liefert die angefasst wurden und nicht immer alle. Das ist aber ein Fehler in der Firmware -
@Stuebi danke für deinen Einsatz.
Könntest du in deiner GitHub repository eventuell einen „latest“ branch zur Verfügung stellen der jeweils den aktuellsten Release beinhaltet? Mir ist aufgefallen das der Master meist schon weiter ist als die releases.
Ein latest branch würde es stark vereinfachen den Fork aktuell zu halten.
Beste Grüße -
@Diggewuff sagte in [Adapter] Shelly Adapter mit MQTT:
Ein latest branch würde es stark vereinfachen den Fork aktuell zu halten.
Am besten arbeitest Du immer gegen Master - idealweise mergest DU auch während deiner Entwicklung den Master immer in deinem Fork bzw rebased deine ARbeit auf Basis des Master - so ist es später bei dem PR am einfachsten
-
@Diggewuff , ich habe die Funktionalität Deines PRs in der Version 4.0.3 überführt. Den Schalter "Update objects even if there is no value change" gilt nun für CoAP, MQTT und http gleichermassen.
Kannst Du die Version 4.0.3 über GitHub laden und bitte testen. -
@Stuebi Ich habe 4.0.3 getestet und es funktioniert bis jetzt alles erwartungsgemäß. Sollte mir doch noch etwas auffallen melde ich mich.
Danke -
@Stuebi
In 4.0.3 werden die Namen selbst umbenannter datenpunkte teilweise überschrieben. -
@Diggewuff , ja das kann passieren, aber nur dann wenn im Shelly im Devicename oder Channelname etwas steht.
-
@Diggewuff Danke für den Hinweis und auch deine Erweiterungen!
Ich war gerade erfreut zu sehen, dass es eine neue Version gibt.
Hab auf diese upgedatet.Dabei kam folgendes im Log:
shelly.0 2020-08-23 17:09:52.951 info (10150) Delete old state: shelly.0.SHBTN-1#xxxxxxxxxx#1.Button.Input shelly.0 2020-08-23 17:09:52.878 error (10150) Cound not delete old state: shelly.0.SHBTN-1#xxxxxxxxx#1.Button.Input host.iobroker 2020-08-23 17:09:52.871 warn Objects 127.0.0.1:55783 Error from InMemDB: Error: ERROR delObject shelly.0.SHBTN-xxxxxxx.Button.Input: Not exists shelly.0 2020-08-23 17:09:52.373 info (10150) Shelly device 192.168.xxx.xxx (shellybutton1 / shellybutton1-xxxxxx / SHBTN-xxxxxxxxx) with CoAP connected!
Da danach der Button zur keiner Zustandsänderung mehr im ioBroker führte, hab ich alle Instanzvariablen aus den Objekten und das Objekt gelöscht - ich hatte gehofft er erkennt den Button neu und legt diese neu an.
Leider ist das nicht passiert.
Der Button wird jetzt gar nicht mehr erkannt
War wohl doch eine dumme Idee ...Parallel hab ich die Firmeware des Buttons von 1.7 auf 1.8 erhöht - daher ist es jetzt leider schwer zu sagen, woran es liegt/lag.
Neustarts auf beiden Seiten haben leider nichts gebracht.
Wenn es über Coap nicht läuft, ist es nicht schlimm.
Ich werde es die Tage dann auf MQTT umstellen - dass sollte ja funktionieren.Wollte euch nur hier das Feedback geben - ggf. hilft es ja
Gruß
BB -
@BlueBook , das kann ich nicht bestätigen. Ich habe gerade den Shelly Adapter in der Version 4.0.3 mit CoAP und MQTT und dem Button mit der Firmware 20200812-091606/v1.8.0@8acf41b0 getestet.
Es funktioniert alles wunderbar.