Stand: 25.09.2026, 8 Skripte, alle in der Oberfläche angelegt (Einstellungen → Automationen & Szenen → Skripte).
| Skript | Entität | Was es tut | Aufgerufen von |
|---|---|---|---|
| Alarm: Schalten (Scharf/Hülle/Unscharf) | script.alarm_schalten_scharf_hulle_unscharf | Schickt den Befehl an Homematic, wartet bis 45 s auf das Ergebnis, setzt den Dashboard-Status und meldet Fehler. | Dashboard-Knöpfe; Alarm automatisch bei Abwesenheit; Nacht-Hüllenschutz |
| Alarm: Video per Telegram senden | script.alarm_video_senden | Wartet, bis ein Alarm-Video fertig ist, und schickt es mit „Alarm bestätigen“-Knopf an Norbert und Ute. | Alarm-Videoschleife |
| Heizung: Urlaubsmodus aktivieren | script.heizung_urlaub_aktivieren | Homematic-Urlaubsmodus bis heizung_urlaub_ende mit heizung_urlaub_temperatur. | Dashboard |
| Heizung: Urlaubsmodus beenden | script.heizung_urlaub_beenden | Beendet den Homematic-Urlaubsmodus. | Dashboard |
| Reolink Clip aufnehmen (10 s) | script.reolink_clip_aufnehmen | 10-s-Video in Hochauflösung plus Vorschaubild nach /media/reolink. | Dashboard (Kamera) |
| Reolink PTZ Schritt | script.reolink_ptz_schritt | Bewegt die Kamera in eine Richtung um reolink_ptz_schritte kurze Impulse. | Dashboard (Kamera-Pfeile) |
| Telegram Universal-Versand | script.telegram_universal_versand | Zentraler Versand von Text, Bild oder Video an alle Chat-IDs aus input_text.telegram_chat_ids_alle (Norbert und Ute). | fast alle Meldungs-Automationen |
| Push an alle Handys | script.push_an_alle_handys | Push an beide iPhones mit wählbarem Titel, Text, Ton und „kritisch“. | Alarmstatus via Telegram und iOS (Fehlermeldung) |
alias: "Alarm: Schalten (Scharf/Hülle/Unscharf)" description: >- Sendet den Befehl an Homematic und synchronisiert input_select.alarmstatus mit dem tatsächlich erreichten Zustand. Wird direkt von den Dashboard-Buttons aufgerufen. fields: ziel: description: "Gewünschter Zustand: Scharf, Hüllenschutz oder Unscharf" example: Hüllenschutz sequence: - variables: aktueller_mapped: |- {% set state_map = { 'armed_away': 'Scharf', 'armed': 'Scharf', 'armed_home': 'Hüllenschutz', 'armed_night': 'Hüllenschutz', 'disarmed': 'Unscharf', 'triggered': 'Ausgelöst' } %} {{ state_map.get(states('alarm_control_panel.hmip_raderbroich_hmip_alarm_control_panel'), none) }} - if: - condition: template value_template: "{{ aktueller_mapped == ziel }}" then: - action: input_boolean.turn_off target: entity_id: input_boolean.alarm_vorgang_laeuft - action: input_text.set_value target: entity_id: input_text.alarm_letzter_fehler data: value: "" - stop: Zielzustand bereits erreicht, nichts zu tun. - action: input_boolean.turn_on target: entity_id: input_boolean.alarm_vorgang_laeuft - action: input_text.set_value target: entity_id: input_text.alarm_letzter_fehler data: value: "" - choose: - conditions: - condition: template value_template: "{{ ziel == 'Scharf' }}" sequence: - action: alarm_control_panel.alarm_arm_away continue_on_error: true target: entity_id: alarm_control_panel.hmip_raderbroich_hmip_alarm_control_panel - conditions: - condition: template value_template: "{{ ziel == 'Hüllenschutz' }}" sequence: - action: alarm_control_panel.alarm_arm_home continue_on_error: true target: entity_id: alarm_control_panel.hmip_raderbroich_hmip_alarm_control_panel - conditions: - condition: template value_template: "{{ ziel == 'Unscharf' }}" sequence: - action: alarm_control_panel.alarm_disarm continue_on_error: true target: entity_id: alarm_control_panel.hmip_raderbroich_hmip_alarm_control_panel - wait_for_trigger: - trigger: state entity_id: alarm_control_panel.hmip_raderbroich_hmip_alarm_control_panel not_to: - pending - arming - disarming timeout: "00:00:45" continue_on_timeout: true - variables: hmip_final: "{{ states('alarm_control_panel.hmip_raderbroich_hmip_alarm_control_panel') }}" final_text: |- {% set state_map = { 'armed_away': 'Scharf', 'armed': 'Scharf', 'armed_home': 'Hüllenschutz', 'armed_night': 'Hüllenschutz', 'disarmed': 'Unscharf', 'triggered': 'Ausgelöst' } %} {{ state_map.get(hmip_final, states('input_select.alarmstatus')) }} - action: input_boolean.turn_off target: entity_id: input_boolean.alarm_vorgang_laeuft - action: input_select.select_option target: entity_id: input_select.alarmstatus data: option: "{{ final_text }}" - if: - condition: template value_template: "{{ final_text != ziel }}" then: - action: input_text.set_value target: entity_id: input_text.alarm_letzter_fehler data: value: "{{ ziel }} nicht möglich (Status: {{ final_text }})" - action: persistent_notification.create data: title: "Alarmanlage: Schaltung fehlgeschlagen" message: "Gewünscht: {{ ziel }}, tatsächlicher Status: {{ final_text }} (evtl. offene Tür/Fenster prüfen)" mode: restart
alias: "Alarm: Video per Telegram senden" description: >- Wartet, bis die Aufnahme fertig ist (Videolänge + 3 s Puffer; camera.record kehrt sofort zurück), und sendet sie mit Bestätigungs-Button per Telegram. icon: mdi:video-wireless fields: datei: name: Datei description: Pfad zur Videodatei required: true selector: text: null laenge: name: Länge description: Videolänge in Sekunden required: true selector: number: min: 5 max: 60 unit_of_measurement: s nummer: name: Nummer description: Laufende Videonummer required: false selector: number: min: 0 max: 1000 mode: box sequence: - alias: Warten, bis Aufnahme fertig geschrieben ist delay: seconds: "{{ laenge | int(10) + 3 }}" - action: telegram_bot.send_video continue_on_error: true data: entity_id: notify.norbert_bruchmann file: "{{ datei }}" caption: "🚨 ALARM – Video {{ nummer | default('') }} ({{ laenge | int }} s, {{ now().strftime('%H:%M:%S') }})" inline_keyboard: - - - ✅ Alarm bestätigen - /alarm_ack - action: telegram_bot.send_video continue_on_error: true data: entity_id: notify.ute_heister file: "{{ datei }}" caption: "🚨 ALARM – Video {{ nummer | default('') }} ({{ laenge | int }} s, {{ now().strftime('%H:%M:%S') }})" inline_keyboard: - - - ✅ Alarm bestätigen - /alarm_ack mode: parallel max: 20
alias: "Heizung: Urlaubsmodus aktivieren" description: >- Aktiviert den Homematic IP Urlaubsmodus bis zum Zeitpunkt in input_datetime.heizung_urlaub_ende mit der Temperatur aus input_number.heizung_urlaub_temperatur. icon: mdi:airplane-takeoff sequence: - alias: Ende muss in der Zukunft liegen condition: template value_template: "{{ as_datetime(states('input_datetime.heizung_urlaub_ende')).replace(tzinfo=now().tzinfo) > now() }}" - action: homematicip_cloud.activate_vacation data: endtime: "{{ as_datetime(states('input_datetime.heizung_urlaub_ende')).strftime('%Y-%m-%d %H:%M') }}" temperature: "{{ states('input_number.heizung_urlaub_temperatur') | float(17) }}" mode: single
alias: "Heizung: Urlaubsmodus beenden" icon: mdi:airplane-landing sequence: - action: homematicip_cloud.deactivate_vacation data: {} mode: single
alias: Reolink Clip aufnehmen (10 s) description: >- Nimmt 10 Sekunden in Hochauflösung nach /media/reolink auf und speichert zusätzlich ein Vorschaubild in Standardauflösung mit gleichem Dateinamen. icon: mdi:record-rec variables: stamm: "/media/reolink/wohnzimmer_{{ now().strftime('%Y-%m-%d_%H-%M-%S') }}" sequence: - action: camera.snapshot continue_on_error: true target: entity_id: camera.ko_wohnzimmer_standardauflosung data: filename: "{{ stamm }}.jpg" - action: camera.record target: entity_id: camera.ko_wohnzimmer_hochauflosung data: duration: 10 filename: "{{ stamm }}.mp4" lookback: 0 mode: single max_exceeded: silent
alias: Reolink PTZ Schritt description: >- Bewegt die Reolink (ko-Wohnzimmer) um die Anzahl Schritte aus input_number.reolink_ptz_schritte. Ein Schritt = kurzer Bewegungsimpuls + Stopp. icon: mdi:arrow-all fields: richtung: name: Richtung required: true selector: select: options: - links - rechts - hoch - runter variables: button: "{{ {'links': 'button.ko_wohnzimmer_ptz_links', 'rechts': 'button.ko_wohnzimmer_ptz_rechts', 'hoch': 'button.ko_wohnzimmer_ptz_aufwarts', 'runter': 'button.ko_wohnzimmer_ptz_abwarts'}[richtung] }}" schritte: "{{ states('input_number.reolink_ptz_schritte') | int(1) }}" sequence: - repeat: count: "{{ schritte }}" sequence: - action: button.press target: entity_id: "{{ button }}" - delay: milliseconds: 40 - action: button.press target: entity_id: button.ko_wohnzimmer_ptz_stopp - delay: milliseconds: 150 mode: single max_exceeded: silent
alias: Telegram Universal-Versand description: Zentrales Skript zum Senden von Text, Bildern und Videos via Telegram. Empfänger stehen zentral in input_text.telegram_chat_ids_alle (kommagetrennt, derzeit Norbert 851603710 und Ute 965268974). Neuen Empfänger dort ergänzen. Ist der Helfer leer/nicht verfügbar, wird an Norbert und Ute gesendet. fields: message: description: Der Text der Nachricht (optional bei Medien) required: false selector: text: null photo: description: URL oder lokaler Pfad zu einem Bild required: false selector: text: null video: description: URL oder lokaler Pfad zu einem Video required: false selector: text: null max: 10 mode: queued sequence: - variables: chat_ids: '{% set raw = states(''input_text.telegram_chat_ids_alle'') %}{% if raw in ['''', ''unknown'', ''unavailable''] %}{{ [851603710, 965268974] }}{% else %}{{ raw.split('','') | map(''trim'') | select(''ne'', '''') | map(''int'') | list }}{% endif %}' - choose: - conditions: - condition: template value_template: '{{ photo is defined and photo | length > 0 }}' sequence: - action: telegram_bot.send_photo data: caption: '{{ message | default('''', true) }}' parse_mode: markdown url: '{{ photo }}' chat_id: '{{ chat_ids }}' - conditions: - condition: template value_template: '{{ video is defined and video | length > 0 }}' sequence: - action: telegram_bot.send_video data: caption: '{{ message | default('''', true) }}' parse_mode: markdown url: '{{ video }}' chat_id: '{{ chat_ids }}' - conditions: - condition: template value_template: '{{ message is defined and message | length > 0 }}' sequence: - action: telegram_bot.send_message data: message: '{{ message }}' parse_mode: markdown chat_id: '{{ chat_ids }}'
alias: Push an alle Handys description: 'Versendet Push-Benachrichtigungen an alle iPhones (Norbert + Ute) mit individuellem Sound. Wird produktiv für Fehlermeldungen genutzt (früher: ''Test: Push-Nachricht an alle Handys'').' icon: mdi:bell-ring fields: title: name: Titel description: Titel der Benachrichtigung default: Testalarm example: Alarmanlage Test message: name: Nachricht description: Der Text der Nachricht default: Das Push-Skript funktioniert einwandfrei! example: Dies ist ein Test. sound: name: Sound-Datei description: Name des Sounds auf dem iPhone (z.B. default oder ein eigener Name) default: default example: alarm.wav critical: name: Critical Alert (Stummmodus durchbrechen) description: 0 = Normal, 1 = Durchbricht den Stummmodus default: 0 example: 1 mode: queued max: 10 sequence: - action: notify.mobile_app_iphone_von_norbert continue_on_error: true data: title: '{{ title }}' message: '{{ message }}' data: push: sound: name: '{{ sound | default(''default'') }}' critical: '{{ critical | int(0) }}' volume: 1 - action: notify.mobile_app_iphone_13_ute continue_on_error: true data: title: '{{ title }}' message: '{{ message }}' data: push: sound: name: '{{ sound | default(''default'') }}' critical: '{{ critical | int(0) }}' volume: 1
| Skript | Modus |
|---|---|
| Alarm: Schalten | restart |
| Alarm: Video per Telegram senden | parallel (max. 20) |
| Telegram Universal-Versand | queued (max. 10) |
| Reolink PTZ Schritt, Reolink Clip, Heizung (beide), Test-Push | single |
Zentrales Skript für alle Schaltvorgänge der Alarmanlage aus HA. Parameter ziel: Scharf, Hüllenschutz oder Unscharf.
input_boolean.alarm_vorgang_laeuft an, input_text.alarm_letzter_fehler leeren.alarm_arm_away, Hüllenschutz → alarm_arm_home, Unscharf → alarm_disarm.input_select.alarmstatus schreiben.input_text.alarm_letzter_fehler und eine persistente Meldung in HA. Die Automation „Alarmstatus via Telegram und iOS senden“ meldet den Fehler dann an beide.action: script.alarm_schalten_scharf_hulle_unscharf data: ziel: Hüllenschutz
Parameter: datei, laenge, nummer. Wartet Videolänge + 3 s (die Aufnahme läuft im Hintergrund) und sendet dann das Video mit der Beschriftung „ALARM – Video n“ und dem Button „✅ Alarm bestätigen“ (Callback /alarm_ack) an Norbert und Ute.
Parameter (alle optional): message, photo, video. Sendet ein Foto, Video oder eine Textnachricht (Markdown) an alle Chat-IDs aus input_text.telegram_chat_ids_alle (derzeit 851603710 Norbert und 965268974 Ute). Ist der Helfer leer, gehen die Nachrichten an diese beiden IDs.
action: script.telegram_universal_versand data: message: "🔒 *Test* – das ist eine Testnachricht"
Parameter richtung: links, rechts, hoch, runter. Wiederholt input_number.reolink_ptz_schritte-mal: Bewegungs-Button drücken → 40 ms → Stopp → 150 ms. So bewegt sich die Kamera in kleinen, gut steuerbaren Schritten.
Speichert ein Vorschaubild (Standardauflösung) und 10 s Video (Hochauflösung) unter /media/reolink/wohnzimmer_JJJJ-MM-TT_HH-MM-SS.jpg/.mp4. Die Clips erscheinen in der Galerie im Dashboard.
input_datetime.heizung_urlaub_ende in der Zukunft liegt, und ruft homematicip_cloud.activate_vacation mit Ende und input_number.heizung_urlaub_temperatur auf. Gilt für alle Heizgruppen (Homematic-Urlaubsmodus).homematicip_cloud.deactivate_vacation.
Parameter: title, message, sound, critical (0/1). Sendet an beide iPhones. Wird auch für Alarm-Fehlermeldungen (critical = 1) genutzt (bis 26.09.2026 hieß das Skript „Test: Push-Nachricht an alle Handys“).