Berechnete Werte an Shelly App schicken

Die Verwendung von Skripten liegt im eigenen Ermessen des Benutzers. Unterstützung für Skripte wird vom Autor des Skripts bereitgestellt.
  • Hi!


    Ich möchte gerne das mein Skript mir den Taupunkt und den VPD anhand eines H&T Sensors berechnet und mir die Werte dann als Nachricht oder irgendwie an die Shelly App meldet.


    Ich hab mit Chat GPT und mit Fragmenten aus dem Forum schonmal an einem Skript gearbeitet, bekomme es aber micht hin das es die Daten irgendwo hin sendet.


    Ich bin absoluter Greenhorn in der ganzen Sache, bitte mich fertig machen.


    Das Skript:


    let url = 'https://shelly-142-eu.shelly.cloud/device/status';
    let body = JSON.stringify({
    id: ‘*****',
    auth_key: ‘*****'
    });

    // Abruf der Gerätedaten (Temperatur und Feuchtigkeit)
    Shelly.call('HTTP.POST',
    {url: url, body: body},
    function (response) {
    let oResponseBody = JSON.parse(response.body);
    log("API Response: " + response.body); // Logge die gesamte Antwort

    if (oResponseBody.isok) {
    // Extrahieren der Temperatur und Feuchtigkeit
    let oTemperature = oResponseBody.data.device_status['temperature:0'];
    let oHumidity = oResponseBody.data.device_status['humidity:0'];

    log("Temperatur: " + oTemperature.tC);
    log("Feuchtigkeit: " + oHumidity.rh);

    let a = oTemperature.tC; // Temperatur als 'a'
    let b = oHumidity.rh; // Feuchtigkeit als 'b'
               
    // Berechnung des Taupunkts und des Dampfdruckdefizits
    let dewPoint = calculateDewPoint(a, b);
    let dpd = calculateDewPointDeficit(a, b);

    if (dewPoint !== null && dpd !== null) {
    // Messen der berechneten Werte in die Shelly App (oder als MQTT-Benachrichtigung)
    reportToShelly(dewPoint, dpd);
    } else {
    log("Fehler: Ungültige Berechnungen");
    }
    } else {
    log("Fehler: " + oResponseBody.error_message); // Fehlernachricht aus der Antwort
    }
    }
    );

    // Berechnung des Taupunkts
    function calculateDewPoint(a, b) {
    if (isNaN(a) || isNaN(b)) {
    log("Ungültige Eingabewerte: Temperatur oder Feuchtigkeit ist NaN.");
    return null;
    }
    let temp = a;
    let humidity = b;
    let gamma = (17.27 * temp) / (237.7 + temp) + Math.log(humidity / 100.0);
    let dewPoint = (237.7 * gamma) / (17.27 - gamma);
    return dewPoint;
    }

    // Berechnung des Dampfdruckdefizits
    function calculateDewPointDeficit(temp, humidity) {
    if (isNaN(temp) || isNaN(humidity)) {
    log("Ungültige Eingabewerte: Temperatur oder Feuchtigkeit ist NaN.");
    return null;
    }
    let E_s = 6.112 * Math.exp((17.27 * temp) / (237.7 + temp));
    let E_a = E_s * (humidity / 100);
    let dpd = E_s - E_a;
    return dpd;
    }

    // Funktion, um den Taupunkt und Dampfdruckdefizit an die Shelly App zu melden
    function reportToShelly(dewPoint, dpd) {
    let deviceId = '****'; // Dein Shelly-Gerät-ID
    let message = `Taupunkt: ${dewPoint.toFixed(2)} °C\nDampfdruckdefizit: ${dpd.toFixed(2)} hPa`;

    // Erstelle den Body mit der Nachricht und sende es an die Shelly App
    let body = JSON.stringify({
    id: '****',
    method: 'update_status', // Beispiel: Update-Methode, je nach API
    params: {
    message: message // Deine berechneten Werte als Textnachricht
    }
    });

    // Sende die Nachricht an die Shelly App oder das Shelly-Gerät
    Shelly.call('HTTP.POST',
    {
    url: `https://shelly-142-eu.shelly.cloud/device/update`, // Beispiel-URL, anpassen je nach API
    body: body
    },
    function(response) {
    log('Message reported to Shelly app: ' + response.body);
    }
    );
    }

    // Überwachungsfunktion, um den Taupunkt alle 15 Minuten zu berechnen und zu melden
    function monitorDewPoint() {
    try {
    // Geräteinformationen abrufen
    let temp = Shelly.getComponentStatus('Temperature', 100).tC;
    let humidity = Shelly.getComponentStatus('Humidity', 100).rh;

    // Überprüfen, ob die Werte erfolgreich abgerufen wurden
    if (temp && humidity) {
    let dewPoint = calculateDewPoint(temp, humidity);
    let dpd = calculateDewPointDeficit(temp, humidity);

    // Berechnete Werte melden
    if (dewPoint !== null && dpd !== null) {
    reportToShelly(dewPoint, dpd);
    } else {
    log("Fehler: Ungültige Berechnungen.");
    }
    } else {
    log("Fehler beim Abrufen der Temperatur oder Luftfeuchtigkeit.");
    }
    } catch (e) {
    log("Fehler: " + e);
    }
    }

    // Timer setzen, um alle 15 Minuten die Werte zu melden (15 Minuten = 900.000 ms)
    Timer.set(900000, true, monitorDewPoint);


  • die Werte dann als Nachricht oder irgendwie an die Shelly App meldet

    An welcher Stelle in der App kann man sich denn neuerdings Nachrichten schicken lassen oder der App was melden?

    Mit besten Grüßen

    Martin

    Falls sich Jemand von mir persönlich angegriffen fühlt, dann bitte ich um eine kurze Info. Es lässt sich alles klären. Ich bin, wie ich bin.

    Einen 3EM kann man übrigens in 1728 Varianten falsch einbauen und verdrahten .Es sind mittlerweile weitere Möglichkeiten dazu gekommen.

    In den meisten Einbauanleitungen sind die Wandler in der falschen Richtung eingezeichnet. Letzteres gilt nur für den alten 3EM.

  • SebMai
    5. Juni 2022 um 20:15
  • Ok, hatte das in einer anderen Art verstanden. Hatte gerade was ähnliches eigenes im Hinterkopf. Mache sowas alles in HA. Ist wesentlich einfacher für mich. (Mag keine Monstershellyskripte). Man soll eben nicht alles auf einmal machen.?(

    Mit besten Grüßen

    Martin

    Falls sich Jemand von mir persönlich angegriffen fühlt, dann bitte ich um eine kurze Info. Es lässt sich alles klären. Ich bin, wie ich bin.

    Einen 3EM kann man übrigens in 1728 Varianten falsch einbauen und verdrahten .Es sind mittlerweile weitere Möglichkeiten dazu gekommen.

    In den meisten Einbauanleitungen sind die Wandler in der falschen Richtung eingezeichnet. Letzteres gilt nur für den alten 3EM.