- ioBroker Community Home
- Deutsch
- Skripten / Logik
- [Vorlage] Alarmanlage mit erweiterten Funktionen
NEWS
[Vorlage] Alarmanlage mit erweiterten Funktionen
-
Hi,
seit einigen Monaten bastele ich an einem Projekt um mein Haus elektronisch abzusichern. Sicherheit treibt mich schon seit längerem um. Das Anwesenheitssimulationsscript, die Einbindung einiger Kameras rund ums Haus sind einige Beispiele. Jetzt kommt hinzu eine doch recht umfassende Alarmanlagen installation. Das Script dazu richtet sich or allem an Nutzer mit hoeherem Anspruch an einer solchen Anlage im ioBroker Umfeld. Im Folgenden teile ich was ich dazu an Hardware nutze und auch die Details des Scriptes.
Was Hardware angeht, so nutze ich überwiegend Homematic. Das Script ist aber nicht nur auf Homematic ausgerichtet. Alles was in ioBroker geht, sollte auch mit dem Script gehen.Meine ausgewählte Hardware:
Bei der Hardware habe ich mich hauptsächlich an Homematic orientiert mit folgenden Komponenten- Bewegungsmelder
- Fenstersensoren
- Homematic Alarmsirenen ASIR
- Homematic Rauchmelder
- Homematic Wasermelder
- Keypad
- Schlossantrieb
- ELV Statusboard "ELV-SH-SB8" fuer Status und Steuerung
weitere Komponenten
- Wandtablet
- VIS Steuerung
- Wasermelder
- Rauchmelder
Komponenten noch in der Anschaffung
-
Glasbruchsensoren
-
weitere Melder und Fenstersensoren
-
Keypad
Zum Keypad kann ich sagen, dass ich ganz ok damit bin. (wobei ich einen Fingerprintsensor schon vermisse) Es funktioniert gut und laesst sich direkt mit dem Tuerschloss direkt verbinden.
Das ist auf Jeden Fall ein plus. Es soll ja in Kürze auch eine festere Verbindung zur Doorbird geben. Da weiß ich aber noch nicht wie das genau läuft.
Das Keypad ist ja auch keine riesige Anschaffung und lässt sich leicht verbauen. Das ist anders mit der Doorbird. Also Doorbird mal nach hinten gestellt
Was gut funktioniert:
-
natürlich auf und zuschließen
-
Alarm scharf beim zuschließen
-
alarm unscharf beim aufschließen
-
Direktverbindung zum ELV StatusBoard (komme ich weiter unten noch drauf)
Was nicht so schön ist. -
Verarbeitung - halt Kunststoff
-
kein Fingerprint
-
Der Homematic Türschloßantrieb.
Hier musste ich ersteinmal den Schließzylinder tauschen. Das müssen wahrscheinlich die meißten.
Es gibt auch gute Videos im Netz, die den Einbau beschreiben - kein Hexenwerk
Bei den Maßen muß man halt ein wenig aufpassen. 10mm sollte der Zylinder schon hinausschauen.
Notöffnung ist ein Muss (aufschließen von außen während der Schlüssel steckt)
Ansonsten war der Einbau easy. -
Das ElV Status Board
Es ist ein Bausatz. Das vorneweg. Es muß nicht gelötet werden und der Zusammenbau gestaltet sich einfach.
Aber das mag jeder anders empfinden. Auch hier gibt es Videos im Netz.
Ein bischen schwieriger ist das einstellen der LED Farben ( aber auch das empfand ich als einfach)Was macht das Board im Kontext der Alarmanlage. Ich habe 8 LEDs und 8 Hardwareschalter je LED einer.
Diese habe ich folgendermaßen belegt- Alarmanlage scharf/unscharf - ein Druck und die Anlage ist von innen scharf
- Einbruchsmeldung - bei Druck kann diese quittiert werden
- geoeffnet Meldung (wenn ein Fenstersensor etc meldet, dass noch etwas geoeffnet im Haus ist)
- Sabotage Meldung (zusatzinfo zur Einbruchsmeldung)
- Stoerungs Meldung (wenn komponenten nicht erreichbar sind)
- Rauch Meldung
- Wasser Meldung
- und einen Schalter, den ich STILL nenne, Damit können laufende Sirenen etc, still geschaltet werden
Diese Belegung ist natürlich variabel. aber so ist sie bei mir eingerichet
Zum Board selber.
- macht nicht wirklich einen hochwertigen Eindruck - ist aber akzeptabel
- es braucht ein Netzteil, somit nicht ganz ortsunabhängig
- es tut was es soll. Bei mir fristet es das Dasein im Schlafzimmer (macht wohl am meisten Sinn)

