NEWS
[Vorlage] Generisches Fensteroffenskript + Vis
-
@pittini Supi, herzlichsten Dank für die schnelle Antwort
-
@Pittini
Wetterstation einbinden wäre toll.
Regen und Wind als Trigger für Nachricht zum schließen -
@lolax sagte in [Vorlage] Generisches Fensteroffenskript + Vis:
@Pittini
Wetterstation einbinden wäre toll.
Regen und Wind als Trigger für Nachricht zum schließenIch denk mal drüber nach, aber mach bitte nen Issue auf Git damits nicht vergessen wird.
-
Das Script läuft jetzt bei mir 1 Jahr ohne Probleme
@Pittini vielen Dank, dass Du das so toll supportest.Eine Schönheitsfrage hätte ich doch noch:
Die Tabelle wird in vis langsam ein bisschen lang. Ist es möglich, nur die geöffneten Fenster/Türen anzuzeigen und die geschlossenen bleiben ausgeblendet? -
Wie viele Räume hast du denn? Ich dachte ich habe schon viel mit meinen 9^^ Also bei 9 Räumen nimmt die Tabelle 2/3 des Bildschirmes an meinem Handy ein, was ich noch nicht als viel oder lang empfinde.
Alternativ könntest du auch das Skript mehrmals laufen lassen, jeweils für eine Etage. Dann hast du für jede Etage eine Tabelle.
-
@dominik-f
Naja - soviel Räume sind es eigentlich nicht....
Meine Tabelle blende ich in der Haupt-View nur ein, wenn etwas auf ist. Zur besseren Übersicht wäre es mir lieber, wenn ich nur die geöffneten Fenster/Türen eingeblendet hätte. Da ja nie alles auf einmal auf ist, könnte ich den Platz unter der Tabelle besser nutzen.Ist aber jammern auf hohen Niveau - geht natürlich so auch
-
Vielleicht wäre meine Lösung mit einem Pop Up ja interessant für dich:
Hauptview:
Pop Up wenn man drauf klickt:
-
@turbo Mach bitte ein Issue auf Git. Kann ich bei der nächsten Überarbeitung evtl. mit rein bauen, wird aber dauern, jetzt is Gartenzeit
-
@pittini danke, mach ich
@Dominik-F würde evtl. auch gehen...
-
Hallo,
ich kenne mich nicht so gut aus und versuche das Skript zum laufen zu bringen. Ich habe HmIP Drehgriffsensoren und die Datenpunkte werden ja vom ioBroker automatisch angelegt. Alle Drehgriffsensoren habe ich in einem Gewerk "Fenster" zusammengefasst und sie auch noch in Verschluss und Sicherheit.
Ich lese zwar, dass für den gesamten Channel Räume und nur für den Datenpunkt der Typ Fenster zugewiesen sein soll, aber wie genau soll das gehen? Er legt das doch automatisch an, wenn ich die entsprechende rpc Instanz installiere.Bei mir sieht das also bspw. so aus:
Ist das jetzt korrekt so?
Er wirft mir massenweise Fehler aus, wenn ich das Skript starte. Bei mir heisst die Instanz rpc5 und er findet kein Fenster, sondern es erscheint bei jedem Fenster
code_text javascript.0 2021-05-01 23:33:37.622 warn (576) script.js.Fenster_zählen_2: Unknown Windowstate undefined detected at hm-rpc.5.000xxxxxxxxxxx.1, please check your configuration javascript.0 2021-05-01 23:33:37.621 warn (576) at processImmediate (internal/timers.js:463:21) javascript.0 2021-05-01 23:33:37.621 warn (576) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1976:38) javascript.0 2021-05-01 23:33:37.620 warn (576) at Object.<anonymous> (script.js.Fenster_zählen_2:272:13) javascript.0 2021-05-01 23:33:37.620 warn (576) at InitialSort (script.js.Fenster_zählen_2:308:5) javascript.0 2021-05-01 23:33:37.620 warn (576) at main (script.js.Fenster_zählen_2:341:5) javascript.0 2021-05-01 23:33:37.620 warn (576) at init (script.js.Fenster_zählen_2:326:45) javascript.0 2021-05-01 23:33:37.617 warn (576) getState "hm-rpc.5.xxxxxxxxxxx.1" not found (3)
Was muss ich tun?
-
@joergh sagte in [Vorlage] Generisches Fensteroffenskript + Vis:
Ist das jetzt korrekt so?
Nein, natürlich nicht, deswegen auch die Fehler im Log. Es MUß so sein wie in der Anleitung beschrieben sonst klappts nicht, der Raum wird dem ganzen Gerät zugewiesen, die Funktion Fenster oder Tuer nur dem entsprechenden Datenpunkt. Das geht auch bei HM Geräten, iwo im HM Adapter kann man das automatische Synchronisieren der Gewerke deaktivieren, dann klappts auch.
-
@pittini
Danke für die Antwort.OK, also muss ich die, entgegen dem was der ioBroker übernommen hat, manuell ändern..?
Die Synchronisierung der "Gewerke" habe ich jetzt deaktiviert.Welches ist denn der "entsprechende Datenpunkt"?
Das ist mir nicht klar. Bei mir legt er das Device an, darunter dann einen Channel 0 für den Drehgriff unter dem selbst zugewiesenen Namen und dann noch einmal einen Channel 1 mit dem gleichen Griff, nur unter der Serienbezeichnung des Gerätes. Unter diesem ist dann auch der STATE zu finden der den Zustand angibt. Ist das der "entsprechende Datenpunkt"?
Muss ich also bei letzterem Channel das "Fenster, Sicherheit, Verschluss" löschen während der Raum bei allen anderen korrekt ist und bleiben muss?
Das Device hat als einziges keinen Raum zugewiesen. So wie ich Dich verstehe muss ich nun hier den Raum manuell nachtragen, aber muss ich auch den Raum bei allen anderen Datenpunkten manuell löschen?
Sorry, aber ich kapiere es einfach nicht, was ich genau wo einstellen muss. Die "Anleitung" mit den drei Zeilen ist imho nicht so eindeutig oder ich bin halt einfach zu doof.
-
@joergh Ja, der State dürfte hier der richtige sein. Wie es aussehen muß, siehste doch an den Screenshots in der Anleitung, dafür hab ich se doch gemacht. Und wenn Du nen kleinen Screen hast, mußte die Bilder halt evtl. nach rechts scrollen um alles zu sehen. Anleitung mit 3 Zeilen? Tatsächlich besteht die Anleitung aus 158 Zeilen, weis ja nich wo Du da hinguggst.
-
@pittini
Der Screenshot ist halt nicht so eindeutig, weil die Struktur bei Dir für einen Kontakt anders ist. Da geht es über Magnetkontakt Channel/ Raum Channel/ Fenster Channel schliesslich zum State. Bei meiner Struktur geht es direkt zu einem Drehgriff Device, das sich dann in zwei Channel aufsplittet. Wenn hier also steht " Den Geräten müssen Räume (für den gesamten Channel) zugewiesen sein.....Hier aber nur für den Datenpunkt, nicht den gesamten Channel!!!", dann frage ich mich denn für welchen der beiden Channel 0 oder 1 oder für beide?Außerdem hat mich halt verwirrt, dass ich im ioBroker aktiv Daten, die er eigentlich so durch den rega Adapter anlegt, verändern muss, sowie das synchronisieren deaktivieren. Das steht da nicht. Bei den drei Zeilen geht es nur um den relevanten Teil, die meisten Zeilen haben ja nichts mit dem Thema zu tun. Ich bezog mich dabei auf "Vorraussetzungen: Den Geräten müssen Räume (für den gesamten Channel) zugewiesen sein, sowie eine Funktion, z.B. "Fenster", bzw. "Tuer" für jeden entsprechenden Datenpunkt.
Hier aber nur für den Datenpunkt, nicht den gesamten Channel!!!"
Versteh das bitte nicht als Vorwurf, sondern einfach als Feedback von einem Nutzer. Ein Hinweis z.B., dass man die vom Adapter angelegten Daten verändern und das Synchronisieren der Gewerke im rega Adapter deaktivieren muss, würde sicherlich einigen helfen die eine piVCCU installiert haben. Vielleicht bin ich aber auch der Einzige der da Schwierigkeiten hat.Danke jedenfalls für die Antwort. Ich werde gleich mal probieren die Daten zu überschreiben und sehen, ob es funktioniert. Grundsätzlich finde ich das Skript ja klasse und würde es deswegen ja auch gerne zum Laufen bringen.
-
@pittini
So, habe jetzt alle Daten korrigiert und es scheint auch etwas Bewegung zu geben, allerdings wirft er mir folgende Fehlermeldungen aus:Im Skript der neusten Version färbt er auch was ab Zeile 265 rot ein. Weiss nicht, ob das eine Bedeutung hat, aber immerhin versucht er ja hier ins Log zu schreiben und da die Fehlermeldungen wohl auch mit dem Log zu tun haben, poste ich das mal
//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!"); InitialSort(); }; }); });
-
@joergh Nein, das im Skript rot gefärbte hat nix damit zu tun, bei manchen Sachen kommt der Syntaxcheck ausm Tritt, kannste ignorieren. Der Fehler liegt bei Dir in Zeile 42 würd ich sagen, das muß auf false.
-
@pittini Ja, danke! Das war's. Es geht!!
-
Moin.moin, zuerst einmal vielen Dank für das interessante Script.
Leider bin ich verzweifeln! Habe nun die 514 Beiträge hier im Thread durchgelesen, doch so richtig hilft es mir nicht weiter.
Alle Fenster und Tueren sind gemäß deiner Anleitung zugeorndet und beschrieben.Im Fehlerlog des Scripts werde ich aus den Fehlerzeilen nicht schlau:
11:14:47.348 info javascript.0 (4473) Stop script script.js.common.FENSTER_TUEREN 11:14:47.464 info javascript.0 (4473) Start javascript script.js.common.FENSTER_TUEREN 11:14:47.499 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: starting Fensterskript, Version 1.6.11 11:14:47.501 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: registered 0 subscriptions and 0 schedules 11:14:47.517 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:317:26) 11:14:47.517 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 11:14:47.518 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 11:14:47.518 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 11:14:47.520 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:318:35) 11:14:47.521 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 11:14:47.521 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 11:14:47.521 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 11:14:47.523 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:319:37) 11:14:47.523 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 11:14:47.523 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 11:14:47.524 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 11:14:47.525 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:320:32) 11:14:47.525 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 11:14:47.526 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 11:14:47.526 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 11:14:47.527 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:321:30) 11:14:47.528 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 11:14:47.528 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 11:14:47.528 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 11:14:47.529 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:333:27) 11:14:47.530 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 11:14:47.530 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 11:14:47.530 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 11:14:47.536 error javascript.0 (4473) at CreateRoomsWithOpenDoorsList (script.js.common.FENSTER_TUEREN:839:45) 11:14:47.537 error javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:343:5) 11:14:47.537 error javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 11:14:47.537 error javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13)
Die Warnungen sind erst enmal sekundär, doch die Errormeldungen bekomme ich nicht gedeutet.
Auch wird in den Objekten nicht wirklich "viel" generiert:
Wo muss / soll ich ansetzen?
Danke bereit im Voraus! -
@ub-privat Zeig mal nen Screenshot vom Objektbaum wo ich die Zuordnungen sehen kann. Ausserdem Zeile 1-44 posten damit ich Deine Einstellungen seh. Und ein Log bei eingeschaltetem logging (Zeile 9) wär auch hilfreich.
-
Hier der Objektbaum:
Das sind ZigBee (Xiaomi) - Sensoren:
Hier habe ich einen Homematic-Sensor:
Hier noch ein paar Homematic-IP-Sensoren:
Hier die Zeilen 1-44 aus dem Script:
const Skriptversion = "1.6.11" //vom 18.03.2021 - 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 = "Fenster"; // Legt fest nach welchem Begriff in Funktionen gesucht wird. Diese Funktion nur dem Datenpunkt zuweisen, NICHT dem ganzen Channel! const WhichDoorFunctionToUse = "Tuer"; // 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 //Telegram const UseTelegram = false; // Sollen Nachrichten via Telegram gesendet werden? //Pushover const UsePushover = false; // Sollen Nachrichten via PushOver gesendet werden? const PushoverInstance = "pushover.0"; //Pushoverinstanz welche genutzt werden soll angeben const PushoverDevice = "All"; //Welches Gerät soll die Nachricht bekommen const PushOverTitle = "Fensterüberwachung"; //Alexa const UseAlexa = false; // Sollen Nachrichten via Alexa ausgegeben werden? const AlexaInstance = "alexa2.0"; const AlexaId = ""; // Die Alexa Seriennummer. const AlexaVolume = "50"; // Lautstärke der Nachrichten. Wert von 1 bis 100 //Other 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?
Hier das Logging = true:
15:48:47.676 info javascript.0 (4473) Stop script script.js.common.FENSTER_TUEREN 15:48:47.790 info javascript.0 (4473) Start javascript script.js.common.FENSTER_TUEREN 15:48:47.837 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: starting Fensterskript, Version 1.6.11 15:48:47.840 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: registered 0 subscriptions and 0 schedules 15:48:47.866 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: CreateStates fertig! 15:48:47.875 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:317:26) 15:48:47.875 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 15:48:47.875 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 15:48:47.876 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 15:48:47.879 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:318:35) 15:48:47.880 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 15:48:47.880 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 15:48:47.881 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 15:48:47.886 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:319:37) 15:48:47.886 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 15:48:47.887 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 15:48:47.887 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 15:48:47.891 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:320:32) 15:48:47.892 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 15:48:47.892 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 15:48:47.892 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 15:48:47.895 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:321:30) 15:48:47.896 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 15:48:47.896 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 15:48:47.896 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 15:48:47.897 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: x=0= SendWindowWarnMsg=null SendDoorWarnMsg=null SendVentMsg=null SendWindowOpenCloseMsg=null SendDoorOpenCloseMsg=null 15:48:47.899 warn javascript.0 (4473) at init (script.js.common.FENSTER_TUEREN:333:27) 15:48:47.900 warn javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:341:5) 15:48:47.900 warn javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 15:48:47.900 warn javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13) 15:48:47.902 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: Reaching VentCheck x=0 Init=true VentwarnTime[x]=null RoomStateTimeStamp[x]=undefined 15:48:47.902 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: Room 0 = is open or disabled, no vent warning set 15:48:47.903 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: Reaching CreateRoomsWithVentWarnings 15:48:47.907 info javascript.0 (4473) script.js.common.FENSTER_TUEREN: Reaching CreateRoomsWithOpenDoorsList 15:48:47.911 error javascript.0 (4473) at CreateRoomsWithOpenDoorsList (script.js.common.FENSTER_TUEREN:839:45) 15:48:47.912 error javascript.0 (4473) at main (script.js.common.FENSTER_TUEREN:343:5) 15:48:47.913 error javascript.0 (4473) at InitialSort (script.js.common.FENSTER_TUEREN:308:5) 15:48:47.913 error javascript.0 (4473) at Object.<anonymous> (script.js.common.FENSTER_TUEREN:272:13)
Ich hoffe, du wirst daraus "schlau"...