NEWS


  • Ich versuche mich bereits seit einigen Tagen daran den Batteriestatus meiner Homematic-Geräte abzufragen und daraus einen Systemstatus zu generieren den ich dann wieder im VIS anzeigen möchte.

    Ich habe einen z.B. Status BatterieStatusFensterOk erstellt der true oder false sein soll, des lasse ich mir im VIS anzeigen. Nur funktioniert das so wie ich es mache nicht mit dem umschalten. Ich habe bisher versucht:

    schedule("* * * * * *", function () {
    
    // Büro
            var Fenster_EDVFFB_Dach01 = getState('hm-rpc.1.NEQ0627501.0.LOWBAT').val;
              if (Fenster_EDVFFB_Dach01) {
                 setState("System.BatterieStatusFensterOk", false);
              } else if (!Fenster_EDVFFB_Dach01) {
                 setState("System.BatterieStatusFensterOk", true);
              }
            var Fenster_EDVFFB_Dach02 = getState('hm-rpc.1.NEQ0627514.0.LOWBAT').val;
              if (Fenster_EDVFFB_Dach02) {
                 setState("System.BatterieStatusFensterOk", false);
              } else if (!Fenster_EDVFFB_Dach02) {
                 setState("System.BatterieStatusFensterOk", true);
              }
            var Fenster_EDVFFB_Dach03 = getState('hm-rpc.1.NEQ0627595.0.LOWBAT').val;
              if (Fenster_EDVFFB_Dach03) {
                 setState("System.BatterieStatusFensterOk", false);
              } else if (!Fenster_EDVFFB_Dach03) {
                 setState("System.BatterieStatusFensterOk", true);
              }
            var Fenster_EDVFFB_1OG = getState('hm-rpc.1.NEQ0063954.0.LOWBAT').val;
              if (Fenster_EDVFFB_1OG) {
                 setState("System.BatterieStatusFensterOk", false);
              } else if (!Fenster_EDVFFB_1OG) {
                 setState("System.BatterieStatusFensterOk", true);
              }
           var Wandthermostat_EDVFFB = getState('hm-rpc.1.OEQ0578298.0.LOWBAT').val;
              if (Wandthermostat_EDVFFB) {
                 setState("System.BatterieStatusHeizungOk", false);
              } else if (!Wandthermostat_EDVFFB) {
                 setState("System.BatterieStatusHeizungOk", true);
              }
           var Heizung_EDVFFB = getState('hm-rpc.1.OEQ2633740.0.LOWBAT').val;
              if (Heizung_EDVFFB) {
                 setState("System.BatterieStatusHeizungOk", false);
              } else if (!Heizung_EDVFFB) {
                 setState("System.BatterieStatusHeizungOk", true);
              }
            var Lichttaster_EDVFFB_2OG = getState('hm-rpc.1.MEQ0444933.0.LOWBAT').val;
              if (Lichttaster_EDVFFB_2OG) {
                 setState("System.BatterieStatusOk", false);
              } else if (!Lichttaster_EDVFFB_2OG) {
                 setState("System.BatterieStatusOk", true);
              }
            var Lichttaster_EDVFFB_1OG = getState('hm-rpc.1.MEQ0444892.0.LOWBAT').val;
              if (Lichttaster_EDVFFB_1OG) {
                 setState("System.BatterieStatusOk", false);
              } else if (!Lichttaster_EDVFFB_1OG) {
                 setState("System.BatterieStatusOk", true);
              }
    
    });
    

    Funktioniert leider nicht wie gewünscht. Alternativ habe ich noch versucht

    schedule("* * * * * *", function () {
    var status=!(getState("hm-rpc.1.NEQ0063951.0.LOWBAT").val || getState("hm-rpc.1.NEQ0627517.0.LOWBAT").val) || getState('hm-rpc.1.NEQ0064004.0.LOWBAT').val;;
        setState("System.BatterieStatusFensterOk", status);
    });
    

    Funktioniert nur bei 2 Geräten. Die Abfrage jede Sekunde ist nur testweise, wird wenns läuft auf 15 Minuten geändert.

    Was mache ich falsch bzw. hat jemand einen Tip für mich?

    Ich möchte es nicht über die CCU machen da ich zukünftig alles über den ioBroker steuern will, das ist übersichtlicher....

    Grüße
    Norbert


  • @funcarv3r
    Für solche Abfragen gibt es den $Selector.

    const idsLOWBAT = $('hm-rpc.1.*.0.LOWBAT');
    
    function lowbatt() {
       let ok = true;
       idsLOWBAT.each(function(id, i) {
          if(getState(id).val) {
             ok = false;
             break;
          }
       }
       setState("System.BatterieStatusFensterOk", ok, true);
    }
    
    lowbatt(); // Script start
    
    idsLOWBAT.on(lowbatt);
    

  • @paul53
    Hm, muss mich da mal einlesen was den $Selector angeht, ich muss hier weiter filtern auf Gewerke da ich unterscheiden will nach Fenster, Heizung und sonstigenGeräten wie z.B. Bewegungsmeldern.

    Bei dem Script von dir bekomme ich nur leider einen Fehler:

    javascript.0 (601) script.js.common.BatterieStatusOk_Test2 compile failed: at script.js.common.BatterieStatusOk_Test2:10
    

    in Zeile 10 steht der break;



  • @funcarv3r in diesem script gibt es beispiele für selektoren und homematic - https://forum.iobroker.net/topic/28789/script-fürtabelle-der-batterie-zustände


  • @funcarv3r sagte:

    in Zeile 10 steht der break;

    Dann lass die Zeile weg.

Suggested Topics

1.9k
Online

38.3k
Users

43.7k
Topics

611.0k
Posts