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. JavaScript
  5. [Vorlage] Generisches Fensteroffenskript + Vis

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.0k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

[Vorlage] Generisches Fensteroffenskript + Vis

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascripttemplatemonitoring
768 Beiträge 81 Kommentatoren 220.5k Aufrufe 97 Watching
  • Ä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.
  • 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 Abwesend
    crunchipC Abwesend
    crunchip
    Forum Testing Most Active
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      Pittini
      Developer
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      1
      • M Online
        M Online
        michihorn
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            Tirador
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                Pittini
                Developer
                schrieb am zuletzt editiert von
                #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 Antworten Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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.
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    1
                    • sigi234S sigi234

                      @Pittini

                      Nach update:

                      Screenshot (2277).png

                      P Offline
                      P Offline
                      Pittini
                      Developer
                      schrieb am zuletzt editiert von
                      #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 Antworten Letzte Antwort
                      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
                        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                        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.
                          schrieb am zuletzt editiert von
                          #64

                          @Pittini

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

                          1 Antwort Letzte Antwort
                          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
                            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
                              0
                              • sigi234S sigi234

                                @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:

                                P Offline
                                P Offline
                                Pittini
                                Developer
                                schrieb am zuletzt editiert von
                                #67

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

                                Danke, cool wären noch Optionen für:
                                Font-color + Font-Family + Font-size

                                Font-color > ja; Font-Family > mal guggen; Font-size > schwierig, das blickt ja keiner mehr da 3 verschiedene Größen verwendet werden (0,7em, 0,8em und 1,1em), d.h. es müßte dann auch 3 verschiedene Angaben geben.
                                Mal sehen, vieleicht regel ich das insgesamt via Styles in denen man das einstellen kann.

                                1 Antwort Letzte Antwort
                                0
                                • sigi234S sigi234

                                  @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:

                                  P Offline
                                  P Offline
                                  Pittini
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #68

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

                                  Danke, cool wären noch Optionen für:
                                  Font-color + Font-Family + Font-size

                                  Hab ich gestern Nacht gar nicht dran gedacht, Font-Color und Font-Family hatte ich extra nicht gesetzt damit man das direkt im HTML Widget setzen kann.

                                  sigi234S 1 Antwort Letzte Antwort
                                  0
                                  • P Pittini

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

                                    Danke, cool wären noch Optionen für:
                                    Font-color + Font-Family + Font-size

                                    Hab ich gestern Nacht gar nicht dran gedacht, Font-Color und Font-Family hatte ich extra nicht gesetzt damit man das direkt im HTML Widget setzen kann.

                                    sigi234S Online
                                    sigi234S Online
                                    sigi234
                                    Forum Testing Most Active
                                    schrieb am zuletzt editiert von
                                    #69

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

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

                                    Danke, cool wären noch Optionen für:
                                    Font-color + Font-Family + Font-size

                                    Hab ich gestern Nacht gar nicht dran gedacht, Font-Color und Font-Family hatte ich extra nicht gesetzt damit man das direkt im HTML Widget setzen kann.

                                    Ja, auch gerade getestet, habe im Skript gesucht.

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

                                    1 Antwort Letzte Antwort
                                    0
                                    • P Pittini

                                      Generisches Skript um offene Fenster pro Raum und insgesamt zu zählen sowie offen/zu States anzulegen.

                                      fensteroffentut2.png

                                      • Kann beliebige Tür/Fenster Kontakte verwenden.
                                      • Berücksichtigt mehrflügelige Fenster bzw. mehrere Fenster pro Raum und zählt diese.
                                      • Legt pro Raum zwei Datenpunkte an (Raumfensteroffenzähler und Raumfensterstatus), sowie vier Datenpunkte fürs gesamte.
                                      • Möglichkeit eine Meldung/Ansage via Telegram/Alexa nach x Minuten einmalig oder zyklisch bis Fensterschließung auszugeben.
                                      • Gibt dynamische HTML Tabelle mit Übersicht aller Räume aus.
                                      • Flexibel konfigurierbar, direkt integriert sind HM, HMIP und Xiaomi Tür-/Fensterkontakte bzw. Drehgriffe

                                      Genaueres in der readme beim Projekt auf Git.

                                      sigi234S Online
                                      sigi234S Online
                                      sigi234
                                      Forum Testing Most Active
                                      schrieb am zuletzt editiert von sigi234
                                      #70

                                      @Pittini

                                      Cool wären noch:

                                      Anzeige wie lange das Fenster geöffnet wurde.
                                      Eine Liste als Log in einen DP ? ( Als Table?)

                                      Kennst du das Raumklima Skript?

                                      Screenshot (2288).png

                                      https://forum.iobroker.net/topic/2313/skript-absolute-feuchte-berechnen/450

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

                                      P 1 Antwort Letzte Antwort
                                      0
                                      • sigi234S sigi234

                                        @Pittini

                                        Cool wären noch:

                                        Anzeige wie lange das Fenster geöffnet wurde.
                                        Eine Liste als Log in einen DP ? ( Als Table?)

                                        Kennst du das Raumklima Skript?

                                        Screenshot (2288).png

                                        https://forum.iobroker.net/topic/2313/skript-absolute-feuchte-berechnen/450

                                        P Offline
                                        P Offline
                                        Pittini
                                        Developer
                                        schrieb am zuletzt editiert von Pittini
                                        #71

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

                                        Anzeige wie lange das Fenster geöffnet wurde.

                                        Verstehe nicht so ganz was Du meinst. Welches Fenster? Und was wäre bei zweiflügeligen Fenstern oder Räumen mit mehreren Fenstern?
                                        Oder meinst Du Raum? Dafür wird die Zeit ja berechnet.

                                        Eine Liste als Log in einen DP ? ( Als Table?)

                                        Auch hier ist mir nicht ganz klar was Du meinst. Log der Öffnungen/Schließungen pro Raum? Es wird doch eh alles gemeldet, brauchst doch nur ein zentrales Logskript füttern, bei mir ist das die Option "UseEventlog" aber das isn separates globales Skript welche Logs all meiner Skripte sammelt und ausgibt.

                                        Formulier doch bitte Deinen Winsch etwas konkreter, dann kann ich Dir sicher auch besser helfen, bzw. das umsetzen.

                                        Das Raumklimaskript kenn ich. Und nein, sowas werd ich garantiert nicht einbauen, mein Fensterskript soll klein und leicht verständlich/einsetzbar bleiben.

                                        sigi234S 1 Antwort Letzte Antwort
                                        0
                                        • P Pittini

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

                                          Anzeige wie lange das Fenster geöffnet wurde.

                                          Verstehe nicht so ganz was Du meinst. Welches Fenster? Und was wäre bei zweiflügeligen Fenstern oder Räumen mit mehreren Fenstern?
                                          Oder meinst Du Raum? Dafür wird die Zeit ja berechnet.

                                          Eine Liste als Log in einen DP ? ( Als Table?)

                                          Auch hier ist mir nicht ganz klar was Du meinst. Log der Öffnungen/Schließungen pro Raum? Es wird doch eh alles gemeldet, brauchst doch nur ein zentrales Logskript füttern, bei mir ist das die Option "UseEventlog" aber das isn separates globales Skript welche Logs all meiner Skripte sammelt und ausgibt.

                                          Formulier doch bitte Deinen Winsch etwas konkreter, dann kann ich Dir sicher auch besser helfen, bzw. das umsetzen.

                                          Das Raumklimaskript kenn ich. Und nein, sowas werd ich garantiert nicht einbauen, mein Fensterskript soll klein und leicht verständlich/einsetzbar bleiben.

                                          sigi234S Online
                                          sigi234S Online
                                          sigi234
                                          Forum Testing Most Active
                                          schrieb am zuletzt editiert von sigi234
                                          #72

                                          @Pittini

                                          Ok, kein Problem, belasse es einfach so. :relaxed:

                                          Habe es schon gelöst, habe ja eh ein Skript dafür.

                                          Screenshot (2290).png

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

                                          P T 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          751

                                          Online

                                          32.5k

                                          Benutzer

                                          81.6k

                                          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