Hallo zusammen,
ich habe neben der Eingangstür einen Shelly 2.5, der aktuell das Licht vor der Tür schaltet, also nur einen seiner beiden Ausgänge nutzt. Dazu bekommt er seine Befehle über openHAB, es ist kein direkter Taster / Schalter angeschlossen. Meine Shellys habe ich alle mit dem Shelly-Binding eingebunden, hat bislang (und das schon ein paar Jahre) prima funktioniert.
Nun wollte ich den "freien" Kanal des 2.5 nutzen, um einen Klingeltaster (einfacher Schließer) einzulesen. Den habe ich daher wie in der
Shelly-Anleitung beschrieben mit SW2 und L angeschlossen.
In der App habe ich für das Relais 2 3 verschiedene Channels:
- Betrieb / Output (Switch)
- Eingang/Input (Switch)
- Taste / Button (Trigger)
Ich war nun davon ausgegangen, dass der Trigger feuert, sobald ich den physikalischen Schalter kurz betätige. Auf dem Log sehe ich aber leider gar nichts, obwohl das Relais sofort klickend schaltet. Ich habe ihn so in eine Rule eingebunden:
Code: Alles auswählen
rule "Klingel"
when
Channel "shelly:shelly25-relay:c4c6cd:relay2#button" triggered SHORT_PRESSED
then
...
...aber da kommt nichts. Ich habe auch versucht, über den Status des Outputs oder Inputs zu arbeiten :
Code: Alles auswählen
Switch DR_Klingeltaster "DR Klingel" (gDR_Eingang) {channel="shelly:shelly25-relay:c4c6cd:relay2#nput"}
rule "Klingel"
when
Item DR_Klingeltaster changed to ON
then
...aber auch ohne Erfolg.
Jetzt hab ich zwei Fragen:
- Der Shelly sendet seine Statusnachrichten scheinbar sehr sehr unzuverlässig auf den Bus. Könnt Ihr das bei Euch auch beobachten und bestätigen oder gibt es da eine Lösung?
- Es gibt irgendwie (ich finde da leider kein Tutorial) auch die Möglichkeit, mit "URL-Actions" zu arbeiten. Da kann ich z.B. eine "BUTTON SWITCHED ON URL" vergeben. Kann mir von Euch jemand erklären wie das geht?
Ich danke Euch schonmal für Eure Mühe und würde mich sehrfreuen, wenn Ihr mir helfen könntet.
Gruß
Simon
von harteknut » 4. Apr 2024 23:41
Sooo...
Jetzt hab ich viel in verschiedenen Foren gesucht und ein paar neue Erkenntnisse (und das Thema gelöst). Ich schreibs hier mal auf, evtl. hilft es dem ein oder anderen mit einem ähnlichen Thema:
- Das Problem der "nicht in OH ankommenden Nachrichten" liegt scheinbar am Thema Multicast. Die Statusmeldungen erfolgen über CoIoT und werden standardmäßig als Multicast-Botschaften rausgeschickt. In der App oder auf der Weboberfläche kann man das ändern, in dem man bei "CoIoT peer:" den Standardeintrag "mcast" durch die Adresse des OH-Servers mit Port 5683 ersetzt. Bei mir also einfach "10.8.15.3:5863".
(Auf der Weboberfläche versteckt sich diese Option leider unter "ADVANCED - DEVELOPER SETTINGS")
Ab da kommt der Statuswechsel auch in OH an.
- Damit nicht nur der Status der Ausgänge übertragen wird, sondern auch der Trigger funktioniert, muss "Button Type" des jeweiligen Channels auf "Detached Switch" gestellt werden. Das entkoppelt den Taster logisch vom Ausgang und sorgt dafür, dass die Triggernachricht zuverlässig in OH ankommt.
Die Option mit den Action-URLs habe ich daher gar nicht gebraucht.
Meine Klingel-Regel sieht jetzt so aus:
Code: Alles auswählen
rule "Klingel"
when
Channel "shelly:shelly25-relay:abcdcd:relay2#button" triggered SHORT_PRESSED or
Channel "shelly:shelly25-relay:abcdcd:relay2#button" triggered LONG_PRESSED
then
if (DR_Klingel.state == OFF) {
DR_Klingel.sendCommand(ON)
tKlingelsperre?.cancel // zunächst eventuell laufende Timer entfernen
tKlingelsperre = createTimer(now.plusSeconds(5), [ | // Timer anlegen
DR_Klingel.sendCommand(OFF)
tKlingelsperre = null // Timervariable deinitialisieren
]) }
end
Gehe zur vollständigen Antwort