Beiträge von eiche

    fm-maniac und thgoebel

    Eine Idee meinerseits zum Einsatz eines Plus 1PM:

    Solange die Pumpe laufen muss, wodurch auch immer ausgelöst, und ein Abschalten verhindert werden soll kann dies per Skript gelöst werden.

    Das Skript schaltet wegen Notfall die Pumpe ein.

    Dieser Notfallstatus wird in einer Variablen gespeichert, bspw. emergency= true.

    Der EventHandler reagiert bei ausschalten der Pumpe und emergency === true (if(emergency) ...) mit einem sofortigen Weidereinschalten.

    ...

    Das genügt nicht.

    Wenn die smarten Lampen keine Shelly Lampen sind und kein Shelly diese Lampen schaltet, dann sind Hersteller/Anbieter und der genaue Typ der Lampen erforderlich, um mehr zu deren Nachrichtenprotokoll erfahren zu können.

    Falls es Shelly Lampen sind, bitte den genauen Typ!

    Das ist sehr schlecht für eine Fehlersuche bzw. zum suchen nach der Ursache des nicht gewünschten Verhaltens.

    Trotzdem ein Versuch:

    Vergleiche bitte alle Einstellungen beider Shelly miteinander. Diese sollten sich zunächst ausschließlich in ihren IP Adressen unterscheiden - bei DHCP sollten beide unterschiedlich sein. Dies kannst du in deinem Router (FRITZ!Box ?) nachsehen.

    Alle anderen Einträge sollten gleich lauten.

    Solltest du mindestens einen Unterschied feststellen, teile dies mit!

    Lege dazu eine Action an und trage als URL etwas geeignetes für den Schaltaktor ein!

    Welchen Schaltaktor nutzt du für diese Lampe?

    Du brauchst dazu Informationen, auf welche Nachrichten dieser Aktor schaltet, insbesondere auf welche Nachricht er umschaltet (toggelt).

    Evtl. beinhaltet die Lampe selbst ihren Schaltaktor.

    Diese Nachricht kannst du dann in den URL einer Action einsetzen.

    Bzw. du kannst mehrere Actions konfigurieren mit verschiedenen URL.

    Wenn es viele Lampen sind, kann es zielführend sein, ein Skript einzusetzen.

    Also zwei Lampen -> zwei Actions.

    Eine Nachricht (URL) an eine Alaxa-Cloud kenne ich nicht. Vielleicht geht so etwas. Ich täte dies nicht verwenden, weil dann immer eine Internetverbindung erforderlich ist.

    Das Skript ist dafür gemacht, auf demselben Gerät (hier Shelly Plus 1 mit AddOn), Temperaturen zu messen und ein anderes Gerät zum schalten zu beauftragen. Die URLs zeigen, dass das andere Gerät ein Shelly der ersten Generation sein soll.

    Da dies nicht gut zu deinem einzig eingesetzten Gerät passt, erscheint es mir zweckmäßig, dafür die originären Schaltanweisungen zu verwenden.

    Ersetze also bitte die vorhandenen Schaltanweisungen wie

    Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});

    print('Relay(', Config.relay, ') off. Kamin temp <= ', Config.temp_min);

    durch folgende. Ob dies helfen wird, weiß ich nicht. Es ist aber deinem Einsatzzweck angemessen, da hierfür kein HTTP GET gebraucht wird. Zunächst ohne eine Ausgabe.

    Code
    Shelly.call("Switch.Set", {id:0, on:false}); // schaltet den Ausgang aus, zum einschalten on:true verwenden 

    Die obige print() Anweisung tut nur so, als ob geschaltet wurde, weil sich diese Mitteilung nicht auf eine Antwort stützt. Dafür ist eine callback Funktion zu nutzen. Nun die komplette Anweisung hierfür.

    Code
    Shelly.call("Switch.Set", {id:0, on:false},
        function (result, errcode, errmsg) { // anonyme Funktion als Parameter
          if(errcode!==0) print("Fehler bei ausschalten ", errcode, ", ", errmsg);
          else print(JSON.stringify(result), "\nAusgang ausgeschaltet");
        }
    );

    Oder du verwendest einfach zwei Funktionen switchOff() und switchOn() dafür, was ich hiermit empfehle. Diese kannst du einfach aufrufen lassen und auch per Eingabezeile testen.

    Damit erhältst du bei Nichterfolg des Schaltens wie auch bei Erfolg passende Ausgaben, die sich nicht auf Vermutungen stützen.

    Wenn du solches besser verstehen willst und Muße hast, sieh dir gelegentlich meine Skripteinführung an! Bisher existieren Teil 1 bis Teil 3.

    Config.relay brauchst du nicht, weil der Plus 1 nur einen Ausgang besitzt. Wenn du unbedingt an Config.relay festhalten willst, setze diese Komponente wie folgt ein.

    Code
    Shelly.call("Switch.Set", {id:Config.relay, on:false}, ...

    Auch kannst du beide obige, von mir bereitgestellte Funktionen durch eine parametrierte Funktion ersetzen.

    Code
    function doSwitch(on) {
      Shelly.call("Switch.Set", {id:0, on:on},
        function (result, errcode, errmsg) {
          if(errcode!==0) print("Fehler bei " + (on ? "ein" : "aus") + "schalten ", errcode, ", ", errmsg);
          else print(JSON.stringify(result), "\nAusgang " + (on ? "ein" : "aus") + "geschaltet");
        }
      );
    }

    Diese rufst du zum einschalten mit doSwitch(true) und zum ausschalten mit doSwitch(false) auf. So täte ich es.

    Der Kreativität sind keine Grenzen gesetzt. ;)

    Du kannst auch einen zweiten Parameter für die Ausgabe nutzen, wozu aber im Aufruf von Shelly.call() ein vierter Parameter und im Kopf der anonymen Funktion ebenfalls ein vierter Parameter erforderlich sind.

    Code
    function doSwitch(on, msg) {
      Shelly.call("Switch.Set", {id:0, on:on},
        function (result, errcode, errmsg, text) {
          if(errcode!==0) print("Fehler bei " + (on ? "ein" : "aus") + "schalten ", errcode, ", ", errmsg);
          else print(JSON.stringify(result), "\nAusgang " + (on ? "ein" : "aus") + "geschaltet, " + text);
        }, msg
      );
    }

    Damit kannst du bspw. zum ausschalten folgenden Aufruf nutzen. Zuerst dein Codestück.

    Code
    if (temp_kamin<= Config.temp_min) {
        Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});
        print('Relay(', Config.relay, ') off. Kamin temp <= ', Config.temp_min);
    }
    
    // ersetzen durch:
    if (temp_kamin<= Config.temp_min) doSwitch(false, 'Relay(0) off. Kamin temp <= ' + Config.temp_min);

    Die anderen Schaltaufträge können ebenso kurz gestaltet werden, wodurch auch das gesamte Skript kürzer, einfacher, leichter pflegbar und überschaubarer wird. 8)

    Eine vermutlich ungewöhnliche Idee:

    Schalter im Wohnzimmer belassen, Shelly an der Wohnzimmerlampe montieren.

    Der Shelly wird dann per Schalter eingeschaltet und schaltet die Lampe ein (auf on nach booten konfigurieren).

    Wenn die Lampe und damit der Shelly eingeschaltet ist, kann per Button aus- und wieder eingeschaltet werden.

    Nur das Einschalten per Button gelingt dann nicht, wenn der Schalter auf Aus steht, was dich evtl. nicht stört.

    Ich kann aber nicht einschätzen, ob das relativ häufige Einschalten des Shelly diesen schneller altern lässt und wie wirksam eine solche Alterungsbeschleunigung wäre.

    Edit:
    Eine kleine Irritation ist allerdings dabei möglich. Wenn die Wohnzimmerlampe aus ist, der Schalter auf Ein steht und jemand die Lampe per Schalter einschalten will, muss er/sie den Schalter auf Aus und danach auf Ein drücken.

    Ja, das geht selbstverständlich und ist ohne weitere Eingriffe nutzbar.

    Kleiner Nachteil: Du musst den Akku im Button gelegentlich aufladen.

    Einen mir überlassenen Blu Button bekam ich nicht zum arbeiten. Ein solcher mit Knopfbatterie ginge vermutlich auch.

    Dein Schalter 1 hat aber auch keinen N Leiter

    Berechtigter Einwand. Wenn du statt der Schalter solche Buttons einsetzt, kannst du die Schalter überbrücken und den jeweiligen Shelly direkt an der Lampe montieren.

    Dann hoffe ich mal, dass ihr nicht noch eine KI wie ChatGPT einsetzen wollt. ;)
    Scherz beiseite, ist eine S7 für einen Torantrieb nicht überdimensioniert, falls die S7 ausschließlich dafür eingesetzt wird?
    Ich habe keine S7 und kenne die verschiedenen Ausbaumodelle nicht, weiß aber dass in solchen kleinen Anwendungen eine SPS zumeist eher eine Kanone zum Spatzenschießen ist. :/

    thgoebel

    Bisher nahm ich an, dass der Plus 2PM ausschließlich dann die geschaltete Stromstärke messen kann, wenn er mit 110V~ bis 240V~ betrieben wird.

    Nun bin ich verunsichert, weil im Shop die Beschreibung und Datenblatt so tun, als könne er dies auch bei 24V Gleichspannungsversorgung.

    Ich kann wegen Abwesenheit nicht selbst testen.

    Würdest du bitte diesen Sachverhalt klären?

    Sorry, ich habe viel gelesen und weiß nicht mehr, wo dbzl. was zu finden ist.

    Edit: Ich fand inzwischen, dass eine Strommessung bei 24V= nicht möglich sei. Dann ist das Datenblatt aber unvollständig.