Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Vorlage] Generisches Fensteroffenskript + Vis

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    288

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

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

[Vorlage] Generisches Fensteroffenskript + Vis

Scheduled Pinned Locked Moved JavaScript
javascripttemplatemonitoring
768 Posts 81 Posters 230.5k Views 97 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Pittini

    @sigi234
    Hab grad alle Änderungen eingepflegt und es in den Einstellungen aktivierbar gemacht, is auf Git.

    sigi234S Online
    sigi234S Online
    sigi234
    Forum Testing Most Active
    wrote on last edited by
    #47

    @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

    @sigi234
    Hab grad alle Änderungen eingepflegt und es in den Einstellungen aktivierbar gemacht, is auf Git.

    Super. :+1:

    Könnte man ja auch auf Türen erweitern?

    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Immer Daten sichern!

    P 1 Reply Last reply
    0
    • sigi234S sigi234

      @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

      @sigi234
      Hab grad alle Änderungen eingepflegt und es in den Einstellungen aktivierbar gemacht, is auf Git.

      Super. :+1:

      Könnte man ja auch auf Türen erweitern?

      P Offline
      P Offline
      Pittini
      Developer
      wrote on last edited by
      #48

      @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

      Könnte man ja auch auf Türen erweitern?

      Wieso erweitern? Gib der Tür die Funktion Verschluss und schon wird se mitberücksichtigt.

      sigi234S 1 Reply Last reply
      0
      • P Pittini

        @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

        Könnte man ja auch auf Türen erweitern?

        Wieso erweitern? Gib der Tür die Funktion Verschluss und schon wird se mitberücksichtigt.

        sigi234S Online
        sigi234S Online
        sigi234
        Forum Testing Most Active
        wrote on last edited by
        #49

        @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

        @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

        Könnte man ja auch auf Türen erweitern?

        Wieso erweitern? Gib der Tür die Funktion Verschluss und schon wird se mitberücksichtigt.

        Habe ich, aber kann dann das Icon nicht abändern.

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Immer Daten sichern!

        P crunchipC 2 Replies Last reply
        0
        • sigi234S sigi234

          @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

          @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

          Könnte man ja auch auf Türen erweitern?

          Wieso erweitern? Gib der Tür die Funktion Verschluss und schon wird se mitberücksichtigt.

          Habe ich, aber kann dann das Icon nicht abändern.

          P Offline
          P Offline
          Pittini
          Developer
          wrote on last edited by
          #50

          @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

          Habe ich, aber kann dann das Icon nicht abändern.

          Ja, das stimmt. Die Meldungen werden auch weiterhin von Fenster sprechen. Aber das generisch zu unterschieden, würde bedeuten ne zweite Funktionsbezeichnung zu verwenden und das Skript sowie die Konfiguration massiv aufzublasen, was ich eigentlich nicht möchte.

          sigi234S 1 Reply Last reply
          0
          • P Pittini

            @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

            Habe ich, aber kann dann das Icon nicht abändern.

            Ja, das stimmt. Die Meldungen werden auch weiterhin von Fenster sprechen. Aber das generisch zu unterschieden, würde bedeuten ne zweite Funktionsbezeichnung zu verwenden und das Skript sowie die Konfiguration massiv aufzublasen, was ich eigentlich nicht möchte.

            sigi234S Online
            sigi234S Online
            sigi234
            Forum Testing Most Active
            wrote on last edited by
            #51

            @Pittini

            Ist ok....Kein Problem. Danke.:smirk:

            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
            Immer Daten sichern!

            1 Reply Last reply
            0
            • T Offline
              T Offline
              Turbo
              wrote on last edited by Turbo
              #52

              Hallo,

              Habe das Script jetzt auch mal installiert. Läuft alles, vielen Dank.
              Aaaber: bei mir kommt nicht die letzte Auf/Zu Meldung, sondern die Vorletzte. Hab eben die Balkontür aufgemacht und habe die Info von gestern Abend (schließen) drin 🤔

              39B0FDD9-DCE9-442F-9791-285FFB28EAE0.jpeg

              Edit: Hat sich erledigt, nach 5 Minuten wurde es richtig angezeigt.

              Nochmal vielen Dank.

              1 Reply Last reply
              0
              • sigi234S sigi234

                @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                Könnte man ja auch auf Türen erweitern?

                Wieso erweitern? Gib der Tür die Funktion Verschluss und schon wird se mitberücksichtigt.

                Habe ich, aber kann dann das Icon nicht abändern.

                crunchipC Away
                crunchipC Away
                crunchip
                Forum Testing Most Active
                wrote on last edited by crunchip
                #53

                @sigi234 hab google dazu und auf Tür geändert

                // V1.2 vom 28.3.2020
                //Script um offene Fenster pro Raum und insgesamt zu zählen. Legt pro Raum zwei Datenpunkte an, sowie zwei Datenpunkte fürs gesamte.
                //Möglichkeit eine Ansage nach x Minuten einmalig oder zyklisch bis Fensterschließung anzugeben
                //Dynamische erzeugung einer HTML Übersichtstabelle
                //WICHTIG!!!
                //Vorraussetzungen: Den Geräten müssen Räume zugewiesen sein, sowie die Funktion "Verschluss" für jeden entsprechenden Datenpunkt zugewiesen sein.
                
                //Grundeinstellungen
                const logging = false; //Erweiterte Logs ausgeben?
                const praefix = "javascript.0.Benachrichtigung.TuerUeberwachung."; //Grundpfad für Script DPs
                const ZeitBisNachricht = 300000 // 300000 ms = 5 Minuten
                const RepeatInfoMsg = true; // Legt fest ob Ansage einmalig oder zyklisch
                const InfoMsgAktiv = true; // Legt fest ob eine Infonachricht nach x Minuten ausgegeben werden soll
                const WelcheFunktionVerwenden = "Tür"; // Legt fest nach welchem Begriff in Funktionen gesucht wird.
                const UseTelegram = false; // Sollen Nachrichten via Telegram gesendet werden?
                const UseAlexa = true; // Sollen Nachrichten via Alexa ausgegeben werden?
                const AlexaId = "xyz"; // Die Alexa Seriennummer
                const UseSayit = true; // Sollen Nachrichten via GOOGLE ausgegeben werden?
                const UseEventLog = false; // Sollen Nachrichten ins Eventlog geschreiben werden? Authorenfunktion, sollte deaktiviert werden.
                const OpenDoorListSeparator = "<br>"; //Trennzeichen für die Textausgabe der offenen Fenster pro Raum
                const DoorIsOpenWhen = ["true", "offen", "gekippt", "open", "tilted", "1", "2"]; // Hier können eigene States für offen angegeben werden, immer !!! in Kleinschreibung
                const DoorIsClosedWhen = ["false", "closed", "0"]; // können eigene States für geschlossen angegeben werden, immer !!! in Kleinschreibung
                
                //Einstellungen zur Tabellenausgabe
                const DoorOpenImg = "/icons-mfd-svg/fts_door_open.svg"; //Icon für Fenster offen
                const DoorCloseImg = "/icons-mfd-svg/fts_door.svg"; // Icon für Fenster geschlossen
                const OpenDoorColor = "red"; // Farbe für Fenster offen
                const ClosedDoorColor = "green"; // Farbe für Fenster geschlossen
                const HeadlessTable = false; // Tabelle mit oder ohne Kopf darstellen
                
                
                //Ab hier nix mehr ändern!
                
                let OpenDoorCount = 0; // Gesamtzahl der geöffneten Fenster
                const RoomOpenDoorCount = []; // Array für offene Fenster pro Raum
                let RoomsWithOpenDoors = "";
                const OpenDoorMsgHandler = []; // Objektarray für timeouts pro Raum
                const Sensor = []; //Sensoren als Array anlegen
                const SensorVal = [];//Sensorwerte als Array anlegen
                const SensorOldVal = []; //Alte Sensorwerte als Array ablegen
                const Laufzeit = []; //Timer Laufzeit pro Fenster
                const RoomList = []; // Raumlisten Array
                const RoomStateTimeStamp = [];
                let z = 0; //Zähler
                let DpCount = 0; //Zähler
                const States = []; // Array mit anzulegenden Datenpunkten
                let Funktionen = getEnums('functions');
                
                for (let x in Funktionen) {        // loop ueber alle Functions
                   let Funktion = Funktionen[x].name;
                   if (Funktion == undefined) {
                       log("Keine Funktion gefunden");
                   }
                   else {
                       if (typeof Funktion == 'object') Funktion = Funktion.de;
                       let members = Funktionen[x].members;
                       if (Funktion == WelcheFunktionVerwenden) { //Wenn Function ist Verschluss
                           for (let y in members) { // Loop über alle Verschluss Members
                               Sensor[y] = members[y];
                               let room = getObject(Sensor[y], 'rooms').enumNames[0];
                               if (typeof room == 'object') room = room.de;
                               //Datenpunkte pro Raum vorbereiten
                               States[DpCount] = { id: praefix + room + ".RoomOpenDoorCount", initial: 0, forceCreation: false, common: { read: true, write: true, name: "Anzahl der geöffneten Tueren im Raum", type: "number", def: 0 } };
                               DpCount++;
                               States[DpCount] = { id: praefix + room + ".IsOpen", initial: false, forceCreation: false, common: { read: true, write: true, name: "Tueren offen?", type: "boolean", role: "state", def: false } }; //
                               DpCount++;
                               //log(Funktion + ': ' + room);
                               if (RoomList.indexOf(room) == -1) { //Raumliste ohne Raumduplikate erzeugen
                                   RoomList[z] = room;
                                   if (logging) log("Raum " + z + " = " + RoomList[z]);
                                   z++;
                               };
                               RoomOpenDoorCount[y] = 0; // Array mit 0 initialisieren
                               Laufzeit[y] = 0; // Array mit 0 initialisieren
                           };
                       };
                   };
                };
                
                //Struktur anlegen in js.0 um Sollwert und Summenergebniss zu speichern
                //Generische Datenpunkte vorbereiten 
                States[DpCount] = { id: praefix + "AlleTuerenZu", initial: true, forceCreation: false, common: { read: true, write: true, name: "Tuer zu?", type: "boolean", role: "state", def: true } }; //
                DpCount++;
                States[DpCount] = { id: praefix + "DoorsOpen", initial: 0, forceCreation: false, common: { read: true, write: true, name: "Anzahl der geöffneten Tuer", type: "number", def: 0 } };
                DpCount++;
                States[DpCount] = { id: praefix + "RoomsWithOpenDoors", initial: "Tueren in allen Räumen geschlossen", forceCreation: false, common: { read: true, write: true, name: "In welchen Räumen sind Tueren geöffnet?", type: "string", def: "Tueren in allen Räumen geschlossen" } };
                DpCount++;
                States[DpCount] = { id: praefix + "OverviewTable", initial: "", forceCreation: false, common: { read: true, write: true, name: "Übersicht aller Räume und geöffneten Tueren", type: "string", def: "" } };
                
                //Alle States anlegen, Main aufrufen wenn fertig
                let numStates = States.length;
                States.forEach(function (state) {
                   createState(state.id, state.initial, state.forceCreation, state.common, function () {
                       numStates--;
                       if (numStates === 0) {
                           if (logging) log("CreateStates fertig!");
                           main();
                       };
                   });
                });
                
                function main() {
                   for (let x = 0; x < Sensor.length; x++) {
                       //setTimeout(function () { // Timeout setzt refresh status wieder zurück
                       SensorVal[x] = String(getState(Sensor[x]).val).toLowerCase(); // Wert von Sensor in Schleife einlesen
                       SimplyfyDoorStates(x);
                       // }, x * 100);
                   };
                   CreateTrigger();
                   CheckAllDoors(); //Bei Scriptstart alle Fenster einlesen
                   CreateOverviewTable()
                }
                
                function Meldung(msg) {
                   if (UseSayit) {
                       setState("sayit.0.tts.text",msg);
                   };
                   if (UseTelegram) {
                       sendTo("telegram.0", "send", {
                           text: msg
                       });
                   };
                   if (UseAlexa) {
                       if (AlexaId != "") setState("alexa2.0.Echo-Devices." + AlexaId + ".Commands.announcement"/*announcement*/, msg);
                   };
                   if (logging) log(msg);
                }
                
                function CreateOverviewTable() { //  Erzeugt tabellarische Übersicht als HTML Tabelle    
                   //Tabellenüberschrift und Head
                   let OverviewTable = "";
                   if (!HeadlessTable) {
                       OverviewTable = "<table style='width:100%; border-collapse: collapse; border: 0px solid black;'><caption><div style='height: 40px; padding-top: 10px; padding-bottom: 5px; font-size:1.4em; font-weight: bold;'>Fensterstatus</div></caption>";
                       OverviewTable = OverviewTable + "<thead><tr><th width='100%' style='text-align:center; height: 20px; padding-bottom: 5px;'>" + RoomsWithOpenDoors + "</th></tr></thead><tbody></tbody></table>";
                   };
                   //Tabelle der Raumdetails
                   OverviewTable = OverviewTable + "<div style='height: 100%; overflow-y:auto; overflow-x:hidden;'><table style='width:100%; border-collapse: collapse;'>";
                   OverviewTable = OverviewTable + "<thead><tr><th width='40px' style='text-align:left;'</th><th width='20px' style='text-align:center;'></th><th style='text-align:left;'></th></tr></thead><tbody>";
                
                
                   for (let x = 0; x < RoomList.length; x++) { //Alle Räume durchgehen
                
                       if (RoomOpenDoorCount[x] > 0) { // Räume mit offenen Fenstern
                           RoomStateTimeStamp[x] = formatDate(getState(praefix + RoomList[x] + ".IsOpen").lc, "SS:mm:ss TT.MM.JJJJ")
                           OverviewTable = OverviewTable + "<tr><td style='border: 1px solid black; background-color:" + OpenDoorColor + ";'><img height=40px src='" + DoorOpenImg + "'></td>"
                           OverviewTable = OverviewTable + "<td style='border: 1px solid black; padding-left: 10px; padding-right: 10px; font-size:1.1em; font-weight: bold; text-align:center;background-color:" + OpenDoorColor + ";'>" + RoomOpenDoorCount[x] + "</td>"
                           OverviewTable = OverviewTable + "<td style='border: 1px solid black; padding-left: 10px; padding-right: 10px; font-size:1.1em; font-weight: bold; background-color:" + OpenDoorColor + ";'>" + RoomList[x] + "<br><div style='font-size:0.8em; font-weight:bold;'>geöffnet: " + RoomStateTimeStamp[x] + "</div></td></tr>"
                       }
                       else { // Geschlossene Räume
                           RoomStateTimeStamp[x] = formatDate(getState(praefix + RoomList[x] + ".IsOpen").lc, "SS:mm:ss TT.MM.JJJJ")
                           OverviewTable = OverviewTable + "<tr><td style='border: 1px solid black; background-color:" + ClosedDoorColor + ";'><img height=40px src='" + DoorCloseImg + "'></td>"
                           OverviewTable = OverviewTable + "<td style='border: 1px solid black; padding-left: 10px; padding-right: 10px; font-size:1.1em; font-weight: bold; text-align:center; background-color:" + ClosedDoorColor + ";'>" + RoomOpenDoorCount[x] + "</td>"
                           OverviewTable = OverviewTable + "<td style='border: 1px solid black; padding-left: 10px; padding-right: 10px; font-size:1.1em; font-weight: bold; background-color:" + ClosedDoorColor + ";'>" + RoomList[x] + "<br><div style='font-size:0.7em; font-weight:normal;'>geschlossen: " + RoomStateTimeStamp[x] + "</div></td></tr>"
                
                       };
                   };
                   OverviewTable = OverviewTable + "</tbody></table></div>";
                   setState(praefix + "OverviewTable", OverviewTable);
                   //log(OverviewTable);
                }
                
                function CreateRoomsWithOpenDoorList() { //Erzeugt Textliste mit Räumen welche geöffnete Fenster haben
                   RoomsWithOpenDoors = ""; //Liste Initialisieren
                   for (let x = 0; x < RoomList.length; x++) { //Alle Räume durchgehen
                       if (RoomOpenDoorCount[x] > 0) { // Nur Räume mit offenen Fenstern berücksichtigen
                           if (RoomOpenDoorCount[x] == 1) { //Wenn 1 Fenster offen, Singular Schreibweise
                               RoomsWithOpenDoors = RoomsWithOpenDoors + RoomList[x] + " " + RoomOpenDoorCount[x] + " offene Tuer" + OpenDoorListSeparator;
                           }
                           else { //ansonsten Plural Schreibweise
                               RoomsWithOpenDoors = RoomsWithOpenDoors + RoomList[x] + " " + RoomOpenDoorCount[x] + " offene Tueren" + OpenDoorListSeparator;
                           };
                       };
                   };
                   RoomsWithOpenDoors = RoomsWithOpenDoors.substr(0, RoomsWithOpenDoors.length - OpenDoorListSeparator.length); //letzten <br> Umbruch wieder entfernen
                
                   if (RoomsWithOpenDoors == "") {
                       RoomsWithOpenDoors = "Alle Tueren sind geschlossen";
                   };
                   setState(praefix + "RoomsWithOpenDoors", RoomsWithOpenDoors);
                   if (logging) log(RoomsWithOpenDoors);
                }
                
                function GetRoom(x) { // Liefert den Raum von Sensor x
                   if (logging) log("Reaching GetRoom x=" + x)
                   let room = getObject(Sensor[x], 'rooms').enumNames[0];
                   if (room == undefined) {
                       log("Kein Raum definiert bei Sensor " + Sensor[x], 'error');
                       return "Kein Raum definiert";
                   };
                   if (typeof room == 'object') room = room.de;
                   return room;
                }
                
                function CheckDoor(x) { //Für einzelnes Fenster. Via Trigger angesteuert.
                   let TempRoom = GetRoom(x); //Raum des aktuellen Sensors bestimmen
                   let TempRoomIndex = RoomList.indexOf(TempRoom); // Raumlistenindex für aktuellen Raum bestimmen
                   if (logging) log("reaching CheckDoor, SensorVal[" + x + "]=" + SensorVal[x] + " SensorOldVal=" + SensorOldVal[x] + " TempRoom=" + TempRoom)
                   if (SensorVal[x] == "open" && SensorOldVal[x] != "open") { //Fenster war geschlossen und wurde geöffnet
                       OpenDoorCount++;
                       RoomOpenDoorCount[TempRoomIndex]++;
                       if (logging) log("RoomOpenDoorCount für " + TempRoom + "=" + RoomOpenDoorCount[TempRoomIndex]);
                       setState(praefix + "AlleTuerenZu", false);
                       setState(praefix + TempRoom + ".IsOpen", true);
                       setState(praefix + "DoorsOpen", OpenDoorCount);
                       setState(praefix + TempRoom + ".RoomOpenDoorCount", RoomOpenDoorCount[TempRoomIndex]);
                
                       if (logging) log(TempRoom + " Tuer geöffnet");
                       if (UseEventLog == true) WriteEventLog(TempRoom + " Tuer geöffnet!");
                       if (RoomOpenDoorCount[TempRoomIndex] == 1) {
                           Laufzeit[TempRoomIndex] = 0;
                           if (InfoMsgAktiv == true) {
                               if (RepeatInfoMsg == true) { // Wenn Intervallmeldung eingestellt Interval starten und Dauer bei Ansage aufaddieren
                                   if (logging) log("Setting Interval to Room:" + TempRoom);
                
                                   OpenDoorMsgHandler[TempRoomIndex] = setInterval(function () {
                                       Laufzeit[TempRoomIndex] = Laufzeit[TempRoomIndex] + ZeitBisNachricht;
                                       Meldung(TempRoom + "tuer seit " + Laufzeit[TempRoomIndex] / 1000 / 60 + " Minuten geöffnet!");
                                   }, ZeitBisNachricht);
                               }
                               else { // Wenn einmalige Meldung eingestellt
                                   if (logging) log("Setting Timeout to Room:" + TempRoom);
                
                                   OpenDoorMsgHandler[TempRoomIndex] = setTimeout(function () {
                                       Meldung(TempRoom + "tuer seit " + ZeitBisNachricht / 1000 / 60 + " Minuten geöffnet!");
                                   }, ZeitBisNachricht);
                               };
                           };
                       };
                   }
                   else if (SensorVal[x] == "closed") {
                       if (OpenDoorCount > 0) OpenDoorCount--;
                       if (RoomOpenDoorCount[TempRoomIndex] > 0) RoomOpenDoorCount[TempRoomIndex]--;
                
                       setState(praefix + "DoorsOpen", OpenDoorCount);
                       setState(praefix + TempRoom + ".RoomOpenDoorCount", RoomOpenDoorCount[TempRoomIndex]);
                
                       log(TempRoom + " Tuer geschlossen.");
                       if (UseEventLog == true) WriteEventLog(TempRoom + " Tuer geschlossen!");
                       if (RoomOpenDoorCount[TempRoomIndex] == 0) {
                           setState(praefix + TempRoom + ".IsOpen", false);
                
                           if (RepeatInfoMsg == true) {
                               if (logging) log("reaching clearInterval - [x] = " + [x] + " TempRoomIndex= " + TempRoomIndex);
                               clearInterval(OpenDoorMsgHandler[TempRoomIndex]);
                           }
                           else {
                               if (logging) log("reaching clearTimeout");
                               clearTimeout(OpenDoorMsgHandler[TempRoomIndex]);
                           };
                       };
                
                       if (OpenDoorCount == 0) { //Wenn kein Fenster mehr offen
                           setState(praefix + "AlleTuerenZu", true);
                           setState(praefix + TempRoom + ".IsOpen", false);
                           log("Alle Tueren geschlossen.");
                       };
                   };
                   if (logging) log("Offene Tueren gesamt= " + OpenDoorCount);
                   CreateRoomsWithOpenDoorList();
                   CreateOverviewTable();
                }
                
                function CheckAllDoors() { //Prüft bei Programmstart alle Fenster
                   for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                       let TempRoom = GetRoom(x);
                       let TempRoomIndex = RoomList.indexOf(TempRoom);
                       if (SensorVal[x] == "open") { //Fenster is offen
                           OpenDoorCount = OpenDoorCount + 1;
                           RoomOpenDoorCount[TempRoomIndex] = RoomOpenDoorCount[TempRoomIndex] + 1;
                           if (logging) log("Temproom= " + TempRoom + " TempRoomIndex= " + RoomList.indexOf(TempRoom) + "  RoomOpenDoorcount= " + RoomOpenDoorCount[TempRoomIndex]);
                
                           setState(praefix + "AlleTuerenZu", false);
                           setState(praefix + "DoorsOpen", OpenDoorCount);
                
                           setState(praefix + TempRoom + ".IsOpen", true);
                           setState(praefix + TempRoom + ".RoomOpenDoorCount", RoomOpenDoorCount[TempRoomIndex]);
                           if (InfoMsgAktiv == true && RoomOpenDoorCount[RoomList.indexOf(TempRoom)] == 1) {
                               if (RepeatInfoMsg == true) { // Wenn Intervallmeldung eingestellt Interval starten und Dauer bei Ansage aufaddieren
                                   if (logging) log("Setting Interval at initialization to Room: " + TempRoom);
                                   OpenDoorMsgHandler[TempRoomIndex] = setInterval(function () {
                                       Laufzeit[TempRoomIndex] = Laufzeit[TempRoomIndex] + ZeitBisNachricht;
                                       Meldung(TempRoom + "tuer seit " + Laufzeit[TempRoomIndex] / 1000 / 60 + " Minuten geöffnet!");
                                   }, ZeitBisNachricht);
                               }
                               else {
                                   if (logging) log("Setting Timeout at initialization to Room: " + TempRoom);
                
                                   OpenDoorMsgHandler[TempRoomIndex] = setTimeout(function () { // Wenn einmalige Meldung eingestellt
                                       Meldung(TempRoom + "tuer seit " + ZeitBisNachricht / 1000 / 60 + " Minuten geöffnet!");
                                   }, ZeitBisNachricht);
                               };
                           };
                           if (logging) log(TempRoom + " Tuer = geöffnet");
                       }
                       else if (SensorVal[x] == "closed") {
                           //RoomOpenDoorCount[TempRoomIndex] = getState(praefix + TempRoom + ".RoomOpenDoorCount").val - 1;
                           RoomOpenDoorCount[TempRoomIndex]--;
                           if (RoomOpenDoorCount[TempRoomIndex] < 0) RoomOpenDoorCount[TempRoomIndex] = 0;
                           setState(praefix + TempRoom + ".IsOpen", false);
                           setState(praefix + TempRoom + ".RoomOpenDoorCount", RoomOpenDoorCount[TempRoomIndex]);
                           //log(TempRoom + " Fenster = geschlossen.");
                       };
                   };
                   if (OpenDoorCount == 0) {
                       setState(praefix + "AlleTuerenZu", true);
                       setState(praefix + "DoorsOpen", OpenDoorCount);
                
                       log("Alle Tueren geschlossen.");
                   };
                   CreateRoomsWithOpenDoorList();
                }
                
                function SimplyfyDoorStates(x) { //Die verschiedenen Gerätestates zu open oder close vereinfachen
                   //log("Sensor "+Sensor[x]+" mit Wert "+ SensorVal[x]+ " hat Typ " + typeof(SensorVal[x] ));
                   if (DoorIsOpenWhen.indexOf(SensorVal[x]) != -1) { // Suche in Fensteroffenarray, wenn gefunden, Status auf open setzen
                       SensorVal[x] = "open";
                   }
                   else if (DoorIsClosedWhen.indexOf(SensorVal[x]) != -1) { // Suche in Fenstergeschlossenarray, wenn gefunden, Status auf closed setzen
                       SensorVal[x] = "closed";
                   };
                
                   if (SensorVal[x] != "open" && SensorVal[x] != "closed") { // Suche in Fensteroffenarray und Fenstergeschlossenarray, wenn nirgends gefunden, Status auf closed setzen und Logwarnung ausgeben
                       log("Unknown Doorstate " + SensorVal[x] + " detected at " + Sensor[x] + ", please check your configuration", "warn");
                       SensorVal[x] = "unknown";
                   };
                
                   if (DoorIsOpenWhen.indexOf(SensorOldVal[x]) != -1) {
                       SensorOldVal[x] = "open";
                   }
                   else if (DoorIsClosedWhen.indexOf(SensorOldVal[x]) != -1) {
                       SensorOldVal[x] = "closed";
                   };
                }
                
                function CreateTrigger() {
                   //Trigger für Sensoren erzeugen
                   for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                       on(Sensor[x], function (dp) { //Trigger in Schleife erstellen
                           if (logging) log("Trigger= " + x + " Wert= " + dp.state.val + " Alter Wert= " + dp.oldState.val);
                           if (dp.channelId.search(praefix) == -1) { //Ausschliessen dass das Scriptverzeichnis zum Triggern verwendet wird
                               SensorVal[x] = String(dp.state.val).toLowerCase(); // Alles in String und Kleinschreibweise wandeln
                               SensorOldVal[x] = String(dp.oldState.val).toLowerCase(); // Alles in String und Kleinschreibweise wandeln
                               SimplyfyDoorStates(x);
                               CheckDoor(x);
                           }
                           else {
                               log("Fehler, Datenpunkt im Scriptverzeichnis als Trigger definiert", "error");
                           };
                       });
                   };
                
                   onStop(function () { //Bei Scriptende alle Timer löschen
                       for (let x = 1; x < Sensor.length; x++) {
                           if (RoomOpenDoorCount[x] == 0) {
                               if (RepeatInfoMsg == true) {
                                   clearInterval(OpenDoorMsgHandler[x]);
                               }
                               else {
                                   clearTimeout(OpenDoorMsgHandler[x]);
                               };
                           };
                
                       };
                   }, 100);
                }
                

                umgestiegen von Proxmox auf Unraid

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  Pittini
                  Developer
                  wrote on last edited by
                  #54

                  Wens interessiert, ähhlich aufgebautes Baterieüberwachungsskript mit vielen Features is jetzt auch online:

                  Forumthread:
                  https://forum.iobroker.net/topic/31676/vorlage-generische-batteriestandsüberwachung-vis-ausgabe

                  Git:
                  https://github.com/Pittini/iobroker-Batterienauswertung

                  1 Reply Last reply
                  1
                  • M Online
                    M Online
                    michihorn
                    wrote on last edited by
                    #55

                    Hallöchen habe Deine letzte Version am laufen, ich bekomme aber keine Telegram Nachrichten gesendet.
                    Zeile 15 ist auf True und 119 habe ich die Instanz auf 1 angepasst
                    Gruß
                    Michael

                    P 1 Reply Last reply
                    0
                    • M michihorn

                      Hallöchen habe Deine letzte Version am laufen, ich bekomme aber keine Telegram Nachrichten gesendet.
                      Zeile 15 ist auf True und 119 habe ich die Instanz auf 1 angepasst
                      Gruß
                      Michael

                      P Offline
                      P Offline
                      Pittini
                      Developer
                      wrote on last edited by Pittini
                      #56

                      @michihorn sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                      bekomme aber keine Telegram Nachrichten gesendet.

                      Logging in den Optionen aktivieren. Fenster aufmachen, die eingestellte Wartezeit warten, ins log schauen. Is dort dann ne Meldung zu finden, liegts an Deinem Telegram (oder Du hast beim Ändern der Instanz z.B. versehentlich nen Punkt weggemacht). Wenn nicht, nochmal hier melden und das log posten, sowie nen Screenshot Deiner Einstellungen.

                      1 Reply Last reply
                      0
                      • T Offline
                        T Offline
                        Tirador
                        wrote on last edited by Tirador
                        #57

                        @Pittini Vielen Dank für das schöne Skript.

                        Was mir noch fehlt:

                        Kannst Du bitte in deinem Skript oben im Kommentar einen Link auf die Github Seite und das IOBroker Forum machen.
                        Ich schaue zyklisch alle Skripte aus dem Forum durch und versuche dann updzudaten.
                        Ein Link im Skript ist hilfreich, damit ich die Informationen nicht redundant vorhalten muss.

                        Toll wären auch Datenpunkte für diejenigen Fenster, die länger offen sind.

                        Eine Unterscheidung zwischen Fenstern und Türen in den States.
                        Hintergrund: Bei mir ist es kritischer, wenn eine Tür offen ist, statt ein Fenster auf Kipp.
                        Ich habe leider keine Sensoren, die gekippt und offen unterscheiden können.

                        P 1 Reply Last reply
                        0
                        • T Tirador

                          @Pittini Vielen Dank für das schöne Skript.

                          Was mir noch fehlt:

                          Kannst Du bitte in deinem Skript oben im Kommentar einen Link auf die Github Seite und das IOBroker Forum machen.
                          Ich schaue zyklisch alle Skripte aus dem Forum durch und versuche dann updzudaten.
                          Ein Link im Skript ist hilfreich, damit ich die Informationen nicht redundant vorhalten muss.

                          Toll wären auch Datenpunkte für diejenigen Fenster, die länger offen sind.

                          Eine Unterscheidung zwischen Fenstern und Türen in den States.
                          Hintergrund: Bei mir ist es kritischer, wenn eine Tür offen ist, statt ein Fenster auf Kipp.
                          Ich habe leider keine Sensoren, die gekippt und offen unterscheiden können.

                          P Offline
                          P Offline
                          Pittini
                          Developer
                          wrote on last edited by
                          #58

                          @Tirador sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                          Was mir noch fehlt:
                          Kannst Du bitte in deinem Skript oben im Kommentar einen Link auf die Github Seite und das IOBroker Forum machen.

                          Kann ich mit dem nächsten update reinmachen kein Problem.

                          Toll wären auch Datenpunkte für diejenigen Fenster, die länger offen sind.

                          Das Skript basiert auf Räumen, nicht auf einzelne Fenster. Ich wüßte auch nicht was in diesen Datenpunkten rein solllte? Weißt Du denn nicht welche Fenster Du in Deinen Räumen hast?
                          Sollte es um reine Zeitangaben gehen, gugg Dir mal das heutige Update an, da wird jetzt die offen/geschlossen Zeit berechnet statt nur den Timestamp anzugeben, evtl. genügt Dir das ja schon.

                          Eine Unterscheidung zwischen Fenstern und Türen in den States.

                          Gleiches Thema wie oben, das Skript ist Raumbasiert. Es steht Dir aber natürlich frei auch Türen als "Verschluss" zu definieren, dann werden die mitberücksichtigt. Der Begriff Fenster taucht ohnehin nur noch im (abschaltbaren) Header auf.

                          1 Reply Last reply
                          0
                          • P Offline
                            P Offline
                            Pittini
                            Developer
                            wrote on last edited by
                            #59

                            Update 1.3.0 auf Git

                            9.4.20 (V 1.3.0)

                            • Add: Unterstriche werden in Meldungen nun als Leerzeichen ausgegeben. Ae, ue, oe, wird in Meldungen nun als ä, ü, ö ausgegeben.
                            • Change: offen/geschlossen Zeiten werden nicht mehr als Zeitstempel angezeigt sondern die jeweilige Dauer berechnet und minütlich aktualisiert.
                            • Add: Pro Raum konfigurierbare Lüftungsempfehlung integriert. Bei Skriptneustarts wird bereits vorhandene geschlossen Zeit berücksichtigt.
                            • Change: Tabellenfarben jetzt heller / freundlicher.
                            • Fix: Ignorieren von geöffneten Fenstern bei Skriptstart behoben, wenn diese in einem Raum mit mehreren/zweiflügeligen Fenstern waren und das geöffnete Fenster in der Aufzählung vor dem geschlossenen gelistet war.

                            fensteroffentut2b.png

                            sigi234S Dominik F.D O 3 Replies Last reply
                            1
                            • P Pittini

                              Update 1.3.0 auf Git

                              9.4.20 (V 1.3.0)

                              • Add: Unterstriche werden in Meldungen nun als Leerzeichen ausgegeben. Ae, ue, oe, wird in Meldungen nun als ä, ü, ö ausgegeben.
                              • Change: offen/geschlossen Zeiten werden nicht mehr als Zeitstempel angezeigt sondern die jeweilige Dauer berechnet und minütlich aktualisiert.
                              • Add: Pro Raum konfigurierbare Lüftungsempfehlung integriert. Bei Skriptneustarts wird bereits vorhandene geschlossen Zeit berücksichtigt.
                              • Change: Tabellenfarben jetzt heller / freundlicher.
                              • Fix: Ignorieren von geöffneten Fenstern bei Skriptstart behoben, wenn diese in einem Raum mit mehreren/zweiflügeligen Fenstern waren und das geöffnete Fenster in der Aufzählung vor dem geschlossenen gelistet war.

                              fensteroffentut2b.png

                              sigi234S Online
                              sigi234S Online
                              sigi234
                              Forum Testing Most Active
                              wrote on last edited by
                              #60

                              @Pittini

                              Nach update:

                              Screenshot (2277).png

                              Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                              Immer Daten sichern!

                              P 1 Reply Last reply
                              0
                              • P Pittini

                                Update 1.3.0 auf Git

                                9.4.20 (V 1.3.0)

                                • Add: Unterstriche werden in Meldungen nun als Leerzeichen ausgegeben. Ae, ue, oe, wird in Meldungen nun als ä, ü, ö ausgegeben.
                                • Change: offen/geschlossen Zeiten werden nicht mehr als Zeitstempel angezeigt sondern die jeweilige Dauer berechnet und minütlich aktualisiert.
                                • Add: Pro Raum konfigurierbare Lüftungsempfehlung integriert. Bei Skriptneustarts wird bereits vorhandene geschlossen Zeit berücksichtigt.
                                • Change: Tabellenfarben jetzt heller / freundlicher.
                                • Fix: Ignorieren von geöffneten Fenstern bei Skriptstart behoben, wenn diese in einem Raum mit mehreren/zweiflügeligen Fenstern waren und das geöffnete Fenster in der Aufzählung vor dem geschlossenen gelistet war.

                                fensteroffentut2b.png

                                Dominik F.D Offline
                                Dominik F.D Offline
                                Dominik F.
                                wrote on last edited by
                                #61

                                @Pittini

                                Ich hab mal die Farben von dem CSS von Uhula rausgesucht, vielleicht wäre es ja interessant die mit deinen Farben zu ersetzen. Für die, die kein CSS von Uhula nutzen ist es egal, für die die es nutzen vielleicht interessant weil sich die Farben dann nicht mehr unterscheiden .

                                const OpenWindowColor = "#f44336"; // Farbe für Fenster offen
                                const ClosedWindowColor = "#4caf50"; // Farbe für Fenster geschlossen
                                const VentWarnColor = "#ffeb3b"; // Farbe für Fenster geschlossen
                                
                                1 Reply Last reply
                                1
                                • sigi234S sigi234

                                  @Pittini

                                  Nach update:

                                  Screenshot (2277).png

                                  P Offline
                                  P Offline
                                  Pittini
                                  Developer
                                  wrote on last edited by
                                  #62

                                  @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                  Nach update:

                                  Hmm, seltsam, daran hab ich gar nix geändert seit der letzen Version. Schau mal Zeile 168+169 und spiel mit den height und padding top / bottom Angaben.
                                  Hast Du irgendwelche speziellen CSS Sachen in Deinem Projekt?

                                  @all Hat noch wer das Problem?

                                  sigi234S Dominik F.D 2 Replies Last reply
                                  0
                                  • P Pittini

                                    @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                    Nach update:

                                    Hmm, seltsam, daran hab ich gar nix geändert seit der letzen Version. Schau mal Zeile 168+169 und spiel mit den height und padding top / bottom Angaben.
                                    Hast Du irgendwelche speziellen CSS Sachen in Deinem Projekt?

                                    @all Hat noch wer das Problem?

                                    sigi234S Online
                                    sigi234S Online
                                    sigi234
                                    Forum Testing Most Active
                                    wrote on last edited by sigi234
                                    #63

                                    @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                    Hast Du irgendwelche speziellen CSS Sachen in Deinem Projekt?

                                    Ja, Uhula CSS

                                    Geht jetzt mit
                                    height: 30px; text-align:center; padding-top: 1px

                                    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                    Immer Daten sichern!

                                    P 1 Reply Last reply
                                    0
                                    • P Pittini

                                      @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                      Nach update:

                                      Hmm, seltsam, daran hab ich gar nix geändert seit der letzen Version. Schau mal Zeile 168+169 und spiel mit den height und padding top / bottom Angaben.
                                      Hast Du irgendwelche speziellen CSS Sachen in Deinem Projekt?

                                      @all Hat noch wer das Problem?

                                      Dominik F.D Offline
                                      Dominik F.D Offline
                                      Dominik F.
                                      wrote on last edited by
                                      #64

                                      @Pittini

                                      Ja, bei mir siehts genauso aus wie bei sigi234. Nutze auch Uhula CSS.

                                      1 Reply Last reply
                                      0
                                      • sigi234S sigi234

                                        @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                        Hast Du irgendwelche speziellen CSS Sachen in Deinem Projekt?

                                        Ja, Uhula CSS

                                        Geht jetzt mit
                                        height: 30px; text-align:center; padding-top: 1px

                                        P Offline
                                        P Offline
                                        Pittini
                                        Developer
                                        wrote on last edited by Pittini
                                        #65

                                        @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                        Ja, Uhula CSS

                                        Bestätigt, liegt am MD von Uhula, muß mal guggen was da reinfunkt.

                                        Geht jetzt mit
                                        height: 30px; text-align:center; padding-top: 1px

                                        Super, werd trotzdem guggen dass das im nächsten fix auch mit dem MD2 direkt läuft.

                                        sigi234S 1 Reply Last reply
                                        0
                                        • P Pittini

                                          @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                          Ja, Uhula CSS

                                          Bestätigt, liegt am MD von Uhula, muß mal guggen was da reinfunkt.

                                          Geht jetzt mit
                                          height: 30px; text-align:center; padding-top: 1px

                                          Super, werd trotzdem guggen dass das im nächsten fix auch mit dem MD2 direkt läuft.

                                          sigi234S Online
                                          sigi234S Online
                                          sigi234
                                          Forum Testing Most Active
                                          wrote on last edited by sigi234
                                          #66

                                          @Pittini sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                          @sigi234 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:

                                          Ja, Uhula CSS

                                          Bestätigt, liegt am MD von Uhula, muß mal guggen was da reinfunkt.

                                          Geht jetzt mit
                                          height: 30px; text-align:center; padding-top: 1px

                                          Super, werd trotzdem guggen dass das im nächsten fix auch mit dem MD2 direkt läuft.

                                          Danke, cool wären noch Optionen für:

                                          Font-color + Font-Family + Font-size :grinning:

                                          Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                          Immer Daten sichern!

                                          P 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          567

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe