Hallo an alle (und alle, falls es welche gibt)
Ich habe einen SNZB-01-Taster von Sonoff erworben. Er soll auf Einfachklick, Doppelklick und Langdruck reagieren.
Aber ich sehe nicht, wie ich den Langdruck nutzen kann, denn die Werte, die der Taster liefert, sind « 1 » für Einfachklick, « 2 » für Doppelklick und « long » für Langdruck (das sind die Werte, die ich auf der Seite mit dem Dashboard erscheinen sehe).
Mir scheint, dass die Zustände der Taster in den Szenen nur numerische Werte sein können [wenn ich « long » eingebe, wird das Speichern der Szene abgelehnt, und jeder andere numerische Wert außer 1 und 2 hat keine Wirkung].
Wie kann ich Gladys also beibringen, dass « long » ein numerischer Wert ist?
Vielen Dank im Voraus!
JPL
TL;DR
Soweit ich weiß, unterstützt Gladys noch keinen Langklick.
Erklärungen
Gladys ist noch relativ jung und einige Funktionen, die in den verwendeten Diensten unterstützt werden, sind im Kern von Gladys nicht verfügbar. In deinem Fall ermöglicht der Zigbee-Dienst (der eine Integration mit dem Zigbee2MQTT-Projekt ist) die Unterstützung für eine enorme Anzahl verschiedener Geräte, von denen einige Funktionen haben, die noch nicht implementiert sind.
Insbesondere Langklicks, spezielle Merkmale einiger Geräte, Heizungsthermostatköpfe usw.
Ich glaube, @cicoub13 hatte vorgeschlagen, zunächst « 3 » für den Langklick hinzuzufügen, aber man müsste wirklich über eine dauerhaftere (und verständlichere?) Lösung nachdenken.
Ja, aber ich glaube, wir hatten uns entschieden!
Hallo,
danke für Ihre Antworten.
Erste Frage: Welchem physischen Knopf entspricht das Ereignis LONG_CLICK?
Zweite Frage: Ich glaube, dass die drei Funktionen des Xiaomi WXKG06LM-Schalters bereits von Gladys verarbeitet werden; gilt das auch für den Sonoff oder wird das in einem zukünftigen Update (wann?) der Fall sein?
Nochmals vielen Dank, einen schönen Tag,
JPL
Dazu denke ich, dass die Bedienungsanleitung des Herstellers klarer sein wird als ich, ich habe dieses Gerät nicht ![]()
Von dem, was ich gerade getestet habe, verwaltet Gladys den « click », « double-click » und « long_press », aber nicht die anderen.
Nur du kannst uns das sagen, da du den Button bei dir hast ![]()
Wenn etwas fehlt, kannst du mit den Entwicklern dieser Integration im Forum darüber diskutieren ( alle Leute, die in dieser Diskussion sind: Zigbee2mqtt - Debug )
Was das Datum betrifft, sprechen wir im Allgemeinen nicht viel über Daten, Gladys ist ein kostenloses Community-Projekt, das von Freiwilligen verwaltet wird, also hängt es im Allgemeinen von der Verfügbarkeit der Leute ab ![]()
Da nicht jeder die Geräte der anderen hat, ist die beste Möglichkeit, Kompatibilität zu schaffen, in der Regel, selbst beizutragen!
In diesem Fall müssten alle Schlüssel, die dieser Sonoff-Sensor zurückgibt, isoliert und den Konstanten-Dateien der Zigbee2mqtt-Integration in einem PR hinzugefügt werden. Ideal wäre es, die Benutzeroberfläche anzupassen, um nicht « 1 », « 2 » anzuzeigen, sondern eher übersetzte Wörter ![]()
Ich bestätige, was ich geschrieben habe, um diese Diskussion zu beginnen.
1 - Die Anleitung des « Wireless Switch » SNZB-01 (Bezeichnung bei Sonoff) ist sehr knapp; sie erwähnt nur Einzelklick, Doppelklick und Langdruck (mindestens 3 Sekunden kontinuierlicher Druck). Ich gehe mit geringer Fehlergefahr davon aus, dass Letzteres den LONG_CLICK-Ereignis auslöst.
Die LONG_CLICK_PRESS und LONG_CLICK_RELEASE werden möglicherweise nicht (überhaupt nicht oder auf nutzbare Weise) vom Knopf generiert.
2 - Gladys erkennt jedoch die drei erwarteten Ereignisse (1 Klick, 2 Klicks und Langklick), da die Dashboard-Seite sie anzeigt, wenn sie auftreten (Ergebnisse: « 1 », « 2 » und « long » [ohne Anführungszeichen, natürlich]).
3 - Aber Gladys kann den Langklick in einer Szene nicht verarbeiten, weil das Ergebnis scheinbar nicht numerisch ist (wenn ich nach der Zeichenkette urteile, die das Dashboard anzeigt, und nach den numerischen Tests, die ich versucht habe [<1, >2] um meine Szene zu definieren). In einer Szene wird zwingend ein numerischer Wert getestet (die Konstante BUTTON_STATUS), und Gladys erhält diesen nicht bei einem Langklick.
Ich wäre glücklich, zu Gladys beizutragen, indem ich einige Elemente beisteuere, in dem Rahmen meiner bescheidenen Fähigkeiten (schon bedeuten PR und UI nicht viel für mich…).
JPL
Ok, also tatsächlich fehlen diese Werte in der Konstante auf Gladys-Seite.
Toll! Alles kann man lernen ![]()
Eine PR ist eine „Pull Request“, also ein Änderungsantrag für den Code. Im Projekt nutzen wir GitHub, um den Code zu hosten, und dort kann jeder Änderungen an Gladys vorschlagen, um eine neue Funktion hinzuzufügen, einen Bug zu beheben, etc…
Natürlich kann nicht jeder diese Änderungen direkt ohne Genehmigung vornehmen, jede „PR“ durchläuft eine Überprüfung durch Mitglieder der Community.
Bei der Überprüfung kann man Änderungen anfordern (schlechter Code-Stil, Änderungen in der Benutzeroberfläche, etc.), oder direkt genehmigen, wenn der Code gut aussieht, und der Code wird in Gladys integriert.
Mehr über PRs erfahren:
Das Gladys-Repo:
Ich habe mich gerade bei Github registriert (Benutzername: JPLalv), aber ich wusste nicht, wie ich einen PR für Gladys formulieren soll.
Aber egal, in atrovato [Fix & clean NaN device state] habe ich Folgendes gefunden:
// Case for Button devices
case 'click': {
switch (value) {
case 'single':
result = BUTTON_STATUS.CLICK;
break;
case 'double':
result = BUTTON_STATUS.DOUBLE_CLICK;
break;
case 'hold':
result = BUTTON_STATUS.LONG_CLICK;
break;
default:
result = value;
}
break;
Der Sonoff SNZH-01-Button sendet « single », « double » und « long ».
Das obige Modul nutzt « single », « double » und « hold »
Erklärt das das?
Was ich tun würde: Die Verarbeitung von « hold » beibehalten, da anscheinend einige Knöpfe diesen Code senden, und die Verarbeitung von « long » mit demselben Ergebnis hinzufügen.
Ich kenne mich nicht mit JavaScript aus, aber ich würde etwas wie Folgendes hinzufügen:
case ‹ long ›:
result = BUTTON_STATUS.LONG_CLICK;
Habe ich recht
?
JPL
Ja, genau, mit dem break zusätzlich.
Eigentlich kannst du die 3 Zeilen des hold klonen und ändern!
Danke lmilcent.
Kannst du das für mich erledigen? Vielen Dank im Voraus.
Jetzt kommt meine vorherige Frage wieder: Wann wird das in Gladys wirksam? (Muss man auf eine neue Version warten?) Es ist nur eine Frage; bitte versteht das nicht als meine Absicht, diejenigen zu ärgern, die daran arbeiten, und deren Arbeit ich bewundere!
Eigentlich würde ich gerne, dass mein Sonoff-Knopf vollständig funktioniert, was auch anderen nützen könnte: Der besagte Knopf ist noch im Angebot bei Domadoo für 8,93 €.
JPL
Für mich ist das der Code:
// Fall für Button-Geräte
case 'click': {
switch (value) {
case 'single':
result = BUTTON_STATUS.CLICK;
break;
case 'double':
result = BUTTON_STATUS.DOUBLE_CLICK;
break;
case 'hold':
result = BUTTON_STATUS.LONG_CLICK;
break;
case 'long':
result = BUTTON_STATUS.LONG_CLICK;
break;
default:
result = value;
}
break;
Erledigt ![]()
So habe ich es gemacht (nur zur Info):
- Die von dir erwähnte Datei suchen
- Den « master »-Zweig für diese Datei auswählen
- Auf « Datei bearbeiten » klicken
- Die Änderung vornehmen und bestätigen
- Den automatisch ausgefüllten Pull-Request ausfüllen
- Bestätigen und auf die Genehmigung durch einen Gladys-Entwickler warten
Diese Änderungen werden bei jeder neuen Version berücksichtigt. Da es in diesem Jahr durchschnittlich alle 2 Wochen ein Update gab, kann es schnell eingesetzt werden ![]()
Vielen Dank für deine Hilfe und Erklärungen.
Vielleicht werde ich, falls der Fall eintritt, in Zukunft in der Lage sein, mich allein in Github zurechtzufinden.
Was JavaScript betrifft, muss ich mich nur noch darin vertiefen.
Danke euch beiden, tolle Teamarbeit!
Allerdings fehlen für die Integration dieser PR noch zwei Dinge:
-
Unit-Tests: Gladys 4 ist langfristig stabil, weil wir alles testen, das ist extrem wichtig. Deine PR wird nicht angenommen, weil die Code-Abdeckung nicht gut ist (keine Tests geschrieben).
-
Echte Tests: In Gladys 4 testen wir nicht in der Produktion, wir führen vor dem Merge echte Tests durch. Dafür muss ein Docker-Build deines Branches erstellt werden, das dann von jemandem mit der entsprechenden Hardware getestet werden kann
Normalerweise wird beim Erstellen einer PR eine Checkliste vorgefüllt, die vor dem Merge ausgefüllt werden muss. Hast du die entfernt?
Beispiel:
Ja, ich bestätige, es war tatsächlich vorhanden. Angesichts der Änderung sollten keine neuen Tests erforderlich sein, oder? Wir können uns doch auf die aktuellen Tests verlassen, nicht wahr?
Ich habe die Änderung von der Arbeit aus vorgenommen, also über die GitHub-Weboberfläche, und habe die gesamte Änderung nicht lokal getestet. Deshalb habe ich auch die Liste nicht hinterlegt, da ich nicht alle Tests bestanden habe.
Ja, aber dadurch haben wir keine Checkliste, mit der wir bestätigen können, dass in diesem PR alles in Ordnung ist.
Nein, da sind wir sehr streng. Wenn es neuen Code gibt, müssen auch neue Tests geschrieben werden, um sicherzustellen, dass der Code jetzt und in Zukunft funktioniert.
Wenn du keine Tests schreibst, könnte es in 4 Monaten passieren, dass jemand die Zeile entfernt, und es gibt kein Problem, weil es keine Tests gibt. Und derjenige, der bemerkt, dass es nicht mehr funktioniert, ist der Endnutzer.
Genau in Gladys 4 versuchen wir, streng zu sein. Es ist nicht Aufgabe des Endnutzers, festzustellen, dass Gladys bei jeder neuen Version kaputt ist. Unsere Prozesse stellen sicher, dass die Software das tut, was wir wollen, jetzt und in den nächsten 10 Jahren. ![]()
Übrigens, das alles überprüfe ich nicht selbst, das macht die kontinuierliche Integration. Sie stellt sicher, dass jede geschriebene Zeile durch unser Code-Coverage-Tool abgedeckt ist.
Dein PR erscheint als „nicht gültig“ und das Mergen ist blockiert:
Alles klar, das mache ich, sobald es möglich ist ![]()
Genial! Ich ping @cicoub13, der an diesen Klick-Buttons gearbeitet hat, ich möchte sicherstellen, dass die hier für „lang“ gewählten Werte die richtigen sind.
Ist es normal, den gleichen Wert für „halten“ und „lang“ zu nehmen? Wollen wir diese Ereignisse nicht unterscheiden?
Ich denke, es ist dasselbe, aber von zwei verschiedenen Herstellern. @cicoub13 könnte das vielleicht bestätigen?
Der Sonoff-Knopf sendet „long“. Er kann nicht LONG_CLICK_PRESS oder LONG_CLICK_RELEASE senden. Ich persönlich sehe keinen Nachteil darin, dass der Wert von Button_status bei einer langen Tastenbetätigung 5 ist.
Welche Knöpfe (Marken?) senden long_click_press und long_click_release?
Diese beiden Ereignisse erscheinen mir seltsam…


