GuenterP
Ein Shelly Skript wird immer auf dem Shelly gespeichert, welcher das Skript abarbeitet. Damit kann ein Shelly weitgehend autark arbeiten, was ein erheblicher Vorteil sein kann.
Die Firmware liefert Messwerte
- in gewissen Zeitabständen, bspw. ca. 60s,
- wenn sich ein solcher Messwert gendert hat.
Wohin liefert die Firmware solche Messwerte?
- In die Cloud, wenn der Shelly in die Cloud eingebunden ist.
- An die Web UI des Shelly.
- An eine dafür im Skript erstellte Funktion, welche hierfür in der Firmware registriert wurde.
- An ein übergeordnetes lokales System, wenn die Kommunikation dafür konfiguriert ist.
Die zügigste, sicherste und flexibelste Verarbeitung solcher Messwerte findet lokal im Shelly per Skript statt. Auch übergeordnete Systeme bieten reichlich Möglichkeiten hierfür, wofür aber zwingend die Kommunikation mit dem Shelly funktionieren muss. Die Funktion im Skript, welche die Messwerte entgegennimmt ist entweder ein sog. Eventhandler oder ein Statushandler. Wenn es ein Eventhandler tut, täte ich diesen bevorzugen. In deinem Fall ist dies so.
Ein Skript erfordert programmieren. Mit Klicken, Selektieren und hier und da einen Eintrag erstellen ist es nicht getan.
Ein erstes Skript, um sich einer Lösung zu nähern sieht bspw. so aus.
function evh(ev) {
print(JSON.stringify(ev);
}
Shelly.addEventHandler(ev);
Der Eventhandler, welcher über die Messwerte per Parameter "ev" von der Firmware informiert wird, ist hier die Funktion "evh", welche per letzter Anweisung der Firmware als Eventhandler zwecks Registrierung mitgeteilt wird.
Dieser Eventhandler ist sehr schlicht und gibt nur die Datenstrukturen aller eintreffenden Events aus, auch der Events von Messwerten. An Hand solcher Ausgaben ist es möglich, die interessanten Teile per Analyse ausfindig zu machen und zu erkennen, wie man per Skript auf diese Teile zugreifen kann. Vermutlich lauten die für deine Zwecke zielführenden Teile des Parameters "ev"
- "name": "temperature"
- "id": 100 oder 101 oder 102
- "info": eine Datenstruktur, in welcher der jeweilige Messwert steckt.
Ungeprüft fokussiert vermutlich das folgende Skript die Ereignisse, welche gemessene Temperaturwerte liefern.
function evh(ev) {
if(ev.name==="temperature") {
print(JSON.stringify(ev);
}
}
Shelly.addEventHandler(ev);
Zur Regelung
Für deine Anwendung halte ich es zielführender, wenn du
- einen ad hoc änderbaren Wert für die Zieltemperatur "targetTemp",
- einen Hysteresewert "dTargetTemp" und
- eine feste Temperaturdifferenz "dTemp" festlegst.
"targetTemp" ist die angestrebte Zieltemperatur des Poolwassers. Ist dessen gemessene Temperatur "tempPool" unterhalb targetTemp - dTargetTemp, wird die Erwärmung freigegeben. Ist tempPool > targetTemp + dTargetTemp, wird die Erwärmung gesperrt und ggf. abgestellt.
Ist bei freigegebener Erwärmung die Differenz der Temperaturen von Heizmatte und Einspeisung mindestens gleich dTemp, so wird die Heizungzirkulation eingeschaltet.
Zusätzlich ist noch eine manuelle Freigabe/Sperrung der Heizung vorzusehen.
Hinweise für ein anwendungsgerechtes Skript
- Die im Eventhandler eintreffenden Messwerte sind in globalen Variablen zwischenzuspeichern.
- Wenn alle zwischengespeicherten Messwerte gültig sind, sollte der Eventhandler (hier evh) an Hand der Parameter (s. "Zur Regelung") prüfen, ob eine Erwärmung zu aktivieren ist und dies ggf. tun, d.h. die Heizungszirkulationspumpe einschalten.
Zusatzhinweise
Ein ausgereiftes Skript ist etwas komplexer und sollte wenigstens die Änderung der Zieltemperatur ermöglichen. Hierfür ist bspw. die Kommunikation per MQTT geeignet. Bei Verwendung eines übergeordneten Systems genügt vermutlich bereits HTTP. Wenn du ohne zusätzliche Installationen auskommen möchtest, gelingt die Einstellung von Parametern auch per Shelly ab dritter Generation und virtuellen Komponenten (virtual Components), die auf der Web UI des Shelly verfügbar gemacht werden können. So kann bspw. per Schiebeeinsteller auf der Web UI die Zieltemperatur geändert werden. Solche virtuellen Komponenten können per Skript verwendet werden - Werte lesen, Änderung erfassen, schreibend ändern.
Vielleicht käme dir die Nutzung solcher virtueller Komponenten für deine Zwecke entgegen.
Falls du alles auch remote ablesen und manipulieren können möchtest bleibt die Cloud (auch ohne Skript) oder VPN und Skript. Ich halte die zweite Variante für die erheblich bessere, allerdings ist sie aufwändiger zu implementieren.
Ich hoffe, hiermit ein wenig zur Erhellung beigetragen und dich nicht allzusehr verwirrt zu haben.