NEWS
[Vorlage] Generisches Fensteroffenskript + Vis
-
Pack bitte den Log in den "Code" damit es übersichtlicher bleibt.
Dann zeigt bitte mal deine Konfiguration im Script und mach ein Screenshot von einem Fensterstate in den Objekten
Die Fehlermeldungen deuten auf falsche Einstellungen hin
-
Bitte um Entschuldigung, da dies mein erster Post hier im Forum ist. Bin daher noch nicht mit den Möglichkeiten des Forums vertraut. Hoffe, dass ich alles richtig mache.
const Skriptversion = "1.6.7" //vom 15.10.2020 - https://github.com/Pittini/iobroker-Fensterauswertung - https://forum.iobroker.net/topic/31674/vorlage-generisches-fensteroffenskript-vis //Script um offene Fenster/Türen pro Raum und insgesamt zu zählen. //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 "Fenster" bzw "Tuer" für jeden entsprechenden Datenpunkt. //Grundeinstellungen const logging = false; //Erweiterte Logs ausgeben? const praefix = "javascript.0.FensterUeberwachung."; //Grundpfad für Script DPs - Muß innerhalb javascript.x sein. const PresenceDp = "" //Pfad zum Anwesenheitsdatenpunkt, leer lassen wenn nicht vorhanden const WhichWindowFunctionToUse = "FensterStatus"; // Legt fest nach welchem Begriff in Funktionen gesucht wird. Diese Funktion nur dem Datenpunkt zuweisen, NICHT dem ganzen Channel! const WhichDoorFunctionToUse = "TuerStatus"; // Legt fest nach welchem Begriff in Funktionen gesucht wird. Diese Funktion nur dem Datenpunkt zuweisen, NICHT dem ganzen Channel! const WindowIgnoreTime = 10000; // 10000 ms = 10 Sekunden - Zeit in ms für die kurzzeitiges öffnen/schliessen ignoriert wird const DoorIgnoreTime = 1000; // 1000 ms = 1 Sekunden - Zeit in ms für die kurzzeitiges öffnen/schliessen ignoriert wird //Nachrichteneinstellungen const TimeToWindowMsg = 900000 // 300000 ms = 5 Minuten - Zyklus- bzw. Ablaufzeit für Fenster-offenwarnung/en const TimeToDoorMsg = 300000 // 300000 ms = 5 Minuten - Zyklus- bzw. Ablaufzeit für Tür-offenwarnung/en const MaxMessages = 1; //Maximale Anzahl der Nachrichten pro Raum const UseTelegram = false; // Sollen Nachrichten via Telegram gesendet werden? const UseAlexa = false; // Sollen Nachrichten via Alexa ausgegeben werden? const AlexaId = ""; // Die Alexa Seriennummer. const UseMail = false; //Nachricht via Mail versenden? const UseSay = false; // Sollen Nachrichten via Say ausgegeben werden? Autorenfunktion, muß deaktiviert werden. const UseEventLog = false; // Sollen Nachrichten ins Eventlog geschreiben werden? Autorenfunktion, muß deaktiviert werden. const NoMsgAtPresence = false; //Sollen Nachrichten bei Anwesenheit unterdrückt werden? //Tabelleneinstellungen const DoorOpenImg = "/icons-mfd-svg/fts_door_open.svg"; //Icon für Tür offen const DoorCloseImg = "/icons-mfd-svg/fts_door.svg"; // Icon für Tür geschlossen const DoorTiltedImg = "/icons-mfd-svg/fts_door_tilt.svg" // Icon für Tür gekippt const WindowOpenImg = "/icons-mfd-svg/fts_window_1w_open.svg"; //Icon für Fenster offen const WindowCloseImg = "/icons-mfd-svg/fts_window_1w.svg"; // Icon für Fenster geschlossen const WindowTiltedImg = "/icons-mfd-svg/fts_window_1w_tilt.svg" //Icon für Fenster gekippt const WindowOpenTiltedImg = "/icons-mfd-svg/fts_window_2w_open_l_tilt_r.svg" //Icon für offen und gekippt in einem Raum gleichzeitig const VentImg = "/icons-mfd-svg/vent_ventilation.svg"; //Icon für Lüftungsinfo const ImgInvert = 1; // Bildfarben invertieren? Erlaubte Werte von 0 bis 1 const OpenWindowColor = "#f44336"; // Farbe für Fenster offen const OpenDoorColor = "darkorange"; //Farbe für Tür offen const TiltedWindowColor = "#F56C62"; //Farbe für gekippte Fenster o. Tür/en const ClosedWindowColor = "#4caf50"; // Farbe für geschlossene Fenster o. Tür/en const VentWarnColor = "#ffc107"; // Farbe für Lüftungswarnung const ShowCaptionTbl = false; // Überschrift anzeigen? const ShowSummaryTbl = true; // Zusammenfassung anzeigen? const ShowDetailTbl = true; // Details anzeigen? const RoomSortMode = 1; //0= Raumliste unsortiert, 1= alpabetisch sortiert, 2= Benutzerdefinierte Sortierung //Logeinstellungen const MaxLogEntrys = 10; //Maximale Anzahl der zu speichernden Logeinträge const AutoAddTimestamp = true; //Soll den geloggten Nachrichten automatisch ein Zeitsempel zugeordnet werden? const LogTimeStampFormat = "TT.MM.JJJJ SS:mm:ss"; //Zeitformatierung für Log Zeitstempel const LogEntrySeparator = "<br>"; //Trennzeichen für Logeinträge //Ab hier nix mehr ändern! const SendVentMsg = []; const SendDoorOpenCloseMsg = []; const SendWindowOpenCloseMsg = []; const SendWindowWarnMsg = []; const SendDoorWarnMsg = []; const OpenWindowListSeparator = "<br>"; //Trennzeichen für die Textausgabe der offenen Fenster pro Raum const WindowIsOpenWhen = ["true", "offen", "open", "opened", "2"]; // Hier können eigene States für offen angegeben werden, immer !!! in Kleinschreibung const WindowIsClosedWhen = ["false", "geschlossen", "closed", "0"]; // Hier können eigene States für geschlossen angegeben werden, immer !!! in Kleinschreibung const WindowIsTiltedWhen = ["tilted", "gekippt", "1"]; // Hier können eigene States für gekippt angegeben werden, immer !!! in Kleinschreibung let OpenDoorCount = 0; // Gesamtzahl der geöffneten Türen let TiltedDoorCount = 0; // Gesamtzahl der gekippten Türen let OpenWindowCount = 0; // Gesamtzahl der geöffneten Fenster let TiltedWindowCount = 0; // Davon Anzahl der gekippten Fenster const RoomOpenCount = []; // Array für Summe geöffneter Verschlüsse pro Raum const RoomOpenDoorCount = []; // Array für Zähler offene Türen pro Raum const RoomTiltedDoorCount = []; // Array für Zähler gekippte Türen pro Raum const RoomOpenWindowCount = []; // Array für Zähler offene Fenster pro Raum const RoomTiltedWindowCount = []; // Array für Zähler gekippte Fenster pro Raum const RoomWindowMsgCount = []; //Zähler für bereits ausgegebene Fenster Warnmeldungen const RoomDoorMsgCount = []; //Zähler für bereits ausgegebene Tür Warnmeldungen let RoomHas = [] // 0=Weder Tür noch Fenster, 1 Tür, 2 Fenster, 3 Tür und Fenster const RoomsWithCombinedOpenings = []; let RoomsWithOpenings = ""; // Kombinierte Liste mit offenen Türen und Fenstern let RoomsWithOpenDoors = ""; //Liste der Räume mit offenen Türen let RoomsWithTiltedDoors = ""; //Liste der Räume mit offenen Türen let RoomsWithOpenWindows = ""; //Liste der Räume mit offenen Fenstern let RoomsWithTiltedWindows = ""; //Liste der Räume mit gekippten Fenstern let RoomsWithVentWarnings = []; //Räume mit Lüftungswarnung let RoomListOrderPriority = ""; //Sortierreihenfolge der Raumliste const OpenWindowMsgHandler = []; // Objektarray für timeouts pro Raum/Fenster const OpenDoorMsgHandler = []; // Objektarray für timeouts pro Raum/Tür const IgnoreValue = []; //Vergleichswert für IgnoreTimeout const VentMsgHandler = []; //Timeout/Intervall Objekt const VentMsg = []; //Lüftungsnachricht const Sensor = []; //Sensoren als Array anlegen let SensorType = []; //Unterscheidung zwischen Tür und Fenstersensor const SensorVal = [];//Sensorwerte als Array anlegen const SensorOldVal = []; //Alte Sensorwerte als Array ablegen const WindowWarnRuntime = []; //Timer WindowWarnRuntime pro Fenster const DoorWarnRuntime = []; //Timer DoorWarnRuntime pro Tür const VentWarnTime = []; // Array mit Zeiten nach dem eine Lüftungsempfehlung ausgegeben wird let RoomList = []; // Raumlisten Array const RoomStateTimeStamp = []; //Letzte Änderung des Fenster-Raumstatus const RoomStateTimeCount = []; // Zeitspanne seit letzter Änderung const RoomDoorStateTimeStamp = []; //Letzte Änderung des Tür-Raumstatus const RoomDoorStateTimeCount = []; // Zeitspanne seit letzter Änderung let z = 0; //Zähler let DpCount = 0; //Zähler let IsInit = true // Marker - Wird nach initialisierung auf false gesetzt const States = []; // Array mit anzulegenden Datenpunkten let Funktionen = getEnums('functions'); //Array mit Aufzählung der Funktionen let MessageLog = ""; //Log der ausgegebenen Meldungen let MuteMode = 0; //Stummschaltungsmodus für Nachrichten. 0=Alles erlaubt, 1=Sprachnachrichten deaktivieren, 2=Alles deaktivieren let Presence = true; //Anwesenheit als gegeben initialisieren const IgnoreInProcess = []; //Läuft gerade eine Überprüfung ob eine Statusänderung ignoriert werden muß? let SensorCount = 0; //Hilfszähler weil y bei mehreren Funktionen mehrmals bei 0 beginnt Ich scheitere leider im Moment daran, hier einen Screenshot einzufügen. Habe den Screenshot als .png-File vorliegen, schaffe es aber nicht ihn einzufügen. Welches "Werkzeug" muss ich wie verwenden?
-
Das hast du jetzt genau richtig gemacht!
Die icons-mfd-svg. hast du auch installiert? Sollte zwar nicht den Fehler hervorrufen, aber zur Not schließen wir mal alles aus.
Kannst du bitte noch einen Screenshot von deinen Objekten machen?
Ich würde mir gerne mal einen Channel anschauen von einem Fenster.
Hier ein Beispiel:
Wichtig ist, dass der Fensteroffenstate bei dir auch in der Funktion FensterStatus ist und der Gesamte Channel einem Raum zugewiesen ist. Ein Beispiel dafür siehst du in meinem Bild, bei mir heisst die Funktion halt nur Fenster
-
Ja, die Icons-mfd-svg habe ich installiert. Hier ist der gewünschte Screenshot vom Objekt "FK-Bad". Habe alle entsprechenden Objekte überprüft. Sie sehen alle gleich aus. Alle Fensteroffenstates liegen auch im FensterStatus und alle Tueroffenstates liegen im TuerStatus. -
javascript.0 2021-02-05 16:39:51.467 error (1461) script.js.common.Fenster_und_Türen: Kein Raum definiert bei Sensor hm-rpc.0.LEQ0758123.1.STATE
-
Diesem Sensor ist bereits ein Raum und eine Funktion zugeordnet. Er ist genauso eingerichtet wie alle andern von mir benutzten Sensoren, die alle mit dieser Einstellung funktionieren. Da es mir mit den unterschiedlichsten Einstellungen nicht gelungen ist diese Fehlermeldung zu verhindern, habe ich den Sensor deaktiviert (kein Eintrag von Raum und Funktion). Das hat immerhin den Vorteil, dass die anscheinend durch den Fehler verursachten Warn-Meldungen nun alle nicht mehr ausgegeben werden. Warum sich dieser Sensor so verhält ist mir leider nicht klar. Das Script läuft soweit ich bis jetzt erkennen kann einwandfrei. Damit ist der unter 1. angesprochene Fehler meiner Fehlermeldung erledigt. Allerdings bestehen die unter 2. aufgeführten Probleme immer noch.
Vielen Dank für Eure Hilfe. -
Ich habe die unterstrichenden Zeilen auch im Script und das Script verursacht keine Fehlermeldungen im Log, daher würde ich einfach sagen, ignoriere die einfach.
-
Moin,
würde gerne die Benutzerdefinierte Sortierung der Tabelle nutzen (RoomSortMode=2) kann aber leider keine Info dazu finden, außer die Antwort "Anleitung .6.13" die ich aber leider nicht verstehe/Finde.Des weiteren hatte ich versucht über die Raumliste "Sammelplatzhalter" zu generieren z.B. Obergeschoß, Untergeschoß und die bei den Sensoren zwei werte (Kinderzimmer, Obergeschoß) eingetragen, aber leider wertet das Skript nur den ersten Eintrag (hier: Kinderzimmer) aus. gibt es hierfür eine andere Möglichkeit die ich übersehen habe?
gruß
Matthias -
zu deiner ersten Frage:
In den Datenpunkten, die vom Skript generiert werden, hast du in jedem Raum einen Datenpunkt RoomOrderPriority, wenn du im Skript die 2 ausgewählt hast, kannst du dort Zahlen eingeben wonach die Räume geordnet werden sollen. Es dürfen da keine doppelten Zahlen angegeben werden und nach Einstellung muss das Skript neu gestartet werden.
-
@dominik-f Moin, und danke für deine Antwort. Gefunden
-
Hallo,
ich habe ja überhaupt keine Ahnung vom programmieren
Aber ich habe es geschafft, das mir Alexa auf meinen beiden Echos zeitgleich die Ansage macht.
Habe es einfach mal probiert und es funktioniert auch ohne Fehlermeldungen im LogGruß Kyocera007 (siehe Signatur)
-
@pittini
Hallo, was mir aufgefallen ist,
wenn das Fenster auf "dead" und dann geöffnet wird aktualisiert sich der Status auf "OK"
aber nicht im oberen Widget
Da scheint noch ein Bug vorzuliegen
Gruß Kyocera007
-
@kyocera007-0 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:
Da scheint noch ein Bug vorzuliegen
Naja, das Vis greift ja nur auf die Skriptdatenpunkte zurück. Die Frage ist also, was steht denn bei javascript.0.BatterieUeberwachung Klapp das mal auf und mach mir nen Screenshot.
-
@luft-post sagte in [Vorlage] Generisches Fensteroffenskript + Vis:
Moin,
würde gerne die Benutzerdefinierte Sortierung der Tabelle nutzen (RoomSortMode=2) kann aber leider keine Info dazu finden, außer die Antwort "Anleitung .6.13" die ich aber leider nicht verstehe/Finde.Des weiteren hatte ich versucht über die Raumliste "Sammelplatzhalter" zu generieren z.B. Obergeschoß, Untergeschoß und die bei den Sensoren zwei werte (Kinderzimmer, Obergeschoß) eingetragen, aber leider wertet das Skript nur den ersten Eintrag (hier: Kinderzimmer) aus. gibt es hierfür eine andere Möglichkeit die ich übersehen habe?
gruß
MatthiasMoin,
kann jemand was zu meiner Zweiten Frage sagen?Gruß
Matthias -
@luft-post sagte in [Vorlage] Generisches Fensteroffenskript + Vis:
Moin,
kann jemand was zu meiner Zweiten Frage sagen?Nein, weil ich nicht mal verstehe was Du eigentlich erreichen willst. Grundsätzlich geht das Skript davon aus, dass es zwar mehrere Sensoren pro Raum geben kann, aber schon rein physikalisch ein Sensor nicht in mehreren Räumen sein kann (Quantenverschränkungstheorien mal aussen vor).
-
@pittini
Bitte schön
-
@kyocera007-0 sagte in [Vorlage] Generisches Fensteroffenskript + Vis:
@pittini
Bitte schön
Tja, wie gedacht, das Vis macht alles richtig und das Skript auch. Auch wenn einige Batterien wieder auf ok springen, scheint da eine noch faul zu sein. Deswegen sagt das Vis das auch.
-
ok alles gut, als ich den "DeadIsAfter auf 3600" gestellt habe und das Script neu gestartet ist, war es auch OK
Gruß
-
@pittini ah, ok die Frage nicht verstanden. Ich versuche meine Frage etwas anders zu formulieren.
Ich würde gerne zusätzlich zu meiner Visualisierung eine status led (Hardware in einen anderen Raum) benutzen um Etagen weise ein oder mehrere offene Fenster zu signalisieren z.b. ein Fenster oder mehrere Fenster im Obergeschoss geöffnet (led=rot) wenn alle zu sind zeigt die led grün an. Also sowas wie eine sammelmeldung. Ich hatte versucht die betroffenen Sensoren einen Raum und einen Stockwerk zuzuordnen, was ich aber nicht hinbekommen habe, bzw. das Script hat immer nur eine Zuordnung genommen. Gibt es hierfür eine Lösung?Gruß Matthias
-
@luft-post Ok, jetzt versteh ich das. Das ist im Skript so nicht vorgesehen, deswegen klappts auch nicht. Ich seh spontan zwei Lösungsmöglichkeiten.
- Du verwendest pro Etage ne eigene Instanz vom Skript (sollte klappen ist aber nicht getestet.)
- Du verwendest ein kleines Zusatzskript welches Dir die Infos aus den einzelnen RaumDps auswertet.