NEWS
Umfassendes Alarmanlagen-Skript
-
@andreaskos
erst einmal, ein Dank an dich, dass Du dein Fachwissen mit uns teilst, alleine durch das Lesen deiner Script-Vorstellung habe ich schon einiges dazugelernt -
javascript.1 2020-05-02 07:50:42.371 error (17536) at process._tickCallback (internal/process/next_tick.js:68:7) javascript.1 2020-05-02 07:50:42.371 error (17536) at promise.then (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\index.js:19:49) javascript.1 2020-05-02 07:50:42.371 error (17536) at tryCatcher (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\utils.js:11:23) javascript.1 2020-05-02 07:50:42.371 error (17536) at client.get (C:\Program Files\iobroker\Test\node_modules\iobroker.js-controller\lib\states\statesInRedis.js:616:17) javascript.1 2020-05-02 07:50:42.371 error (17536) at adapter.getForeignState (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1055:17) javascript.1 2020-05-02 07:50:42.371 error (17536) at createProblemObject (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1464:17) javascript.1 2020-05-02 07:50:42.371 error (17536) at prepareScript (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1411:37) javascript.1 2020-05-02 07:50:42.371 error (17536) at compile (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1188:28) javascript.1 2020-05-02 07:50:42.371 error (17536) at Object.createScript (vm.js:277:10) javascript.1 2020-05-02 07:50:42.371 error (17536) at new Script (vm.js:83:7) javascript.1 2020-05-02 07:50:42.371 error (17536) SyntaxError: Unexpected token var javascript.1 2020-05-02 07:50:42.371 error (17536) ^^^ javascript.1 2020-05-02 07:50:42.371 error (17536) var detectorsDelayed = [ javascript.1 2020-05-02 07:50:42.370 error at script.js.Alarm.Alarm1:36 javascript.1 2020-05-02 07:50:42.370 error (17536) script.js.Alarm.Alarm1 compile failed:
-
Ah Danke, das war der Beistrich bei den beispielhaft eingegebenen Daten.
Der Benutzer selbst trägt die Melder in die Arrays ein. -
Hi @andreaskos cooles Script funktioniert sehr gut eine Frage kannst du Vielleicht einen Datenpunkt einarbeiten über den man unscharf intern scharf und extern scharf über eine Zahl schalten kann soll heißen bei Status 0 unscharf bei Status 1 extern scharf und bei Status 2 intern und vielleicht bei 3 Blocked.
Grund ich schalte meine Anlage über meine Apple Homeapp und diese wird über Zahlen getriggert.
Wäre echt cool wenn du das einarbeiten könntest.Grüße
-
Hi @Homer-J!
Ja, gute Idee! Das nehm ich gern auf. Ich würde es aber so machen:
0 ... unscharf
1 ... scharf intern
2 ... scharf extern
3 ... scharf extern verzögert
OK? Was meinst du mit Blocked? -
@andreaskos wenn man die Anlage auf Grund eines offenen Fensters z.B. nicht scharf schalten kann.
Ist nur so eine Idee.
Was auch schön wäre für die gleichen punkte dann ein Output.
Kann man vielleicht auch die akustische Ausgabe trennen soll heißen bei Alarm extern Sirene außen und bei intern innen. -
Cool, teste gerade.
Interessant wäre noch:Scharf/unscharf stellen mit Code (Pin)
Ausgabe der Sensoren als Json/Html
Unterteilung Außenhaut/Innenraum
Log Ausgabe der Ereignisse in einen DP
Alarmanlage aktiv via Date/Time ( zb. Alarm nur in der Zeit von 22:00 - 05:00 Uhr ?Vergabe eine Alias Name?Derzeit ist die Ausgabe :
Bewegungsmelder Vorraum2.MOTION
Alias: Bewegungsmelder Vorraum -
Danke für dein Feedback @sigi234
Das Skript soll ja nur die Alarmanlage abbilden. Auf welche Art die Scharf- oder Unscharf-Schaltung erfolgt, obliegt dann dem User. Das heißt, wie die Datenpunkte angesprochen werden, ob über eine Code-Eingabe, eine Zeitschaltuhr oder andere kreative Ideen (zB in Abhängigkeit der Anwesenheit) ist nicht Teil davon.
Betreffend der Namen müssen diese eben in ioBroker gepflegt werden. Ich wollte so wenig Eingaben wie möglich haben, deshalb dieser Weg. Ein Alias-Name wäre dann eine zusätzliche Eingabe. Natürlich möglich, aber ioBroker bietet diese Möglichkeit ja schon von sich aus.
Die ausgelösten Sensoren als JSON-String zur Verfügung zu stellen find ich super! Ich nehme es mal in meine ToDo-Liste auf. Ebenso, dass zusätzlich je eine getrennte Liste für Außenhaut und Innenraum-Melder geführt wird.
-
Ich habe einmal die Idee von @Homer-J eingearbeitet. Es gibt jetzt je zwei Number-Datenpunkte:
Input.SwitchNumber gibt die Schaltzustände ein wie folgt:
0 ... unscharf schalten
1 ... scharf intern schalten
2 ... scharf extern schalten
3 ... verzögert scharf extern schaltenOutput.ActiveNumber gibt Auskunft über den tatsächlichen Zustand mit den Ziffern:
0 ... unscharf
1 ... intern scharf
2 ... extern scharf
3 ... Eingangsverzögerung aktiv
4 ... Ausgangsverzögerung aktivEs werden dafür die eingebenen Texte unter Einstellungen am Anfang des Skripts benutzt.
-
@andreaskos funktioniert mit der Homeapp leider sind aber die Nummer vertauscht deswegen hatte ich 1 als extern scharf und 2 als intern scharf kann ich das für mich selber anpassen. ?
Hab es für mich angepasst und funktioniert Klasse.
Danke für das schnelle umsetzen. -
Sehr schönes Skript. Ich finde es auch gut, wenn nicht alle Funktionen hier integriert sind, sondern wirklich nur die Kernfunktionen einer Alarmlösung.
Für die Benachrichtigung bei Alarm oder fehlerhaften Scharfschalten etc. Zum Beispiel in der VIS Oberfläche, per Licht, telegram oder Email verweise ich Mal auf den MessageHandler:
https://forum.iobroker.net/topic/32207/script-messagehandler-nachrichten-protokollieren-vis
Eine Integration sollte durch die Datenpunkte dieses Skripts prima durchführbar sein.
-
Ich habe das Skript nun installiert und teste gerade etwas herum:
Folgendes ist mir noch unklar (siehe Bild dazu unten):
- Output State "alarm" steht auf true, obwohl State AlarmText = "Alles OK" (Meine Vermutung ist, dass die Zustände nicht zurückgesetzt werden, wenn ein vorheriger Alarm eingetreten ist)
- Datenpunkt Input "SwitchNumber" ist 1, Output der "ActiveNumber" ist aber 2
Ich habe übrigens im Nachrichtenskript angefangen Nachrichten für dieses Alarmanlagenskript zu ergänzen:
-
@andreaskos kannst du vielleicht noch Fenstergriffe mit einarbeiten wo der Status mit Zahlen ist,
0 geschlossen, 1 gekippt, 2 geöffnet.
Funktioniert auch so hat sich also erledigt.
Grüße -
@Homer-J hast du dein MDCSS Alarmanlagenview auf dieses Skript bereits angepasst?
Ich meine dieses hier:
https://forum.iobroker.net/topic/19970/suche-alarmanlagen-views/43
Kannst du vielleicht die neueste Version bereitstellen?
-
@Tirador bin gerade beim anpassen, wenn es fertig ist kein Problem.
-
@Homer-J das wäre prima.
-
Hallo,
tolle Arbeit, super Skript. Werde wohl demnächst mal mein altes Skript von 2016 ersetzen.
Ich habe einige Vorschläge zum Skript:
- die Javascript Instanz lässt sich durch
instance
abfragen.createState()
darf eh nur in der Instanz, in der das Skript läuft States anlegen (und im neuen 0_userdata-Pfad) - Bitte beim Anlegen von Datenpunkten auch Rollen vergeben (Liste möglicher Werte).
- die Ausgabe des Sensor Namens hast du über
common.name
schon realisiert ("Die Namen der Melder sollten gut gepflegt sein"). Es gibt aber sehr viel mehr Infos im Objekt, die man ausgeben könnte
on({ id: idTrigger, change: "ne" }, function(obj) { log("obj.id " + obj.id); log("obj.name " + obj.name); log("obj.deviceName " + obj.deviceName); log("obj.deviceId " + obj.deviceId); log("obj.channelId " + obj.channelId); log("obj.channelName " + obj.channelName); log("obj.common.name " + obj.common.name); log("obj.common.desc " + obj.common.desc); log("obj.state.ts (formatiert) " + formatDate(obj.state.ts, "TT.MM.JJJJ SS:mm:ss")); });
Ist die Subscription von Rollen nicht geplant? So kann man leicht zB alle Bewegungsmelder eines Raumes oder die Tür-Fenster-Kontakte auf einmal überwachen, die z.B. einer Rolle "Alarmsensoren_Aussenhaut" zugeordnet sind. Das reduziert die Wartungsarbeit beim Wechsel von Sensor-Hardware.
const motion_kizi = $("channel[state.id=*.MOTION](rooms=Kinderzimmer)"); motion_kizi.on(function(obj){ if (obj.state.val && (getState(idAlarmanlage).val === 1 || getState(idAlarmanlage).val) ) { // wenn Alarmanlage ein setState("scene.0.licht_kinderzimmer_alles_ein", true); // alle Lichter an // weitere Aktionen } });
Top Arbeit
Pix - die Javascript Instanz lässt sich durch
-
Hi @andreaskos hab jetzt mal meine komplette Anlage umgestellt irgendetwas passt da noch nicht, wenn ich jetzt meine Alarmanlage aktiviere dauert es nicht lang das irgendein Kontakt auslöst obwohl sich kein Status verändert hat soll heißen es wurde weder ein Fenster geöffnet noch ging ein Bewegungsmelder.
Es wir aber komischerweise in dem Datenpunkt Alarming Detector genau der auslösende Kontakt angezeigt obwohl sich nichts ändert. -
Cool, vielen Dank für euer Feedback!
Ich möchte kurz Feedback geben zu den Punkten:
@Tirador
Solche Dinge passieren, wenn von einem scharf-Zustand auf einen anderen scharf-Zustand geschaltet wird, in deinem Fall direkt von scharf extern auf scharf intern. Ein Rückesetzen wird immer nur beim Schalten auf unscharf durchgeführt (auch die Texte stimmen nur so). Ich wollte das vorerst nicht per Programmierung sperren. Jetzt mit der Möglichkeit über den Number-Datenpunkt zu schalten passiert das natürlich noch leichter. Sollte ich das Abfangen im Code? Was soll dann aber passieren?- Ah, super - ich hab mich gefragt, ob etwas gibt, die Intanz abzufragen, aber dann nicht mehr nachgesehen - Danke!!
- OK, ich werd Rollen mitvergeben.
- Subscription auf Rollen ist auch cool. Ich muss zugeben, dass ich mich mit Rollen bisher kaum auseinander gesetzt habe. Das würde die Pflege deutlich vereinfachen. Kann ein Melder auch mehrere Rollen haben? Oder wie kann ich sonst damit umgehen, dass ein Melder gleichzeitig zB die Außenhaut-Rolle haben kann UND auch ein verzögerter Melder sein kann?
LG Andreas
-
@Homer-J
Ah - das kann nur amchange: "any"
liegen bei der Melderauswertung. Du hast Sensoren, die ein regelmäßiges Update liefern, oder? Das war auf jedenfall ein Fehler. Das periodische Aussenden der Zustände ist ja eh gang und gäbe, keine Ahnung warum ich das so gemacht hab. Ich stelle es um auf
change: "ne"
Auch beim richtigen Setzen des AlarmText passt noch etwas nicht übrigens.