NEWS
Gelöst: Shelly 2.5 als Kreuzschalter - Hilfe beim Script
-
Hallo zusammen!
Ich möchte einen Shelly 2.5 in einer Wechselschaltung betreiben, da ich Zwischen Lampe und Schalter keinen Shelly platzieren kann. Nun hatte ich die Idee, den Shelly als Kreuzschalter zu nutzen. Dadurch, dass der 2.5er auch eine Verbrauchsmessung hat, kann ich wissen wann Licht brennt, und wann nicht.
Leider habe ich keinen Plan, wie ich das Programmieren soll, aber einige Ideen für die Logik. Vielleicht könnte mir jemand bei dem Script helfen.
So soll das ganze angeschlossen werden:
Der rechte Schalter ist unproblematisch, da er einfach nur zwischen O1 und O2 schaltet.
Der linke Schalter macht immer zwei Dinge gleichzeitig, er schaltet SW1 und SW2 und immer wenn der eine SW an geht, geht der zweite SW aus. Wenn ich das ohne eine Logik anschließen würde, würde die Wechselschaltung funktionieren.Jetzt kommt aber dazu, dass ich das Licht per iobroker schalten möchte. Also muss ich bei einem Schaltvorgang per iobroker immer den Zustand von SW1 und SW2, bzw. O1 und O2 umkehren.
Jetzt kommt halt das Schalten mit dem iobroker. Ich brauche ein Objekt "Schalter" mit dem ich das Ganze schalten kann.
Den aktuelle Zustand (also an oder aus) könnte ich über ein weiteres Objekt bestimmen. Dazu würde ich einen Objet "Current State" erstellen, welches wahr oder falsch sein kann. Den wert würde ich mit 1 befüllen, wenn Power am Relay0 oder Relay1 >0 ist, sonst 0.
So und nun wirds für mich ganz kompliziert. Ich muss dem Objekt "Schalter" ja den derzeitigen Zustand zuordnen, damit sich im iobroker weiß, ob an oder aus. Wenn ich dann aber den Schalter per iobroker schalte, dann muss ich Switch.Relay0 und Switch.Relay1 jeweils den Zustand umkehren.
Und am Schluß ist dann noch die Frage, wie sich die Schaltung verhält, wenn ich an linken Schaltern in meinem Bild die Position ändere. Kann ich den Schalter im normalen Modus lassen, oder sollte ich die auf "detached" in der Shelly App stellen und dann den Status-Wechsel im Script überwachen? Eigentlich wäre mir lieber, dass der Schalter ohne iobroker funktioniert, falls der iobroker aus Gründen mal offline sein sollte. Zur Not kann ich ja zwei mal schalten, damit der Schalter den Zustand im iobroker überschreibt.
Habt ihr Tipps für mich?
Welche Daten kann/soll ich noch bereitstellen?
Ich würde mich sehr über Eure Hilfe freuen!Danke!
-Paul -
@paba42 Hui, ganz schön kompliziert... ich musste das Schaltbild und deine Erklärung drei Mal durchlesen, bis ich verstanden habe, was du willst.
@paba42 sagte in Shelly 2.5 als Kreuzschalter - Hilfe beim Script
Ich muss dem Objekt "Schalter" ja den derzeitigen Zustand zuordnen, damit sich im iobroker weiß, ob an oder aus. Wenn ich dann aber den Schalter per iobroker schalte, dann muss ich Switch.Relay0 und Switch.Relay1 jeweils den Zustand umkehren.
Und genau hier beginnt das Problem: wie willst du wissen, ob die Lampe an oder aus ist? Bekanntlich kann man bei einem Kreuzschalter (CH: Schema 6) nur umschalten und nicht ein- oder ausschalten.Beim vierten mal durchlesen habe ich es auch gemerkt: du misst den Strom.Und am Schluß ist dann noch die Frage, wie sich die Schaltung verhält, wenn ich an linken Schaltern in meinem Bild die Position ändere. Kann ich den Schalter im normalen Modus lassen, oder sollte ich die auf "detached" in der Shelly App stellen und dann den Status-Wechsel im Script überwachen?
Es bleibt dir wohl nichts anderes übrig, als die zu detachen. Du willst ja die Logik umkehren und das geht nur, wenn die Schalter nicht automatisch schalten.
Blockly kann ich leider nicht, aber grundsätzlich hast du ja die Logik schon beschrieben:
- Auf SW1 hören (SW2 ist ja immer das Gegenteil von SW1).
- Wenn SW1 sich ändert, dann O1 und O2 jeweils "umkehren" (also true --> false und umgekehrt)
- Wenn du aus deinem (neu zu erstellenden) Datenpunkt eine Änderung bekommst, dann:
- Wenn
val==true
undack==false
und Power0 == 0 und Power1 == 0, dann O1 und O2 jeweils "umkehren" - Wenn
val==false
undack==false
und (Power0 > 0 oder Power1 > 0), dann O1 und O2 jeweils "umkehren"
- Wenn
- Wenn sich der Wert von Power0 oder Power 1 ändert, kannst du den oben erwähnten Datenpunkt wie folgt ändern:
- Wenn Power0 == 0 und Power1 == 0, dann den Datenpunkt ändern mit
val=false
undack=true
- Wenn Power0 > 0 oder Power1 > 0, dann den Datenpunkt ändern mit
val=true
undack=true
- Wenn Power0 == 0 und Power1 == 0, dann den Datenpunkt ändern mit
Das mit dem "ack" mache ich, damit der Schalter auch den echten Zustand anzeigt.
-
Manchmal muss man sich nut trauen, oder einfach machen.
Ich poste hier mal mein Blockly, Fragen kann ich auch gerne beantworten:Überwachung des Stromverbrauchs für Status (an/aus)
Licht schalten
-
@paba42 sagte in Shelly 2.5 als Kreuzschalter - Hilfe beim Script:
da ich Zwischen Lampe und Schalter keinen Shelly platzieren kann
Warum kannst das nicht? Kein Platz?
-
@UncleSam Danke für Deine Antwort!
Mein Problem ist, dass ich zwar aus scripten kopieren kann, aber selber nicht tief genug drin bin, um zu wissen, was ich da wirklich mache
Aber ich habs geschafft. Die Schalter musste ich nicht detachen, daher funktionieren die auch, wenn der iobroker mal offline sein sollte. Bei Bedarf kann ich den JavaScript-Code des Blockly posten, falls das jemand nachmachen möchte.
Der eigentliche Schalter ist echt nur ein "wenn an, dann aus, wenn aus dann an" und das für beide "Kanäle" des Shellys.
-
@Jan1 ja, kein Platz. Ich nutze die Hohlwanddosen auch als Kabelverteiler und die sind nur 73mm tief. Da ist auch jetzt schon nur ausreichend Platz für die Kabel und den Schalter.
Diese Schaltung kann aber auch hilfreich sein, wenn man hinter dem Schalter kein Null-Leiter hat, oder wenn im Schalter keine Phase oder eine andere Phase, als die fürs Licht verwendet wird zur Verfügung steht.
Sonst benutze ich für Wechselschaltungen immer den Shelly1. Den hatte ich jetzt über. Eigentlich ist das ein recht unnötiges Projekt, aber es hat mich irgendwie getriggert, dass mein Vater sagte, "Und hier machst kannst Du das Licht nicht mit dem Handy steuern?"
Also musste ich das Problem mal angehen -
@paba42
Der N ist kein Problem mehr, da es da mittlerweile den Shelly 1L gibt. Der holt sich den N über die Lampe.
Platzprobleme bei ner Holwanddose? Ich meisel mir schon die nurmalen UP Dosen hinten auf, was bei ner Gipskartonwand nicht mal nötig wäre
Das einzige Problem wäre dann ein fehlendes L, wobei bei ner Hohlwand da auch schnell irgendwo einer organisiert wäre
-
@Jan1 Das ist eine Garage, die Wände sind 80er, auf der Seite wo die Does ist, ist eine Außenwand. Ich überlege, ob ich mir ne Dose für nen Shelly setze, dann kann ich mit dem 2.5er auch zusätzlich ein Außenlicht steuern. Aber jetzt wollte ich eine quick and dirty Lösung.
Ja, der 1L könnte auch ohne N, aber das Problem hab ich nicht.
Den 2.5er hatte ich halt da und wie gesagt, die Dose wollte ich so lassen wie sie ist. Im Verteilerkasten war noch Platz satt, und die Kabel lagen auch passend da, daher war das ne 5 Minuten Geschichte.Vielleicht hilft das Script ja jemanden, der es an anderer Stelle nutzen kann.
-
@paba42
Hätte das nicht auch mit ner internen gegenseitig Verriegelung funktioniert? -
@Jan1 Mit was? Kannst Du bitte etwas ausführlicher beschreiben, was Du meinst?
-
@paba42
Der Shelly soll doch die Relais einfach im Wechsel schalten, also quasi wie ein normaler Kreuzschalter und das kann der Shelly dich schon von sich aus.Bei der original FW muss das auch funktionieren, da das Bestandteil des Shutter Modus ist. Mit Tasmota gehts auf alle Fälle. Da werden die Relais intern gegeneinander verriegelt. Schaltest ein Relais, während das andere on ist, geht das automatisch aus.
-
@Jan1 ich wüsste nicht, wie ich das in der original FW machen kann. Der Shutter-Modus schaltet ja nach einer weile die Relais wieder aus, das soll hier ja nicht passieren.
Mit Tasmota habe ich mich nicht auseinander gesetzt, ich werd das hier mal so lassen, auf Dauer werde ich aber wohl Platz für einen Shelly beim Schalter machen, damit ich mit dem 2er auch zwei Geräte steuern kann. -
@paba42
Ist doch aber richtig, was ich vermute? Du willst doch nur abwechselnd die Relais geschaltet haben?Unter Tasmota ist das einfach "INTERLOCK0 1" in der Konsole und fertig.
Die original FW kann eigentlich alles was Tasmota auch kann, somit muss das auch übe die original funktionieren, nur weiß ich hier eben nicht wo und was man da machen muss