Beiträge von ein777er

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

    Eine kleine Bitte: Zur besseren Lesbarkeit Skripte in einen Code-Block einfügen

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Dazu müsstest du bitte den Fehler (nochmal) melden:

    https://support.shelly.cloud/de/support/tic…report_an_issue

    Danke für den Tipp mit den Code-Block, schaut ja wirklich nicht ansprechend aus.

    Habe beim Support ein Ticket aufgegeben, mal schauen was geschieht. Ich halte Dich auf dem Laufenden.


    2025/08/15:

    Ich habe soeben die Rückmeldung vom Shelly Support mit der Anerkennung des Fehlers bekommen. Hat zwar ein wenig Überzeugungsarbeit gekostet, aber es hat sich gelohnt :)

    Re: [#189097] - Temperatursteuerung Solarpumpe / Mix analog und digital Eingang

    nach Rücksprache scheint dieser Fehler bei Nutzung der Funktion "percent" aufzutreten.

    Der Fehler wurde an die entsprechenden Entwickler gemeldet.

    Bis zur Fehlerbehebung bitten wir Sie um Geduld.

    Mit freundlichen Grüßen,

    Shelly Support Team

    Dear tvbshelly!

    Das wäre echt toll, wenn dieses Thema nochmals aufgegriffen würde. Ich habe das Auslesen auf mehrere Arten probiert und immer den selben Fehler bekommen. Geholfen hat mir ein Script von NORDLICHT_2023, welches ich im Forum gefunden und in mein Script adaptiert habe.

    Shelly.call("Input.GetStatus",{ id:101 },
    function(result, err_code, err_message, user_data) {
    if (err_code === 0) {
    console.log("Temperature:", result['percent']);
    if (result['percent'] < 20.0) {
    // do something
    } else {
    // do something else
    }
    } else {
    console.log("Error:", err_message);
    }
    }
    );

    und hier mein komplettes und funktionsfähiges Script:

    //GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
    //More information: https://www.gnu.org/licenses/gpl-3.0.txt
    //ABSOLUTELY NO WARRANTY!!!
    //
    // Steuerung Solarpumpe V3.0, 2025/08/12
    // Created by ein777er
    //
    ///////////////////////////////////////////////////////////////////////////////////////////
    // log = 1; // If no log needed please set log to "0"
    ///////////////////////////////////////////////////////////////////////////////////////////


    function timerHandler() {

    Shelly.call("Input.GetStatus",{ id:100 },
    function(result, err_code, err_message, user_data) {
    if (err_code === 0) {
    log = 1;
    if (log != 0) {
    console.log("Solartemperatur (Dach): ", result['percent']);
    }
    tempOutside = result['percent'];
    tempInside = Shelly.getComponentStatus('Temperature', 100).tC;
    Shelly.call("Switch.set", {
    'id': 0,
    'on': ((tempOutside >= tempInside))
    });
    if (log != 0) {
    print('Solartemperatur (Dach): ', tempOutside + ' °C / Boiler L1: ' + tempInside +
    ' °C / State Solarpumpe: ' + Shelly.getComponentStatus('switch', 0).output);
    print('*******************************************************************************************************');
    };
    if (result['percent'] < 20.0) {
    // do something
    } else {
    // do something else
    }
    } else {
    console.log("Error:", err_message);
    }
    }
    );
    };

    ////////////////////////////////////////////////////////////////////////////////////////////
    Timer.set(1000*10, true, timerHandler,null);
    ////////////////////////////////////////////////////////////////////////////////////////////

    Vielen DANK für Deine Unterstützung, ebenso DANK an OSTFRIESE, HighFive & NORDLICHT_2023!

    THx, ein777er

    Dear All!

    Ich habe basierend auf den Scripts von 'OSTFRIESE' und 'HighFive' versucht ein Script zu erstellen, welches mir die Solarpumpe einschaltet, wenn die Temperatur der Solaranlage größer als jene im Boiler ist. Die Temperatur der Solaranlage kommt von einem PT1000 und die Temperatur des Boilers von einem DS18B20. Der PT1000 hängt via Messwandler am Analog Eingang des Shelly Plus Add-on und der DS18B20 am digitalen Eingang. Das Add-on steckt auf einem Shelly 1 Gen3.

    Wenn ich folgende Scripte laufen lasse, bekomme ich folgende Fehlermeldung: Uncaught InternalError: Too many scopes removed (ist ein Internal Interpreter Error)

    Dieser Fehler tritt bei beiden Scripts jedoch nur dann auf, wenn ich den Analogeingang abfrage. Mit zwei digitalen Eingängen funktioniert das Script fehlerfrei, ebenso mit einem digitalen und einen Fixwert für temp_outside.

    -> temp_outside = Shelly.getComponentStatus('Input', Config.id_outside).percent;

    -> tempOutside = Shelly.getComponentStatus('Input', 100).percent;

    Der analoge Wert wird am Shelly korrekt angezeigt und ebenso in der Console angezeigt

    Code
    shelly_notification:164 Status change of input:100: {"percent":65.65,"xpercent":65.65}
    Code
    shelly_notification:164 Status change of temperature:100: {"tC":46.62,"tF":115.92}


    Kann mir da bitte jemand weiterhelfen.

    Thx, ein777er

    -------

    //GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
    //More information: https://www.gnu.org/licenses/gpl-3.0.txt
    //ABSOLUTELY NO WARRANTY!!!
    //Made by Ostfriese

    //############################## Config ############################
    let Config = {
    temp_diff : 0.5,
    temp_min : 12,
    id_inside : 100,
    id_outside: 100,
    relay : 0,
    interval : 10 // 2 seconds is the minimum interval
    }
    //############################## Config end ############################

    function watch() {
    temp_inside = Shelly.getComponentStatus('Temperature', Config.id_inside).tC;
    temp_outside = Shelly.getComponentStatus('Input', Config.id_outside).percent;
    //inside <= outside
    if (temp_inside >= temp_outside) {
    Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'});
    print('Relay(', Config.relay, ') off. Inside temp <= ', temp_outside);
    };
    }

    Timer.set(10000,true,watch);


    -----------

    /// Temperature Control Fan V1.0
    ////////////////////////////////////////////////////////////////////////////////////////////
    ///
    /// Created by HighFive © 2024
    ///
    ////////////////////////////////////////////////////////////////////////////////////////////
    // log = 1; // If no console log needed please set log to "0"
    ////////////////////////////////////////////////////////////////////////////////////////////
    function timerHandler() {
    ////////////////////////////////////////////////////////////////////////////////////////////
    ///tempOutside = Shelly.getComponentStatus('Input', 100).percent; // temperatur outside
    tempOutside = 70;
    tempInside = Shelly.getComponentStatus('Temperature', 100).tC; // temperatur inside
    log = 1;
    ////////////////////////////////////////////////////////////////////////////////////////////
    /// Control switching fan
    ////////////////////////////////////////////////////////////////////////////////////////////
    Shelly.call("Switch.set", {
    'id': 0,
    'on': ((tempOutside > tempInside))
    // 'on': ((Shelly.getComponentStatus('input:100').percent) > (Shelly.getComponentStatus('Temperature', 100).tC))
    });
    ////////////////////////////////////////////////////////////////////////////////////////////
    /// All 1 second print all temperatur sensors and state of the relay to console window
    ////////////////////////////////////////////////////////////////////////////////////////////
    if (log != 0) {
    // print('Outside temperature: ', (Shelly.getComponentStatus('input:100').percent) + ' °C / Inside temperature: ' + (Shelly.getComponentStatus('Temperature', 100).tC) +
    // ' °C / State fan: ' + Shelly.getComponentStatus('switch', 0).output);
    print('Outside temperature: ', tempOutside + ' °C / Inside temperature: ' + tempInside +
    ' °C / State fan: ' + Shelly.getComponentStatus('switch', 0).output);
    print('*******************************************************************************************************');
    };
    };
    ////////////////////////////////////////////////////////////////////////////////////////////
    ///
    ////////////////////////////////////////////////////////////////////////////////////////////
    Timer.set(10000, true, timerHandler,null);
    ////////////////////////////////////////////////////////////////////////////////////////////