Automatisierung ohne Kopieren auf weitere Entitäten ausweiten

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…

LG, Mitch

Du kannst doch direkt mehrere Entitäten aufnehmen

triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.temperatursensoren_wohnzimmer
      - sensor.temperatursensoren_schlafzimmer
      - sensor.temperatursensoren_bad
    above: 24

Moin,

such mal nach Templates!

Vielleicht hat da auch schon jemand ein Blueprint für erstellt, sodass Du das einfach für Dich anpassen kannst

VG
Bernd

P.S.: Wenn es bei den X Geräten bleibt, dann einfach so wie @maxe vorgeschlagen hat.

1 „Gefällt mir“

Ergänzung zu @maxe
Um im Text direkt das Thermostat identifizieren zu können, könntest du sowas schreiben

{{ trigger.id }} zu warm

Ich habe versucht die Hinweise zu beherzigen:

alias: Neue Automation
description: ""
triggers:
  - trigger: time_pattern
    minutes: /15
    hours: "*"
  - trigger: numeric_state
    entity_id:
      - sensor.hmip_heizkorperthermostat_schlafzimmer_temperatur
      - sensor.hmip_heizkorperthermostat_wohnzimmer_temperatur
    above: 24
actions:
  - data:
      message: >
        _{{ now().timestamp() | timestamp_custom('%Y/%m/%d-%H:%M') }} >_

        {% set s =
        states('sensor.hmip_heizkorperthermostat_schlafzimmer_temperatur') %}{{
        trigger.entity_id }} zu hoch:  *{{ s }}*
    action: telegram_bot.send_message
mode: single
  1. Ich habe das Gefühl, das trotz oder nur eine Nachricht versendet wird.
  2. Ich bekomme einfach nicht hin in dem Messagetext, dynamisch auf die jeweilige Entität und Temperatur zu reagieren, sprich die Nachricht anzupassen.
  3. Hat jemand ein Idee?

Ich denke, der erste Trigger alle 15 Minuten ist unnötig, da die Automation nur ausgelöst werden soll, wenn ein Thermostat über 24 °C meldet.

Um an die Entität zu gelangen, hat @sirector schon einen Hinweis gegeben :wink:

Ich habe das in einer Automation so gelöst:

action: notify.mobile_app_von_mir
metadata: {}
data:
  message: "{{ state_attr(trigger.entity_id, 'friendly_name') }} hat Garage erreicht."
  title: ⚠️ Garage

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

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.