Ich komme von ioBroker und bin dort ein bisschen Skripting verwöhnt. Allerdings ist der Home Assistant wesentlich durchdachter.
So zu meinem Problem:
Ich hatte ein Problem mit Temperaturen an Heizkörperthermosthaten, sodass ich mir eine Überwachung schreiben wollte, wenn die Temperatur zu weit hoch geht (über 24 Grad) und dann werde ich per Messenger benachrichtigt. Jetzt könnte das Problem aber auch bei den anderen 7 Heizkörperthermostaten selben Models entstehen. Und jetzt kommt der Part, den ich bisher in HA anstrengend finde. Klar kann ich jetzt die Automatisierung 7 Mal kopieren und die überwachte Entität jedesmal anpassen. Für die Temperatur könnte ich zentral einen Helfer nehmen, um ein Wert in allen Automatisierungen zu hinterlegen und zentral einzustellen. Was ich aber wirklich blöd finde, ist das wenn ich jetzt etwas am Skript ändere, dann muss ich händisch die Änderungen in alle restlichen 7 Automatisierungen übertragen. Hast du da eine Idee, wie würdest du das lösen bzw. wie kann man das mit Bordmitteln von HA sauber hinbekommen? Muss das ein Blueprint, Template oder so etwas sein (Liste?)? Ich sehe vermutlich den Wald von lauter Bäumen nicht…
trigger.entity_id entspricht also dem auslösendem Thermostat. Mit state_attr(trigger.id,'friendly_name') mache ich aus der u.U. kryptischen Device ID (bei dir z.B. sensor.hmip_heizkorperthermostat_schlafzimmer_temperatur) den Namen der Entität, wie sie auch in den HA Dashboards auftaucht (z.B. “Temperatur Schlafzimmer”). Weitere Details zu den Trigger Variablen hat @dp20eic in seinem 2. Link schon verlinkt
Ich gebe zu, ich habe die Segel gestrichen. Ich habe in einem Docker-Container den ioBroker installiert und nur Telegram und des hass-Adapter.
Damit kann ich wie gewohnt mittels Javascript die Endpunkte komfortabel überwachen. Anbei das Skript:
const sensor = getObject('enum.functions.heating_temperature').common.members;
for(let i = 0; i < sensor.length; i++) {
var name = getObject(sensor[i]).common.name;
on(sensor[i] + '.state', function (dp) {
if(dp.state.val >= 23.5) {
var name = getObject(sensor[i]).common.name;
sendTo('telegram.0', {
text: 'Die Temperatur vom Sensor ' + name + ' ist über 23.5°C gestiegen. Die aktuelle Temperatur beträgt ' + dp.state.val + '°C.'
});
}
});
}
Mir wäre es lieber gewesen, dass konfortabel wie oben im Home Assistant zu lösen, aber so ist es einfach komfortabeler.
Du hattest es doch fast fertig. Warum du alle 15 Min. auslösen wolltest, hab ich nicht verstanden. Genauso, warum du in der Message noch zu viel rum gespielt hast.
alias: Neue Automation
description: ""
triggers:
- trigger: numeric_state
entity_id:
- sensor.hmip_heizkorperthermostat_schlafzimmer_temperatur
- sensor.hmip_heizkorperthermostat_wohnzimmer_temperatur
above: 24
actions:
- action: telegram_bot.send_message
data:
message: >
"Temperatur von {{ trigger.to_state.name }} ist zu hoch: {{ trigger.to_state.state }}"
mode: single
Noch eine Anmerkung zum ersten Entwurf weiter oben: wenn du alle 15min auslöst dann enthält trigger bei so einem Lauf nicht das Thermostat sondern ist ein Calendar Event. Das kann dann nicht passen.
Ich bin mit der ioBroker Lösung sehr zufrieden, liegt vermutlich daran, dass ich hier einigermaßen Scriptsicher bin und ich die Überwachungen hier aus dem Ärmel schütteln kann.