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