und da das Ganze nichts ohne Software macht, habe ich mich umgeschaut.
Es gibt einen Alarmadapter und ein nicht mehr gewartetes script.
Beides hat, für das was ich mir vorstellte, nicht gepasst. Also kommt ein neues Script hinzu, das mittlerweile im Einsatz ist.Konzept des Scriptes:
Dann das Script. Ich muß sagen, dass die Komplexität doch sehr groß ist. Das liegt natürlich daran, dass ich es flexibel haben wollte.
Leicht anpassbar an neue Komponenten und Situation.hier ein paar features (bei weitem nicht komplett
-
Zunächst wird die Raumsituation beschrieben und in einer Tabelle hinterlegt.
Die Sensoren werden zugeordnet zu Räumen.
Also Raum: Wohnzimmer,
RaumType ist innen,
zuodnung der Sensoren zu GeräteTypen je Raum (Bewegung, Fenster, Türen, Rollladen, Glasbruch, Rauch, Wasser) -
Dann werden Sichten bzw Filter auf die Räume gelegt (auch in einer Tabelle)
Eine Sicht kann z.B. alle innenliegenden Räume aber ohne das Gästezimmer sein -
Die Sichten werden dann Scenarios zugeordnet
Scenario Schlafen bekommt dann vielleicht die reine InnenSicht (eine Sicht ohne Schlafzimmerfenster wäre hilfreich)
Scenario Gäste bekommt eine Sicht nur innen aber ohne Gästezimmer.
Die Scenarios können einzeln aktiviert und deaktiviert werden. Den Sencarios sind auch Alarme zugeordnet.
Wenn ein Scenario ein Alarmauslöser ist, dann werden die Hardwarekomponenten direkt angesprochen z.B. die ASIR Sirene (quasi Nativ)Dabei muß man sich erstmal gedanklich einfinden. Das geht aber schnell.
Weitere Features
- Verbindung zum Servicemeldungsscript (nutzt einfach dessen ressourcen für Sabotage Alarm und UnreachAlarm)
- Umfassende Protokollierung in JSON und HTML
- externe protokollierung zusätzlich
- native Einbindung des Statusboards
- native Einbindung der Alarmsirene ASIR
- umfassende Meldungen an die bekannten services (email, telegram, whatsapp etc etc) das ganze einstellbar
- automatische Berücksichtigung von Abwesenheiten (z.B. Aktivierung/Dekativierung von Scenarios
- automatische Berücksichtigung bei anwesenden Gaesten (z.B. Aktivierung/Dekativierung von Scenarios
- etc. etc.
Die 5 wichtigsten Schritte beim Einstellen des Scriptes
Vorgehensweise bei der Anpassung des Scriptes auf die eigenen Bedürfnisse
Der Einstellungsbereich enthält Einstellungssklassen- Bitte Anpassen
- optional
- nicht ändern
Somit sollte der Fokus zunächst auf "Bitte Anpassen" gelegt werden.
Hierzu zählen die folgenden Tabellen1. raumDefinition mit folgenden Feldern:
Raumbezeichnung - kann frei vergeben werden
Type: - kann frei vergeben werden. Es macht Sinn z.B. nach innen und aussen zu unterscheiden
Position - kann frei vergeben werden. Es macht Sinn z.B. nach Stockwerk zu unterscheiden OG, UG, KG
Gerätetypen: Bewegung: [], Fenster: [], Tueren: [], Rollladen: [], Glasbruch: [], Wasser: [],
Die Gerätetypen müssen nicht enthalten sein, wenn sie für einen Raum nicht benötigt werden
Wenn sie hinzugefügt werden können einfach die zugehörigen datenpunkte hinzugefügt werdenWichtig ist:
- Die geschweiften und eckigen Klammern müssen genauso im Kontext erhalten bleiben
- Komma müssen nach jeder Felddefinition gesetzt werden
Beispiel
const raumDefinition = { Wohnzimmer: { Type: "innen", Position: "oben", Fenster: [], Tueren: ['hm-rpc.1.0000DD89B7xxx8.1.STATE'], // Terrassentuere }, Kueche: { Type: "innen", Position: "oben", Fenster: ['hm-rpc.1.003660Cxxx05D0.1.STATE','hm-rpc.1.003660C993BEF6.1.STATE'], // Fenstersensor Kueche links und rechts }, };2. Die Filter (Sichten) Definition. Die Filter beziehen sich auf die eingestellte raumDefinition
Felder:
Filtername: kann frei vergeben werden
raumTyp: bezieht sich auf raumDefinition Type - muss übereinstimmen ( ein leeres Feld heißt alle typen)
raumPosition: bezieht sich auf raumDefinition Position und muss übereinstimmen ( ein leeres Feld heißt alle Positionen)
geraetetypen: bezieht sich auf raumDefinition Gerätetypen (Fenster,Melder etc) und muss übereinstimmen ( ein leeres Feld heißt alle Gerätetypen)
raeume: bezieht sich auf raumDefinition Raumname (Wohnzimmer etc) und muss übereinstimmen ( ein leeres Feld heißt alle Raumnamen)
Datenpunkte: bezieht sich auf raumDefinition auf die zugeordneten Datenpunkte und muss übereinstimmen ( ein leeres Feld heißt alle Datenpunkte)Grundsätzlich können für jedes Feld Ausschlüsse gemacht werden. Erlaubt sind minus (-) und Doppelminus (--)
Minus heißt Ausschluss aus dem später zugeordneten Scenario was auch bedeutet, dass dieser Datenpunkt bei einem zweiten aktiven scenario wieder zugeordnet werden könnte
Doppelminus heißt genereller Ausschluss auch wenn dieser Datenpunkt bei einem zweiten aktiven scenario zugeordnet wurdeEs sollten immer alle Felder vorhanden sein (anders als bei der raumDefinition).
Beispiel:
let FilterDefinition = { Schlafen: { raumTyp: ['innen'], // Raumtypen (z. B. innen, aussen) als Array oder keine Angabe = alle raumPosition: [], // Positionen (z. B. oben, unten oder ErsterStock,ZweiterStock,DritterStock) als Array oder keine Angabe = alle geraetetypen: [], // Geraetegruppen (z. B. Bewegung, Fenster, etc.) oder keine Angabe = alle raeume: [], // Einzelraeume bei keiner Angabe werden alle Raeume verwendet Datenpunkte: ['-hm-rpc.1.003660C9A62C5D.1.STATE','-hm-rpc.1.0000D709954526.1.STATE'] // Schlafzimmerfenster und Elternbadfenster ausgeschlossen (Lueftung) }, Abwesend: { raumTyp: ['innen'], raumPosition: [], geraetetypen: [], raeume: [], Datenpunkte: [] },3. Scenarios
Scenarios lösen am Ende Alarme aus. Mehrere Filter können einem Scenario zugeordnet werden. Auch mehrere Aktionen (Alerts) können zugeordnet werden.
Jedes Scenario lässt sich aktivieren oder deaktivieren.
Wenn mehrere Scenarios aktiviert sind und ein Datenpunkt mehreren Scenarios zugeordnet wurden, dann bestimmt die Priorität welches Scenario als Alarm ausgeführt wird
Es lassen sich maximal 99 Scenarios definierenconst scenarioDefinition = { Scenario01: { name: "Schlafen", Prio: 6, Filter: ['Schlafen'], Alert: ['FlashSchlafzimmerEIN',"FlashStandard1EIN"] }, Scenario02: { name: "Abwesend", Prio: 5, Filter: ["Abwesend"], Alert: ["SireneASIR2EIN","Licht_OG"] }, Scenario03: { name: "Garage", Prio: 10, Filter: ["Garage"], Alert: ['FlashSchlafzimmerEIN'] }, Scenario04: { name: "Urlaub", Prio: 6, Filter: ['Urlaub'], Alert: [] }, Scenario05: { name: "Haustiere", Prio: 7, Filter: ['Haustiere'], Alert: [] }, Scenario06: { name: "Gaeste", Prio: 4, Filter: ["Gaeste"], Alert: ["FlashSchlafzimmerEIN"] }, Scenario07: { name: "frei", Prio: 8, Filter: [], Alert: [] }, Scenario08: { name: "Stoerung", Prio: 9, Filter: ['Stoerung'], Alert: [] }, // Filter ist bei Stoerung immer = Stoerung Scenario09: { name: "Gefaehrdet", Prio: 3, Filter: ['HochRisiko'], Alert: ["SireneASIR2EIN","Licht_Hoch_Risiko_Aussen"] }, Scenario10: { name: "Wasser", Prio: 2, Filter: ['Wasser'], Alert: ["SireneASIR2EIN"] }, Scenario11: { name: "Rauch", Prio: 1, Filter: ['Rauch'], Alert: ["SireneASIR1EIN","SireneASIR2EIN"] }, };4. Direkte Ansteuerung von hardware im Alarmfall (Alert im Scenario)
die Namen der AusgabeDevices können frei vergeben werden.
Es gibt aber fest verdrahtete Devices.- HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
- Datenpunkt_Standard: Hier wird ein Datenpunkt eingetragen, der reagiern soll Angaben sind auch zu machen beim Aktivierungswert, Rückstellwert, Dauer und Delay
(beispielsweise können hier Lichter geschaltet werden oder andere nicht-Homatic Sirenen etc.) was auch immer - Datenpunkt_Flash ist ein Datenpunkt bei dem man eine Lampe mit einer Frequenz blinken lassen kann. Nutze ich z.B. für das Schlafzimmer als stillen Alarm für die Scenarien wo ich nicht
gleich die Sirenen laufen lassen möchte
anzugebende Werte: der entsprechende Datenpunkt, Aktivierungswert, Wiederholungen (Anzahl - nicht zu viele verwenden), Frequenz in ms (Abstand zwischen zwei an/aus Schaltungen, Startdelay in ms
Die hier genutzten Geräte können über den STILL Datenpunkt alle komplett auf push ausgeschaltet werden
Beispiele
const AlertAusgabeDevices = { SireneASIR1EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000, }, SireneASIR1AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000, }, SireneASIR2EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000 }, SireneASIR2AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000 }, Standard1Ein:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Rueckstellwert: false, // Rueckstellwert wird gesetzt wenn die Dauer abgelaufen ist. Keine Funktion wenn Dauer = null ist Dauer: 100000, // in ms - null ohne Auschaltung Startdelay: 0, // in ms }, Standard1Aus:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll }, FlashStandard1EIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashStandard1AUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerEIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerAUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false oder 1/0 100/0 zulaessig Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, }5. Definition von Schaltgruppen.
Schaltgruppen können für Scenario-Alerts aber auch bei Alarmaktivierung / Alarmdeaktivierung ausgelöst werden
einzustellendwe Felder: Datenpunkt der geschaltet werden soll. Wert der zur Schaltung genutzt werden soll, Delay in sekunden, Dauer in SekundenBeispiel:
const Schaltgruppen = { Licht_OG: [ { Datenpunkt: 'hm-rpc.1.00351F29xxxxE3.3.STATE', Wert: true, Delay: 0.1, Dauer: null }, // WZ Licht Terrasse Verzoegerung in sekunden // Dauer in sekunden // null = endlos { Datenpunkt: 'hm-rpc.1.0008E0C9xxxxB0.4.LEVEL', Wert: 100, Delay: 0.1, Dauer: 600 } // WZ Esszimmertisch Dimmer// Feld Dauer: danach wird auf Ausgangswert zurueckgesetzt ], Licht_Hoch_Risiko_Aussen: [ { Datenpunkt: 'hm-rpc.1.0008A0C9xxxxx6.1.STATE', Wert: true, Delay: 0.05, Dauer: 600 }, // Licht Kinderbad { Datenpunkt: 'hm-rpc.1.0008A0C9xxxx50.1.STATE', Wert: true, Delay: 0.1, Dauer: 600 }, // Licht aussen Nordseite { Datenpunkt: 'hm-rpc.1.0008A269xxxx47.1.STATE'/*Licht Hobbyraum Status:1 STATE*/, Wert: true, Delay: 150, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9xxxx63.10.STATE'/*Kelleraktor 5 Maschinenraum PoolHalle:10 STATE*/, Wert: true, Delay: 0.2, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9Axxx70.18.STATE'/*Keller Aktor 1 Aktor Licht Steinterasse:18 STATE*/, Wert: true, Delay: 0.25, Dauer: 600 }, ] };Die optionalen Einstellungen
Messenging
Es können die wichtigsten messenging services genutzt werden um kurzNachrichten oder verlängerte Nachrichten an die verschiedenen
services zu senden. Je MessageType und Service kann entschieden werden, ob eine Nachricht gesendet werden soll, ob die Kurzversion
oder Langversion versendet werden soll und welche Instanz genutzt werden soll.
Falls mehrere Instanzen für einen Service gleichzeitig genutzt werden sollen, kann die entsprechende Instanz hinzugefügt werden sollAls Nachrichtenservice kann auch eine Sprachnachricht versendet werden. (SayIt - Adapter)
Vorraussetzung ist, dass der jeweilige ioBroker Adapter für den jeweiligen Service installiert und konfiguriert ist.const services = ['email', 'whatsApp', 'Signal', 'Telegram', 'Pushover', 'Pushsafer', 'Sprache',]; const MessengerScope = { 'Rauch': [true, true, false, false, false, false, false, ], 'Einbruch': [true, false, false, false, false, false, false, ], 'Wasser': [true, true, false, false, false, false, false, ], 'Sabotage': [false, false, false, false, false, false, false, ], 'Stoerung': [false, false, false, false, false, false, false, ], 'Alarm_Scharf': [true, false, false, false, false, false, false, ], 'Alarm_Unscharf': [true, false, false, false, false, false, false, ], 'ScenarioAktiviert': [true, false, false, false, false, false, false, ], 'ScenarioDeaktiviert': [true, false, false, false, false, false, false, ], 'Alarm_Still_Geschaltet': [false, false, false, false, false, false, false, ], 'Fallback': [false, false, false, false, false, false, false, ], // Fallback nicht loeschen. wird genutzt, wenn keine andere Definition gemacht worden ist } const MessengerInstanz = [0, 0, 0, 0, 0, 0, 0, ]; // Instanz des Messengers const TextTypeKurz = [false, true, true, true, true, true, true, ]; // bei true wird der Kurztext gesendet - sonst der LangtextNutzung eines oder mehrerer ELV ELV-SH-SB8 Statusboard
es können beliebig viele Statusboards eingebunden werden. na ja, 2 machen vielleicht sinn für 2 Etagen oder eines für Statusanzeige und eines zur ScenarioAktivierung/Deaktivierung
Die Statusboards und deren Status wird nicht mit dem Status ersetzt, was auch möglich gewesen wäre, vielmehr wird der Status synchronisiert mit dem jeweiligen Statuspunkt des Scriptesconst ControlDevices = [ { DeviceID: "StatusBoard1", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3CxxxxsEAx.", LED1: DP_Alarmaktivierung, DP_2ndPart1 : "10.STATE", // Meldungsanzeige und Aktivierung/Deaktivierung erfolgt durch die entsprechenden Datenpunkte LED2: DP_Einbruchsmeldung, DP_2ndPart2 : "14.STATE", // manuellAenderbar true laesst es zu den Alarm ueber das Board auszuschalten // dann werden auch alle AkustikGeraete Sirenen ausgeschaltet LED3: DP_GeoeffnetMeldung, DP_2ndPart3 : "18.STATE", // DP und DP_2ndPart entspricht dem genauen Datenpunkt jeder LED LED4: DP_Sabotagemeldung, DP_2ndPart4 : "22.STATE", LED5: DP_Stoerungsmeldung, DP_2ndPart5 : "26.STATE", LED6: DP_Rauchmeldung, DP_2ndPart6 : "30.STATE", LED7: DP_Wassermeldung, DP_2ndPart7 : "34.STATE", // ausgeschaltet werden aber nicht die Schaltgruppen LED8: DP_Still, DP_2ndPart8 : "38.STATE", // laufende Alarmgeraete (Sirenen etc) werden ausgeschaltet }, { DeviceID: "StatusBoard2", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3C00005xxx.", LED1: "Scenario01Aktiv", DP_2ndPart1 : "10.STATE", // Szenarioschaltung fuer StatusBoard2 LED2: "Scenario02Aktiv", DP_2ndPart2 : "14.STATE", LED3: "Scenario03Aktiv", DP_2ndPart3 : "18.STATE", LED4: "Scenario03Aktiv", DP_2ndPart4 : "22.STATE", LED5: "Scenario05Aktiv", DP_2ndPart5 : "26.STATE", LED6: "Scenario06Aktiv", DP_2ndPart6 : "30.STATE", LED7: "Scenario07Aktiv", DP_2ndPart7 : "34.STATE", // Szenarioschaltung fuer StatusBoard2 LED8: "Scenario08Aktiv", DP_2ndPart8 : "38.STATE", } ];Einstellungen zur Definition wann ein Alarm erfolgt
Die Interpretation ob ein Alarm vorliegt hängt vom jeweiligen Datenpunkt ab. Das kann dediziert eingestellt werden
In den meisten Fällen reicht eine allgemeine Einstellung: true, 1, 100 etc.Sollte ein datenpunkt aber eine andere Logik verfolgen, dann kann ein expliziter Auslösewert für diesen Datenpunkt eignestellt werden
const AlarmAusloesungswerte = [ { op: '==', wert: true }, // nur true zulaessig - bitte beibehalten { op: '>', wert: 0 }, // groesser als 0 - bitte beibehalten { range: { min: 1, max: 2 } }, // Beispiel range {exception: {dpAusnahme:'hm-rpc.1.000F1D8xxxx02D.1.MOTION', wert: false}}, // je Datenpunkt mit ausnahmen, z.B. fuer Garagentorsensor ist false = geoeffnet - Beispiel {exception: {dpAusnahme:"hm-rpc.1.0047E40xxxxx88.1.LOCK_STATE", wert: 2}}, // hmip-dld unlocked = 2 ];Verzögerung bei Alarmaktivierung
Die Anzahl von Sekunden von der Anfrage zur Aktivierung (Scharfschaltung) bis zur tatsächlichen Aktivierung des Alarmes kann eingestellt werden.
Während dieser Zeit, kann der Alarm trotzdem wieder unscharf geschaltet werden. Die Wartezeit wird dann abgebrochenconst AKTIVIERUNGSDELAY_SECONDS = 5;Aktionen bei Scharf/Unscharfschaltung
Bei Scharf/Unscharfschaltung koennen Schaltgruppen zur Ausführung definiert werden. Es können beliebig viele Schaltgruppen eingetragen werden, die dann zur Ausführung kommen
const AktionenNachScharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei Bedarf const AktionenNachUnscharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei BedarfReaktion bei An/Abwesenheit
const anwesenheit = 'javascript.0.AnwesenheitsTracking.JemandDa' // bitte anpassen falls Anwesenheitstracking genutzt wird const AbwesenheitScenarioAktivierung = ["Scenario02Aktiv"];Gaeste Management
Ich nutze ein Flag, welches auf true geschaltet wird, wenn Übernachtungsgäste im haus sind.
Damit werden Rollladensteuerung und Heizungsverhalten beeinflußt. Dieses Flag nutze ich nun auch für die Alarmanlageneinstellung
Dabei wird dann z.B. der Gästebereich aus für die alarmierung ausgeschlossen. Die Alarmierung läuft dann still und nicht über die Sirenen
es koennen mehrere Scenarios angegeben werden, ein fuehrendes minus dreht den wert um - aus true wird false (Ausschluss). Das Scenario wird also deaktiviert// Die Funktion GAESTE Management wird nur aktiviert, wenn es den Datenpunkt zum Gaeste-Flag gibt const GaesteFlag = "javascript.0.Steuerungsflags.Gaeste" // das hier angegebene scenario wird bei Anwesenheit von Gaesten (Uebernachtung) aktiviert und deaktiviert const GaesteScenarioAktivierung = ["Scenario06Aktiv"];Protokollierung
Die wichtigsten Statusänderungen und Alarme werden in ein Protokoll im JSON Format geschrieben. Dieses kann dann z.B. mit VIS angezeigt werden (beispielsweise mit dem inventwo Adapter
Ein Schedule ist standardmäßig eingestellt um z.B. Monatlich eine Bereinigung der History durchzuführen. Das vermeidet auf die Dauer technische Probleme mit zu großen Datenpunkten
Dabei kann eingestellt werden, wieviel Tage in der History erhalten bleiben soll. Bei 0 wird alles gelöscht.const ScheduleAktiv = true; // Bei "false" wird der schedule nicht durchlaufen. Manuelles Loeschen kann ueber den Datenpunkt id_Button_Refresh_Historie (Button) moeglich const scheduleTimeClearSMTexte = "2 0 1 * *"; // am 1. tag des monats um 00:02 morgens sollen alle Alarmmeldungen des Monats geloescht werden id_History_VerbleibendeTage und aktive bleiben erhalten // const scheduleTimeClearSMTexte = "58 23 * * 0"; // alternative Sonntags um 23:58 Uhr sollen alle Alarmmeldungen der Woche im datenpunkt der Protokoll-Texte geloescht werdenSchreiben des Protokolls in eine CSV Datei
Die History kann auf Wunsch in eine externe Datei geschrieben. Diese dient dann zur Langzeitspeicherung dieser Daten
const ProkollExtern = true const PathProkollExtern = "/opt/iobroker/log/AlarmMeldungen.csv"; // Pfad und Dateiname des externen Logs // const PathProkollExtern = "/iobroker/log/AlarmMeldungen.csv"; // Pfad fuer Windows/ iobroker ist der angenommene iobroker home-pfadHTML Datenpunkte
Auf Wunsch kann auch ein HTML Code erzeugt werden, der eine fast identische Darstellung erzeugen kann, z.B. mit dem HTML Basic Widget aus VIS.
HTML kann für verschiedene Visualiserungstools genutzt werden. Inventwo hat meines Wissens nach zur Zeit noch Probleme mit Vis2. Die HTML Anzeige ist dabei eine perfekte Alternative.Dabei kann das Aussehen wie Farben Zellgrössen angepasst werden. Auch Spalten können abgewählt werden
// sinnvoll wenn inventwo nicht fuer die visualisierung genutzt werden kann const UpdateHTML_Datenpunkte = true // bei true werden die Datenpunkte automatisch angelegt und bei false wieder geloescht const id_HTML_Alarmmeldung_Aktuell = statusPath + "HTML_Alarmmeldung_Aktuell" // Empfehlung: nicht aendern const id_HTML_Alarmmeldung_Historie = statusPath + "HTML_Alarmmeldung_Historie" // Empfehlung: nicht aendern const HTML_TableWidthsAndStyles = { // Definition der Spaltenbreiten in CSS-Einheiten columnWidths: { datum: '95px', // Breite fuer Datum/Uhrzeit-Spalte alarmtype: '70px', // Breite fuer Alarmtyp-Spalte raum: '90px', // Breite fuer Raum-Spalte deviceType: '80px', // Breite fuer Geraetetyp-Spalte scenario: '50px', // Breite fuer Szenario-Spalte deviceName: '150px', // Breite fuer Geraetebezeichnung deviceId: '50px', // Breite fuer Geraete-ID message: '210px', // Breite fuer Nachrichtenspalte quittiert: '95px' // Breite fuer Quittierungsspalte }, // Visuelle Stileinstellungen fuer die Tabelle styles: { // Basistypografie fontSize: '10px', // Allgemeine Schriftgroesse // Kopfzeilenstil headerColor: '#333333', // Hintergrundfarbe der Kopfzeile headerTextColor: 'white', // Textfarbe der Kopfzeile // Zeilenstile (Zebra-Pattern) evenRowColor: '#4e5049', // Hintergrundfarbe gerade Zeilen oddRowColor: '#333333', // Hintergrundfarbe ungerade Zeilen evenRowTextColor: 'white', // Textfarbe gerade Zeilen oddRowTextColor: 'white', // Textfarbe ungerade Zeilen // Rahmeneinstellungen borderColor: '#000000', // Farbe der Tabellenraender borderWidth: '1px', // Staerke der Rahmenlinien useBorders: true, // Soll Rahmen anzeigen? (true/false) // Zellenlayout cellPadding: '5px' // Innenabstand der Tabellenzellen }, // Texte fuer die Tabellenkopfzeilen headerTexts: { datum: 'Datum/Uhrzeit', // ueberschrift Datumsspalte alarmtype: 'Alarmtyp', // ueberschrift Alarmtyp raum: 'Raum', // ueberschrift Raum deviceType: 'Geraetetyp', // ueberschrift Geraetetyp scenario: 'Szenario', // ueberschrift Szenario deviceName: 'Geraetebez.', // ueberschrift Geraetebezeichnung (abgekuerzt) deviceId: 'Geraete-ID', // ueberschrift Geraete-ID message: 'Nachricht', // ueberschrift Nachrichteninhalt quittiert: 'Quittiert seit' // ueberschrift Quittierungsstatus }, // Konfiguration der Spaltensichtbarkeit - ein oder ausblenden columns: { datum: { visible: true }, alarmtype: { visible: true }, raum: { visible: true }, deviceType: { visible: true }, scenario: { visible: true }, deviceName: { visible: true }, deviceId: { visible: true }, message: { visible: true }, quittiert: { visible: true } } };Übersicht über die Geräte je Raum, die aktiv bzw inaktiv sind und welchse Scenarios mit diesem Verknüpft sind.
Standardmäßig wird ein HTML code erzeugt, der eine Liste der der Geräte/Räume anzeigt.
Dies ist insbesondere hilfreich um zu überprüfen, ob die Einstellungen dem gewünschten Ergebnis entsprechen.Die Liste kann ebenfalls im Detail mit Größen, Style und scope Einstellungen versehen werden
const HTML_Raumzuordnungen_WidthAndStyles = { columnWidths: { raum: '90px', scenario: '150px', deviceType: '100px', }, styles: { fontSize: '10px', headerColor: '#333333', headerTextColor: 'white', evenRowColor: '#4e5049', oddRowColor: '#333333', evenRowTextColor: 'white', oddRowTextColor: 'white', borderColor: '#000000', borderWidth: '1px', useBorders: true, cellPadding: '5px' }, headerTexts: { raum: 'Raum', scenario: 'Szenarien', deviceType: 'Geraetetyp' }, columns: {raum: { visible: true },scenario: { visible: true }, deviceType: { visible: true } } };Integration von Sabotage und Stoerungsmeldungen (Unreach) aus dem Servicemeldungs-Script
Homematic Sabotagemeldungen und Stoerungsmeldungen werden anders gemeldet als z.B. die Aktivierung eines Sensors und haben ihre eigene Komplexität
Wer diese Meldungen integrieren möchte kann dies über das Servicemeldungs-Script erreichen.
Dies geschieht über die JSON Datei des Scriptes die dann eingelesen und ausgewertet werden kann.Link zum Script: https://forum.iobroker.net/topic/77816/vorlage-servicemeldungen-volume2
// Wer das Servicemeldungsscript nutzt kann damit verbinden und Sabotage oder Unreach als Alarm melden const SM_CountSabotage = 'javascript.0.ServicemeldungenVol2.Anzahl_SABOTAGE' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_CountUnreach = 'javascript.0.ServicemeldungenVol2.Anzahl_UNREACH' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_Meldungen_JSON = 'javascript.0.ServicemeldungenVol2.JSONAktuelleSM' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wirdAutoconfirm Servicemeldungen
Servicemeldungen können automatisch bestätigt werden. Hingegen müssen Einbruch, Wasser, Rauchmeldungen manuell quittiert werden.
eine Manuelle Quittierung ist auch für Servicemeldungen möglich, kann also eingestellt werden.
Anmerkung: Geoeffnet-Meldungen werden immer automatsch deaktiviert, wenn alles geschlossen istconst ServiceMeldungSabotageAutoConfirm = true; // Wenn die Sabotage aufgehoben wird, dann wird die der SabotageDatenpunkt automatisch zurueckgesetzt bei true const ServiceMMeldungStoerungAutoConfirm = true; // Wenn die Stoerung aufgehoben wird, dann wird die der StoerungsDatenpunkt automatisch zurueckgesetzt bei trueein paar fehlen noch
Script und Views findet ihr hier:
Das Script hat netto ca 2000 Zeilen. (ohne Kommentar-und Leerzeilen)
AlarmAdv Script:
AlarmAdv_V1-00.txtJSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
AlarmViewJson.txtHTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
Der View beinhaltet Widgets aus dem Material Design Adapter.
AlarmViewHTML.txtDebugging-Hinweise:
Bitte beachtet, dass ihr bei Fehler das Debug Protokoll mitlaufen lasst.
Der DebugLevel sollte dabei mindestens auf 2 stehen. 3 könnte auch notwendig werden
Es wird viele Zeilen geben. Ihr könnte auch in eine CSV Datei schreiben und dann hier im Thread posten.//DEBUGGING----OPTIONAL----------------------------------------------------------------------------------------------------------------------------- const debugLevel = 1 ; // Empfehlung = 1 const SystemLog = false; // schreib das Sytemprotokoll in ein externes log (sollte normalerweise deaktviert sein nur bei Problemen verwenden) const PathSystemLog = "/opt/iobroker/log/Alarmscript.csv"; // Pfad und Dateiname des externen Logs //const PathSMLog = "/iobroker/log/Alarmscript.csv"; // Pfad des externen logs fuer Windows/ iobroker ist der angenommene iobroker home-pfadvG Looxer
ScreenShot der Protokollierung

-
Hi,
seit einigen Monaten bastele ich an einem Projekt um mein Haus elektronisch abzusichern. Sicherheit treibt mich schon seit längerem um. Das Anwesenheitssimulationsscript, die Einbindung einiger Kameras rund ums Haus sind einige Beispiele. Jetzt kommt hinzu eine doch recht umfassende Alarmanlagen installation. Das Script dazu richtet sich or allem an Nutzer mit hoeherem Anspruch an einer solchen Anlage im ioBroker Umfeld. Im Folgenden teile ich was ich dazu an Hardware nutze und auch die Details des Scriptes.
Was Hardware angeht, so nutze ich überwiegend Homematic. Das Script ist aber nicht nur auf Homematic ausgerichtet. Alles was in ioBroker geht, sollte auch mit dem Script gehen.Meine ausgewählte Hardware:
Bei der Hardware habe ich mich hauptsächlich an Homematic orientiert mit folgenden Komponenten- Bewegungsmelder
- Fenstersensoren
- Homematic Alarmsirenen ASIR
- Homematic Rauchmelder
- Homematic Wasermelder
- Keypad
- Schlossantrieb
- ELV Statusboard "ELV-SH-SB8" fuer Status und Steuerung
weitere Komponenten
- Wandtablet
- VIS Steuerung
- Wasermelder
- Rauchmelder
Komponenten noch in der Anschaffung
-
Glasbruchsensoren
-
weitere Melder und Fenstersensoren
-
Keypad
Zum Keypad kann ich sagen, dass ich ganz ok damit bin. (wobei ich einen Fingerprintsensor schon vermisse) Es funktioniert gut und laesst sich direkt mit dem Tuerschloss direkt verbinden.
Das ist auf Jeden Fall ein plus. Es soll ja in Kürze auch eine festere Verbindung zur Doorbird geben. Da weiß ich aber noch nicht wie das genau läuft.
Das Keypad ist ja auch keine riesige Anschaffung und lässt sich leicht verbauen. Das ist anders mit der Doorbird. Also Doorbird mal nach hinten gestellt
Was gut funktioniert:
-
natürlich auf und zuschließen
-
Alarm scharf beim zuschließen
-
alarm unscharf beim aufschließen
-
Direktverbindung zum ELV StatusBoard (komme ich weiter unten noch drauf)
Was nicht so schön ist. -
Verarbeitung - halt Kunststoff
-
kein Fingerprint
-
Der Homematic Türschloßantrieb.
Hier musste ich ersteinmal den Schließzylinder tauschen. Das müssen wahrscheinlich die meißten.
Es gibt auch gute Videos im Netz, die den Einbau beschreiben - kein Hexenwerk
Bei den Maßen muß man halt ein wenig aufpassen. 10mm sollte der Zylinder schon hinausschauen.
Notöffnung ist ein Muss (aufschließen von außen während der Schlüssel steckt)
Ansonsten war der Einbau easy. -
Das ElV Status Board
Es ist ein Bausatz. Das vorneweg. Es muß nicht gelötet werden und der Zusammenbau gestaltet sich einfach.
Aber das mag jeder anders empfinden. Auch hier gibt es Videos im Netz.
Ein bischen schwieriger ist das einstellen der LED Farben ( aber auch das empfand ich als einfach)Was macht das Board im Kontext der Alarmanlage. Ich habe 8 LEDs und 8 Hardwareschalter je LED einer.
Diese habe ich folgendermaßen belegt- Alarmanlage scharf/unscharf - ein Druck und die Anlage ist von innen scharf
- Einbruchsmeldung - bei Druck kann diese quittiert werden
- geoeffnet Meldung (wenn ein Fenstersensor etc meldet, dass noch etwas geoeffnet im Haus ist)
- Sabotage Meldung (zusatzinfo zur Einbruchsmeldung)
- Stoerungs Meldung (wenn komponenten nicht erreichbar sind)
- Rauch Meldung
- Wasser Meldung
- und einen Schalter, den ich STILL nenne, Damit können laufende Sirenen etc, still geschaltet werden
Diese Belegung ist natürlich variabel. aber so ist sie bei mir eingerichet
Zum Board selber.
- macht nicht wirklich einen hochwertigen Eindruck - ist aber akzeptabel
- es braucht ein Netzteil, somit nicht ganz ortsunabhängig
- es tut was es soll. Bei mir fristet es das Dasein im Schlafzimmer (macht wohl am meisten Sinn)

und da das Ganze nichts ohne Software macht, habe ich mich umgeschaut.
Es gibt einen Alarmadapter und ein nicht mehr gewartetes script.
Beides hat, für das was ich mir vorstellte, nicht gepasst. Also kommt ein neues Script hinzu, das mittlerweile im Einsatz ist.Konzept des Scriptes:
Dann das Script. Ich muß sagen, dass die Komplexität doch sehr groß ist. Das liegt natürlich daran, dass ich es flexibel haben wollte.
Leicht anpassbar an neue Komponenten und Situation.hier ein paar features (bei weitem nicht komplett
-
Zunächst wird die Raumsituation beschrieben und in einer Tabelle hinterlegt.
Die Sensoren werden zugeordnet zu Räumen.
Also Raum: Wohnzimmer,
RaumType ist innen,
zuodnung der Sensoren zu GeräteTypen je Raum (Bewegung, Fenster, Türen, Rollladen, Glasbruch, Rauch, Wasser) -
Dann werden Sichten bzw Filter auf die Räume gelegt (auch in einer Tabelle)
Eine Sicht kann z.B. alle innenliegenden Räume aber ohne das Gästezimmer sein -
Die Sichten werden dann Scenarios zugeordnet
Scenario Schlafen bekommt dann vielleicht die reine InnenSicht (eine Sicht ohne Schlafzimmerfenster wäre hilfreich)
Scenario Gäste bekommt eine Sicht nur innen aber ohne Gästezimmer.
Die Scenarios können einzeln aktiviert und deaktiviert werden. Den Sencarios sind auch Alarme zugeordnet.
Wenn ein Scenario ein Alarmauslöser ist, dann werden die Hardwarekomponenten direkt angesprochen z.B. die ASIR Sirene (quasi Nativ)Dabei muß man sich erstmal gedanklich einfinden. Das geht aber schnell.
Weitere Features
- Verbindung zum Servicemeldungsscript (nutzt einfach dessen ressourcen für Sabotage Alarm und UnreachAlarm)
- Umfassende Protokollierung in JSON und HTML
- externe protokollierung zusätzlich
- native Einbindung des Statusboards
- native Einbindung der Alarmsirene ASIR
- umfassende Meldungen an die bekannten services (email, telegram, whatsapp etc etc) das ganze einstellbar
- automatische Berücksichtigung von Abwesenheiten (z.B. Aktivierung/Dekativierung von Scenarios
- automatische Berücksichtigung bei anwesenden Gaesten (z.B. Aktivierung/Dekativierung von Scenarios
- etc. etc.
Die 5 wichtigsten Schritte beim Einstellen des Scriptes
Vorgehensweise bei der Anpassung des Scriptes auf die eigenen Bedürfnisse
Der Einstellungsbereich enthält Einstellungssklassen- Bitte Anpassen
- optional
- nicht ändern
Somit sollte der Fokus zunächst auf "Bitte Anpassen" gelegt werden.
Hierzu zählen die folgenden Tabellen1. raumDefinition mit folgenden Feldern:
Raumbezeichnung - kann frei vergeben werden
Type: - kann frei vergeben werden. Es macht Sinn z.B. nach innen und aussen zu unterscheiden
Position - kann frei vergeben werden. Es macht Sinn z.B. nach Stockwerk zu unterscheiden OG, UG, KG
Gerätetypen: Bewegung: [], Fenster: [], Tueren: [], Rollladen: [], Glasbruch: [], Wasser: [],
Die Gerätetypen müssen nicht enthalten sein, wenn sie für einen Raum nicht benötigt werden
Wenn sie hinzugefügt werden können einfach die zugehörigen datenpunkte hinzugefügt werdenWichtig ist:
- Die geschweiften und eckigen Klammern müssen genauso im Kontext erhalten bleiben
- Komma müssen nach jeder Felddefinition gesetzt werden
Beispiel
const raumDefinition = { Wohnzimmer: { Type: "innen", Position: "oben", Fenster: [], Tueren: ['hm-rpc.1.0000DD89B7xxx8.1.STATE'], // Terrassentuere }, Kueche: { Type: "innen", Position: "oben", Fenster: ['hm-rpc.1.003660Cxxx05D0.1.STATE','hm-rpc.1.003660C993BEF6.1.STATE'], // Fenstersensor Kueche links und rechts }, };2. Die Filter (Sichten) Definition. Die Filter beziehen sich auf die eingestellte raumDefinition
Felder:
Filtername: kann frei vergeben werden
raumTyp: bezieht sich auf raumDefinition Type - muss übereinstimmen ( ein leeres Feld heißt alle typen)
raumPosition: bezieht sich auf raumDefinition Position und muss übereinstimmen ( ein leeres Feld heißt alle Positionen)
geraetetypen: bezieht sich auf raumDefinition Gerätetypen (Fenster,Melder etc) und muss übereinstimmen ( ein leeres Feld heißt alle Gerätetypen)
raeume: bezieht sich auf raumDefinition Raumname (Wohnzimmer etc) und muss übereinstimmen ( ein leeres Feld heißt alle Raumnamen)
Datenpunkte: bezieht sich auf raumDefinition auf die zugeordneten Datenpunkte und muss übereinstimmen ( ein leeres Feld heißt alle Datenpunkte)Grundsätzlich können für jedes Feld Ausschlüsse gemacht werden. Erlaubt sind minus (-) und Doppelminus (--)
Minus heißt Ausschluss aus dem später zugeordneten Scenario was auch bedeutet, dass dieser Datenpunkt bei einem zweiten aktiven scenario wieder zugeordnet werden könnte
Doppelminus heißt genereller Ausschluss auch wenn dieser Datenpunkt bei einem zweiten aktiven scenario zugeordnet wurdeEs sollten immer alle Felder vorhanden sein (anders als bei der raumDefinition).
Beispiel:
let FilterDefinition = { Schlafen: { raumTyp: ['innen'], // Raumtypen (z. B. innen, aussen) als Array oder keine Angabe = alle raumPosition: [], // Positionen (z. B. oben, unten oder ErsterStock,ZweiterStock,DritterStock) als Array oder keine Angabe = alle geraetetypen: [], // Geraetegruppen (z. B. Bewegung, Fenster, etc.) oder keine Angabe = alle raeume: [], // Einzelraeume bei keiner Angabe werden alle Raeume verwendet Datenpunkte: ['-hm-rpc.1.003660C9A62C5D.1.STATE','-hm-rpc.1.0000D709954526.1.STATE'] // Schlafzimmerfenster und Elternbadfenster ausgeschlossen (Lueftung) }, Abwesend: { raumTyp: ['innen'], raumPosition: [], geraetetypen: [], raeume: [], Datenpunkte: [] },3. Scenarios
Scenarios lösen am Ende Alarme aus. Mehrere Filter können einem Scenario zugeordnet werden. Auch mehrere Aktionen (Alerts) können zugeordnet werden.
Jedes Scenario lässt sich aktivieren oder deaktivieren.
Wenn mehrere Scenarios aktiviert sind und ein Datenpunkt mehreren Scenarios zugeordnet wurden, dann bestimmt die Priorität welches Scenario als Alarm ausgeführt wird
Es lassen sich maximal 99 Scenarios definierenconst scenarioDefinition = { Scenario01: { name: "Schlafen", Prio: 6, Filter: ['Schlafen'], Alert: ['FlashSchlafzimmerEIN',"FlashStandard1EIN"] }, Scenario02: { name: "Abwesend", Prio: 5, Filter: ["Abwesend"], Alert: ["SireneASIR2EIN","Licht_OG"] }, Scenario03: { name: "Garage", Prio: 10, Filter: ["Garage"], Alert: ['FlashSchlafzimmerEIN'] }, Scenario04: { name: "Urlaub", Prio: 6, Filter: ['Urlaub'], Alert: [] }, Scenario05: { name: "Haustiere", Prio: 7, Filter: ['Haustiere'], Alert: [] }, Scenario06: { name: "Gaeste", Prio: 4, Filter: ["Gaeste"], Alert: ["FlashSchlafzimmerEIN"] }, Scenario07: { name: "frei", Prio: 8, Filter: [], Alert: [] }, Scenario08: { name: "Stoerung", Prio: 9, Filter: ['Stoerung'], Alert: [] }, // Filter ist bei Stoerung immer = Stoerung Scenario09: { name: "Gefaehrdet", Prio: 3, Filter: ['HochRisiko'], Alert: ["SireneASIR2EIN","Licht_Hoch_Risiko_Aussen"] }, Scenario10: { name: "Wasser", Prio: 2, Filter: ['Wasser'], Alert: ["SireneASIR2EIN"] }, Scenario11: { name: "Rauch", Prio: 1, Filter: ['Rauch'], Alert: ["SireneASIR1EIN","SireneASIR2EIN"] }, };4. Direkte Ansteuerung von hardware im Alarmfall (Alert im Scenario)
die Namen der AusgabeDevices können frei vergeben werden.
Es gibt aber fest verdrahtete Devices.- HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
- Datenpunkt_Standard: Hier wird ein Datenpunkt eingetragen, der reagiern soll Angaben sind auch zu machen beim Aktivierungswert, Rückstellwert, Dauer und Delay
(beispielsweise können hier Lichter geschaltet werden oder andere nicht-Homatic Sirenen etc.) was auch immer - Datenpunkt_Flash ist ein Datenpunkt bei dem man eine Lampe mit einer Frequenz blinken lassen kann. Nutze ich z.B. für das Schlafzimmer als stillen Alarm für die Scenarien wo ich nicht
gleich die Sirenen laufen lassen möchte
anzugebende Werte: der entsprechende Datenpunkt, Aktivierungswert, Wiederholungen (Anzahl - nicht zu viele verwenden), Frequenz in ms (Abstand zwischen zwei an/aus Schaltungen, Startdelay in ms
Die hier genutzten Geräte können über den STILL Datenpunkt alle komplett auf push ausgeschaltet werden
Beispiele
const AlertAusgabeDevices = { SireneASIR1EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000, }, SireneASIR1AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000, }, SireneASIR2EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000 }, SireneASIR2AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000 }, Standard1Ein:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Rueckstellwert: false, // Rueckstellwert wird gesetzt wenn die Dauer abgelaufen ist. Keine Funktion wenn Dauer = null ist Dauer: 100000, // in ms - null ohne Auschaltung Startdelay: 0, // in ms }, Standard1Aus:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll }, FlashStandard1EIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashStandard1AUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerEIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerAUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false oder 1/0 100/0 zulaessig Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, }5. Definition von Schaltgruppen.
Schaltgruppen können für Scenario-Alerts aber auch bei Alarmaktivierung / Alarmdeaktivierung ausgelöst werden
einzustellendwe Felder: Datenpunkt der geschaltet werden soll. Wert der zur Schaltung genutzt werden soll, Delay in sekunden, Dauer in SekundenBeispiel:
const Schaltgruppen = { Licht_OG: [ { Datenpunkt: 'hm-rpc.1.00351F29xxxxE3.3.STATE', Wert: true, Delay: 0.1, Dauer: null }, // WZ Licht Terrasse Verzoegerung in sekunden // Dauer in sekunden // null = endlos { Datenpunkt: 'hm-rpc.1.0008E0C9xxxxB0.4.LEVEL', Wert: 100, Delay: 0.1, Dauer: 600 } // WZ Esszimmertisch Dimmer// Feld Dauer: danach wird auf Ausgangswert zurueckgesetzt ], Licht_Hoch_Risiko_Aussen: [ { Datenpunkt: 'hm-rpc.1.0008A0C9xxxxx6.1.STATE', Wert: true, Delay: 0.05, Dauer: 600 }, // Licht Kinderbad { Datenpunkt: 'hm-rpc.1.0008A0C9xxxx50.1.STATE', Wert: true, Delay: 0.1, Dauer: 600 }, // Licht aussen Nordseite { Datenpunkt: 'hm-rpc.1.0008A269xxxx47.1.STATE'/*Licht Hobbyraum Status:1 STATE*/, Wert: true, Delay: 150, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9xxxx63.10.STATE'/*Kelleraktor 5 Maschinenraum PoolHalle:10 STATE*/, Wert: true, Delay: 0.2, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9Axxx70.18.STATE'/*Keller Aktor 1 Aktor Licht Steinterasse:18 STATE*/, Wert: true, Delay: 0.25, Dauer: 600 }, ] };Die optionalen Einstellungen
Messenging
Es können die wichtigsten messenging services genutzt werden um kurzNachrichten oder verlängerte Nachrichten an die verschiedenen
services zu senden. Je MessageType und Service kann entschieden werden, ob eine Nachricht gesendet werden soll, ob die Kurzversion
oder Langversion versendet werden soll und welche Instanz genutzt werden soll.
Falls mehrere Instanzen für einen Service gleichzeitig genutzt werden sollen, kann die entsprechende Instanz hinzugefügt werden sollAls Nachrichtenservice kann auch eine Sprachnachricht versendet werden. (SayIt - Adapter)
Vorraussetzung ist, dass der jeweilige ioBroker Adapter für den jeweiligen Service installiert und konfiguriert ist.const services = ['email', 'whatsApp', 'Signal', 'Telegram', 'Pushover', 'Pushsafer', 'Sprache',]; const MessengerScope = { 'Rauch': [true, true, false, false, false, false, false, ], 'Einbruch': [true, false, false, false, false, false, false, ], 'Wasser': [true, true, false, false, false, false, false, ], 'Sabotage': [false, false, false, false, false, false, false, ], 'Stoerung': [false, false, false, false, false, false, false, ], 'Alarm_Scharf': [true, false, false, false, false, false, false, ], 'Alarm_Unscharf': [true, false, false, false, false, false, false, ], 'ScenarioAktiviert': [true, false, false, false, false, false, false, ], 'ScenarioDeaktiviert': [true, false, false, false, false, false, false, ], 'Alarm_Still_Geschaltet': [false, false, false, false, false, false, false, ], 'Fallback': [false, false, false, false, false, false, false, ], // Fallback nicht loeschen. wird genutzt, wenn keine andere Definition gemacht worden ist } const MessengerInstanz = [0, 0, 0, 0, 0, 0, 0, ]; // Instanz des Messengers const TextTypeKurz = [false, true, true, true, true, true, true, ]; // bei true wird der Kurztext gesendet - sonst der LangtextNutzung eines oder mehrerer ELV ELV-SH-SB8 Statusboard
es können beliebig viele Statusboards eingebunden werden. na ja, 2 machen vielleicht sinn für 2 Etagen oder eines für Statusanzeige und eines zur ScenarioAktivierung/Deaktivierung
Die Statusboards und deren Status wird nicht mit dem Status ersetzt, was auch möglich gewesen wäre, vielmehr wird der Status synchronisiert mit dem jeweiligen Statuspunkt des Scriptesconst ControlDevices = [ { DeviceID: "StatusBoard1", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3CxxxxsEAx.", LED1: DP_Alarmaktivierung, DP_2ndPart1 : "10.STATE", // Meldungsanzeige und Aktivierung/Deaktivierung erfolgt durch die entsprechenden Datenpunkte LED2: DP_Einbruchsmeldung, DP_2ndPart2 : "14.STATE", // manuellAenderbar true laesst es zu den Alarm ueber das Board auszuschalten // dann werden auch alle AkustikGeraete Sirenen ausgeschaltet LED3: DP_GeoeffnetMeldung, DP_2ndPart3 : "18.STATE", // DP und DP_2ndPart entspricht dem genauen Datenpunkt jeder LED LED4: DP_Sabotagemeldung, DP_2ndPart4 : "22.STATE", LED5: DP_Stoerungsmeldung, DP_2ndPart5 : "26.STATE", LED6: DP_Rauchmeldung, DP_2ndPart6 : "30.STATE", LED7: DP_Wassermeldung, DP_2ndPart7 : "34.STATE", // ausgeschaltet werden aber nicht die Schaltgruppen LED8: DP_Still, DP_2ndPart8 : "38.STATE", // laufende Alarmgeraete (Sirenen etc) werden ausgeschaltet }, { DeviceID: "StatusBoard2", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3C00005xxx.", LED1: "Scenario01Aktiv", DP_2ndPart1 : "10.STATE", // Szenarioschaltung fuer StatusBoard2 LED2: "Scenario02Aktiv", DP_2ndPart2 : "14.STATE", LED3: "Scenario03Aktiv", DP_2ndPart3 : "18.STATE", LED4: "Scenario03Aktiv", DP_2ndPart4 : "22.STATE", LED5: "Scenario05Aktiv", DP_2ndPart5 : "26.STATE", LED6: "Scenario06Aktiv", DP_2ndPart6 : "30.STATE", LED7: "Scenario07Aktiv", DP_2ndPart7 : "34.STATE", // Szenarioschaltung fuer StatusBoard2 LED8: "Scenario08Aktiv", DP_2ndPart8 : "38.STATE", } ];Einstellungen zur Definition wann ein Alarm erfolgt
Die Interpretation ob ein Alarm vorliegt hängt vom jeweiligen Datenpunkt ab. Das kann dediziert eingestellt werden
In den meisten Fällen reicht eine allgemeine Einstellung: true, 1, 100 etc.Sollte ein datenpunkt aber eine andere Logik verfolgen, dann kann ein expliziter Auslösewert für diesen Datenpunkt eignestellt werden
const AlarmAusloesungswerte = [ { op: '==', wert: true }, // nur true zulaessig - bitte beibehalten { op: '>', wert: 0 }, // groesser als 0 - bitte beibehalten { range: { min: 1, max: 2 } }, // Beispiel range {exception: {dpAusnahme:'hm-rpc.1.000F1D8xxxx02D.1.MOTION', wert: false}}, // je Datenpunkt mit ausnahmen, z.B. fuer Garagentorsensor ist false = geoeffnet - Beispiel {exception: {dpAusnahme:"hm-rpc.1.0047E40xxxxx88.1.LOCK_STATE", wert: 2}}, // hmip-dld unlocked = 2 ];Verzögerung bei Alarmaktivierung
Die Anzahl von Sekunden von der Anfrage zur Aktivierung (Scharfschaltung) bis zur tatsächlichen Aktivierung des Alarmes kann eingestellt werden.
Während dieser Zeit, kann der Alarm trotzdem wieder unscharf geschaltet werden. Die Wartezeit wird dann abgebrochenconst AKTIVIERUNGSDELAY_SECONDS = 5;Aktionen bei Scharf/Unscharfschaltung
Bei Scharf/Unscharfschaltung koennen Schaltgruppen zur Ausführung definiert werden. Es können beliebig viele Schaltgruppen eingetragen werden, die dann zur Ausführung kommen
const AktionenNachScharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei Bedarf const AktionenNachUnscharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei BedarfReaktion bei An/Abwesenheit
const anwesenheit = 'javascript.0.AnwesenheitsTracking.JemandDa' // bitte anpassen falls Anwesenheitstracking genutzt wird const AbwesenheitScenarioAktivierung = ["Scenario02Aktiv"];Gaeste Management
Ich nutze ein Flag, welches auf true geschaltet wird, wenn Übernachtungsgäste im haus sind.
Damit werden Rollladensteuerung und Heizungsverhalten beeinflußt. Dieses Flag nutze ich nun auch für die Alarmanlageneinstellung
Dabei wird dann z.B. der Gästebereich aus für die alarmierung ausgeschlossen. Die Alarmierung läuft dann still und nicht über die Sirenen
es koennen mehrere Scenarios angegeben werden, ein fuehrendes minus dreht den wert um - aus true wird false (Ausschluss). Das Scenario wird also deaktiviert// Die Funktion GAESTE Management wird nur aktiviert, wenn es den Datenpunkt zum Gaeste-Flag gibt const GaesteFlag = "javascript.0.Steuerungsflags.Gaeste" // das hier angegebene scenario wird bei Anwesenheit von Gaesten (Uebernachtung) aktiviert und deaktiviert const GaesteScenarioAktivierung = ["Scenario06Aktiv"];Protokollierung
Die wichtigsten Statusänderungen und Alarme werden in ein Protokoll im JSON Format geschrieben. Dieses kann dann z.B. mit VIS angezeigt werden (beispielsweise mit dem inventwo Adapter
Ein Schedule ist standardmäßig eingestellt um z.B. Monatlich eine Bereinigung der History durchzuführen. Das vermeidet auf die Dauer technische Probleme mit zu großen Datenpunkten
Dabei kann eingestellt werden, wieviel Tage in der History erhalten bleiben soll. Bei 0 wird alles gelöscht.const ScheduleAktiv = true; // Bei "false" wird der schedule nicht durchlaufen. Manuelles Loeschen kann ueber den Datenpunkt id_Button_Refresh_Historie (Button) moeglich const scheduleTimeClearSMTexte = "2 0 1 * *"; // am 1. tag des monats um 00:02 morgens sollen alle Alarmmeldungen des Monats geloescht werden id_History_VerbleibendeTage und aktive bleiben erhalten // const scheduleTimeClearSMTexte = "58 23 * * 0"; // alternative Sonntags um 23:58 Uhr sollen alle Alarmmeldungen der Woche im datenpunkt der Protokoll-Texte geloescht werdenSchreiben des Protokolls in eine CSV Datei
Die History kann auf Wunsch in eine externe Datei geschrieben. Diese dient dann zur Langzeitspeicherung dieser Daten
const ProkollExtern = true const PathProkollExtern = "/opt/iobroker/log/AlarmMeldungen.csv"; // Pfad und Dateiname des externen Logs // const PathProkollExtern = "/iobroker/log/AlarmMeldungen.csv"; // Pfad fuer Windows/ iobroker ist der angenommene iobroker home-pfadHTML Datenpunkte
Auf Wunsch kann auch ein HTML Code erzeugt werden, der eine fast identische Darstellung erzeugen kann, z.B. mit dem HTML Basic Widget aus VIS.
HTML kann für verschiedene Visualiserungstools genutzt werden. Inventwo hat meines Wissens nach zur Zeit noch Probleme mit Vis2. Die HTML Anzeige ist dabei eine perfekte Alternative.Dabei kann das Aussehen wie Farben Zellgrössen angepasst werden. Auch Spalten können abgewählt werden
// sinnvoll wenn inventwo nicht fuer die visualisierung genutzt werden kann const UpdateHTML_Datenpunkte = true // bei true werden die Datenpunkte automatisch angelegt und bei false wieder geloescht const id_HTML_Alarmmeldung_Aktuell = statusPath + "HTML_Alarmmeldung_Aktuell" // Empfehlung: nicht aendern const id_HTML_Alarmmeldung_Historie = statusPath + "HTML_Alarmmeldung_Historie" // Empfehlung: nicht aendern const HTML_TableWidthsAndStyles = { // Definition der Spaltenbreiten in CSS-Einheiten columnWidths: { datum: '95px', // Breite fuer Datum/Uhrzeit-Spalte alarmtype: '70px', // Breite fuer Alarmtyp-Spalte raum: '90px', // Breite fuer Raum-Spalte deviceType: '80px', // Breite fuer Geraetetyp-Spalte scenario: '50px', // Breite fuer Szenario-Spalte deviceName: '150px', // Breite fuer Geraetebezeichnung deviceId: '50px', // Breite fuer Geraete-ID message: '210px', // Breite fuer Nachrichtenspalte quittiert: '95px' // Breite fuer Quittierungsspalte }, // Visuelle Stileinstellungen fuer die Tabelle styles: { // Basistypografie fontSize: '10px', // Allgemeine Schriftgroesse // Kopfzeilenstil headerColor: '#333333', // Hintergrundfarbe der Kopfzeile headerTextColor: 'white', // Textfarbe der Kopfzeile // Zeilenstile (Zebra-Pattern) evenRowColor: '#4e5049', // Hintergrundfarbe gerade Zeilen oddRowColor: '#333333', // Hintergrundfarbe ungerade Zeilen evenRowTextColor: 'white', // Textfarbe gerade Zeilen oddRowTextColor: 'white', // Textfarbe ungerade Zeilen // Rahmeneinstellungen borderColor: '#000000', // Farbe der Tabellenraender borderWidth: '1px', // Staerke der Rahmenlinien useBorders: true, // Soll Rahmen anzeigen? (true/false) // Zellenlayout cellPadding: '5px' // Innenabstand der Tabellenzellen }, // Texte fuer die Tabellenkopfzeilen headerTexts: { datum: 'Datum/Uhrzeit', // ueberschrift Datumsspalte alarmtype: 'Alarmtyp', // ueberschrift Alarmtyp raum: 'Raum', // ueberschrift Raum deviceType: 'Geraetetyp', // ueberschrift Geraetetyp scenario: 'Szenario', // ueberschrift Szenario deviceName: 'Geraetebez.', // ueberschrift Geraetebezeichnung (abgekuerzt) deviceId: 'Geraete-ID', // ueberschrift Geraete-ID message: 'Nachricht', // ueberschrift Nachrichteninhalt quittiert: 'Quittiert seit' // ueberschrift Quittierungsstatus }, // Konfiguration der Spaltensichtbarkeit - ein oder ausblenden columns: { datum: { visible: true }, alarmtype: { visible: true }, raum: { visible: true }, deviceType: { visible: true }, scenario: { visible: true }, deviceName: { visible: true }, deviceId: { visible: true }, message: { visible: true }, quittiert: { visible: true } } };Übersicht über die Geräte je Raum, die aktiv bzw inaktiv sind und welchse Scenarios mit diesem Verknüpft sind.
Standardmäßig wird ein HTML code erzeugt, der eine Liste der der Geräte/Räume anzeigt.
Dies ist insbesondere hilfreich um zu überprüfen, ob die Einstellungen dem gewünschten Ergebnis entsprechen.Die Liste kann ebenfalls im Detail mit Größen, Style und scope Einstellungen versehen werden
const HTML_Raumzuordnungen_WidthAndStyles = { columnWidths: { raum: '90px', scenario: '150px', deviceType: '100px', }, styles: { fontSize: '10px', headerColor: '#333333', headerTextColor: 'white', evenRowColor: '#4e5049', oddRowColor: '#333333', evenRowTextColor: 'white', oddRowTextColor: 'white', borderColor: '#000000', borderWidth: '1px', useBorders: true, cellPadding: '5px' }, headerTexts: { raum: 'Raum', scenario: 'Szenarien', deviceType: 'Geraetetyp' }, columns: {raum: { visible: true },scenario: { visible: true }, deviceType: { visible: true } } };Integration von Sabotage und Stoerungsmeldungen (Unreach) aus dem Servicemeldungs-Script
Homematic Sabotagemeldungen und Stoerungsmeldungen werden anders gemeldet als z.B. die Aktivierung eines Sensors und haben ihre eigene Komplexität
Wer diese Meldungen integrieren möchte kann dies über das Servicemeldungs-Script erreichen.
Dies geschieht über die JSON Datei des Scriptes die dann eingelesen und ausgewertet werden kann.Link zum Script: https://forum.iobroker.net/topic/77816/vorlage-servicemeldungen-volume2
// Wer das Servicemeldungsscript nutzt kann damit verbinden und Sabotage oder Unreach als Alarm melden const SM_CountSabotage = 'javascript.0.ServicemeldungenVol2.Anzahl_SABOTAGE' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_CountUnreach = 'javascript.0.ServicemeldungenVol2.Anzahl_UNREACH' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_Meldungen_JSON = 'javascript.0.ServicemeldungenVol2.JSONAktuelleSM' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wirdAutoconfirm Servicemeldungen
Servicemeldungen können automatisch bestätigt werden. Hingegen müssen Einbruch, Wasser, Rauchmeldungen manuell quittiert werden.
eine Manuelle Quittierung ist auch für Servicemeldungen möglich, kann also eingestellt werden.
Anmerkung: Geoeffnet-Meldungen werden immer automatsch deaktiviert, wenn alles geschlossen istconst ServiceMeldungSabotageAutoConfirm = true; // Wenn die Sabotage aufgehoben wird, dann wird die der SabotageDatenpunkt automatisch zurueckgesetzt bei true const ServiceMMeldungStoerungAutoConfirm = true; // Wenn die Stoerung aufgehoben wird, dann wird die der StoerungsDatenpunkt automatisch zurueckgesetzt bei trueein paar fehlen noch
Script und Views findet ihr hier:
Das Script hat netto ca 2000 Zeilen. (ohne Kommentar-und Leerzeilen)
AlarmAdv Script:
AlarmAdv_V1-00.txtJSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
AlarmViewJson.txtHTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
Der View beinhaltet Widgets aus dem Material Design Adapter.
AlarmViewHTML.txtDebugging-Hinweise:
Bitte beachtet, dass ihr bei Fehler das Debug Protokoll mitlaufen lasst.
Der DebugLevel sollte dabei mindestens auf 2 stehen. 3 könnte auch notwendig werden
Es wird viele Zeilen geben. Ihr könnte auch in eine CSV Datei schreiben und dann hier im Thread posten.//DEBUGGING----OPTIONAL----------------------------------------------------------------------------------------------------------------------------- const debugLevel = 1 ; // Empfehlung = 1 const SystemLog = false; // schreib das Sytemprotokoll in ein externes log (sollte normalerweise deaktviert sein nur bei Problemen verwenden) const PathSystemLog = "/opt/iobroker/log/Alarmscript.csv"; // Pfad und Dateiname des externen Logs //const PathSMLog = "/iobroker/log/Alarmscript.csv"; // Pfad des externen logs fuer Windows/ iobroker ist der angenommene iobroker home-pfadvG Looxer
ScreenShot der Protokollierung

@looxer01 grundsätzlich geile Idea, allerdings glaube ich, daß das mit Homematic nicht so gut ankommt.
Das Zeug gehört wegen der Preise zur "gehobenen" klasse.
Wünsche dir trotzdem viel Spaß mit dem Projekt! :+1:gruß vom Woody
HAPPINESS is not a DESTINATION, it's a WAY of LIFE! -
@looxer01 grundsätzlich geile Idea, allerdings glaube ich, daß das mit Homematic nicht so gut ankommt.
Das Zeug gehört wegen der Preise zur "gehobenen" klasse.
Wünsche dir trotzdem viel Spaß mit dem Projekt! :+1: -
@da_woody
danke für die Rückmeldung, ja. ich nutze nur Homematic.
Das script ist aber nur auf datenpunkte angewiesen und flexibel genug für andere Geräte.
Also. Nicht nur Homematic :) -
@looxer01 gut zu lesen! ☺️
Interessant auf jeden Fall!
Ich wohne zum Glück in einem Dorf wo man das Haus noch unversperrt lassen kann...@da_woody sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
wo man das Haus noch unversperrt lassen kann...
ist bei mir anders. Obwohl es ein Vorort ist. Die kommen organisiert von weiter her.
Beim Nachbar hats schon 3 x eingeschlagen -
@da_woody sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
wo man das Haus noch unversperrt lassen kann...
ist bei mir anders. Obwohl es ein Vorort ist. Die kommen organisiert von weiter her.
Beim Nachbar hats schon 3 x eingeschlagen -
Hi,
seit einigen Monaten bastele ich an einem Projekt um mein Haus elektronisch abzusichern. Sicherheit treibt mich schon seit längerem um. Das Anwesenheitssimulationsscript, die Einbindung einiger Kameras rund ums Haus sind einige Beispiele. Jetzt kommt hinzu eine doch recht umfassende Alarmanlagen installation. Das Script dazu richtet sich or allem an Nutzer mit hoeherem Anspruch an einer solchen Anlage im ioBroker Umfeld. Im Folgenden teile ich was ich dazu an Hardware nutze und auch die Details des Scriptes.
Was Hardware angeht, so nutze ich überwiegend Homematic. Das Script ist aber nicht nur auf Homematic ausgerichtet. Alles was in ioBroker geht, sollte auch mit dem Script gehen.Meine ausgewählte Hardware:
Bei der Hardware habe ich mich hauptsächlich an Homematic orientiert mit folgenden Komponenten- Bewegungsmelder
- Fenstersensoren
- Homematic Alarmsirenen ASIR
- Homematic Rauchmelder
- Homematic Wasermelder
- Keypad
- Schlossantrieb
- ELV Statusboard "ELV-SH-SB8" fuer Status und Steuerung
weitere Komponenten
- Wandtablet
- VIS Steuerung
- Wasermelder
- Rauchmelder
Komponenten noch in der Anschaffung
-
Glasbruchsensoren
-
weitere Melder und Fenstersensoren
-
Keypad
Zum Keypad kann ich sagen, dass ich ganz ok damit bin. (wobei ich einen Fingerprintsensor schon vermisse) Es funktioniert gut und laesst sich direkt mit dem Tuerschloss direkt verbinden.
Das ist auf Jeden Fall ein plus. Es soll ja in Kürze auch eine festere Verbindung zur Doorbird geben. Da weiß ich aber noch nicht wie das genau läuft.
Das Keypad ist ja auch keine riesige Anschaffung und lässt sich leicht verbauen. Das ist anders mit der Doorbird. Also Doorbird mal nach hinten gestellt
Was gut funktioniert:
-
natürlich auf und zuschließen
-
Alarm scharf beim zuschließen
-
alarm unscharf beim aufschließen
-
Direktverbindung zum ELV StatusBoard (komme ich weiter unten noch drauf)
Was nicht so schön ist. -
Verarbeitung - halt Kunststoff
-
kein Fingerprint
-
Der Homematic Türschloßantrieb.
Hier musste ich ersteinmal den Schließzylinder tauschen. Das müssen wahrscheinlich die meißten.
Es gibt auch gute Videos im Netz, die den Einbau beschreiben - kein Hexenwerk
Bei den Maßen muß man halt ein wenig aufpassen. 10mm sollte der Zylinder schon hinausschauen.
Notöffnung ist ein Muss (aufschließen von außen während der Schlüssel steckt)
Ansonsten war der Einbau easy. -
Das ElV Status Board
Es ist ein Bausatz. Das vorneweg. Es muß nicht gelötet werden und der Zusammenbau gestaltet sich einfach.
Aber das mag jeder anders empfinden. Auch hier gibt es Videos im Netz.
Ein bischen schwieriger ist das einstellen der LED Farben ( aber auch das empfand ich als einfach)Was macht das Board im Kontext der Alarmanlage. Ich habe 8 LEDs und 8 Hardwareschalter je LED einer.
Diese habe ich folgendermaßen belegt- Alarmanlage scharf/unscharf - ein Druck und die Anlage ist von innen scharf
- Einbruchsmeldung - bei Druck kann diese quittiert werden
- geoeffnet Meldung (wenn ein Fenstersensor etc meldet, dass noch etwas geoeffnet im Haus ist)
- Sabotage Meldung (zusatzinfo zur Einbruchsmeldung)
- Stoerungs Meldung (wenn komponenten nicht erreichbar sind)
- Rauch Meldung
- Wasser Meldung
- und einen Schalter, den ich STILL nenne, Damit können laufende Sirenen etc, still geschaltet werden
Diese Belegung ist natürlich variabel. aber so ist sie bei mir eingerichet
Zum Board selber.
- macht nicht wirklich einen hochwertigen Eindruck - ist aber akzeptabel
- es braucht ein Netzteil, somit nicht ganz ortsunabhängig
- es tut was es soll. Bei mir fristet es das Dasein im Schlafzimmer (macht wohl am meisten Sinn)

und da das Ganze nichts ohne Software macht, habe ich mich umgeschaut.
Es gibt einen Alarmadapter und ein nicht mehr gewartetes script.
Beides hat, für das was ich mir vorstellte, nicht gepasst. Also kommt ein neues Script hinzu, das mittlerweile im Einsatz ist.Konzept des Scriptes:
Dann das Script. Ich muß sagen, dass die Komplexität doch sehr groß ist. Das liegt natürlich daran, dass ich es flexibel haben wollte.
Leicht anpassbar an neue Komponenten und Situation.hier ein paar features (bei weitem nicht komplett
-
Zunächst wird die Raumsituation beschrieben und in einer Tabelle hinterlegt.
Die Sensoren werden zugeordnet zu Räumen.
Also Raum: Wohnzimmer,
RaumType ist innen,
zuodnung der Sensoren zu GeräteTypen je Raum (Bewegung, Fenster, Türen, Rollladen, Glasbruch, Rauch, Wasser) -
Dann werden Sichten bzw Filter auf die Räume gelegt (auch in einer Tabelle)
Eine Sicht kann z.B. alle innenliegenden Räume aber ohne das Gästezimmer sein -
Die Sichten werden dann Scenarios zugeordnet
Scenario Schlafen bekommt dann vielleicht die reine InnenSicht (eine Sicht ohne Schlafzimmerfenster wäre hilfreich)
Scenario Gäste bekommt eine Sicht nur innen aber ohne Gästezimmer.
Die Scenarios können einzeln aktiviert und deaktiviert werden. Den Sencarios sind auch Alarme zugeordnet.
Wenn ein Scenario ein Alarmauslöser ist, dann werden die Hardwarekomponenten direkt angesprochen z.B. die ASIR Sirene (quasi Nativ)Dabei muß man sich erstmal gedanklich einfinden. Das geht aber schnell.
Weitere Features
- Verbindung zum Servicemeldungsscript (nutzt einfach dessen ressourcen für Sabotage Alarm und UnreachAlarm)
- Umfassende Protokollierung in JSON und HTML
- externe protokollierung zusätzlich
- native Einbindung des Statusboards
- native Einbindung der Alarmsirene ASIR
- umfassende Meldungen an die bekannten services (email, telegram, whatsapp etc etc) das ganze einstellbar
- automatische Berücksichtigung von Abwesenheiten (z.B. Aktivierung/Dekativierung von Scenarios
- automatische Berücksichtigung bei anwesenden Gaesten (z.B. Aktivierung/Dekativierung von Scenarios
- etc. etc.
Die 5 wichtigsten Schritte beim Einstellen des Scriptes
Vorgehensweise bei der Anpassung des Scriptes auf die eigenen Bedürfnisse
Der Einstellungsbereich enthält Einstellungssklassen- Bitte Anpassen
- optional
- nicht ändern
Somit sollte der Fokus zunächst auf "Bitte Anpassen" gelegt werden.
Hierzu zählen die folgenden Tabellen1. raumDefinition mit folgenden Feldern:
Raumbezeichnung - kann frei vergeben werden
Type: - kann frei vergeben werden. Es macht Sinn z.B. nach innen und aussen zu unterscheiden
Position - kann frei vergeben werden. Es macht Sinn z.B. nach Stockwerk zu unterscheiden OG, UG, KG
Gerätetypen: Bewegung: [], Fenster: [], Tueren: [], Rollladen: [], Glasbruch: [], Wasser: [],
Die Gerätetypen müssen nicht enthalten sein, wenn sie für einen Raum nicht benötigt werden
Wenn sie hinzugefügt werden können einfach die zugehörigen datenpunkte hinzugefügt werdenWichtig ist:
- Die geschweiften und eckigen Klammern müssen genauso im Kontext erhalten bleiben
- Komma müssen nach jeder Felddefinition gesetzt werden
Beispiel
const raumDefinition = { Wohnzimmer: { Type: "innen", Position: "oben", Fenster: [], Tueren: ['hm-rpc.1.0000DD89B7xxx8.1.STATE'], // Terrassentuere }, Kueche: { Type: "innen", Position: "oben", Fenster: ['hm-rpc.1.003660Cxxx05D0.1.STATE','hm-rpc.1.003660C993BEF6.1.STATE'], // Fenstersensor Kueche links und rechts }, };2. Die Filter (Sichten) Definition. Die Filter beziehen sich auf die eingestellte raumDefinition
Felder:
Filtername: kann frei vergeben werden
raumTyp: bezieht sich auf raumDefinition Type - muss übereinstimmen ( ein leeres Feld heißt alle typen)
raumPosition: bezieht sich auf raumDefinition Position und muss übereinstimmen ( ein leeres Feld heißt alle Positionen)
geraetetypen: bezieht sich auf raumDefinition Gerätetypen (Fenster,Melder etc) und muss übereinstimmen ( ein leeres Feld heißt alle Gerätetypen)
raeume: bezieht sich auf raumDefinition Raumname (Wohnzimmer etc) und muss übereinstimmen ( ein leeres Feld heißt alle Raumnamen)
Datenpunkte: bezieht sich auf raumDefinition auf die zugeordneten Datenpunkte und muss übereinstimmen ( ein leeres Feld heißt alle Datenpunkte)Grundsätzlich können für jedes Feld Ausschlüsse gemacht werden. Erlaubt sind minus (-) und Doppelminus (--)
Minus heißt Ausschluss aus dem später zugeordneten Scenario was auch bedeutet, dass dieser Datenpunkt bei einem zweiten aktiven scenario wieder zugeordnet werden könnte
Doppelminus heißt genereller Ausschluss auch wenn dieser Datenpunkt bei einem zweiten aktiven scenario zugeordnet wurdeEs sollten immer alle Felder vorhanden sein (anders als bei der raumDefinition).
Beispiel:
let FilterDefinition = { Schlafen: { raumTyp: ['innen'], // Raumtypen (z. B. innen, aussen) als Array oder keine Angabe = alle raumPosition: [], // Positionen (z. B. oben, unten oder ErsterStock,ZweiterStock,DritterStock) als Array oder keine Angabe = alle geraetetypen: [], // Geraetegruppen (z. B. Bewegung, Fenster, etc.) oder keine Angabe = alle raeume: [], // Einzelraeume bei keiner Angabe werden alle Raeume verwendet Datenpunkte: ['-hm-rpc.1.003660C9A62C5D.1.STATE','-hm-rpc.1.0000D709954526.1.STATE'] // Schlafzimmerfenster und Elternbadfenster ausgeschlossen (Lueftung) }, Abwesend: { raumTyp: ['innen'], raumPosition: [], geraetetypen: [], raeume: [], Datenpunkte: [] },3. Scenarios
Scenarios lösen am Ende Alarme aus. Mehrere Filter können einem Scenario zugeordnet werden. Auch mehrere Aktionen (Alerts) können zugeordnet werden.
Jedes Scenario lässt sich aktivieren oder deaktivieren.
Wenn mehrere Scenarios aktiviert sind und ein Datenpunkt mehreren Scenarios zugeordnet wurden, dann bestimmt die Priorität welches Scenario als Alarm ausgeführt wird
Es lassen sich maximal 99 Scenarios definierenconst scenarioDefinition = { Scenario01: { name: "Schlafen", Prio: 6, Filter: ['Schlafen'], Alert: ['FlashSchlafzimmerEIN',"FlashStandard1EIN"] }, Scenario02: { name: "Abwesend", Prio: 5, Filter: ["Abwesend"], Alert: ["SireneASIR2EIN","Licht_OG"] }, Scenario03: { name: "Garage", Prio: 10, Filter: ["Garage"], Alert: ['FlashSchlafzimmerEIN'] }, Scenario04: { name: "Urlaub", Prio: 6, Filter: ['Urlaub'], Alert: [] }, Scenario05: { name: "Haustiere", Prio: 7, Filter: ['Haustiere'], Alert: [] }, Scenario06: { name: "Gaeste", Prio: 4, Filter: ["Gaeste"], Alert: ["FlashSchlafzimmerEIN"] }, Scenario07: { name: "frei", Prio: 8, Filter: [], Alert: [] }, Scenario08: { name: "Stoerung", Prio: 9, Filter: ['Stoerung'], Alert: [] }, // Filter ist bei Stoerung immer = Stoerung Scenario09: { name: "Gefaehrdet", Prio: 3, Filter: ['HochRisiko'], Alert: ["SireneASIR2EIN","Licht_Hoch_Risiko_Aussen"] }, Scenario10: { name: "Wasser", Prio: 2, Filter: ['Wasser'], Alert: ["SireneASIR2EIN"] }, Scenario11: { name: "Rauch", Prio: 1, Filter: ['Rauch'], Alert: ["SireneASIR1EIN","SireneASIR2EIN"] }, };4. Direkte Ansteuerung von hardware im Alarmfall (Alert im Scenario)
die Namen der AusgabeDevices können frei vergeben werden.
Es gibt aber fest verdrahtete Devices.- HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
- Datenpunkt_Standard: Hier wird ein Datenpunkt eingetragen, der reagiern soll Angaben sind auch zu machen beim Aktivierungswert, Rückstellwert, Dauer und Delay
(beispielsweise können hier Lichter geschaltet werden oder andere nicht-Homatic Sirenen etc.) was auch immer - Datenpunkt_Flash ist ein Datenpunkt bei dem man eine Lampe mit einer Frequenz blinken lassen kann. Nutze ich z.B. für das Schlafzimmer als stillen Alarm für die Scenarien wo ich nicht
gleich die Sirenen laufen lassen möchte
anzugebende Werte: der entsprechende Datenpunkt, Aktivierungswert, Wiederholungen (Anzahl - nicht zu viele verwenden), Frequenz in ms (Abstand zwischen zwei an/aus Schaltungen, Startdelay in ms
Die hier genutzten Geräte können über den STILL Datenpunkt alle komplett auf push ausgeschaltet werden
Beispiele
const AlertAusgabeDevices = { SireneASIR1EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000, }, SireneASIR1AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000, }, SireneASIR2EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000 }, SireneASIR2AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000 }, Standard1Ein:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Rueckstellwert: false, // Rueckstellwert wird gesetzt wenn die Dauer abgelaufen ist. Keine Funktion wenn Dauer = null ist Dauer: 100000, // in ms - null ohne Auschaltung Startdelay: 0, // in ms }, Standard1Aus:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll }, FlashStandard1EIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashStandard1AUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerEIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerAUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false oder 1/0 100/0 zulaessig Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, }5. Definition von Schaltgruppen.
Schaltgruppen können für Scenario-Alerts aber auch bei Alarmaktivierung / Alarmdeaktivierung ausgelöst werden
einzustellendwe Felder: Datenpunkt der geschaltet werden soll. Wert der zur Schaltung genutzt werden soll, Delay in sekunden, Dauer in SekundenBeispiel:
const Schaltgruppen = { Licht_OG: [ { Datenpunkt: 'hm-rpc.1.00351F29xxxxE3.3.STATE', Wert: true, Delay: 0.1, Dauer: null }, // WZ Licht Terrasse Verzoegerung in sekunden // Dauer in sekunden // null = endlos { Datenpunkt: 'hm-rpc.1.0008E0C9xxxxB0.4.LEVEL', Wert: 100, Delay: 0.1, Dauer: 600 } // WZ Esszimmertisch Dimmer// Feld Dauer: danach wird auf Ausgangswert zurueckgesetzt ], Licht_Hoch_Risiko_Aussen: [ { Datenpunkt: 'hm-rpc.1.0008A0C9xxxxx6.1.STATE', Wert: true, Delay: 0.05, Dauer: 600 }, // Licht Kinderbad { Datenpunkt: 'hm-rpc.1.0008A0C9xxxx50.1.STATE', Wert: true, Delay: 0.1, Dauer: 600 }, // Licht aussen Nordseite { Datenpunkt: 'hm-rpc.1.0008A269xxxx47.1.STATE'/*Licht Hobbyraum Status:1 STATE*/, Wert: true, Delay: 150, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9xxxx63.10.STATE'/*Kelleraktor 5 Maschinenraum PoolHalle:10 STATE*/, Wert: true, Delay: 0.2, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9Axxx70.18.STATE'/*Keller Aktor 1 Aktor Licht Steinterasse:18 STATE*/, Wert: true, Delay: 0.25, Dauer: 600 }, ] };Die optionalen Einstellungen
Messenging
Es können die wichtigsten messenging services genutzt werden um kurzNachrichten oder verlängerte Nachrichten an die verschiedenen
services zu senden. Je MessageType und Service kann entschieden werden, ob eine Nachricht gesendet werden soll, ob die Kurzversion
oder Langversion versendet werden soll und welche Instanz genutzt werden soll.
Falls mehrere Instanzen für einen Service gleichzeitig genutzt werden sollen, kann die entsprechende Instanz hinzugefügt werden sollAls Nachrichtenservice kann auch eine Sprachnachricht versendet werden. (SayIt - Adapter)
Vorraussetzung ist, dass der jeweilige ioBroker Adapter für den jeweiligen Service installiert und konfiguriert ist.const services = ['email', 'whatsApp', 'Signal', 'Telegram', 'Pushover', 'Pushsafer', 'Sprache',]; const MessengerScope = { 'Rauch': [true, true, false, false, false, false, false, ], 'Einbruch': [true, false, false, false, false, false, false, ], 'Wasser': [true, true, false, false, false, false, false, ], 'Sabotage': [false, false, false, false, false, false, false, ], 'Stoerung': [false, false, false, false, false, false, false, ], 'Alarm_Scharf': [true, false, false, false, false, false, false, ], 'Alarm_Unscharf': [true, false, false, false, false, false, false, ], 'ScenarioAktiviert': [true, false, false, false, false, false, false, ], 'ScenarioDeaktiviert': [true, false, false, false, false, false, false, ], 'Alarm_Still_Geschaltet': [false, false, false, false, false, false, false, ], 'Fallback': [false, false, false, false, false, false, false, ], // Fallback nicht loeschen. wird genutzt, wenn keine andere Definition gemacht worden ist } const MessengerInstanz = [0, 0, 0, 0, 0, 0, 0, ]; // Instanz des Messengers const TextTypeKurz = [false, true, true, true, true, true, true, ]; // bei true wird der Kurztext gesendet - sonst der LangtextNutzung eines oder mehrerer ELV ELV-SH-SB8 Statusboard
es können beliebig viele Statusboards eingebunden werden. na ja, 2 machen vielleicht sinn für 2 Etagen oder eines für Statusanzeige und eines zur ScenarioAktivierung/Deaktivierung
Die Statusboards und deren Status wird nicht mit dem Status ersetzt, was auch möglich gewesen wäre, vielmehr wird der Status synchronisiert mit dem jeweiligen Statuspunkt des Scriptesconst ControlDevices = [ { DeviceID: "StatusBoard1", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3CxxxxsEAx.", LED1: DP_Alarmaktivierung, DP_2ndPart1 : "10.STATE", // Meldungsanzeige und Aktivierung/Deaktivierung erfolgt durch die entsprechenden Datenpunkte LED2: DP_Einbruchsmeldung, DP_2ndPart2 : "14.STATE", // manuellAenderbar true laesst es zu den Alarm ueber das Board auszuschalten // dann werden auch alle AkustikGeraete Sirenen ausgeschaltet LED3: DP_GeoeffnetMeldung, DP_2ndPart3 : "18.STATE", // DP und DP_2ndPart entspricht dem genauen Datenpunkt jeder LED LED4: DP_Sabotagemeldung, DP_2ndPart4 : "22.STATE", LED5: DP_Stoerungsmeldung, DP_2ndPart5 : "26.STATE", LED6: DP_Rauchmeldung, DP_2ndPart6 : "30.STATE", LED7: DP_Wassermeldung, DP_2ndPart7 : "34.STATE", // ausgeschaltet werden aber nicht die Schaltgruppen LED8: DP_Still, DP_2ndPart8 : "38.STATE", // laufende Alarmgeraete (Sirenen etc) werden ausgeschaltet }, { DeviceID: "StatusBoard2", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3C00005xxx.", LED1: "Scenario01Aktiv", DP_2ndPart1 : "10.STATE", // Szenarioschaltung fuer StatusBoard2 LED2: "Scenario02Aktiv", DP_2ndPart2 : "14.STATE", LED3: "Scenario03Aktiv", DP_2ndPart3 : "18.STATE", LED4: "Scenario03Aktiv", DP_2ndPart4 : "22.STATE", LED5: "Scenario05Aktiv", DP_2ndPart5 : "26.STATE", LED6: "Scenario06Aktiv", DP_2ndPart6 : "30.STATE", LED7: "Scenario07Aktiv", DP_2ndPart7 : "34.STATE", // Szenarioschaltung fuer StatusBoard2 LED8: "Scenario08Aktiv", DP_2ndPart8 : "38.STATE", } ];Einstellungen zur Definition wann ein Alarm erfolgt
Die Interpretation ob ein Alarm vorliegt hängt vom jeweiligen Datenpunkt ab. Das kann dediziert eingestellt werden
In den meisten Fällen reicht eine allgemeine Einstellung: true, 1, 100 etc.Sollte ein datenpunkt aber eine andere Logik verfolgen, dann kann ein expliziter Auslösewert für diesen Datenpunkt eignestellt werden
const AlarmAusloesungswerte = [ { op: '==', wert: true }, // nur true zulaessig - bitte beibehalten { op: '>', wert: 0 }, // groesser als 0 - bitte beibehalten { range: { min: 1, max: 2 } }, // Beispiel range {exception: {dpAusnahme:'hm-rpc.1.000F1D8xxxx02D.1.MOTION', wert: false}}, // je Datenpunkt mit ausnahmen, z.B. fuer Garagentorsensor ist false = geoeffnet - Beispiel {exception: {dpAusnahme:"hm-rpc.1.0047E40xxxxx88.1.LOCK_STATE", wert: 2}}, // hmip-dld unlocked = 2 ];Verzögerung bei Alarmaktivierung
Die Anzahl von Sekunden von der Anfrage zur Aktivierung (Scharfschaltung) bis zur tatsächlichen Aktivierung des Alarmes kann eingestellt werden.
Während dieser Zeit, kann der Alarm trotzdem wieder unscharf geschaltet werden. Die Wartezeit wird dann abgebrochenconst AKTIVIERUNGSDELAY_SECONDS = 5;Aktionen bei Scharf/Unscharfschaltung
Bei Scharf/Unscharfschaltung koennen Schaltgruppen zur Ausführung definiert werden. Es können beliebig viele Schaltgruppen eingetragen werden, die dann zur Ausführung kommen
const AktionenNachScharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei Bedarf const AktionenNachUnscharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei BedarfReaktion bei An/Abwesenheit
const anwesenheit = 'javascript.0.AnwesenheitsTracking.JemandDa' // bitte anpassen falls Anwesenheitstracking genutzt wird const AbwesenheitScenarioAktivierung = ["Scenario02Aktiv"];Gaeste Management
Ich nutze ein Flag, welches auf true geschaltet wird, wenn Übernachtungsgäste im haus sind.
Damit werden Rollladensteuerung und Heizungsverhalten beeinflußt. Dieses Flag nutze ich nun auch für die Alarmanlageneinstellung
Dabei wird dann z.B. der Gästebereich aus für die alarmierung ausgeschlossen. Die Alarmierung läuft dann still und nicht über die Sirenen
es koennen mehrere Scenarios angegeben werden, ein fuehrendes minus dreht den wert um - aus true wird false (Ausschluss). Das Scenario wird also deaktiviert// Die Funktion GAESTE Management wird nur aktiviert, wenn es den Datenpunkt zum Gaeste-Flag gibt const GaesteFlag = "javascript.0.Steuerungsflags.Gaeste" // das hier angegebene scenario wird bei Anwesenheit von Gaesten (Uebernachtung) aktiviert und deaktiviert const GaesteScenarioAktivierung = ["Scenario06Aktiv"];Protokollierung
Die wichtigsten Statusänderungen und Alarme werden in ein Protokoll im JSON Format geschrieben. Dieses kann dann z.B. mit VIS angezeigt werden (beispielsweise mit dem inventwo Adapter
Ein Schedule ist standardmäßig eingestellt um z.B. Monatlich eine Bereinigung der History durchzuführen. Das vermeidet auf die Dauer technische Probleme mit zu großen Datenpunkten
Dabei kann eingestellt werden, wieviel Tage in der History erhalten bleiben soll. Bei 0 wird alles gelöscht.const ScheduleAktiv = true; // Bei "false" wird der schedule nicht durchlaufen. Manuelles Loeschen kann ueber den Datenpunkt id_Button_Refresh_Historie (Button) moeglich const scheduleTimeClearSMTexte = "2 0 1 * *"; // am 1. tag des monats um 00:02 morgens sollen alle Alarmmeldungen des Monats geloescht werden id_History_VerbleibendeTage und aktive bleiben erhalten // const scheduleTimeClearSMTexte = "58 23 * * 0"; // alternative Sonntags um 23:58 Uhr sollen alle Alarmmeldungen der Woche im datenpunkt der Protokoll-Texte geloescht werdenSchreiben des Protokolls in eine CSV Datei
Die History kann auf Wunsch in eine externe Datei geschrieben. Diese dient dann zur Langzeitspeicherung dieser Daten
const ProkollExtern = true const PathProkollExtern = "/opt/iobroker/log/AlarmMeldungen.csv"; // Pfad und Dateiname des externen Logs // const PathProkollExtern = "/iobroker/log/AlarmMeldungen.csv"; // Pfad fuer Windows/ iobroker ist der angenommene iobroker home-pfadHTML Datenpunkte
Auf Wunsch kann auch ein HTML Code erzeugt werden, der eine fast identische Darstellung erzeugen kann, z.B. mit dem HTML Basic Widget aus VIS.
HTML kann für verschiedene Visualiserungstools genutzt werden. Inventwo hat meines Wissens nach zur Zeit noch Probleme mit Vis2. Die HTML Anzeige ist dabei eine perfekte Alternative.Dabei kann das Aussehen wie Farben Zellgrössen angepasst werden. Auch Spalten können abgewählt werden
// sinnvoll wenn inventwo nicht fuer die visualisierung genutzt werden kann const UpdateHTML_Datenpunkte = true // bei true werden die Datenpunkte automatisch angelegt und bei false wieder geloescht const id_HTML_Alarmmeldung_Aktuell = statusPath + "HTML_Alarmmeldung_Aktuell" // Empfehlung: nicht aendern const id_HTML_Alarmmeldung_Historie = statusPath + "HTML_Alarmmeldung_Historie" // Empfehlung: nicht aendern const HTML_TableWidthsAndStyles = { // Definition der Spaltenbreiten in CSS-Einheiten columnWidths: { datum: '95px', // Breite fuer Datum/Uhrzeit-Spalte alarmtype: '70px', // Breite fuer Alarmtyp-Spalte raum: '90px', // Breite fuer Raum-Spalte deviceType: '80px', // Breite fuer Geraetetyp-Spalte scenario: '50px', // Breite fuer Szenario-Spalte deviceName: '150px', // Breite fuer Geraetebezeichnung deviceId: '50px', // Breite fuer Geraete-ID message: '210px', // Breite fuer Nachrichtenspalte quittiert: '95px' // Breite fuer Quittierungsspalte }, // Visuelle Stileinstellungen fuer die Tabelle styles: { // Basistypografie fontSize: '10px', // Allgemeine Schriftgroesse // Kopfzeilenstil headerColor: '#333333', // Hintergrundfarbe der Kopfzeile headerTextColor: 'white', // Textfarbe der Kopfzeile // Zeilenstile (Zebra-Pattern) evenRowColor: '#4e5049', // Hintergrundfarbe gerade Zeilen oddRowColor: '#333333', // Hintergrundfarbe ungerade Zeilen evenRowTextColor: 'white', // Textfarbe gerade Zeilen oddRowTextColor: 'white', // Textfarbe ungerade Zeilen // Rahmeneinstellungen borderColor: '#000000', // Farbe der Tabellenraender borderWidth: '1px', // Staerke der Rahmenlinien useBorders: true, // Soll Rahmen anzeigen? (true/false) // Zellenlayout cellPadding: '5px' // Innenabstand der Tabellenzellen }, // Texte fuer die Tabellenkopfzeilen headerTexts: { datum: 'Datum/Uhrzeit', // ueberschrift Datumsspalte alarmtype: 'Alarmtyp', // ueberschrift Alarmtyp raum: 'Raum', // ueberschrift Raum deviceType: 'Geraetetyp', // ueberschrift Geraetetyp scenario: 'Szenario', // ueberschrift Szenario deviceName: 'Geraetebez.', // ueberschrift Geraetebezeichnung (abgekuerzt) deviceId: 'Geraete-ID', // ueberschrift Geraete-ID message: 'Nachricht', // ueberschrift Nachrichteninhalt quittiert: 'Quittiert seit' // ueberschrift Quittierungsstatus }, // Konfiguration der Spaltensichtbarkeit - ein oder ausblenden columns: { datum: { visible: true }, alarmtype: { visible: true }, raum: { visible: true }, deviceType: { visible: true }, scenario: { visible: true }, deviceName: { visible: true }, deviceId: { visible: true }, message: { visible: true }, quittiert: { visible: true } } };Übersicht über die Geräte je Raum, die aktiv bzw inaktiv sind und welchse Scenarios mit diesem Verknüpft sind.
Standardmäßig wird ein HTML code erzeugt, der eine Liste der der Geräte/Räume anzeigt.
Dies ist insbesondere hilfreich um zu überprüfen, ob die Einstellungen dem gewünschten Ergebnis entsprechen.Die Liste kann ebenfalls im Detail mit Größen, Style und scope Einstellungen versehen werden
const HTML_Raumzuordnungen_WidthAndStyles = { columnWidths: { raum: '90px', scenario: '150px', deviceType: '100px', }, styles: { fontSize: '10px', headerColor: '#333333', headerTextColor: 'white', evenRowColor: '#4e5049', oddRowColor: '#333333', evenRowTextColor: 'white', oddRowTextColor: 'white', borderColor: '#000000', borderWidth: '1px', useBorders: true, cellPadding: '5px' }, headerTexts: { raum: 'Raum', scenario: 'Szenarien', deviceType: 'Geraetetyp' }, columns: {raum: { visible: true },scenario: { visible: true }, deviceType: { visible: true } } };Integration von Sabotage und Stoerungsmeldungen (Unreach) aus dem Servicemeldungs-Script
Homematic Sabotagemeldungen und Stoerungsmeldungen werden anders gemeldet als z.B. die Aktivierung eines Sensors und haben ihre eigene Komplexität
Wer diese Meldungen integrieren möchte kann dies über das Servicemeldungs-Script erreichen.
Dies geschieht über die JSON Datei des Scriptes die dann eingelesen und ausgewertet werden kann.Link zum Script: https://forum.iobroker.net/topic/77816/vorlage-servicemeldungen-volume2
// Wer das Servicemeldungsscript nutzt kann damit verbinden und Sabotage oder Unreach als Alarm melden const SM_CountSabotage = 'javascript.0.ServicemeldungenVol2.Anzahl_SABOTAGE' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_CountUnreach = 'javascript.0.ServicemeldungenVol2.Anzahl_UNREACH' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_Meldungen_JSON = 'javascript.0.ServicemeldungenVol2.JSONAktuelleSM' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wirdAutoconfirm Servicemeldungen
Servicemeldungen können automatisch bestätigt werden. Hingegen müssen Einbruch, Wasser, Rauchmeldungen manuell quittiert werden.
eine Manuelle Quittierung ist auch für Servicemeldungen möglich, kann also eingestellt werden.
Anmerkung: Geoeffnet-Meldungen werden immer automatsch deaktiviert, wenn alles geschlossen istconst ServiceMeldungSabotageAutoConfirm = true; // Wenn die Sabotage aufgehoben wird, dann wird die der SabotageDatenpunkt automatisch zurueckgesetzt bei true const ServiceMMeldungStoerungAutoConfirm = true; // Wenn die Stoerung aufgehoben wird, dann wird die der StoerungsDatenpunkt automatisch zurueckgesetzt bei trueein paar fehlen noch
Script und Views findet ihr hier:
Das Script hat netto ca 2000 Zeilen. (ohne Kommentar-und Leerzeilen)
AlarmAdv Script:
AlarmAdv_V1-00.txtJSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
AlarmViewJson.txtHTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
Der View beinhaltet Widgets aus dem Material Design Adapter.
AlarmViewHTML.txtDebugging-Hinweise:
Bitte beachtet, dass ihr bei Fehler das Debug Protokoll mitlaufen lasst.
Der DebugLevel sollte dabei mindestens auf 2 stehen. 3 könnte auch notwendig werden
Es wird viele Zeilen geben. Ihr könnte auch in eine CSV Datei schreiben und dann hier im Thread posten.//DEBUGGING----OPTIONAL----------------------------------------------------------------------------------------------------------------------------- const debugLevel = 1 ; // Empfehlung = 1 const SystemLog = false; // schreib das Sytemprotokoll in ein externes log (sollte normalerweise deaktviert sein nur bei Problemen verwenden) const PathSystemLog = "/opt/iobroker/log/Alarmscript.csv"; // Pfad und Dateiname des externen Logs //const PathSMLog = "/iobroker/log/Alarmscript.csv"; // Pfad des externen logs fuer Windows/ iobroker ist der angenommene iobroker home-pfadvG Looxer
ScreenShot der Protokollierung

@looxer01 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
100mm sollte der Zylinder schon hinausschauen
Script klingt intressant. Werde ich mir definitiv anschaun.
Was/Wie hast du mit der Doorbird vor?PS zum Zitat: hast eine 0 zuviel. 100 mm wäre etwas sehr weit rausstehend. ;)
° Node.js Update ---> iob nodejs-update
° Fixer ---> iob fix -
@looxer01 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
100mm sollte der Zylinder schon hinausschauen
Script klingt intressant. Werde ich mir definitiv anschaun.
Was/Wie hast du mit der Doorbird vor?PS zum Zitat: hast eine 0 zuviel. 100 mm wäre etwas sehr weit rausstehend. ;)
@negalein sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
hast eine 0 zuviel. 100 mm wäre etwas sehr weit rausstehend.
ja, ähm stimmt. das wären ja dann 10 cm. bei mir ist es definitiv 1 cm.
@negalein sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Was/Wie hast du mit der Doorbird vor?
im Moment noch nichts. Es wäre ein großer Umbau im Eingangsvereich mit viel Montage verbunden. Aufwändig.
-
@negalein sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
hast eine 0 zuviel. 100 mm wäre etwas sehr weit rausstehend.
ja, ähm stimmt. das wären ja dann 10 cm. bei mir ist es definitiv 1 cm.
@negalein sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Was/Wie hast du mit der Doorbird vor?
im Moment noch nichts. Es wäre ein großer Umbau im Eingangsvereich mit viel Montage verbunden. Aufwändig.
@looxer01 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
im Moment noch nichts. Es wäre ein großer Umbau im Eingangsvereich mit viel Montage verbunden. Aufwändig.
ah, ok.
Ich hab schon die Doorbird (mit NFC).Bist du mit dem Script schon lauffähig?
Ist es möglich Cam's einzubinden. Dass zB bei aktivierter Alarmanlage die Cams aufzeichnen.° Node.js Update ---> iob nodejs-update
° Fixer ---> iob fix -
@looxer01 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
im Moment noch nichts. Es wäre ein großer Umbau im Eingangsvereich mit viel Montage verbunden. Aufwändig.
ah, ok.
Ich hab schon die Doorbird (mit NFC).Bist du mit dem Script schon lauffähig?
Ist es möglich Cam's einzubinden. Dass zB bei aktivierter Alarmanlage die Cams aufzeichnen.@negalein sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Bist du mit dem Script schon lauffähig?
Ist es möglich Cam's einzubinden. Dass zB bei aktivierter Alarmanlage die Cams aufzeichnen.Also, ich teste gerade. Geradeaus läuft es schon.
Die Aktivierung ist nur ein Datenpunkt auf true. Entweder die Kamera holt sich den ab oder
die Kamera wird getriggert. Wenn es einen Trigger gibt, dann liesse sich das ja einbauen.
(Aktionen nach Aktivierung)Edit: Es gibt eine Tabelle im Script die heisst "Schaltgruppen" Da lassen sich recht flexibel aktionen einstellen was für welchen Datenpunkt passieren soll mit verzoegerung und dauer. Schaltgruppen lassen sich frei definieren und nutzen bei Alarmauslösung oder Alarmaktivierung/Deaktivierung
Licht_OG: [ { Datenpunkt: 'hm-rpc.1.00351F298A58E3.3.STATE', Wert: true, Delay: 0.1, Dauer: null }, // WZ Licht Terrasse Verzoegerung in sekunden // Dauer in sekunden // null = endlos { Datenpunkt: 'hm-rpc.1.0008E0C9A671B0.4.LEVEL', Wert: 100, Delay: 0.1, Dauer: 600 } // WZ Esszimmertisch Dimmer// Feld Dauer: danach wird auf Ausgangswert zurueckgesetzt ], -
@negalein sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Bist du mit dem Script schon lauffähig?
Ist es möglich Cam's einzubinden. Dass zB bei aktivierter Alarmanlage die Cams aufzeichnen.Also, ich teste gerade. Geradeaus läuft es schon.
Die Aktivierung ist nur ein Datenpunkt auf true. Entweder die Kamera holt sich den ab oder
die Kamera wird getriggert. Wenn es einen Trigger gibt, dann liesse sich das ja einbauen.
(Aktionen nach Aktivierung)Edit: Es gibt eine Tabelle im Script die heisst "Schaltgruppen" Da lassen sich recht flexibel aktionen einstellen was für welchen Datenpunkt passieren soll mit verzoegerung und dauer. Schaltgruppen lassen sich frei definieren und nutzen bei Alarmauslösung oder Alarmaktivierung/Deaktivierung
Licht_OG: [ { Datenpunkt: 'hm-rpc.1.00351F298A58E3.3.STATE', Wert: true, Delay: 0.1, Dauer: null }, // WZ Licht Terrasse Verzoegerung in sekunden // Dauer in sekunden // null = endlos { Datenpunkt: 'hm-rpc.1.0008E0C9A671B0.4.LEVEL', Wert: 100, Delay: 0.1, Dauer: 600 } // WZ Esszimmertisch Dimmer// Feld Dauer: danach wird auf Ausgangswert zurueckgesetzt ],Hi,
Es gibt auch einen Alarm Adapter für iobroker. Reicht der dir nicht aus?
Vielleicht könntet ihr ja eure Anstrengungen kombinieren um ein noch besseres "Produkt" zu erzeugen.
-
Hi,
seit einigen Monaten bastele ich an einem Projekt um mein Haus elektronisch abzusichern. Sicherheit treibt mich schon seit längerem um. Das Anwesenheitssimulationsscript, die Einbindung einiger Kameras rund ums Haus sind einige Beispiele. Jetzt kommt hinzu eine doch recht umfassende Alarmanlagen installation. Das Script dazu richtet sich or allem an Nutzer mit hoeherem Anspruch an einer solchen Anlage im ioBroker Umfeld. Im Folgenden teile ich was ich dazu an Hardware nutze und auch die Details des Scriptes.
Was Hardware angeht, so nutze ich überwiegend Homematic. Das Script ist aber nicht nur auf Homematic ausgerichtet. Alles was in ioBroker geht, sollte auch mit dem Script gehen.Meine ausgewählte Hardware:
Bei der Hardware habe ich mich hauptsächlich an Homematic orientiert mit folgenden Komponenten- Bewegungsmelder
- Fenstersensoren
- Homematic Alarmsirenen ASIR
- Homematic Rauchmelder
- Homematic Wasermelder
- Keypad
- Schlossantrieb
- ELV Statusboard "ELV-SH-SB8" fuer Status und Steuerung
weitere Komponenten
- Wandtablet
- VIS Steuerung
- Wasermelder
- Rauchmelder
Komponenten noch in der Anschaffung
-
Glasbruchsensoren
-
weitere Melder und Fenstersensoren
-
Keypad
Zum Keypad kann ich sagen, dass ich ganz ok damit bin. (wobei ich einen Fingerprintsensor schon vermisse) Es funktioniert gut und laesst sich direkt mit dem Tuerschloss direkt verbinden.
Das ist auf Jeden Fall ein plus. Es soll ja in Kürze auch eine festere Verbindung zur Doorbird geben. Da weiß ich aber noch nicht wie das genau läuft.
Das Keypad ist ja auch keine riesige Anschaffung und lässt sich leicht verbauen. Das ist anders mit der Doorbird. Also Doorbird mal nach hinten gestellt
Was gut funktioniert:
-
natürlich auf und zuschließen
-
Alarm scharf beim zuschließen
-
alarm unscharf beim aufschließen
-
Direktverbindung zum ELV StatusBoard (komme ich weiter unten noch drauf)
Was nicht so schön ist. -
Verarbeitung - halt Kunststoff
-
kein Fingerprint
-
Der Homematic Türschloßantrieb.
Hier musste ich ersteinmal den Schließzylinder tauschen. Das müssen wahrscheinlich die meißten.
Es gibt auch gute Videos im Netz, die den Einbau beschreiben - kein Hexenwerk
Bei den Maßen muß man halt ein wenig aufpassen. 10mm sollte der Zylinder schon hinausschauen.
Notöffnung ist ein Muss (aufschließen von außen während der Schlüssel steckt)
Ansonsten war der Einbau easy. -
Das ElV Status Board
Es ist ein Bausatz. Das vorneweg. Es muß nicht gelötet werden und der Zusammenbau gestaltet sich einfach.
Aber das mag jeder anders empfinden. Auch hier gibt es Videos im Netz.
Ein bischen schwieriger ist das einstellen der LED Farben ( aber auch das empfand ich als einfach)Was macht das Board im Kontext der Alarmanlage. Ich habe 8 LEDs und 8 Hardwareschalter je LED einer.
Diese habe ich folgendermaßen belegt- Alarmanlage scharf/unscharf - ein Druck und die Anlage ist von innen scharf
- Einbruchsmeldung - bei Druck kann diese quittiert werden
- geoeffnet Meldung (wenn ein Fenstersensor etc meldet, dass noch etwas geoeffnet im Haus ist)
- Sabotage Meldung (zusatzinfo zur Einbruchsmeldung)
- Stoerungs Meldung (wenn komponenten nicht erreichbar sind)
- Rauch Meldung
- Wasser Meldung
- und einen Schalter, den ich STILL nenne, Damit können laufende Sirenen etc, still geschaltet werden
Diese Belegung ist natürlich variabel. aber so ist sie bei mir eingerichet
Zum Board selber.
- macht nicht wirklich einen hochwertigen Eindruck - ist aber akzeptabel
- es braucht ein Netzteil, somit nicht ganz ortsunabhängig
- es tut was es soll. Bei mir fristet es das Dasein im Schlafzimmer (macht wohl am meisten Sinn)

und da das Ganze nichts ohne Software macht, habe ich mich umgeschaut.
Es gibt einen Alarmadapter und ein nicht mehr gewartetes script.
Beides hat, für das was ich mir vorstellte, nicht gepasst. Also kommt ein neues Script hinzu, das mittlerweile im Einsatz ist.Konzept des Scriptes:
Dann das Script. Ich muß sagen, dass die Komplexität doch sehr groß ist. Das liegt natürlich daran, dass ich es flexibel haben wollte.
Leicht anpassbar an neue Komponenten und Situation.hier ein paar features (bei weitem nicht komplett
-
Zunächst wird die Raumsituation beschrieben und in einer Tabelle hinterlegt.
Die Sensoren werden zugeordnet zu Räumen.
Also Raum: Wohnzimmer,
RaumType ist innen,
zuodnung der Sensoren zu GeräteTypen je Raum (Bewegung, Fenster, Türen, Rollladen, Glasbruch, Rauch, Wasser) -
Dann werden Sichten bzw Filter auf die Räume gelegt (auch in einer Tabelle)
Eine Sicht kann z.B. alle innenliegenden Räume aber ohne das Gästezimmer sein -
Die Sichten werden dann Scenarios zugeordnet
Scenario Schlafen bekommt dann vielleicht die reine InnenSicht (eine Sicht ohne Schlafzimmerfenster wäre hilfreich)
Scenario Gäste bekommt eine Sicht nur innen aber ohne Gästezimmer.
Die Scenarios können einzeln aktiviert und deaktiviert werden. Den Sencarios sind auch Alarme zugeordnet.
Wenn ein Scenario ein Alarmauslöser ist, dann werden die Hardwarekomponenten direkt angesprochen z.B. die ASIR Sirene (quasi Nativ)Dabei muß man sich erstmal gedanklich einfinden. Das geht aber schnell.
Weitere Features
- Verbindung zum Servicemeldungsscript (nutzt einfach dessen ressourcen für Sabotage Alarm und UnreachAlarm)
- Umfassende Protokollierung in JSON und HTML
- externe protokollierung zusätzlich
- native Einbindung des Statusboards
- native Einbindung der Alarmsirene ASIR
- umfassende Meldungen an die bekannten services (email, telegram, whatsapp etc etc) das ganze einstellbar
- automatische Berücksichtigung von Abwesenheiten (z.B. Aktivierung/Dekativierung von Scenarios
- automatische Berücksichtigung bei anwesenden Gaesten (z.B. Aktivierung/Dekativierung von Scenarios
- etc. etc.
Die 5 wichtigsten Schritte beim Einstellen des Scriptes
Vorgehensweise bei der Anpassung des Scriptes auf die eigenen Bedürfnisse
Der Einstellungsbereich enthält Einstellungssklassen- Bitte Anpassen
- optional
- nicht ändern
Somit sollte der Fokus zunächst auf "Bitte Anpassen" gelegt werden.
Hierzu zählen die folgenden Tabellen1. raumDefinition mit folgenden Feldern:
Raumbezeichnung - kann frei vergeben werden
Type: - kann frei vergeben werden. Es macht Sinn z.B. nach innen und aussen zu unterscheiden
Position - kann frei vergeben werden. Es macht Sinn z.B. nach Stockwerk zu unterscheiden OG, UG, KG
Gerätetypen: Bewegung: [], Fenster: [], Tueren: [], Rollladen: [], Glasbruch: [], Wasser: [],
Die Gerätetypen müssen nicht enthalten sein, wenn sie für einen Raum nicht benötigt werden
Wenn sie hinzugefügt werden können einfach die zugehörigen datenpunkte hinzugefügt werdenWichtig ist:
- Die geschweiften und eckigen Klammern müssen genauso im Kontext erhalten bleiben
- Komma müssen nach jeder Felddefinition gesetzt werden
Beispiel
const raumDefinition = { Wohnzimmer: { Type: "innen", Position: "oben", Fenster: [], Tueren: ['hm-rpc.1.0000DD89B7xxx8.1.STATE'], // Terrassentuere }, Kueche: { Type: "innen", Position: "oben", Fenster: ['hm-rpc.1.003660Cxxx05D0.1.STATE','hm-rpc.1.003660C993BEF6.1.STATE'], // Fenstersensor Kueche links und rechts }, };2. Die Filter (Sichten) Definition. Die Filter beziehen sich auf die eingestellte raumDefinition
Felder:
Filtername: kann frei vergeben werden
raumTyp: bezieht sich auf raumDefinition Type - muss übereinstimmen ( ein leeres Feld heißt alle typen)
raumPosition: bezieht sich auf raumDefinition Position und muss übereinstimmen ( ein leeres Feld heißt alle Positionen)
geraetetypen: bezieht sich auf raumDefinition Gerätetypen (Fenster,Melder etc) und muss übereinstimmen ( ein leeres Feld heißt alle Gerätetypen)
raeume: bezieht sich auf raumDefinition Raumname (Wohnzimmer etc) und muss übereinstimmen ( ein leeres Feld heißt alle Raumnamen)
Datenpunkte: bezieht sich auf raumDefinition auf die zugeordneten Datenpunkte und muss übereinstimmen ( ein leeres Feld heißt alle Datenpunkte)Grundsätzlich können für jedes Feld Ausschlüsse gemacht werden. Erlaubt sind minus (-) und Doppelminus (--)
Minus heißt Ausschluss aus dem später zugeordneten Scenario was auch bedeutet, dass dieser Datenpunkt bei einem zweiten aktiven scenario wieder zugeordnet werden könnte
Doppelminus heißt genereller Ausschluss auch wenn dieser Datenpunkt bei einem zweiten aktiven scenario zugeordnet wurdeEs sollten immer alle Felder vorhanden sein (anders als bei der raumDefinition).
Beispiel:
let FilterDefinition = { Schlafen: { raumTyp: ['innen'], // Raumtypen (z. B. innen, aussen) als Array oder keine Angabe = alle raumPosition: [], // Positionen (z. B. oben, unten oder ErsterStock,ZweiterStock,DritterStock) als Array oder keine Angabe = alle geraetetypen: [], // Geraetegruppen (z. B. Bewegung, Fenster, etc.) oder keine Angabe = alle raeume: [], // Einzelraeume bei keiner Angabe werden alle Raeume verwendet Datenpunkte: ['-hm-rpc.1.003660C9A62C5D.1.STATE','-hm-rpc.1.0000D709954526.1.STATE'] // Schlafzimmerfenster und Elternbadfenster ausgeschlossen (Lueftung) }, Abwesend: { raumTyp: ['innen'], raumPosition: [], geraetetypen: [], raeume: [], Datenpunkte: [] },3. Scenarios
Scenarios lösen am Ende Alarme aus. Mehrere Filter können einem Scenario zugeordnet werden. Auch mehrere Aktionen (Alerts) können zugeordnet werden.
Jedes Scenario lässt sich aktivieren oder deaktivieren.
Wenn mehrere Scenarios aktiviert sind und ein Datenpunkt mehreren Scenarios zugeordnet wurden, dann bestimmt die Priorität welches Scenario als Alarm ausgeführt wird
Es lassen sich maximal 99 Scenarios definierenconst scenarioDefinition = { Scenario01: { name: "Schlafen", Prio: 6, Filter: ['Schlafen'], Alert: ['FlashSchlafzimmerEIN',"FlashStandard1EIN"] }, Scenario02: { name: "Abwesend", Prio: 5, Filter: ["Abwesend"], Alert: ["SireneASIR2EIN","Licht_OG"] }, Scenario03: { name: "Garage", Prio: 10, Filter: ["Garage"], Alert: ['FlashSchlafzimmerEIN'] }, Scenario04: { name: "Urlaub", Prio: 6, Filter: ['Urlaub'], Alert: [] }, Scenario05: { name: "Haustiere", Prio: 7, Filter: ['Haustiere'], Alert: [] }, Scenario06: { name: "Gaeste", Prio: 4, Filter: ["Gaeste"], Alert: ["FlashSchlafzimmerEIN"] }, Scenario07: { name: "frei", Prio: 8, Filter: [], Alert: [] }, Scenario08: { name: "Stoerung", Prio: 9, Filter: ['Stoerung'], Alert: [] }, // Filter ist bei Stoerung immer = Stoerung Scenario09: { name: "Gefaehrdet", Prio: 3, Filter: ['HochRisiko'], Alert: ["SireneASIR2EIN","Licht_Hoch_Risiko_Aussen"] }, Scenario10: { name: "Wasser", Prio: 2, Filter: ['Wasser'], Alert: ["SireneASIR2EIN"] }, Scenario11: { name: "Rauch", Prio: 1, Filter: ['Rauch'], Alert: ["SireneASIR1EIN","SireneASIR2EIN"] }, };4. Direkte Ansteuerung von hardware im Alarmfall (Alert im Scenario)
die Namen der AusgabeDevices können frei vergeben werden.
Es gibt aber fest verdrahtete Devices.- HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
- Datenpunkt_Standard: Hier wird ein Datenpunkt eingetragen, der reagiern soll Angaben sind auch zu machen beim Aktivierungswert, Rückstellwert, Dauer und Delay
(beispielsweise können hier Lichter geschaltet werden oder andere nicht-Homatic Sirenen etc.) was auch immer - Datenpunkt_Flash ist ein Datenpunkt bei dem man eine Lampe mit einer Frequenz blinken lassen kann. Nutze ich z.B. für das Schlafzimmer als stillen Alarm für die Scenarien wo ich nicht
gleich die Sirenen laufen lassen möchte
anzugebende Werte: der entsprechende Datenpunkt, Aktivierungswert, Wiederholungen (Anzahl - nicht zu viele verwenden), Frequenz in ms (Abstand zwischen zwei an/aus Schaltungen, Startdelay in ms
Die hier genutzten Geräte können über den STILL Datenpunkt alle komplett auf push ausgeschaltet werden
Beispiele
const AlertAusgabeDevices = { SireneASIR1EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000, }, SireneASIR1AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00246269903296.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000, }, SireneASIR2EIN:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 2, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 100, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 1, Startdelay: 1000 }, SireneASIR2AUS:{ Device: "HMIP-ASIR", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false,// true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.002462699037EF.", AkustikSelectionDP: "3.ACOUSTIC_ALARM_SELECTION", valueTon: 0, Duration_UnitDP: "3.DURATION_UNIT", valueUnit: 0, // 0 = sekunde Duration_ValueDP: "3.DURATION_VALUE", valueDuration: 0, OpticalSelectionDP: "3.OPTICAL_ALARM_SELECTION" , valueOpt: 0, Startdelay: 1000 }, Standard1Ein:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Rueckstellwert: false, // Rueckstellwert wird gesetzt wenn die Dauer abgelaufen ist. Keine Funktion wenn Dauer = null ist Dauer: 100000, // in ms - null ohne Auschaltung Startdelay: 0, // in ms }, Standard1Aus:{ Device: "Datenpunkt_Standard", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll }, FlashStandard1EIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashStandard1AUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.00351F298A58E3.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerEIN:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: true, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: true, // true/false 1/100 was auch immer gesetzt werden soll Wiederholung: true, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, FlashSchlafzimmerAUS:{ Device: "Datenpunkt_Flash", // Device darf nicht veraendert werden. Die Logik der nachfolgenden Felder wird anhand des Device abgearbeitet - hart verdrahtet Zustand: false, // true = ein - false = aus // Dieser Zustand wird nicht gesetzt, bedeutet Geraet ein-oder Ausschalten. Der zu setzende Wert wird weiter unten bestimmt DP: "hm-rpc.1.003AE0C9A8F157.3.STATE", /*Licht WZ Terrassentuere Ausgang:2 STATE*/ Aktivierungswert: false, // true/false oder 1/0 100/0 zulaessig Wiederholung: false, AnzahlWiederholungen: 4, Frequenz: 1000, // achtung das sind millisekunden }, }5. Definition von Schaltgruppen.
Schaltgruppen können für Scenario-Alerts aber auch bei Alarmaktivierung / Alarmdeaktivierung ausgelöst werden
einzustellendwe Felder: Datenpunkt der geschaltet werden soll. Wert der zur Schaltung genutzt werden soll, Delay in sekunden, Dauer in SekundenBeispiel:
const Schaltgruppen = { Licht_OG: [ { Datenpunkt: 'hm-rpc.1.00351F29xxxxE3.3.STATE', Wert: true, Delay: 0.1, Dauer: null }, // WZ Licht Terrasse Verzoegerung in sekunden // Dauer in sekunden // null = endlos { Datenpunkt: 'hm-rpc.1.0008E0C9xxxxB0.4.LEVEL', Wert: 100, Delay: 0.1, Dauer: 600 } // WZ Esszimmertisch Dimmer// Feld Dauer: danach wird auf Ausgangswert zurueckgesetzt ], Licht_Hoch_Risiko_Aussen: [ { Datenpunkt: 'hm-rpc.1.0008A0C9xxxxx6.1.STATE', Wert: true, Delay: 0.05, Dauer: 600 }, // Licht Kinderbad { Datenpunkt: 'hm-rpc.1.0008A0C9xxxx50.1.STATE', Wert: true, Delay: 0.1, Dauer: 600 }, // Licht aussen Nordseite { Datenpunkt: 'hm-rpc.1.0008A269xxxx47.1.STATE'/*Licht Hobbyraum Status:1 STATE*/, Wert: true, Delay: 150, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9xxxx63.10.STATE'/*Kelleraktor 5 Maschinenraum PoolHalle:10 STATE*/, Wert: true, Delay: 0.2, Dauer: 600 }, { Datenpunkt: 'hm-rpc.1.0025A0C9Axxx70.18.STATE'/*Keller Aktor 1 Aktor Licht Steinterasse:18 STATE*/, Wert: true, Delay: 0.25, Dauer: 600 }, ] };Die optionalen Einstellungen
Messenging
Es können die wichtigsten messenging services genutzt werden um kurzNachrichten oder verlängerte Nachrichten an die verschiedenen
services zu senden. Je MessageType und Service kann entschieden werden, ob eine Nachricht gesendet werden soll, ob die Kurzversion
oder Langversion versendet werden soll und welche Instanz genutzt werden soll.
Falls mehrere Instanzen für einen Service gleichzeitig genutzt werden sollen, kann die entsprechende Instanz hinzugefügt werden sollAls Nachrichtenservice kann auch eine Sprachnachricht versendet werden. (SayIt - Adapter)
Vorraussetzung ist, dass der jeweilige ioBroker Adapter für den jeweiligen Service installiert und konfiguriert ist.const services = ['email', 'whatsApp', 'Signal', 'Telegram', 'Pushover', 'Pushsafer', 'Sprache',]; const MessengerScope = { 'Rauch': [true, true, false, false, false, false, false, ], 'Einbruch': [true, false, false, false, false, false, false, ], 'Wasser': [true, true, false, false, false, false, false, ], 'Sabotage': [false, false, false, false, false, false, false, ], 'Stoerung': [false, false, false, false, false, false, false, ], 'Alarm_Scharf': [true, false, false, false, false, false, false, ], 'Alarm_Unscharf': [true, false, false, false, false, false, false, ], 'ScenarioAktiviert': [true, false, false, false, false, false, false, ], 'ScenarioDeaktiviert': [true, false, false, false, false, false, false, ], 'Alarm_Still_Geschaltet': [false, false, false, false, false, false, false, ], 'Fallback': [false, false, false, false, false, false, false, ], // Fallback nicht loeschen. wird genutzt, wenn keine andere Definition gemacht worden ist } const MessengerInstanz = [0, 0, 0, 0, 0, 0, 0, ]; // Instanz des Messengers const TextTypeKurz = [false, true, true, true, true, true, true, ]; // bei true wird der Kurztext gesendet - sonst der LangtextNutzung eines oder mehrerer ELV ELV-SH-SB8 Statusboard
es können beliebig viele Statusboards eingebunden werden. na ja, 2 machen vielleicht sinn für 2 Etagen oder eines für Statusanzeige und eines zur ScenarioAktivierung/Deaktivierung
Die Statusboards und deren Status wird nicht mit dem Status ersetzt, was auch möglich gewesen wäre, vielmehr wird der Status synchronisiert mit dem jeweiligen Statuspunkt des Scriptesconst ControlDevices = [ { DeviceID: "StatusBoard1", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3CxxxxsEAx.", LED1: DP_Alarmaktivierung, DP_2ndPart1 : "10.STATE", // Meldungsanzeige und Aktivierung/Deaktivierung erfolgt durch die entsprechenden Datenpunkte LED2: DP_Einbruchsmeldung, DP_2ndPart2 : "14.STATE", // manuellAenderbar true laesst es zu den Alarm ueber das Board auszuschalten // dann werden auch alle AkustikGeraete Sirenen ausgeschaltet LED3: DP_GeoeffnetMeldung, DP_2ndPart3 : "18.STATE", // DP und DP_2ndPart entspricht dem genauen Datenpunkt jeder LED LED4: DP_Sabotagemeldung, DP_2ndPart4 : "22.STATE", LED5: DP_Stoerungsmeldung, DP_2ndPart5 : "26.STATE", LED6: DP_Rauchmeldung, DP_2ndPart6 : "30.STATE", LED7: DP_Wassermeldung, DP_2ndPart7 : "34.STATE", // ausgeschaltet werden aber nicht die Schaltgruppen LED8: DP_Still, DP_2ndPart8 : "38.STATE", // laufende Alarmgeraete (Sirenen etc) werden ausgeschaltet }, { DeviceID: "StatusBoard2", Device: "ELV-SH-SB8", DP: "hm-rpc.1.004FE3C00005xxx.", LED1: "Scenario01Aktiv", DP_2ndPart1 : "10.STATE", // Szenarioschaltung fuer StatusBoard2 LED2: "Scenario02Aktiv", DP_2ndPart2 : "14.STATE", LED3: "Scenario03Aktiv", DP_2ndPart3 : "18.STATE", LED4: "Scenario03Aktiv", DP_2ndPart4 : "22.STATE", LED5: "Scenario05Aktiv", DP_2ndPart5 : "26.STATE", LED6: "Scenario06Aktiv", DP_2ndPart6 : "30.STATE", LED7: "Scenario07Aktiv", DP_2ndPart7 : "34.STATE", // Szenarioschaltung fuer StatusBoard2 LED8: "Scenario08Aktiv", DP_2ndPart8 : "38.STATE", } ];Einstellungen zur Definition wann ein Alarm erfolgt
Die Interpretation ob ein Alarm vorliegt hängt vom jeweiligen Datenpunkt ab. Das kann dediziert eingestellt werden
In den meisten Fällen reicht eine allgemeine Einstellung: true, 1, 100 etc.Sollte ein datenpunkt aber eine andere Logik verfolgen, dann kann ein expliziter Auslösewert für diesen Datenpunkt eignestellt werden
const AlarmAusloesungswerte = [ { op: '==', wert: true }, // nur true zulaessig - bitte beibehalten { op: '>', wert: 0 }, // groesser als 0 - bitte beibehalten { range: { min: 1, max: 2 } }, // Beispiel range {exception: {dpAusnahme:'hm-rpc.1.000F1D8xxxx02D.1.MOTION', wert: false}}, // je Datenpunkt mit ausnahmen, z.B. fuer Garagentorsensor ist false = geoeffnet - Beispiel {exception: {dpAusnahme:"hm-rpc.1.0047E40xxxxx88.1.LOCK_STATE", wert: 2}}, // hmip-dld unlocked = 2 ];Verzögerung bei Alarmaktivierung
Die Anzahl von Sekunden von der Anfrage zur Aktivierung (Scharfschaltung) bis zur tatsächlichen Aktivierung des Alarmes kann eingestellt werden.
Während dieser Zeit, kann der Alarm trotzdem wieder unscharf geschaltet werden. Die Wartezeit wird dann abgebrochenconst AKTIVIERUNGSDELAY_SECONDS = 5;Aktionen bei Scharf/Unscharfschaltung
Bei Scharf/Unscharfschaltung koennen Schaltgruppen zur Ausführung definiert werden. Es können beliebig viele Schaltgruppen eingetragen werden, die dann zur Ausführung kommen
const AktionenNachScharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei Bedarf const AktionenNachUnscharfSchaltung = [] // hier koennen die keys aus der Tabelle der Schaltgruppen eingetragen werden zB. ["Licht_OG","Licht_UG"] also mehrere bei BedarfReaktion bei An/Abwesenheit
const anwesenheit = 'javascript.0.AnwesenheitsTracking.JemandDa' // bitte anpassen falls Anwesenheitstracking genutzt wird const AbwesenheitScenarioAktivierung = ["Scenario02Aktiv"];Gaeste Management
Ich nutze ein Flag, welches auf true geschaltet wird, wenn Übernachtungsgäste im haus sind.
Damit werden Rollladensteuerung und Heizungsverhalten beeinflußt. Dieses Flag nutze ich nun auch für die Alarmanlageneinstellung
Dabei wird dann z.B. der Gästebereich aus für die alarmierung ausgeschlossen. Die Alarmierung läuft dann still und nicht über die Sirenen
es koennen mehrere Scenarios angegeben werden, ein fuehrendes minus dreht den wert um - aus true wird false (Ausschluss). Das Scenario wird also deaktiviert// Die Funktion GAESTE Management wird nur aktiviert, wenn es den Datenpunkt zum Gaeste-Flag gibt const GaesteFlag = "javascript.0.Steuerungsflags.Gaeste" // das hier angegebene scenario wird bei Anwesenheit von Gaesten (Uebernachtung) aktiviert und deaktiviert const GaesteScenarioAktivierung = ["Scenario06Aktiv"];Protokollierung
Die wichtigsten Statusänderungen und Alarme werden in ein Protokoll im JSON Format geschrieben. Dieses kann dann z.B. mit VIS angezeigt werden (beispielsweise mit dem inventwo Adapter
Ein Schedule ist standardmäßig eingestellt um z.B. Monatlich eine Bereinigung der History durchzuführen. Das vermeidet auf die Dauer technische Probleme mit zu großen Datenpunkten
Dabei kann eingestellt werden, wieviel Tage in der History erhalten bleiben soll. Bei 0 wird alles gelöscht.const ScheduleAktiv = true; // Bei "false" wird der schedule nicht durchlaufen. Manuelles Loeschen kann ueber den Datenpunkt id_Button_Refresh_Historie (Button) moeglich const scheduleTimeClearSMTexte = "2 0 1 * *"; // am 1. tag des monats um 00:02 morgens sollen alle Alarmmeldungen des Monats geloescht werden id_History_VerbleibendeTage und aktive bleiben erhalten // const scheduleTimeClearSMTexte = "58 23 * * 0"; // alternative Sonntags um 23:58 Uhr sollen alle Alarmmeldungen der Woche im datenpunkt der Protokoll-Texte geloescht werdenSchreiben des Protokolls in eine CSV Datei
Die History kann auf Wunsch in eine externe Datei geschrieben. Diese dient dann zur Langzeitspeicherung dieser Daten
const ProkollExtern = true const PathProkollExtern = "/opt/iobroker/log/AlarmMeldungen.csv"; // Pfad und Dateiname des externen Logs // const PathProkollExtern = "/iobroker/log/AlarmMeldungen.csv"; // Pfad fuer Windows/ iobroker ist der angenommene iobroker home-pfadHTML Datenpunkte
Auf Wunsch kann auch ein HTML Code erzeugt werden, der eine fast identische Darstellung erzeugen kann, z.B. mit dem HTML Basic Widget aus VIS.
HTML kann für verschiedene Visualiserungstools genutzt werden. Inventwo hat meines Wissens nach zur Zeit noch Probleme mit Vis2. Die HTML Anzeige ist dabei eine perfekte Alternative.Dabei kann das Aussehen wie Farben Zellgrössen angepasst werden. Auch Spalten können abgewählt werden
// sinnvoll wenn inventwo nicht fuer die visualisierung genutzt werden kann const UpdateHTML_Datenpunkte = true // bei true werden die Datenpunkte automatisch angelegt und bei false wieder geloescht const id_HTML_Alarmmeldung_Aktuell = statusPath + "HTML_Alarmmeldung_Aktuell" // Empfehlung: nicht aendern const id_HTML_Alarmmeldung_Historie = statusPath + "HTML_Alarmmeldung_Historie" // Empfehlung: nicht aendern const HTML_TableWidthsAndStyles = { // Definition der Spaltenbreiten in CSS-Einheiten columnWidths: { datum: '95px', // Breite fuer Datum/Uhrzeit-Spalte alarmtype: '70px', // Breite fuer Alarmtyp-Spalte raum: '90px', // Breite fuer Raum-Spalte deviceType: '80px', // Breite fuer Geraetetyp-Spalte scenario: '50px', // Breite fuer Szenario-Spalte deviceName: '150px', // Breite fuer Geraetebezeichnung deviceId: '50px', // Breite fuer Geraete-ID message: '210px', // Breite fuer Nachrichtenspalte quittiert: '95px' // Breite fuer Quittierungsspalte }, // Visuelle Stileinstellungen fuer die Tabelle styles: { // Basistypografie fontSize: '10px', // Allgemeine Schriftgroesse // Kopfzeilenstil headerColor: '#333333', // Hintergrundfarbe der Kopfzeile headerTextColor: 'white', // Textfarbe der Kopfzeile // Zeilenstile (Zebra-Pattern) evenRowColor: '#4e5049', // Hintergrundfarbe gerade Zeilen oddRowColor: '#333333', // Hintergrundfarbe ungerade Zeilen evenRowTextColor: 'white', // Textfarbe gerade Zeilen oddRowTextColor: 'white', // Textfarbe ungerade Zeilen // Rahmeneinstellungen borderColor: '#000000', // Farbe der Tabellenraender borderWidth: '1px', // Staerke der Rahmenlinien useBorders: true, // Soll Rahmen anzeigen? (true/false) // Zellenlayout cellPadding: '5px' // Innenabstand der Tabellenzellen }, // Texte fuer die Tabellenkopfzeilen headerTexts: { datum: 'Datum/Uhrzeit', // ueberschrift Datumsspalte alarmtype: 'Alarmtyp', // ueberschrift Alarmtyp raum: 'Raum', // ueberschrift Raum deviceType: 'Geraetetyp', // ueberschrift Geraetetyp scenario: 'Szenario', // ueberschrift Szenario deviceName: 'Geraetebez.', // ueberschrift Geraetebezeichnung (abgekuerzt) deviceId: 'Geraete-ID', // ueberschrift Geraete-ID message: 'Nachricht', // ueberschrift Nachrichteninhalt quittiert: 'Quittiert seit' // ueberschrift Quittierungsstatus }, // Konfiguration der Spaltensichtbarkeit - ein oder ausblenden columns: { datum: { visible: true }, alarmtype: { visible: true }, raum: { visible: true }, deviceType: { visible: true }, scenario: { visible: true }, deviceName: { visible: true }, deviceId: { visible: true }, message: { visible: true }, quittiert: { visible: true } } };Übersicht über die Geräte je Raum, die aktiv bzw inaktiv sind und welchse Scenarios mit diesem Verknüpft sind.
Standardmäßig wird ein HTML code erzeugt, der eine Liste der der Geräte/Räume anzeigt.
Dies ist insbesondere hilfreich um zu überprüfen, ob die Einstellungen dem gewünschten Ergebnis entsprechen.Die Liste kann ebenfalls im Detail mit Größen, Style und scope Einstellungen versehen werden
const HTML_Raumzuordnungen_WidthAndStyles = { columnWidths: { raum: '90px', scenario: '150px', deviceType: '100px', }, styles: { fontSize: '10px', headerColor: '#333333', headerTextColor: 'white', evenRowColor: '#4e5049', oddRowColor: '#333333', evenRowTextColor: 'white', oddRowTextColor: 'white', borderColor: '#000000', borderWidth: '1px', useBorders: true, cellPadding: '5px' }, headerTexts: { raum: 'Raum', scenario: 'Szenarien', deviceType: 'Geraetetyp' }, columns: {raum: { visible: true },scenario: { visible: true }, deviceType: { visible: true } } };Integration von Sabotage und Stoerungsmeldungen (Unreach) aus dem Servicemeldungs-Script
Homematic Sabotagemeldungen und Stoerungsmeldungen werden anders gemeldet als z.B. die Aktivierung eines Sensors und haben ihre eigene Komplexität
Wer diese Meldungen integrieren möchte kann dies über das Servicemeldungs-Script erreichen.
Dies geschieht über die JSON Datei des Scriptes die dann eingelesen und ausgewertet werden kann.Link zum Script: https://forum.iobroker.net/topic/77816/vorlage-servicemeldungen-volume2
// Wer das Servicemeldungsscript nutzt kann damit verbinden und Sabotage oder Unreach als Alarm melden const SM_CountSabotage = 'javascript.0.ServicemeldungenVol2.Anzahl_SABOTAGE' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_CountUnreach = 'javascript.0.ServicemeldungenVol2.Anzahl_UNREACH' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wird const SM_Meldungen_JSON = 'javascript.0.ServicemeldungenVol2.JSONAktuelleSM' // bitte Pfad ggf anpassen falls das Servicemeldungsscript genutzt wirdAutoconfirm Servicemeldungen
Servicemeldungen können automatisch bestätigt werden. Hingegen müssen Einbruch, Wasser, Rauchmeldungen manuell quittiert werden.
eine Manuelle Quittierung ist auch für Servicemeldungen möglich, kann also eingestellt werden.
Anmerkung: Geoeffnet-Meldungen werden immer automatsch deaktiviert, wenn alles geschlossen istconst ServiceMeldungSabotageAutoConfirm = true; // Wenn die Sabotage aufgehoben wird, dann wird die der SabotageDatenpunkt automatisch zurueckgesetzt bei true const ServiceMMeldungStoerungAutoConfirm = true; // Wenn die Stoerung aufgehoben wird, dann wird die der StoerungsDatenpunkt automatisch zurueckgesetzt bei trueein paar fehlen noch
Script und Views findet ihr hier:
Das Script hat netto ca 2000 Zeilen. (ohne Kommentar-und Leerzeilen)
AlarmAdv Script:
AlarmAdv_V1-00.txtJSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
AlarmViewJson.txtHTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
Der View beinhaltet Widgets aus dem Material Design Adapter.
AlarmViewHTML.txtDebugging-Hinweise:
Bitte beachtet, dass ihr bei Fehler das Debug Protokoll mitlaufen lasst.
Der DebugLevel sollte dabei mindestens auf 2 stehen. 3 könnte auch notwendig werden
Es wird viele Zeilen geben. Ihr könnte auch in eine CSV Datei schreiben und dann hier im Thread posten.//DEBUGGING----OPTIONAL----------------------------------------------------------------------------------------------------------------------------- const debugLevel = 1 ; // Empfehlung = 1 const SystemLog = false; // schreib das Sytemprotokoll in ein externes log (sollte normalerweise deaktviert sein nur bei Problemen verwenden) const PathSystemLog = "/opt/iobroker/log/Alarmscript.csv"; // Pfad und Dateiname des externen Logs //const PathSMLog = "/iobroker/log/Alarmscript.csv"; // Pfad des externen logs fuer Windows/ iobroker ist der angenommene iobroker home-pfadvG Looxer
ScreenShot der Protokollierung

@martinschm sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Reicht der dir nicht aus?
@looxer01 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Es gibt ein Alarmadapter und ein nicht mehr gewartetes script.
Beides hat für das was ich mir vorstellte nicht gepasst. Also kommt ein neues Script hinzu, das mittlerweile im Einsatz is.° Node.js Update ---> iob nodejs-update
° Fixer ---> iob fix -
Hi,
Es gibt auch einen Alarm Adapter für iobroker. Reicht der dir nicht aus?
Vielleicht könntet ihr ja eure Anstrengungen kombinieren um ein noch besseres "Produkt" zu erzeugen.
@martinschm sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Vielleicht könntet ihr ja eure Anstrengungen kombinieren um ein noch besseres "Produkt" zu erzeugen.
Der Adapter deckt sicher 95% der Nutzer ab, die damit gut zurechtkommen.
Ich habe ein anderes Datenmodell gebaut. Damit müßte der Adapter neu geschrieben werden.
Am Ende reden wir hier von einigen wenigen, die mit dem Script besser bedient sind.
Die Exoten sind hier. Es ist keine Konkurrenzveranstaltung.vG Looxer
-
Hi,
ich habe den ersten Post ein wenig restrukturiert.Zusätzlich gibt es ein neues Kapitel "Die 5 wichtigsten Schritte beim Einstellen des Scriptes"
Darin erkläre ich welche Einstellungen gemacht werden müssen, damit das Script funktional ist, also bereits läuft.
Später kommen dann die optionalen EinstellungenvG Looxer
-
Hi,
ich habe den ersten Post ein wenig restrukturiert.Zusätzlich gibt es ein neues Kapitel "Die 5 wichtigsten Schritte beim Einstellen des Scriptes"
Darin erkläre ich welche Einstellungen gemacht werden müssen, damit das Script funktional ist, also bereits läuft.
Später kommen dann die optionalen EinstellungenvG Looxer
Cool, freue mich schon auf das Skript um zu testen.
Vorweg einige Fragen:
Kann man die Alarmanlage via Sprache (Alexa) steuern
Gibt es eine Übersicht Wo in welchen Raum Was aktiviert ist
Steuerung per Zeit ( scharf ab 22 Uhr bis x )
Integration von Feiertagsadapter und fb-checkpresenseBitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
Cool, freue mich schon auf das Skript um zu testen.
Vorweg einige Fragen:
Kann man die Alarmanlage via Sprache (Alexa) steuern
Gibt es eine Übersicht Wo in welchen Raum Was aktiviert ist
Steuerung per Zeit ( scharf ab 22 Uhr bis x )
Integration von Feiertagsadapter und fb-checkpresense@sigi234
Hi Sigi
und ich freue mich auf deine Tests. :)zu deinen Fragen
@sigi234 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:Kann man die Alarmanlage via Sprache (Alexa) steuern
Die Controls wie Alarmaktivierung, Scenarioaktivierung, still-Schaltung sind alles boolean Datenpunkte.
Die lassen sich ja standardmäßig mit Alexa ansprechen. Allerdings bei einer Alarmanlage kann das
auch weniger hilfreich sein, wenn der Einbrecher mit Alexa die alarmanlage steuert. Aber ich nutzte auch
Alexa nicht und vielleicht laesst sich das absichern@sigi234 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Gibt es eine Übersicht Wo in welchen Raum Was aktiviert ist
Es gib eine Übersicht welches Scenarioaktiv ist aber nicht welche Räume davon betroffen sind.
Muss ich drüber nachdenken. Ich könnte mir ein HTML Format vorstellen - aber mal sehen@sigi234 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Steuerung per Zeit ( scharf ab 22 Uhr bis x )
Würdest du das nutzen ? - jedoch kein großes Problem
@sigi234 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Integration von Feiertagsadapter
Das läuft dann wohl unter Steuerung per zeit / Kalender
@sigi234 sagte in [Vorlage] Alarmanlage mit erweiterten Funktionen:
Integration von fb-checkpresense
Ich nehme an, da geht es um An/Abwesenheit.
Bei Abwesenheit kann man man beliebige Scenarien aktivieren/deaktivieren und vice versa bei Anwesenheit.vG Looxer
-
Ich habe dem View die Übersicht über den Status der Räume hinzugefügt.(
Beim aktivieren und deaktivieren von Scenarios sind die Auswirkungen somit direkt sichtbar im View.
(Danke an Sigi für die Anregung)
-
Hi,
Im ersten post habe ich das script hinterlegt, sowie die views fuer HTML und JSON.
Wenn ihr mit dem JSON klar kommt, dann ist das zu bevorzugen, da die HTML Generierung ausgeschaltet werden kann und somit
sowohl die Generierung also auch die Datenpunkte entfallen.Bitte schaut euch die Erklärungen im ersten post zu den 5 wichtigen Schritten.
Ich schreibe in den ersten post auch noch ein paar Hinweise zum debugging reinbitte beachtet, dass dies die erste Version außerhalb meiner Testumgebung ist.
Es gibt sicher noch Fehler und die können auch schon sehr schnell auftreten.vG Looxer
-
Hi,
Im ersten post habe ich das script hinterlegt, sowie die views fuer HTML und JSON.
Wenn ihr mit dem JSON klar kommt, dann ist das zu bevorzugen, da die HTML Generierung ausgeschaltet werden kann und somit
sowohl die Generierung also auch die Datenpunkte entfallen.Bitte schaut euch die Erklärungen im ersten post zu den 5 wichtigen Schritten.
Ich schreibe in den ersten post auch noch ein paar Hinweise zum debugging reinbitte beachtet, dass dies die erste Version außerhalb meiner Testumgebung ist.
Es gibt sicher noch Fehler und die können auch schon sehr schnell auftreten.vG Looxer
Hi, erste Tests.
Typo:

Raumübersicht leer, sicher mein Fehler
Kann ich die Sirene löschen im Skript?
Kann ich das STATUSBOARD löschen?Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern!