NEWS

Gelöst: On Change



  • Hallo ich habe einen Artikel gefunden, der die Verwendung von Globalen Variablen beschreibt.
    Ich habe von Paul53 folgendes geklaut:

    function variablen_holen() {
    var vAußenTemperatur = getState("hm-rpc.2.00185BE98B3FCA.1.ACTUAL_TEMPERATURE").val;
    var vTemperatur = getState("hm-rpc.0.OEQ0128317.1.TEMPERATURE").val;  //Wintergarten
    var vLux = getState("hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION").val; //LUX Wetterstation
    var vLuxInnen = getState("hm-rpc.2.000D58A9915658.1.CURRENT_ILLUMINATION").val; //LUX Wintergarten
    var vRegen = getState("hm-rpc.2.00185BE98B3FCA.1.RAINING").val;
    var vWind = getState("hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED").val;
    var vAnwesenheit = getState("javascript.0.Anwesenheitssteuerung.Userlist.JemandDa").val;
    
    return {
      AußenTemperatur: vAußenTemperatur,
      Temperatur: vTemperatur,
      Lux: vLux,
      LuxInnen: vLuxInnen,
      Regen: vRegen,
      Anwesenheit: vAnwesenheit,
      Wind: vWind,
        };
    }
    
    var variablen = variablen_holen();
    var Temperatur = variablen.Temperatur;
    var Regen = variablen.Regen;
    var Wind = variablen.Wind;
    var Lux = variablen.Lux;
    var Anwesenheit = variablen.Anwesenheit;
    

    Die variablen enthalten auch Werte. Ich möchte das mein Script auf "Temperatur" Änderung reagiert.

    var variablen = variablen_holen();
    var Temperatur = variablen.Temperatur;
    var Regen = variablen.Regen;
    var Wind = variablen.Wind;
    var Lux = variablen.Lux;
    var Anwesenheit = variablen.Anwesenheit;
    const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp
    var SW_Temp = getState(idSW_Temp).val;
    log(Temperatur);
    on({ id: Temperatur, change: 'any' }, function () {
        if (Temperatur <= SW_Temp) {
            log("ist kleiner");
            setState("javascript.0.Garten.Markisse.Bedingung_2", 0)
        } else { setState("javascript.0.Garten.Markisse.Bedingung_2", 1)
         log("ist größer"); };
    });
    

    Leider reagiert das Script nicht. Wo ist der fehler?
    Gruß
    Michael


  • Forum Testing

    @michihorn pack mal in code-tags...das lässt sich nur schwer lesen



  • @michihorn sagte in On Change:

    if (Temperatur <= SW_Temp)

    wo ist die Variable/Datenpunkt?

    bitte scripte/logs und co in die Tags (</>) packen ... ist leichter zu lesen 😉



  • @harrym hab ich



  • @michihorn

    if (Temperatur <= SW_Temp) <== wo hast du die Variable?



  • @harrym hab die VAR noch mal mit angefügt
    Aktuell ist die Temperatur 30 und SW_Temp 27

    Normalerweise sollte "on({ id: Temperatur, change: 'any' }, function () {" bei Änderung triggern, tut s aber nicht



  • @michihorn du triggerst auf ne variable?



  • @harrym das war der Plan. Sobald sich der Wert der VAR ändert soll das Script laufen.



  • @michihorn schreib die variable in nen datenpunkt und trigger dann auf den datenpunkt



  • @harrym Ich habe ja extra mit den globalen Variablen experimentiert, so das ich nicht noch weitere DP anlegen muß, denn der DP ist ja über RPC2 angelegt. Um Schreibkram beim Programmieren zu minimieren wollte ich die Globalen Variablen nutzen



  • @michihorn sagte:

    Um Schreibkram beim Programmieren zu minimieren wollte ich die Globalen Variablen nutzen

    Man kann trotzdem nicht auf einen Wert triggern, sondern nur auf eine ID. Ändere es besser in eine Funktion ids_holen();

    function ids_holen() {
      let idAußenTemperatur = "hm-rpc.2.00185BE98B3FCA.1.ACTUAL_TEMPERATURE";
      let idTemperatur ="hm-rpc.0.OEQ0128317.1.TEMPERATURE";  //Wintergarten
      let idLux = "hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION"; //LUX Wetterstation
      let idLuxInnen = "hm-rpc.2.000D58A9915658.1.CURRENT_ILLUMINATION"; //LUX 
      Wintergarten
      let idRegen = "hm-rpc.2.00185BE98B3FCA.1.RAINING";
      let idWind = "hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED";
      let idAnwesenheit = "javascript.0.Anwesenheitssteuerung.Userlist.JemandDa";
      return {
        AußenTemperatur: idAußenTemperatur,
        Temperatur: idTemperatur,
        Lux: idLux,
        LuxInnen: idLuxInnen,
        Regen: idRegen,
        Anwesenheit: idAnwesenheit,
        Wind: idWind,
      };
    }
    


  • @paul53 Und wie nehme ich im entsprechenden Script Bezug auf die Variablen? Genau wie vorher auch?



  • @michihorn sagte:

    Bezug auf die Variablen? Genau wie vorher auch?

    Ja, nur mit dem Unterschied, dass keine Werte, sondern IDs enthalten sind.



  • @paul53 sagte in On Change:

    @michihorn sagte:

    Bezug auf die Variablen? Genau wie vorher auch?

    Ja, nur mit dem Unterschied, dass keine Werte, sondern IDs enthalten sind.

    Danke das hilft mir weiter



  • @michihorn
    Dein Script mit IDs könnte so aussehen:

    const ids = ids_holen();
    const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp
    
    on(ids.Temperatur, function (dp) {
        if (dp.state.val <= getState(idSW_Temp).val) {
            log("ist kleiner");
            setState("javascript.0.Garten.Markisse.Bedingung_2", 0)
        } else { 
            setState("javascript.0.Garten.Markisse.Bedingung_2", 1)
            log("ist größer"); };
    });
    

Log in to reply
 

Suggested Topics

2.0k
Online

32.3k
Users

39.0k
Topics

528.1k
Posts