Taupunkt berechnen Shelly-Skript

  • Ich habe hier ein Shelly-Skript mit Versuch-und-Irrtum zusammengebastelt, was erstaunlicher Weise funktioniert (ich habe keine Programmierkenntnisse).
    Ich verwende einen Shelly Plus 1 + Add-on + DHT22-Sensor.

    Das Skript fragt Temperatur und Luftfeuchtigkeit ab und errechnet den Taupunkt:

    Was ich noch nicht erreicht habe:
    Der Taupunkt soll anhand eines Referenzwerts überwacht werden, d.h. dieser wird definiert oder durch einen weiteren Sensor gemessen (z.B. am Vorlauf des Heizkreises).
    Bei Erreichen/Unterschreiten des Taupunkts soll
    => eine Nachricht oder besser ein Alarm über die Shelly-App erfolgen
    => der Shelly 1 Plus soll schalten, z,B. bei meiner Wärmepumpe müßte der potentialfreie Kontakt geöffnet werden, um die Kühlung zu unterbrechen

    Vielleicht kann jemand das Skript helfen zu ergänzen.

    Ich freue mich auf eure Beiträge.

    Einmal editiert, zuletzt von Ulrich (27. Mai 2024 um 06:47)

  • Zunächst ein paar Hinweise und eine Frage zu deinem Skript/Anliegen.

    1. Ich sehe keinen triftigen Grund, die Berechnungsfunktion (calculateDewPoint) lokal in loop zu definieren. Man kann so etwas tun, es macht den Code aber unübersichtlicher.
    2. Solange ich kein Skriptproblem wegen Abbruchs vorfinde, lasse ich Ausnahmebehandlungen (try, catch) weg. Das ist zwar Ermessenssache, nach meiner Kenntnis aus C++ brauchen Ausnahmebehandlungen aber Ressourcen, weshalb ich solches nicht ohne Not einsetze, zumal dein Skript recht kurz ist.
    3. Für eine explizite, zyklische Abfrage der Messwerte sehe ich keinen Grund. Hier täte ich einen EventHandler einsetzen, welcher sofort auf das von der Firmware gelieferte Event reagiert.
    4. Konstanten sollten nur dort definiert werden, wo sie gebraucht werden. Dies kann durchaus global sein, in deinem Skript werden a und b nur in der Berechnungsfunktion gebraucht und sollten dort lokal definiert werden. Du kannst diese auch global definieren, dann aber mit aussagekräftigen Namen statt a und b.
    5. Auf Grund welchen Ereignisses soll der Shelly einschalten und wie soll dieses Einschalten erfolgen - manuell oder automatisiert? Im zweiten Fall wären zwei Referenzwerte für eine Hysterese zielführend.

    Wie eine Nachricht (an die Shelly App) gesendet werden kann, weiß ich nicht. Aber die Stelle, an welcher dies erfolgen kann, steht fest. Ich täte dazu MQTT einsetzen, andere vermutlich ein übergeordnetes System. Wie der Ausgang eines Shelly ab zweiter Generation geschaltet werden kann, ist in der API Dokumentation zu finden.

    Auf der Grundlage deines Skripts gelänge dies wie folgt.

    Ich habe dein Skript weitgehend so belassen. Den Einsatz eines EventHandlers magst du selbst prüfen. Bei Bedarf kann ich eine solche Alternative gerne ergänzen. Informationen dazu in der API-Dokumentation.

    Frage: Wie hast du denn ein solches Skript per trial and error zustande gebracht - ohne Programmierkenntnisse? Solches erscheint mir recht abenteuerlich. ;)

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

    Einmal editiert, zuletzt von eiche (27. Mai 2024 um 14:04)

  • Danke, damit experimentiere ich erst einmal weiter, das hilft.
    Tatsächlich habe ich dieses Skript aus verschidenen Skripten zusammengesetzt und versucht zu verstehen, was die Befehle bewirken.
    Die Taupunktformel ist ja allgemein verfügbar.
    Erst einmal das Ding zum Laufen bekommen.

  • Automatische Benachrichtigungen erhält man am einfachsten, indem man eine Szene anlegt.
    In meinem Fall wird der Schaltzustand des Shelly Plus 1 überwacht.

    Der Referenzwert der Taupunktberechnung ist die gemessene Temperatur am Vorlauf (Kühlkreis).
    Bei Unterschreitung des Taupunkts wird der potentialfreie Kontakt getrennt und es erfolgt eine Benachrichtigung "Taupunkt unterschritten"
    Bei Überschreitung des Taupunkts wird der potentialfreie Kontakt geschlossen und es erfolgt eine Benachrichtung "Taupunkt wieder erreicht".

    Nun mußte ich feststellen, daß sich an das Add-on nur ein DHT22-Sensor anschließen läßt. Es können dann keine zusätzlichen DS18B20-Temperaturfühler angebracht werden.
    Also habe ich einen weiteren Shelly Plus 1 mit Add-on gekauft und den Temperaturfühler für den Vorlauf der Fußbodenheizung dort angeschlossen.
    Die Abfrage des Temperaturwerts erfolgt nun über eine http-Abfrage.

    Bei meiner Viessmann-Wärmepumpe kann ich den Shelly über den potentialfreien Kontakt mit dem Steckplatz F11 verbinden und so den Feuchteanbauschalter (Taupunktschalter) ersetzen.
    So schaltet die Kühlung bei Unterschreiten des Taupunkts ab.

    Leicht modifiziert kann man damit z.B. auch eine Belüftung des Kellers steuern, dann ist die Temperatur der kalten Wand die Referenztemperatur.

    Das Skript sieht jetzt so aus:


    Wenn hier jemand noch etwas ergänzen oder verbesssern möchte - bitte gerne.
    Wie gesagt: an Programmierkenntnissen mangelt es mir.

  • Ich sah mir soeben dein letztes Skript etwas genauer an. Ich schätze das Skript trotz seiner Kürze als relativ unübersichtlich ein, was eine Pflege erschweren wird.

    Die derzeit gewollte Funktionalität des Skripts ist trotzdem vermutlich vorhanden.

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

  • Dieses Thema enthält einen weiteren Beitrag, der nur für registrierte Benutzer sichtbar ist, bitte registrieren Sie sich oder melden Sie sich an um diesen lesen zu können.