@Michael-Schmitt [sagte]: hab das bekommen.
Das komplette Skript mit den beiden Vereinfachungen:
// ZUORDNUNG: Hier fließen deine echten Datenpunkte und Lichter zusammen
const sicherheitsSchnittstelle = {
// 1. Wohnzimmer
'alias.0.Co2/Rauchmelder.Rauchmelder_WZ.ACTUAL': {
raum: 'Wohnzimmer',
typ: '🔥 Rauchmelder',
lichter: ['alias.0.Lichter.WZ_Decke_hinten.SET', 'alias.0.Lichter.WZ_Decke_vorne.SET']
},
// 2. Schlafzimmer
'alias.0.Co2/Rauchmelder.Rauchmelder_Schlafzimmer.ACTUAL': {
raum: 'Schlafzimmer',
typ: '🔥 Rauchmelder',
lichter: ['alias.0.Lichter.Schlafzimmer_Decke.SET', 'alias.0.Lichter.Schlafzimmer_Nachttischlampe.SET']
},
// 3. Flur
'alias.0.Co2/Rauchmelder.Rauchmelder_Flur.ACTUAL': {
raum: 'Flur',
typ: '🔥 Rauchmelder',
lichter: [] // Im Flur soll laut deinem Blockly kein Licht geschaltet werden
},
// 4. Küche (CO2)
'alias.0.Co2/Rauchmelder.Co2Melder_Küche.ACTUAL': {
raum: 'Küche',
typ: '⚠️ CO2-Melder',
lichter: [
'alias.0.Lichter.Küche_1.SET',
'alias.0.Lichter.Küche_2.SET',
'alias.0.Lichter.Küche_3.SET',
'alias.0.Lichter.Küche_4.SET'
]
}
};
// Ab hier arbeitet das Skript vollautomatisch auf einem einzigen Gruppen-Trigger
const melderListe = Object.keys(sicherheitsSchnittstelle);
on({id: melderListe, change: 'ne'}, function (obj) {
let ausgeloesteID = obj.id;
let info = sicherheitsSchnittstelle[ausgeloesteID];
let datum = formatDate(new Date(), "DD.MM.");
let uhrzeit = formatDate(new Date(), "hh:mm");
let nachricht = '';
// =========================================================================
// FALL 1: EIN MELDER SCHLÄGT ALARM (AN)
// =========================================================================
if (obj.state.val) {
let lichtWurdeGesteuert = false;
// Alle zugeordneten Lichter für diesen Raum einschalten
if (info.lichter && info.lichter.length > 0) {
for (let i = 0; i < info.lichter.length; i++) {
if (existsState(info.lichter[i])) {
setState(info.lichter[i], true);
lichtWurdeGesteuert = true;
}
}
}
// Elegante HTML-Nachricht zusammenbauen
nachricht = "🚨 <b>GEFAHREN-ALARM !</b> 🚨\n" +
"🕒 <i>Am " + datum + " um " + uhrzeit + " Uhr</i>\n\n" +
"Ein Sicherheitsmelder hat angesprochen:\n" +
"• <b>Typ:</b> " + info.typ + "\n" +
"• <b>Raum:</b> " + info.raum + " (AN)\n\n";
if (lichtWurdeGesteuert) {
nachricht += "💡 <i>Die Beleuchtung im Raum wurde automatisch eingeschaltet!</i>";
} else {
nachricht += "ℹ️ <i>In diesem Raum ist keine Notbeleuchtung hinterlegt.</i>";
}
log("Sicherheits-ALARM AUSGELÖST: " + info.raum + " (" + info.typ + ")", 'warn');
}
// =========================================================================
// FALL 2: EIN MELDER GEHT WIEDER AUS (AUS)
// =========================================================================
else {
// Elegante HTML-Entwarnung zusammenbauen
nachricht = "🟢 <b>Sicherheits-Entwarnung</b> 🟢\n" +
"🕒 <i>Am " + datum + " um " + uhrzeit + " Uhr</i>\n\n" +
"Der Gefahrenbereich hat sich normalisiert:\n" +
"• <b>Typ:</b> " + info.typ + "\n" +
"• <b>Raum:</b> " + info.raum + " (AUS)\n\n" +
"✅ <i>Der Melder meldet wieder einen sicheren Zustand.</i>";
log("Sicherheits-Alarm beendet: " + info.raum, 'info');
}
// Per Telegram absenden im sauberen HTML-Modus
sendTo('telegram.0', { text: nachricht, user: 'Michael', parse_mode: 'HTML' });
});