Berechnete Werte an Shelly App schicken

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

  • 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.