Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Alarmanlage mit erweiterten Funktionen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    508

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

[Vorlage] Alarmanlage mit erweiterten Funktionen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
39 Beiträge 6 Kommentatoren 3.7k Aufrufe 8 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    looxer01
    schrieb am zuletzt editiert von looxer01
    #1

    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)

    status_board.jpg

    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 Tabellen

    1. 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 werden

    Wichtig 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 wurde

    Es 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 definieren

    const 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.

    1. HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
    2. 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
    3. 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 Sekunden

    Beispiel:

    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 soll

    Als 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 Langtext
    
    
    

    Nutzung 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 Scriptes

    const 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 abgebrochen

    const 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 Bedarf
    
    
    

    Reaktion 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 werden 
    
    
    

    Schreiben 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-pfad
    
    

    HTML 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 wird
    
    
    

    Autoconfirm 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 ist

    const 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 true
    
    
    

    ein 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.txt

    JSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
    Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
    AlarmViewJson.txt

    HTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
    Der View beinhaltet Widgets aus dem Material Design Adapter.
    AlarmViewHTML.txt

    Debugging-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-pfad
    
    

    vG Looxer

    ScreenShot der Protokollierung

    Alarmanlage_adv.png

    da_WoodyD NegaleinN sigi234S 4 Antworten Letzte Antwort
    2
    • L looxer01

      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)

      status_board.jpg

      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 Tabellen

      1. 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 werden

      Wichtig 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 wurde

      Es 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 definieren

      const 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.

      1. HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
      2. 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
      3. 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 Sekunden

      Beispiel:

      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 soll

      Als 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 Langtext
      
      
      

      Nutzung 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 Scriptes

      const 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 abgebrochen

      const 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 Bedarf
      
      
      

      Reaktion 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 werden 
      
      
      

      Schreiben 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-pfad
      
      

      HTML 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 wird
      
      
      

      Autoconfirm 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 ist

      const 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 true
      
      
      

      ein 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.txt

      JSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
      Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
      AlarmViewJson.txt

      HTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
      Der View beinhaltet Widgets aus dem Material Design Adapter.
      AlarmViewHTML.txt

      Debugging-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-pfad
      
      

      vG Looxer

      ScreenShot der Protokollierung

      Alarmanlage_adv.png

      da_WoodyD Offline
      da_WoodyD Offline
      da_Woody
      schrieb am zuletzt editiert von
      #2

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

      L 1 Antwort Letzte Antwort
      0
      • da_WoodyD da_Woody

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

        L Offline
        L Offline
        looxer01
        schrieb am zuletzt editiert von
        #3

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

        da_WoodyD 1 Antwort Letzte Antwort
        0
        • L looxer01

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

          da_WoodyD Offline
          da_WoodyD Offline
          da_Woody
          schrieb am zuletzt editiert von
          #4

          @looxer01 gut zu lesen! ☺️
          Interessant auf jeden Fall!
          Ich wohne zum Glück in einem Dorf wo man das Haus noch unversperrt lassen kann...

          gruß vom Woody
          HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

          L 1 Antwort Letzte Antwort
          0
          • da_WoodyD da_Woody

            @looxer01 gut zu lesen! ☺️
            Interessant auf jeden Fall!
            Ich wohne zum Glück in einem Dorf wo man das Haus noch unversperrt lassen kann...

            L Offline
            L Offline
            looxer01
            schrieb am zuletzt editiert von
            #5

            @da_woody

            @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_WoodyD 1 Antwort Letzte Antwort
            0
            • L looxer01

              @da_woody

              @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_WoodyD Offline
              da_WoodyD Offline
              da_Woody
              schrieb am zuletzt editiert von
              #6

              @looxer01 scheisse, klingt nicht gut.
              Klar kommt man dann zu solchen ideas.
              Trotzdem, Gutes Projekt!

              gruß vom Woody
              HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

              1 Antwort Letzte Antwort
              0
              • L looxer01

                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)

                status_board.jpg

                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 Tabellen

                1. 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 werden

                Wichtig 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 wurde

                Es 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 definieren

                const 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.

                1. HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
                2. 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
                3. 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 Sekunden

                Beispiel:

                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 soll

                Als 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 Langtext
                
                
                

                Nutzung 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 Scriptes

                const 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 abgebrochen

                const 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 Bedarf
                
                
                

                Reaktion 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 werden 
                
                
                

                Schreiben 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-pfad
                
                

                HTML 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 wird
                
                
                

                Autoconfirm 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 ist

                const 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 true
                
                
                

                ein 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.txt

                JSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
                Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
                AlarmViewJson.txt

                HTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
                Der View beinhaltet Widgets aus dem Material Design Adapter.
                AlarmViewHTML.txt

                Debugging-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-pfad
                
                

                vG Looxer

                ScreenShot der Protokollierung

                Alarmanlage_adv.png

                NegaleinN Offline
                NegaleinN Offline
                Negalein
                Global Moderator
                schrieb am zuletzt editiert von
                #7

                @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

                L 1 Antwort Letzte Antwort
                0
                • NegaleinN Negalein

                  @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. ;)

                  L Offline
                  L Offline
                  looxer01
                  schrieb am zuletzt editiert von
                  #8

                  @negalein

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

                  NegaleinN 1 Antwort Letzte Antwort
                  0
                  • L looxer01

                    @negalein

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

                    NegaleinN Offline
                    NegaleinN Offline
                    Negalein
                    Global Moderator
                    schrieb am zuletzt editiert von
                    #9

                    @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

                    L 1 Antwort Letzte Antwort
                    0
                    • NegaleinN Negalein

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

                      L Offline
                      L Offline
                      looxer01
                      schrieb am zuletzt editiert von looxer01
                      #10

                      @negalein

                      @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
                          ],
                      
                      M 1 Antwort Letzte Antwort
                      0
                      • L looxer01

                        @negalein

                        @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
                            ],
                        
                        M Offline
                        M Offline
                        martinschm
                        schrieb am zuletzt editiert von
                        #11

                        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.

                        L 1 Antwort Letzte Antwort
                        0
                        • L looxer01

                          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)

                          status_board.jpg

                          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 Tabellen

                          1. 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 werden

                          Wichtig 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 wurde

                          Es 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 definieren

                          const 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.

                          1. HMIP_ASIR steuert diese Homematic Komponente direkt an (Es müssen mehrere Datenpunkte gleichzeitig gesetzt werden, damit der Alarm ausgelöst wird)
                          2. 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
                          3. 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 Sekunden

                          Beispiel:

                          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 soll

                          Als 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 Langtext
                          
                          
                          

                          Nutzung 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 Scriptes

                          const 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 abgebrochen

                          const 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 Bedarf
                          
                          
                          

                          Reaktion 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 werden 
                          
                          
                          

                          Schreiben 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-pfad
                          
                          

                          HTML 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 wird
                          
                          
                          

                          Autoconfirm 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 ist

                          const 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 true
                          
                          
                          

                          ein 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.txt

                          JSON View. Die Tabellen greifen auf die JSON Datenpunkte zu.
                          Der View beinhaltet Widgets aus dem Material Design und Inventwo Adapter
                          AlarmViewJson.txt

                          HTML. Die Tabellen greifen auf die HTML Datenpunkte zu:
                          Der View beinhaltet Widgets aus dem Material Design Adapter.
                          AlarmViewHTML.txt

                          Debugging-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-pfad
                          
                          

                          vG Looxer

                          ScreenShot der Protokollierung

                          Alarmanlage_adv.png

                          NegaleinN Offline
                          NegaleinN Offline
                          Negalein
                          Global Moderator
                          schrieb am zuletzt editiert von
                          #12

                          @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

                          1 Antwort Letzte Antwort
                          0
                          • M martinschm

                            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.

                            L Offline
                            L Offline
                            looxer01
                            schrieb am zuletzt editiert von
                            #13

                            @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

                            1 Antwort Letzte Antwort
                            1
                            • L Offline
                              L Offline
                              looxer01
                              schrieb am zuletzt editiert von looxer01
                              #14

                              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 Einstellungen

                              vG Looxer

                              sigi234S 1 Antwort Letzte Antwort
                              2
                              • L looxer01

                                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 Einstellungen

                                vG Looxer

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

                                @looxer01

                                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

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

                                L 1 Antwort Letzte Antwort
                                0
                                • sigi234S sigi234

                                  @looxer01

                                  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

                                  L Offline
                                  L Offline
                                  looxer01
                                  schrieb am zuletzt editiert von looxer01
                                  #16

                                  @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

                                  1 Antwort Letzte Antwort
                                  1
                                  • L Offline
                                    L Offline
                                    looxer01
                                    schrieb am zuletzt editiert von looxer01
                                    #17

                                    Hi,

                                    im ersten Post habe ich nun die meisten optionalen Einstellungen hinzugefügt.

                                    vG Looxer

                                    1 Antwort Letzte Antwort
                                    0
                                    • L Offline
                                      L Offline
                                      looxer01
                                      schrieb am zuletzt editiert von looxer01
                                      #18

                                      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)

                                      Alarmanlage_adv.png

                                      1 Antwort Letzte Antwort
                                      1
                                      • L Offline
                                        L Offline
                                        looxer01
                                        schrieb am zuletzt editiert von looxer01
                                        #19

                                        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 rein

                                        bitte 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

                                        sigi234S 1 Antwort Letzte Antwort
                                        0
                                        • L looxer01

                                          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 rein

                                          bitte 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

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

                                          @looxer01

                                          Hi, erste Tests.

                                          Typo:

                                          Screenshot (1185).png

                                          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!

                                          L 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          719

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe