Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Hausstatus Script

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    993

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Hausstatus Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
15 Beiträge 4 Kommentatoren 2.1k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • apollon77A Offline
    apollon77A Offline
    apollon77
    schrieb am zuletzt editiert von
    #2

    Initial ist der Wert deiner Variablen "undefined" weil du Ihnen keinen initialwert gibst. Also vor deiner Logik einmal dir Variablen auf "" (leerer Text) setzen. Dann sollte das undefined weg srin

    Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

    • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
    • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
    1 Antwort Letzte Antwort
    0
    • kmxakK Offline
      kmxakK Offline
      kmxak
      Most Active
      schrieb am zuletzt editiert von
      #3

      8-) Das wusste ich noch nicht danke dafür. Ist erledigt und funzt.

      Jetzt muss ich mir nur noch überlegen wie ich den Text formatiert bekomme damit es in der Ausagabe auch ordentlich wird.

      Noch eine kleine Extra Frage für Telegram Expterten: Mit \n kann man in eine neue Zeile wechseln dies Funktioniert aber nicht wenn ich es so mache

      Blockly Text Block mit Inhalt````
      Status Infos \n

      text: (['Status Infos \\n',ti,li].join(''))
      
      
      Edit:
      
      Hier mein aktualisiertes Script. (testweise auf unwahr da um diese zeit nix an ist :? )
      
      Läuft aber mit der Textausgabe bin ich immer noch nicht zufrieden. Hat da einer einen Tip wie ich die besser lösen kann? Sieht mir doch sehr anfänglich aus der code. :lol:
      
      >! ````
      var ti, li;
      >! ti = '';
      li = '';
      // Türen Check
      if (getState("hm-rpc.0.***.1.STATE").val == false) {
        ti = String(ti) + String('Küche');
        ti = String(ti) + String(', ');
      }
      if (getState("hm-rpc.0.***.1.STATE").val == false) {
        ti = String(ti) + String('Wohnzimmer');
        ti = String(ti) + String(', ');
      }
      if (getState("hm-rpc.0.***.1.STATE").val == false) {
        ti = String(ti) + String('Eingang');
      }
      // Licht Check
      if (getState("hm-rpc.0.***.1.STATE").val == false) {
        li = String(li) + String('Küche');
        li = String(li) + String(', ');
      }
      if (getState("hm-rpc.0.***.1.STATE").val == false) {
        li = String(li) + String('Kühlschrank');
        li = String(li) + String(', ');
      }
      if (getState("wifilight.0.***.on").val < 1) {
        li = String(li) + String('Arbeitsplatte');
      }
      sendTo("telegram.1", "send", {
          text: (['Status Lichter - ','Die Lichter: ',li.split(','),' sind noch an.','Status Türen - ','Die Türen: ',ti.split(','),' stehen noch offen.'].join(''))
      });
      

      2343_blockly.png

      Gruß Alex

      1 Antwort Letzte Antwort
      0
      • BuZZyB Offline
        BuZZyB Offline
        BuZZy
        schrieb am zuletzt editiert von
        #4

        Ich habe ein Script laufen welches alle Tür-/Fensterkontakte überwacht. Sobald ein Kontakt anschlägt, wird dieser in ein Datenpunkt geschrieben und zusätzlich die Anzahl der offenen Kontakte.

        Also wenn ich die Haustür öffne

        Welche: Haustür

        Anzahl: 1

        Oder wenn ich Schlafzimmerfenster öffne

        Welche: Schlafzimmer L, Schlafzimmer R

        Anzahl: 2

        Diese gebe ich dann einfach über Telegram wieder wenn ich schreibe "Sind fenster offen?" Dann kommt:

        Es sind alle Fenster schlossen..

        ODER

        Es sind 3 Fenster/Türen geöffnet: Schlafzimmer L, Schlafzimmer R, Haustür…....

        Such mal nach dem Lowbat Script hier im Forum, das kannst du entsprechend ganz einfach ändern auf Türkontakte.

        So sieht mein Script aus um alle Fensterkontakte zu überwachen (ohne Telegram Meldung) (Fensterkontakte sind im Gewerk "Fensterkontakte")

        createState('Watchdogs.Fenster.WieVieleSindOffen', 0);
        createState('Watchdogs.Fenster.WelcheSindOffen', " ");
        
        var cacheSelectorFENSTER  = $('channel(functions=Fensterkontakte)[state.id=*.STATE]');
        
        function countFenster(obj) {
           var textFENSTER      = [];
        
           cacheSelectorFENSTER.each(function (id, i) {
              var status = getState(id).val;
              var obj    = getObject(id);
              if (status === true) {
                 textFENSTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':')));
              }                
           }); 
        
            setState("Watchdogs.Fenster.WelcheSindOffen",     textFENSTER.join(', '));
            setState("Watchdogs.Fenster.WieVieleSindOffen",   textFENSTER.length);
        }
        cacheSelectorFENSTER.on(function(obj) {
           countFenster(obj);
        });
        schedule("0 */1 * * *", function () {
            countFenster();
        });
        

        Wenn man 25 Fensterkontakte hat wird das Script welches du verwendest ganz schön "aufgeblasen".. :)

        Gruß

        1 Antwort Letzte Antwort
        0
        • kmxakK Offline
          kmxakK Offline
          kmxak
          Most Active
          schrieb am zuletzt editiert von
          #5

          Hi danke für das Script und den denkanstoß es über Gewerke zu machen.

          Nun habe ich nur noch das Problem das ich den Namen als HM-Sec-SCo …... angezeigt bekomme und nicht als z.B Küche.

          In der Homamatic habe ich schon Namen vergeben aber irgendwie nimmt der immer die Bezeichnung.

          Kann man das ändern?

          Gruß Alex

          1 Antwort Letzte Antwort
          0
          • BuZZyB Offline
            BuZZyB Offline
            BuZZy
            schrieb am zuletzt editiert von
            #6

            Hier mal wie es bei mir in der CCU2 aussieht und die Namen in ioBroker (die automatisch übernommen werden). Wenn die Namen nicht automatisch in ioBroker aktualisiert werden mal den Homematic REGA Adapter in ioBroker neu starten und prüfen ob die Übernahme der Namen aus der CCU aktiviert ist:
            3092_screenshot_-_22.09.2017___14_43_36.png
            3092_screenshot_-_22.09.2017___14_37_23.png
            3092_screenshot_-_22.09.2017___14_34_42.png

            1 Antwort Letzte Antwort
            0
            • lobomauL Offline
              lobomauL Offline
              lobomau
              schrieb am zuletzt editiert von
              #7

              @BuZZy:

              Ich habe ein Script laufen welches alle Tür-/Fensterkontakte überwacht. Sobald ein Kontakt anschlägt, wird dieser in ein Datenpunkt geschrieben und zusätzlich die Anzahl der offenen Kontakte.

              Also wenn ich die Haustür öffne

              Welche: Haustür

              Anzahl: 1

              Oder wenn ich Schlafzimmerfenster öffne

              Welche: Schlafzimmer L, Schlafzimmer R

              Anzahl: 2

              Diese gebe ich dann einfach über Telegram wieder wenn ich schreibe "Sind fenster offen?" Dann kommt:

              Es sind alle Fenster schlossen..

              ODER

              Es sind 3 Fenster/Türen geöffnet: Schlafzimmer L, Schlafzimmer R, Haustür…....

              Such mal nach dem Lowbat Script hier im Forum, das kannst du entsprechend ganz einfach ändern auf Türkontakte.

              So sieht mein Script aus um alle Fensterkontakte zu überwachen (ohne Telegram Meldung) (Fensterkontakte sind im Gewerk "Fensterkontakte")

              createState('Watchdogs.Fenster.WieVieleSindOffen', 0);
              createState('Watchdogs.Fenster.WelcheSindOffen', " ");
              
              var cacheSelectorFENSTER  = $('channel(functions=Fensterkontakte)[state.id=*.STATE]');
              
              function countFenster(obj) {
                 var textFENSTER      = [];
                 
                 cacheSelectorFENSTER.each(function (id, i) {
                    var status = getState(id).val;
                    var obj    = getObject(id);
                    if (status === true) {
                       textFENSTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':')));
                    }                
                 }); 
              
                  setState("Watchdogs.Fenster.WelcheSindOffen",     textFENSTER.join(', '));
                  setState("Watchdogs.Fenster.WieVieleSindOffen",   textFENSTER.length);
              }
              cacheSelectorFENSTER.on(function(obj) {
                 countFenster(obj);
              });
              schedule("0 */1 * * *", function () {
                  countFenster();
              });
              

              Wenn man 25 Fensterkontakte hat wird das Script welches du verwendest ganz schön "aufgeblasen".. :)

              Gruß `
              Einfach und funktioniert super! Danke dafür!

              Bisher wurden nur die auf/zu-Kontakte betätigt. Bin mal gespannt ob es bei Fenster auf/zu/auf kipp auch so funktioniert.

              Bei mir läuft alles wie Fenter und Türen unter der Funktion "Verschluss". Das war die einzige Änderung, die ich am Script vornehmen musste.
              1146_unbenannt.jpg

              Host: NUC8i3 mit Proxmox:

              • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
              • Slave: Pi4
              1 Antwort Letzte Antwort
              0
              • BuZZyB Offline
                BuZZyB Offline
                BuZZy
                schrieb am zuletzt editiert von
                #8

                Bei Drehgriffsensoren wird es wohl nicht klappen, da das Script nur Objekte zählt wo der Wert "true" ist. Man müsste es also so anpassen, dass die Werte offen und gekippt gezählt werden, da ich aber keine Griffsensoren einsetze weiß ich nicht welche Werte für gekippt oder offen stehen. Aber die Anpassung ist easy.. Man muss halt nur wissen welcher Wert für gekippt und welcher Wert für weit offen steht und die if Abfrage entsprechend anpassen.

                Gruß

                Von unterwegs gesendet

                1 Antwort Letzte Antwort
                0
                • lobomauL Offline
                  lobomauL Offline
                  lobomau
                  schrieb am zuletzt editiert von
                  #9

                  @BuZZy:

                  Bei Drehgriffsensoren wird es wohl nicht klappen, da das Script nur Objekte zählt wo der Wert "true" ist. Man müsste es also so anpassen, dass die Werte offen und gekippt gezählt werden, da ich aber keine Griffsensoren einsetze weiß ich nicht welche Werte für gekippt oder offen stehen. Aber die Anpassung ist easy.. Man muss halt nur wissen welcher Wert für gekippt und welcher Wert für weit offen steht und die if Abfrage entsprechend anpassen.

                  Gruß

                  Von unterwegs gesendet `
                  Mal schauen ob ich es angepasst bekomme. States lauten da:

                  "0": "CLOSED",

                  "1": "TILTED",

                  "2": "OPEN"

                  Edit: ich nehme an ich muss hier anpassen:

                  if (status === true)
                  

                  sowas wie "status ungleich 0" wäre dann wohl ok.

                  Host: NUC8i3 mit Proxmox:

                  • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                  • Slave: Pi4
                  1 Antwort Letzte Antwort
                  0
                  • BuZZyB Offline
                    BuZZyB Offline
                    BuZZy
                    schrieb am zuletzt editiert von
                    #10

                    Ich würd da dann neue Datenpunkte anlegen für gekippt und weit offen. So dass man eine Übersicht hat wie viele insgesamt geöffnet sind (egal ob gekippt oder weit), wie viele gekippt und wie viele weit offen sind. So hat man eine Übersicht über alles.. Wenn du nicht weiter kommst kannst du dich gerne melden. :)

                    Gruß

                    Von unterwegs gesendet

                    1 Antwort Letzte Antwort
                    0
                    • BuZZyB Offline
                      BuZZyB Offline
                      BuZZy
                      schrieb am zuletzt editiert von
                      #11

                      @lobomau:

                      Edit: ich nehme an ich muss hier anpassen:

                      if (status === true)
                      

                      sowas wie "status ungleich 0" wäre dann wohl ok. `

                      Korrekt! :)

                      Gruß

                      Von unterwegs gesendet

                      1 Antwort Letzte Antwort
                      0
                      • lobomauL Offline
                        lobomauL Offline
                        lobomau
                        schrieb am zuletzt editiert von
                        #12

                        @Buzzy: ich habe dein oberes Script angepasst für meine Lichter. Es ist quasi 100% gleich. Es wird auch angezeigt welches Licht an, aber es wird nicht gezählt, ist immer 0. Kann ich es nicht einfach so übernehmen? So sieht es bei mir aus:

                        EDIT: paar Stunden später ist der Zähler am Funktionieren…. mal weiter beobachten.

                        createState('Watchdogs.Lichter.WieVieleSindOffen', 0);
                        createState('Watchdogs.Lichter.WelcheSindOffen', " ");
                        
                        var cacheSelectorLICHTER  = $('channel(functions=Licht)[state.id=*.STATE]');
                        
                        function countLichter(obj) {
                           var textLICHTER      = [];
                        
                           cacheSelectorLICHTER.each(function (id, i) {
                              var status = getState(id).val;
                              var obj    = getObject(id);
                              if (status === true) {
                                 textLICHTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':')));
                              }                
                           }); 
                        
                            setState("Watchdogs.Lichter.WelcheSindOffen",     textLICHTER.join(', '));
                            setState("Watchdogs.Lichter.WieVieleSindOffen",   textLICHTER.length);
                        }
                        cacheSelectorLICHTER.on(function(obj) {
                           countLichter(obj);
                        });
                        schedule("0 */1 * * *", function () {
                            countLichter();
                        });
                        

                        Host: NUC8i3 mit Proxmox:

                        • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                        • Slave: Pi4
                        1 Antwort Letzte Antwort
                        0
                        • lobomauL Offline
                          lobomauL Offline
                          lobomau
                          schrieb am zuletzt editiert von
                          #13

                          Inzwischen zählt er doch. Habe nichts geändert (außer js-controller update und damit auch iobroker neugestartet).

                          Mein Problem sind jetzt aber die Geräte von homematic IP, die haben zwei Kanäle mit STATE, die auch beide reagieren wenn Licht angehen.

                          Eine Möglichkeit wäre vielleicht wenn ich dem einen nicht mehr zuordne der Function Licht. Aber man es sicherlich auch so programmieren dass doppelte Namen nicht doppelt gezählt werden sollen.
                          1146_unbenannt.jpg

                          Host: NUC8i3 mit Proxmox:

                          • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                          • Slave: Pi4
                          1 Antwort Letzte Antwort
                          0
                          • BuZZyB Offline
                            BuZZyB Offline
                            BuZZy
                            schrieb am zuletzt editiert von
                            #14

                            @lobomau:

                            Inzwischen zählt er doch. Habe nichts geändert (außer js-controller update und damit auch iobroker neugestartet).

                            Mein Problem sind jetzt aber die Geräte von homematic IP, die haben zwei Kanäle mit STATE, die auch beide reagieren wenn Licht angehen.

                            Eine Möglichkeit wäre vielleicht wenn ich dem einen nicht mehr zuordne der Function Licht. Aber man es sicherlich auch so programmieren dass doppelte Namen nicht doppelt gezählt werden sollen. `

                            createState('Watchdogs.Lichter.WieVieleSindOffen', 0);
                            createState('Watchdogs.Lichter.WelcheSindOffen', " ");
                            
                            var cacheSelectorLICHTER  = $('channel(functions=Licht)[state.id=*.STATE]');
                            
                            function countLichter(obj) {
                               var textLICHTER      = [];
                            
                               cacheSelectorLICHTER.each(function (id, i) {
                                  var status = getState(id).val;
                                  var obj    = getObject(id);
                                  if (status === true && textLICHTER.indexOf(obj.common.name.substr(0, obj.common.name.indexOf(':'))) === -1) {
                                     textLICHTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':')));
                                  }                
                               }); 
                            
                                setState("Watchdogs.Lichter.WelcheSindOffen",     textLICHTER.join(', '));
                                setState("Watchdogs.Lichter.WieVieleSindOffen",   textLICHTER.length);
                            }
                            cacheSelectorLICHTER.on(function(obj) {
                               countLichter(obj);
                            });
                            schedule("0 */1 * * *", function () {
                                countLichter();
                            });
                            

                            Probier es mal da mit..

                            Gruß

                            1 Antwort Letzte Antwort
                            0
                            • lobomauL Offline
                              lobomauL Offline
                              lobomau
                              schrieb am zuletzt editiert von
                              #15

                              @BuZZy:

                              @lobomau:

                              Inzwischen zählt er doch. Habe nichts geändert (außer js-controller update und damit auch iobroker neugestartet).

                              Mein Problem sind jetzt aber die Geräte von homematic IP, die haben zwei Kanäle mit STATE, die auch beide reagieren wenn Licht angehen.

                              Eine Möglichkeit wäre vielleicht wenn ich dem einen nicht mehr zuordne der Function Licht. Aber man es sicherlich auch so programmieren dass doppelte Namen nicht doppelt gezählt werden sollen. `

                              createState('Watchdogs.Lichter.WieVieleSindOffen', 0);
                              createState('Watchdogs.Lichter.WelcheSindOffen', " ");
                              
                              var cacheSelectorLICHTER  = $('channel(functions=Licht)[state.id=*.STATE]');
                              
                              function countLichter(obj) {
                                 var textLICHTER      = [];
                                 
                                 cacheSelectorLICHTER.each(function (id, i) {
                                    var status = getState(id).val;
                                    var obj    = getObject(id);
                                    if (status === true && textLICHTER.indexOf(obj.common.name.substr(0, obj.common.name.indexOf(':'))) === -1) {
                                       textLICHTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':')));
                                    }                
                                 }); 
                              
                                  setState("Watchdogs.Lichter.WelcheSindOffen",     textLICHTER.join(', '));
                                  setState("Watchdogs.Lichter.WieVieleSindOffen",   textLICHTER.length);
                              }
                              cacheSelectorLICHTER.on(function(obj) {
                                 countLichter(obj);
                              });
                              schedule("0 */1 * * *", function () {
                                  countLichter();
                              });
                              

                              Probier es mal da mit..

                              Gruß `
                              Cool. Läuft!

                              Host: NUC8i3 mit Proxmox:

                              • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                              • Slave: Pi4
                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              724

                              Online

                              32.6k

                              Benutzer

                              82.3k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe