Inhaltsverzeichnis

Skripte

← zurück zur Übersicht

Stand: 25.09.2026, 8 Skripte, alle in der Oberfläche angelegt (Einstellungen → Automationen & Szenen → Skripte).

Übersicht

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)

Alarm: Schalten (Scharf/Hülle/Unscharf)

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

Alarm: Video per Telegram senden

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

Heizung: Urlaubsmodus aktivieren

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

Heizung: Urlaubsmodus beenden

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

Telegram Universal-Versand

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 }}'

Push an alle Handys

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

Funktionsbeschreibungen und Aufruf-Beispiele

Modus der Skripte

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

Alarm: Schalten – Ablauf

Zentrales Skript für alle Schaltvorgänge der Alarmanlage aus HA. Parameter ziel: Scharf, Hüllenschutz oder Unscharf.

  1. Ist der Zielzustand schon erreicht → Flag aus, Fehler leeren, Ende.
  2. input_boolean.alarm_vorgang_laeuft an, input_text.alarm_letzter_fehler leeren.
  3. Befehl an Homematic: Scharf → alarm_arm_away, Hüllenschutz → alarm_arm_home, Unscharf → alarm_disarm.
  4. Bis zu 45 s warten, bis das Panel einen Endzustand meldet.
  5. Flag aus, erreichten Zustand in input_select.alarmstatus schreiben.
  6. Wurde das Ziel nicht erreicht (z. B. Fenster offen): Fehlertext in 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

Alarm: Video per Telegram senden

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.

Telegram Universal-Versand

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.

Heizung: Urlaubsmodus

Push an alle Handys

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“).