Beiträge von eiche

    Jo_Be

    Ich bewerbe hier erstens nichts, es steht nur als Hinweis im Zusammenhang mit mitunter bedenklichem Einsatz einer Cloud.

    Und zweitens, wie bereits tvbshelly bemerkte, leiste ich an gegebener Stelle auf eigene Kosten und ohne jeglichen direkten oder indirekten Gewinn Hilfestellung für technisch Interessierte.

    Prinzipiell bin ich bereit, ein Impressum einzubauen, was ich auch auf einer anderen der von mir auf eigene Kosten etc. (s.o.) bereitgestellten Subdomains bereits tat. Ich finde es aber sehr merkwürdig, dass sich hieran jemand stößt (Krümelkackerei). Mich interessiert, ob du ( Jo_Be) auch Konstruktives beizusteuern hast.

    Titty-Twister

    Das Skript brauchst du ggf. erst dann hier zu posten, wenn es deinerseits einen weiteren Bedarf geben sollte.

    towiat

    Die boolesche Algebra greift bei den beiden Alternativen zur Inversion des Schaltens. Ich habe beide angeboten, damit Titty-Twister die für ihn verständlichere wählen kann.

    Ansonsten hat das Skript von towiat den Vorteil der Synchronität, d.h. es werden die aktuell vom zweiten Shelly gelieferten Zustandsinformationen verarbeitet. Das von mir gekürzte Skript orientiert sich halt mehr am Ausgangsskript und dürfte für den TE deshalb zunächst vertrauter wirken. Durch die verfügbaren, kürzeren Funktionen ist es auch etwas leichter an Änderungen anpassbar.

    Jan_Grz

    Ich bin nie auf dem "modernsten" Stand von Verfügbarkeiten, empfehle (leicht naiv) aber generell beim Kauf die neueste Generation. Falls ältere Geräte, bspw. der zweiten Generation, vorhanden sind , können solche hierfür eingesetzt werden.

    Der Hinweis von thgoebel sollte für deine Zwecke genügen. Bei finigraleren Wünschen ließe sich eine Kombination aus Schedule Jobs und Skript einsetzen.

    Titty-Twister

    Du musst schon selbst wissen, wie du es haben willst.

    Klar, man kann alles, was gewünscht ist, recht einfach in Code umsetzen.

    Ob dies in der Funktion setRelayState() oder in deren Aufruf erfolgen soll, ist perspektivisch zu betrachten - beides ist möglich, nur nicht zugleich. Letzteres täte sich gegenseitig aufheben.

    Ich nehme hierfür bspw. mal den Aufruf.

    Code
    setRelayState(!(switch_status[0] && switch_status[1]));

    Alternativ gelingt dies auch per Boolescher Algebra mit einer ODER Verknüpfung:

    Code
    setRelayState(!switch_status[0] || !switch_status[1]);

    Die Boolesche Algebra gehört zu den tiefsten Grundlagen der IT. ;)

    Manchmal gewinne ich den Eindruck, dass Grundlagenkenntnisse nicht mehr angemessen geschätzt werden. Vielleicht sehe ich dies als "IT Dinosaurier" so. Die "moderne " KI gibt mir nicht zuletzt unter meiner Perspektive erheblich zu denken, als alter Knabe. Ich werde die Folgen aber nicht mehr ertragen müssen. Meine Kinder und Enkel werden unter den Fehlleistungen aktueller Politik leiden. Die Sprücheklopfer aus jedweder Richtung sind dafür verantwortlich, ohne sich als Schneeflocke für eine Lawine selbst zu erkennen. Nimm mir bitte meine Gedanken nicht übel! :/

    Aus gegebenem Anlass kann ich die Firmware 1.5.1-beta2 nicht empfehlen.

    Meine Shelly Plus 2PM Hauptuhr zur Steuerung von Nebenuhren per Skript fiel nach Stromausfall aus, nicht rücksetzbar.

    Ich setzte einen anderen Shelly Plus 2PM ein, aktualisierte dessen Firmware auf o.a. Version, richtete den Shelly ein (Skript, KVS, Schedule Jobs) und startete das Skript.

    Resultat mit der beta2: Es gibt einen RPC Fehler, den dieses Skript zuvor noch nie verursachte. Nach Rückbau auf Firmware 1.4.4 läuft alles fehlerfrei. Vermutlich täte es dies auch bei 1.5.1, was ich aber nicht testete, da die Firmware Upgrades unterschiedlich zur Verfügung stehen, offenbar abhängig von der aktuellen Firmware auf dem Gerät oder anderen Daten. Diese Unstimmigkeit lässt ebenfalls noch Wünsche übrig ...

    Titty-Twister

    Noch ein Hinweis:

    Mit MQTT ginge es ebenfalls recht verlässlich und komfortabel. Hierfür brauchst du einen MQTT Broker, welchen du vermutlich nicht vorhältst.

    Mit retained MQTT Nachrichten kann der Shelly mit den Eingangszuständen ausschließlich bei einer Änderung als MQTT Publisher eine entsprechende Nachricht retained senden. Solche Nachrichten speichert der Broker.

    Der empfangende Shelly als MQTT Subscriber erhält automatisch die vom Publisher zuletzt gesendete Nachricht. Dies erfolgt auch dann, wenn dieser Shelly hochfährt, weil er sich dann automatisch als Subscriber beim Broker meldet und dieser die letzte vom Publisher gesendete Nachricht an den Subscriber sendet.

    Vorteile:

    1. Die beiden Skripte sind relativ einfach.
    2. Der Publisher braucht ausschließlich Änderungen eines Eingangs mitzuteilen, einfaches Skript - beim Hochfahren liest er diese ein und sendet (zeitversetzt) die Nachricht an den MQTT Broker.
    3. Der Subscriber erhält immer die zuletzt vom Publisher gesendete Nachricht, auch dann, wenn der Publisher aktuell ausfällt, also nicht erreichbar ist.
    4. Die Erreichbarkeit des Publisher kann leicht festgestellt werden, indem das Skript zusätzlich das Topic <MQTT prefix>/online abonniert.
      Dies ermöglicht dem verarbeitenden Shelly (oder einem anderen MQTT Subscriber) die Nichterreichbarkeit des anderen Shelly festzustellen und geeignete Maßnahmen durchzuführen.

    Nachteile:

    1. Es wird ein weiteres Gerät, bspw. ein Raspberry Pi, mit MQTT Broker benötigt.
    2. Die Funktion ist nur solange gewährleistet, wie der Broker arbeitet.
      Mein Broker fiel bisher ausschließlich ohne Strom aus. ;)

    Titty-Twister

    Zur Verarbeitung der aktuellen Zustände beider Eingänge des anderen Shelly fallen mir ad hoc vier echte Alternativen ein.

    1. Nur ein Skript (wie bisher)
      1. Die Zustände werden in den callback Funktionen der RPC (=Shelly.call()) verarbeitet.
        Hierzu sollte in der ersten callback Fkt. ein RPC erfolgen, in welchem dessen callback Funktion die vorliegenden Zustände verarbeitet.
        Vorteil: höchst aktuell
        Nachteil: Tiefer verschachtelter Code
      2. Beide Zustände werden per RPC geholt und gespeichert. Ein Timer startet bspw. 5s nach den RPC eine Funktion, welche die Zustände verarbeitet.
        Vorteil: Code ist deinem sehr ähnlich und damit relativ einfach.
        Nachteil: Keine hohe Aktualität
    2. Auf jedem der beteiligten Shelly ein Skript
      Auf dem verarbeitenden Shelly steht eine Skriptfunktion bereit, welche diese Informationen entgegennimmt und verarbeitet.
      Auf dem Shelly, dessen Eingangszustände abzufragen sind:
      1. Immer dann, wenn sich ein Zustand ändert, erfasst dies ein Eventhandler im Skript und sendet die Information über beide Eingänge an den anderen Shelly. Beim Hochfahren des Shelly werden beide Zustände abgefragt und übertragen.
        Vorteil: relativ einfache Skripte, höchst aktuell
      2. Per Timer oder besser Schedule Job werden beide Zustände abgefragt und an den verarbeitenden Shelly übertragen.
        Vorteil: Es wird regelmäßig aktualisiert
        Nachteil: keine hohe Aktualität möglich - wie in 1.2
    3. Eine Kombination von 2.1 und 2.2

    Hinweis: Wenn du keine hohe Aktualität der Eingangszustände brauchst, empfehle ich der Einfachheit wegen Variante 1.2. Sie ist relativ robust.

    Ich nutze gerne kürzere, übersichtlichere Skripte, wenn möglich. Hier (ungetestet) sollte dies per zusätzlichem Parameter id gelingen. Vielleicht magst du diese Anregung gelegentlich nutzen. Es geht ausschließlich um die Einsparung der beiden Funktionen getSwitchStatus2() und updateSwitchStatus2().

    Da ich dies nicht getestet habe, hoffe ich auf Fehlerfreiheit.

    Btw, das von dir verfasste Ausgangsskript erscheint mir im Ansatz durchaus gut gemacht, mit Ausnahme der UND Verknüpfung. ;)

    Im übrigen ist der Hinweis von towiat zur asynchronen Abarbeitung von Ereignis gesteuerten Shelly Skripten sehr bedeutsam. Diesen Hinweis solltest du verstehen und bedenken.

    Hinweis: Ich habe das Skript in Zeile 24 korrigiert, am 2025-04-01 um 10:45 Uhr.

    Titty-Twister

    Deine switch_status Variable sind boolsche Variable, d.h. sie beinhalten Wahrheitswerte. Die UND-Verknüpfung beider Variablen erfolgt zielführend per Operator &&. Das einfache & verknüpft bitweise, was auch gelingen kann, aber nicht sicher ist.

    Code
    setRelayState(switch_status && switch_status2); // Aktualisiere den gewünschten Relaiszustand

    Zu mehr Analyse kam ich so schnell jetzt nicht. Vielleicht später ...

    Offenbar schaltet die Hauptstelle die Lampe. Diese Klemme sollte an den SW-Eingang eines schaltenden Shelly (Shelly 1, Shelly Plus 1, Shelly Plus 1 PM, ...) geführt werden. Dann schaltet der Shelly die Lampe(n) und "kennt" somit auch den Schaltzustand, welcher damit automatisch in der App, in der Cloud und auch auf der Webseite des Shelly zu sehen ist.

    Dazu ist der graue Shelly PM Mini Gen 3 durch einen Shelly mit SW Eingang und Schaltausgang zu ersetzen.

    Könnte man es denn mit einem Shelly Plus 1PM realisieren? L und N anschliessen. Lichtstrom aus dem Zeptrion auf SW (schwarzer Draht auf meinem Foto) und O mit der Lampe verbinden (roter Draht).

    Ja, das sollte dein Ziel erreichen.

    Denn es gibt Zeptrion Schalter, die die Lampe ebenfalls ein- und ausschalten können.

    Wenn diese Zeptrion Schalter auf den SW Eingang des Shelly geführt werden können/sollen, dann täte dies ohne Messung genügen, weil dann der die Lampe schaltende Shelly den Schaltzustand "kennt".

    Ich kenne deine gesamte Schaltung nicht (mehr).

    Bitte skizziere diese mit allen beteiligten Teilen - Schalter/Taster, alle die Lampe(n) schaltenden Zeptrion Schalter, Verbindungen!

    Brendianer

    Ich muss mich ein wenig verbessern. Der die Lampe schaltende Shelly braucht nicht zu messen. Außerdem sollte so der Schaltzustand der Lampe direkt von diesem Shelly signalisiert werden. Hierfür genügt sogar ein Shelly (Plus) 1, also auch ein Shelly der ersten Generation käme in Frage.

    Was kommt dann an SW und was an O?

    An SW kommt der bisher schaltende Ausgang deiner Elektronik. Es bleibt zu prüfen, ob diese Beschaltung wie erwartet schaltet. Die Ausgangsspannungen deiner Elektronik sind hierbei entscheidend. Falls das Schalten nicht erfolgreich gelingt, käme vermutlich noch der hier sog. "Bukoski-Draht" zum Zuge.

    O ist der Schaltausgang des Shelly, mit welchem die Lampe letztlich geschaltet wird. An I sollte L gelegt werden.

    Falls diese Lösung gelingt, was ich stark vermute, ist die Lehre daraus "Es ist mitunter zielführend, Abstand von den eigenen Gedanken zu gewinnen. Das fördert Alternativen." ;)