Instar Kamera in Home Assistant einbinden und steuern (MQTT v5)

In den letzten Tagen habe ich einig Zeit damit verbracht eine Instar IN-8815 4K in Home Assistant einzubinden, dass ich die wichtigsten Dinge darüber auch steuern kann.
Ich habe mal alles zusammengeschrieben und hoffe, dass es auch für den ein oder anderen hilfreich ist.

So sieht es momentan bei mir aus, nachdem ich alles eingebunden habe.
Beispiel Dashboard (Livebild über ONVIF und Steuerung über MQTT):

Die Entitäten (erstellt über die yaml Datei) des MQTT Gerätes der Kamera:

Vorbereitungen:

  1. ONVIF aktivieren und in Home Assitent nach dieser Doku einbinden
  2. MQTT aktivieren und in Home Assitent nach dieser Doku einbinden (in Home Assistant MQTT v5 wählen.

Danach hat man die „leere“ Kamera (als Geräte ohne Eigenschaften / Entitäten) in Home Assistant (normalerweise steht als Name die IP, lässt sich aber umbennen):

Aus der Instar Kamera notieren wir uns das Smart Home → MQTT das MQTT Topic Präfix (sollte „instar“ sein) und die MQTT-Klient-ID (standart ist die MAC Adresse, lässt sich aber ändern):

Jetzt können die einzelnen Entitäten über ein yaml file für MQTT konfiguriert / hinzugefügt werden.
Dazu am Besten wie aus der Instar Docu eine extra yaml Datein in die globale configuration.yaml einbinden (z.B. alles über den Home Assistant File Editor):
mqtt: !include mqtt/entities.yaml

Dann den Ordner „mqtt“ anlegen und darin eine leere „entities.yaml“.

Meine Template Yaml Datei aus Google Drive nehmen und mit einem Texteditor via „alle ersetzen“:
<InstarIP> ersetzen durch IP der Instar Kamera
<MQTT-Klient-ID> ersetzen durch die MQTT-Klient-ID
<Kamera_EindeutigeID_inHA> Eindeutiger Name (ohne Leerzeichen): so wie Kamera in Home Assistant heißen soll
<präfix_Entitäten> Präfix (z.B. auch Kamera Name, ohne Leerzeichen), der jeder Entität vorangestellt wird

Dann noch je nach Wunsch in den ersten Zeilen Name und Modell ändern (z.B könnte es dann so aussehen):

# Sensoren
sensor:
    # Kamera als Device (alle anderen Entitäten können dann über den "identifiers" dem Device zugewiesen werden)
  - device:
      identifiers: in8815_wohnzimmer
      manufacturer: INSTAR Deutschland GmbH
      model: INSTAR 4K IN-8815 WLAN
      name: IN-8815 4K Wohnzimmer
      configuration_url: "http://192.168.178.200:80"
    availability:
      topic: instar/0CC2293856B7/status/connection
      payload_available: '{"val":"online"}'
      payload_not_available: '{"val":"offline"}'
    object_id: in8815_instar_wohnzimmer_testament
    unique_id: in8815_instar_wohnzimmer_testament
    name: IN-8815 Wohnzimmer Status
    state_topic: instar/0CC2293856B7/status/connection
    value_template: '{{ value_json.val }}'

Diese Infos tauchen dann z.B. beim MQTT Device Info auf (über Visit kommt man zu der configuration_url):

Diesen Inhalt dann in Home Assistant in die mqtt/entities.yaml kopieren.
Danach in HA:
Developer Tools → Check Configuration
Restart → Quick Reload

Danach sollte unter Settings → Devices & Services → MQTT die Kamera mit 62 Entitäten Sichtbar sein:

4 „Gefällt mir“

Danke vielmals (NICHT)abgestumpft :sign_of_the_horns:

EDIT: Leider kein Zugriff auf Deine YAML

Gruß
Franz

Die Berechtigungen auf der Datei waren noch falsch. Habe das jetzt geändert auf Jeder mit dem Link hat Lesezugriff. Hoffe es klappt jetzt!

1 „Gefällt mir“

Jepp, jetzt klappt’s, Danke nochmal :sign_of_the_horns:

Gruß
Franz

Danke @abgestumpft ! Das wird vielen helfen bei der Kameraeinbindung in Home Assistant :100:

Damit es nicht verloren geht nochmal hier reingestellt - als Code Schnipsel wird es auch übersichtlich zusammengefaltet :slight_smile:

# Sensoren
sensor:
    # Kamera als Device (alle anderen Entitäten können dann über den "identifiers" dem Device zugewiesen werden)
  - device:
      identifiers: <Kamera_EindeutigeID_inHA>
      manufacturer: INSTAR Deutschland GmbH
      model: INSTAR 4K IN-8815 WLAN
      name: IN-8815 4K Wohnzimmer
      configuration_url: "http://<InstarIP>:80"
    availability:
      topic: instar/<MQTT-Klient-ID>/status/connection
      payload_available: '{"val":"online"}'
      payload_not_available: '{"val":"offline"}'
    object_id: in8815_<präfix_Entitäten>_testament
    unique_id: in8815_<präfix_Entitäten>_testament
    name: IN-8815 Wohnzimmer Status
    state_topic: instar/<MQTT-Klient-ID>/status/connection
    value_template: '{{ value_json.val }}'

    # Alarmserver Status (normalerweise 0 oder Unknown, wird 1 usw. bei Alarmauslösung)
  - unique_id: <präfix_Entitäten>_alarmserver
    name: Alarmserver Status
    icon: mdi:clipboard-list
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/triggered
    device_class: current
    value_template: '{{ value_json.val }}'
    device:
      identifiers: <Kamera_EindeutigeID_inHA>
    
    # Aktuell installierte Firmware Version
  - unique_id: <präfix_Entitäten>_update_current
    name: Aktuelle FW Version
    icon: mdi:cpu-64-bit
    state_topic: instar/<MQTT-Klient-ID>/status/system/update/current
    value_template: "{{ value_json.val }}"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Neuste verfügbare Firmware Version (0, wenn keine neue)
  - unique_id: <präfix_Entitäten>_update_latest
    name: Neueste FW Version
    icon: mdi:cpu-64-bit
    state_topic: instar/<MQTT-Klient-ID>/status/system/update/latest
    value_template: "{{ value_json.val }}"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # SD Karte Gesamtkapazität in GB
  - unique_id: <präfix_Entitäten>_sd_total
    name: SD-Karte Gesamt
    state_topic: instar/<MQTT-Klient-ID>/status/features/sd/sdtotalspace
    value_template: "{{ (value_json.val | float / 1073741824) | round(2) }}"
    device_class: data_size
    unit_of_measurement: "GB"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # SD Karte freier Speicherplatz in GB
  - unique_id: <präfix_Entitäten>_sd_free
    name: SD-Karte Frei
    state_topic: instar/<MQTT-Klient-ID>/status/features/sd/sdfreespace
    value_template: "{{ (value_json.val | float / 1073741824) | round(2) }}"
    device_class: data_size
    unit_of_measurement: "GB"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>


# Schalter (An / Aus): schalten/ändern von Zuständen
switch:
    # Alarmbereich Rot aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_red_alarm_area
    name: Alarm Area Red
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/red/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/red/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>    
    
    # Alarmbereich Blau aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_blue_alarm_area
    name: Alarm Area Blue
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/blue/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/blue/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Alarmbereich Grün aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_green_alarm_area
    name: Alarm Area Green
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/green/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/green/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Alarmbereich Gelb aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_yellow_alarm_area
    name: Alarm Area Yellow
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/yellow/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/yellow/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
    
    # Privatsphären Bereich 1 aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_privacy_mask_1
    name: Privacy Mask 1
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region1/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region1/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Privatsphären Bereich 2 aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_privacy_mask_2
    name: Privacy Mask 2
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region2/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region2/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Privatsphären Bereich 3 aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_privacy_mask_3
    name: Privacy Mask 3
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region3/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region3/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Privatsphären Bereich 4 aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_privacy_mask_4
    name: Privacy Mask 4
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region4/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region4/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Auto Gamma aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_auto_gamma
    name: Auto Gamma
    icon: mdi:brightness-auto
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/gamma/auto
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/gamma/auto
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Auto Entrauschen aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_auto_denoise
    name: Auto Denoise
    icon: mdi:brightness-auto
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/denoise/auto
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/denoise/auto
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Auto Lebendigkeit aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_auto_vibrancy
    name: Auto Vibrancy
    icon: mdi:brightness-auto
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/vibrancy/auto
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/vibrancy/auto
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
    
    # Bildeinstellungen - Tag - WDR (Wide Dynamic Range) aktiviert / deaktiviert  
  - unique_id: <präfix_Entitäten>_wdr
    name: WDR
    icon: mdi:hdr
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/wdr/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/wdr/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Bild vertikal spiegeln aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_flip
    name: Flip
    icon: mdi:flip-vertical
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/transform/flip
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/transform/flip
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Bild horizontal spiegeln aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_mirror
    name: Mirror
    icon: mdi:flip-horizontal
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/transform/mirror
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/transform/mirror
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Alarm: Global aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_alarm_enable
    name: Alarm Enabled
    icon: mdi:alarm-light
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Sende Email aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_alarm_email_enable
    name: Alarm Email
    icon: mdi:email-arrow-right
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/email/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/email/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Speichere Foto auf SD Karte aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_alarm_sd_photo_enable
    name: Alarm SD Photo
    icon: mdi:micro-sd
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/sd/snapshot/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/sd/snapshot/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Speichere Video auf SD Karte aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_alarm_sd_video_enable
    name: Alarm SD Video
    icon: mdi:micro-sd
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/sd/video/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/sd/video/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
      
    # Alarm: Sende Foto auf FTP Share aktiviert / deaktiviert  
  - unique_id: <präfix_Entitäten>_alarm_ftp_photo_enable
    name: Alarm FTP Photo
    icon: mdi:file-upload
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/ftp/snapshot/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/ftp/snapshot/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Sende Video auf FTP Share aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_alarm_ftp_video_enable
    name: Alarm FTP Video
    icon: mdi:file-upload
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/ftp/video/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/ftp/video/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Alarm: Globale Objekterkennung aktiviert / deaktiviert      
  - unique_id: <präfix_Entitäten>_objectdetection_enable
    name: Objekterkennung Global
    icon: mdi:semantic-web
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Objekterkennung Personen aktiviert / deaktiviert 
  - unique_id: <präfix_Entitäten>_objectdetection_persons_enable
    name: Objekterkennung Personen
    icon: mdi:account
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/link/person
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/link/person
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Objekterkennung Fahrzeuge aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_objectdetection_vehicles_enable
    name: Objekterkennung Fahrzeuge
    icon: mdi:car
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/link/vehicle
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/link/vehicle
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Objekterkennung Tiere aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_objectdetection_animals_enable
    name: Objekterkennung Tiere
    icon: mdi:cat
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/link/animal
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/link/animal
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

 
# Knöpfe zum Auslösen von Aktionen
button:
    # Manuellen Alarm auslösen (alle Alarm-Aktionen werden ausgelöst)
  - unique_id: <präfix_Entitäten>_alarm_trigger
    name: Alarm Trigger
    command_topic: instar/<MQTT-Klient-ID>/alarm/pushalarm
    payload_press: '{"val":"1"}'
    icon: mdi:gesture-tap-button
    qos: 2
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Kamera neu starten
  - unique_id: <präfix_Entitäten>_reboot
    name: Reboot
    command_topic: instar/<MQTT-Klient-ID>/system/reboot/now
    payload_press: '{"val":"1"}'
    icon: mdi:cog-refresh-outline
    qos: 2
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Kamera nach Links drehen (payload_press enthält anzahl der Schritte [0-2500])
  - unique_id: <präfix_Entitäten>_ptz_left
    name: Kamera Links
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/movesteps/left
    payload_press: '{"val":"10"}'
    icon: mdi:arrow-left-bold
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Kamera nach Rechts drehen (payload_press enthält anzahl der Schritte [0-2500])
  - unique_id: <präfix_Entitäten>_ptz_right
    name: Kamera Rechts
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/movesteps/right
    payload_press: '{"val":"10"}'
    icon: mdi:arrow-right-bold
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Kamera nach Oben drehen (payload_press enthält anzahl der Schritte [0-2500])
  - unique_id: <präfix_Entitäten>_ptz_up
    name: Kamera Hoch
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/movesteps/up
    payload_press: '{"val":"10"}'
    icon: mdi:arrow-up-bold
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Kamera nach Unten drehen (payload_press enthält anzahl der Schritte [0-2500])
  - unique_id: <präfix_Entitäten>_ptz_down
    name: Kamera Runter
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/movesteps/down
    payload_press: '{"val":"10"}'
    icon: mdi:arrow-down-bold
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Photoserie auf SD Karte aufnehmen:
  - unique_id: <präfix_Entitäten>_snapshot
    name: Snapshot erstellen
    command_topic: instar/<MQTT-Klient-ID>/task/photoseries/snap/sd
    payload_press: '{"val":"1"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Kamera auf Preset Postion 1 fahren
  - unique_id: <präfix_Entitäten>_preset1
    name: Position 1 anfahren
    icon: mdi:numeric-1-circle
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/goto
    payload_press: '{"val":"1"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Kamera auf Preset Postion 2 fahren
  - unique_id: <präfix_Entitäten>_preset2
    name: Position 2 anfahren
    icon: mdi:numeric-2-circle
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/goto
    payload_press: '{"val":"2"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Kamera auf Preset Postion 3 fahren
  - unique_id: <präfix_Entitäten>_preset3
    name: Position 3 anfahren
    icon: mdi:numeric-3-circle
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/goto
    payload_press: '{"val":"3"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Kamera auf Preset Postion 4 fahren
  - unique_id: <präfix_Entitäten>_preset4
    name: Position 4 anfahren
    icon: mdi:numeric-4-circle
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/goto
    payload_press: '{"val":"4"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Aktuelle Position auf Preset 1 speichern
  - unique_id: <präfix_Entitäten>_preset1_save
    name: Position 1 speichern
    icon: mdi:content-save-cog
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/one/save
    payload_press: '{"val":"1"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Aktuelle Position auf Preset 2 speichern
  - unique_id: <präfix_Entitäten>_preset2_save
    name: Position 2 speichern
    icon: mdi:content-save-cog
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/two/save
    payload_press: '{"val":"2"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Aktuelle Position auf Preset 3 speichern
  - unique_id: <präfix_Entitäten>_preset3_save
    name: Position 3 speichern
    icon: mdi:content-save-cog
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/three/save
    payload_press: '{"val":"3"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Aktuelle Position auf Preset 4 speichern
  - unique_id: <präfix_Entitäten>_preset4_save
    name: Position 4 speichern
    icon: mdi:content-save-cog
    command_topic: instar/<MQTT-Klient-ID>/features/ptz/preset/four/save
    payload_press: '{"val":"4"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

# Einstellbare Zahlenwerte
number:
    # Bildeinstellungen - Tag - Helligkeit
  - unique_id: <präfix_Entitäten>_brightness
    name: Brightness
    object_id: in8815_brightness
    icon: mdi:brightness-6
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/brightness
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/brightness
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Kontrast    
  - unique_id: <präfix_Entitäten>_contrast
    name: Contrast
    object_id: in8815_contrast
    icon: mdi:contrast-box
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/contrast
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/contrast
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Sättigung
  - unique_id: <präfix_Entitäten>_saturation
    name: Saturation
    object_id: in8815_saturation
    icon: mdi:palette-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/saturation
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/saturation
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Farbton
  - unique_id: <präfix_Entitäten>_hue
    name: Hue
    object_id: in8815_hue
    icon: mdi:palette-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/hue
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/hue
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 360
    step: 1
    mode: slider
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Schärfe
  - unique_id: <präfix_Entitäten>_sharpness
    name: Sharpness
    object_id: in8815_sharpness
    icon: mdi:shark-fin-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/sharpness
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/sharpness
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Tag - Lebendigkeit
  - unique_id: <präfix_Entitäten>_vibrancy
    name: Vibrancy
    object_id: in8815_vibrancy
    icon: mdi:palette-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/vibrancy/value
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/vibrancy/value
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 255
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>  

    # Bildeinstellungen - Tag - Gamma 
  - unique_id: <präfix_Entitäten>_gamma
    name: Gamma
    object_id: in8815_gamma
    icon: mdi:gamma
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/gamma/preset
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/gamma/preset
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 18
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Entrauschen 
  - unique_id: <präfix_Entitäten>_denoise
    name: Denoise
    object_id: in8815_denoise
    icon: mdi:contrast-box
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/denoise/preset
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/denoise/preset
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 15
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Maximale ISO 
  - unique_id: <präfix_Entitäten>_max_iso
    name: Max ISO
    object_id: in8815_isomax
    icon: mdi:brightness-6
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/isomax
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/isomax
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 32
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - WDR (Wide Dynamic Range) Stärke
  - unique_id: <präfix_Entitäten>_wdr_strength
    name: WDR Strength
    object_id: in8815_wdrstrength
    icon: mdi:brightness-6
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/wdr/strength
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/wdr/strength
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 7
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Nachtsicht - Tag/Nacht-Modus - 0 (kein IR), 1 (immer IR), 2 (automatisch)
  - unique_id: <präfix_Entitäten>_auto_ir
    name: IR LED Steuerung
    object_id: in8815_autoled
    icon: mdi:lightbulb-night-outline
    state_topic: instar/<MQTT-Klient-ID>/status/features/nightvision/autoled
    command_topic: instar/<MQTT-Klient-ID>/features/nightvision/autoled
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 2
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Bildeinstellungen - Nachtsicht - IRcut Filter - `0` (aus), `1` (an), `2` (auto).
  - unique_id: <präfix_Entitäten>_auto_ircut
    name: IR CUT Filter
    object_id: in8815_autoircut
    icon: mdi:lightbulb-night-outline
    state_topic: instar/<MQTT-Klient-ID>/status/features/nightvision/autoircut
    command_topic: instar/<MQTT-Klient-ID>/features/nightvision/autoircut
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 2
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Alarm - Bereich Rot Empfindlichkeit
  - unique_id: <präfix_Entitäten>_red_alarm_area_sensitivity
    name: Alarm Area Red Sensitivity
    object_id: in8815_red_area_sense
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/red/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/red/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Alarm - Bereich Blau Empfindlichkeit
  - unique_id: <präfix_Entitäten>_blue_alarm_area_sensitivity
    name: Alarm Area Blue Sensitivity
    object_id: in8815_blue_area_sense
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/blue/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/blue/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Alarm - Bereich Grün Empfindlichkeit
  - unique_id: <präfix_Entitäten>_green_alarm_area_sensitivity
    name: Alarm Area Green Sensitivity
    object_id: in8815_blue_area_green
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/green/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/green/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
 
    # Alarm - Bereich Gelb Empfindlichkeit
  - unique_id: <präfix_Entitäten>_yellow_alarm_area_sensitivity
    name: Alarm Area Yellow Sensitivity
    object_id: in8815_blue_area_yellow
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/yellow/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/yellow/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

# Binär (0 oder 1) Sensoren
binary_sensor:
    # Ist ein Firmware Update verfügbar?
  - unique_id: <präfix_Entitäten>_update_verfuegbar
    name: Update verfügbar
    state_topic: instar/<MQTT-Klient-ID>/status/system/update/updateavailable
    value_template: '{{ value_json.val }}'
    payload_on: "1"
    payload_off: "0"
    device_class: update
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

Ich habe jetzt versucht eine zweite Instar Kamera (IN8015) via MQTT in Home Assistant einzubinden. Aber in Home Assistant kann man nur einen MQTT Broker einbinden (und auf der ersten Kamera haben wir das ja über einen lokalen, internen Broker der auf der Kamera selbst läuft, gelöst). Habe es zuerst so gemacht, dass ich die zweite Kamera über den lokalen Broker der ersten Kamera angebunden habe. Funktioniert technisch, ist aber keine gute Lösung: sobald Kamera 1 mit dem MQTT Broker offline ist, funktioniert auch die zweite nicht mehr über MQTT.

Jetzt habe ich gesehen, dass man in Home Assistant selbst einen MQTT Broker laufen lassen kann, was dann die deutlich bessere Lösung ist, da Home Assistant ja 7x24 läuft. Würde ich jetzt so auch mit nur einer Kamera machen: wer weiß, was man später alles über MQTT an Home Assistant anbinden möchte.

Kurze Anleitung dazu:

  1. MQTT Broker in Home Assistant installieren:
    Das geht ganz einfach über: Settings → Add-ons → Mosquitto broker:

Konfigurieren lässt sich nicht viel:
Ports sind die default ports und Benutzer geht über die Home Assistant interne Benutzer:

Am Besten über Settings → People → Users einen eigenen MQTT Benutzer anlegen:

Auf den Instar Kameras jetzt überall den Externen Broker konfigurieren (Adresse ist die lokale IP des Home Assistant servers und Benutzer der Home Assistant Benutzer, den wir gerade angelegt haben):

Die Konfigurationsdatei in mqtt/entities.yaml kann exakt gleich bleiben:
Sie enthält nur die MQTT Pfade der Kameras (welche vom MQTT Broker bereitgestellt werden), aber keine Informationen zum MQTT Broker selbst.

Jetzt den Internen MQTT Broker in Home Assistant hinzufügen (falls ein alter, wie z.B. der Broker einer Instar Kamera, vorhanden ist, muss dieser zuerst gelöscht werden).

Dann wieder neu einbinden:
Hier „Use the official Mosquitto Mqtt Broker add-on“ wählen (Da es Home Assisten intern ist, muss hier nichts konfiguriert werden):

Evtl. muss man Home Assistant mal durchstarten, damit er mit den ganzen Änderungen der Entitäten zurecht kommt.

So sieht es dann in Home Assistant mit 2 Instar Kameras über den Home Assistant MQTT Broker:

3 „Gefällt mir“

Alternativ geht es auch den Broker in einen eigenen Container laufen zu lassen - damit hat man dann Zugriff auf die komplette Konfiguration. Und läuft dann auch durch, sollte sich HA mal aufhängen:

1 „Gefällt mir“

Mega - vielen herzlichen Dank euch. Hatte das Thema seit eine Woche vor mir hergeschoben und schon ist es gelöst.
Da ich gerne Alarm-Meldung de-/aktivieren wollte fehlte mir nur noch das hier :wink:

    # Alarm: Sende Push message aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten>_alarm_push_enable
    name: Alarm Push
    icon: mdi:message-alert
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/push/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/push/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

Wie habt ihr das in sinnvoll mit mehreren Kameras gelöst? Weil je Kamera eine Datei ist so auf die schnelle nicht einfach zu lösen, da YAML keine doppelten Keys erlaubt. Alles in Eine Datei wird auf Dauer auch sehr schnell unübersichtlich.

siehe all, local oder Client ID:

1 „Gefällt mir“

Danke, wäre auch eine weiter Möglichkeit. Größter Vorteil sehe ich darin, dass man alles noch Konfigurieren kann (im Gegensatz zum Home Assistan integrieten MQTT Broker)
Ich würde jetzt nach meinen Tests auf jeden Fall immer einen zentralen MQTT Broker verwenden. Für mich ist der direkt in Home Assistant am Besten, da ich MQTT nur im Zusammenhang mit Home Assitant verwende → wenn Home Assistant sich aufhängt / nicht läuft, dann brauche ich das MQTT auch nicht.

Ich habe beide Kameras in der mqtt/entities.yaml drin. Leider lässt sich das ja (wie du schon sagst) nicht komplett trennen, da man die Keys wie „sensor:“, „button:“ nur einmal definieren darf.
Bei zwei Kameras geht das noch, aber irgendwann wirds dann unübersichtlich.

Daher habe ich es dann innerhalb der Keys per Kommentar getrennt. z.B. dann so:

button:
#########
#Kamera 1
#########
    # Alarm: Sende Push message aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten_Kamera1>_alarm_push_enable
    name: Alarm Push
    icon: mdi:message-alert
    state_topic: instar/<MQTT-Klient-ID_Kamera1/status/alarm/push/enable
    command_topic: instar/<MQTT-Klient-ID_Kamera1/alarm/push/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA_Kamera1>
#...
#Weitere buttons von Kamera 1
#...
#########
#Kamera 2
#########
    # Alarm: Sende Push message aktiviert / deaktiviert
  - unique_id: <präfix_Entitäten_Kamera2>_alarm_push_enable
    name: Alarm Push
    icon: mdi:message-alert
    state_topic: instar/<MQTT-Klient-ID_Kamera2>/status/alarm/push/enable
    command_topic: instar/<MQTT-Klient-ID_Kamera2/alarm/push/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA_Kamera2>

Was funktionieren könnte (selbst aber noch nicht getestet):
Für jeden Key („button“, „switch“,…) einen eigenen Ordner und in diesem Ordner dann je eine yaml Datei pro Kamera.
mqtt/switch/Kamera1.yaml
mqtt/switch/Kamera2.yaml
mqtt/button/Kamera1.yaml
mqtt/button/Kamera2.yaml

Und dann in mqtt/entities.yaml die ordner als merged list einbinden (inhalte aller Dateien in diesem Ordner werden zusammengeführt):
<KEY>: !include_dir_merge_list <Ordner>/

switch: !include_dir_merge_list switch/
button: !include_dir_merge_list button/

Oder direkt in configuration.yaml, wie hier beschrieben:

mqtt:
 switch: !include_dir_merge_list mqtt/switch/
 button: !include_dir_merge_list mqtt/button/

Ich hab eine noch bessere Lösung gefunden (getestet: funktioniert):
Über „!include_dir_merge_named“ werden alle Dateien in einem Verzeichnis zusammengeführt. Zusätzlich wird wohl der Dateiname als Schlüssel verwendet (laut Gemini, die offizielle Doku war da etwas ungenau.):

Beispiel:
configuration.yaml:

mqtt: !include_dir_merge_named mqtt/devices/

mqtt/devices/Kamera1.yaml:

sensor: # Dieser Schlüssel gehört zum Inhalt von Kamera1
  - device:
      # ...
switch: # Dieser Schlüssel gehört zum Inhalt von Kamera1
  - # ...

mqtt/devices/Kamera2.yaml:

sensor: # Dieser Schlüssel gehört zum Inhalt von Kamera2
  - device:
      # ...
switch: # Dieser Schlüssel gehört zum Inhalt von Kamera2
  - # ...

Was Home Assistant daraus macht (intern):

mqtt:
  Kamera1: # Top-Level-Schlüssel aus dem Dateinamen
    sensor: # Dies ist der 'sensor'-Schlüssel innerhalb des 'Kamera1'-Dictionaries
      - device:
          identifiers: in8015_wohnzimmer
          # ...
    switch: # Dies ist der 'switch'-Schlüssel innerhalb des 'Kamera1'-Dictionaries
      - unique_id: instar_in8015HD_alarm_area1
        # ...
  Kamera2: # Top-Level-Schlüssel aus dem Dateinamen
    sensor: # Dies ist der 'sensor'-Schlüssel innerhalb des 'Kamera2'-Dictionaries
      - device:
          identifiers: in8815_wohnzimmer
          # ...
    switch: # Dies ist der 'switch'-Schlüssel innerhalb des 'Kamera2'-Dictionaries
      - unique_id: instar_wohnzimmer_red_alarm_area
        # ...

D.h. ich habe es jetzt so gelöst:
Zentral in configuration.yaml alle Dateien im Verzeichnis mqtt/devices/ über merge named zusammenfügen:

mqtt: !include_dir_merge_named mqtt/devices/

In mqtt/devices je Kamera eine yaml:

mqtt/devices/instar_in8815_4K.yaml
mqtt/devices/instar_in8015_HD.yaml

Die yaml der Kameras enthalten dann jeweils die gesamte Konfiguration der Kamera: „sensor:“, „switch:“ usw:

sensor:
    # Kamera als Device (alle anderen Entitäten können dann über den "identifiers" dem Device zugewiesen werden)
  - device:
      identifiers: in8815_wohnzimmer
      manufacturer: INSTAR Deutschland GmbH
      model: INSTAR 4K IN-8815 WLAN
      name: IN-8815 4K Wohnzimmer
      configuration_url: "http://192.168.178.151:80"
    availability:
      topic: instar/8815_4K/status/connection
      payload_available: '{"val":"online"}'
      payload_not_available: '{"val":"offline"}'
    object_id: in8815_instar_wohnzimmer_testament
    unique_id: in8815_instar_wohnzimmer_testament
    name: IN-8815 Wohnzimmer Status
    state_topic: instar/8815_4K/status/connection
    value_template: '{{ value_json.val }}'
    # Alarmserver Status (normalerweise 0 oder Unknown, wird 1 usw. bei Alarmauslösung)
  - unique_id: instar_wohnzimmer_alarmserver
    name: Alarmserver Status
    icon: mdi:clipboard-list
    state_topic: instar/8815_4K/status/alarm/triggered
    device_class: current
    value_template: '{{ value_json.val }}'
    device:
      identifiers: in8815_wohnzimmer

# Schalter (An / Aus): schalten/ändern von Zuständen
switch:
    # Alarmbereich Rot aktiviert / deaktiviert
  - unique_id: instar_wohnzimmer_red_alarm_area
    name: Alarm Area Red
    icon: mdi:shield-home
    state_topic: instar/8815_4K/status/alarm/areas/red/enable
    command_topic: instar/8815_4K/alarm/areas/red/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: in8815_wohnzimmer  

Sorry, muss mich korrigieren. Scheint so als ob es mit:

mqtt: !include_dir_merge_named mqtt/devices/

So nicht funnktioniert:
Ich hatte zwar beide Kameras noch drin, aber bei der zweiten waren dann die entitäten auf offline (habe ich so direkt nicht gesehen). Denke das merge_named funktioniert da doch anders als von Gemini behauptet…

1 „Gefällt mir“

Nochmals Danke! Die Richtung war richtig :wink:
wenn man den list style und nicht den key style für jede Kamera verwendet:

dann kann man über

mqtt: !include_dir_merge_list mqtt/devices/

die Listen zusammenfassen

1 „Gefällt mir“

Respekt. Ihr beide solltet Euch zusammentun und die Beschreibungen und Codes sauber zusammenfassen. Dann besteht die Chance, dass @INSTAR Euch mit dem Artikel im Wiki erwähnt.

Ich habe mich nochmal etwas damit beschäftigt und getestet (wir benutzen ja schon den List syle (Einträge mit Bindestrich (-)). Momentan verstehe ich das so:


!include_dir_merge_list:
ist dafür da, mehrere YAML-Listen zu einer großen Liste zu kombinieren. Das bedeutet, jede einzelne Datei, die es liest, muss direkt mit dem Beginn einer Liste starten, also mit einem Bindestrich (-).
In unserem Fall wären es meistens die unique_id:

    switch: 
        # Alarmbereich 1 aktiviert / deaktiviert
      - unique_id: instar_in8015HD_alarm_area1
      ...

D.h. wir könnten das nach Gerät und Domain (switch, button, sensor,…) aufteilen. In den Dateien ist dann nur die Liste drin (d.h. bei „switch“ nur die Liste mit - unique_id: OHNE das switch: am Anfang)

mqtt:
 switch: !include_dir_merge_list mqtt/switch/
 button: !include_dir_merge_list mqtt/button/

Aber !include_dir_merge_list mit nur einer yaml pro Gerät (und jedes dieser yaml enthält mehrer Domains/Listen: switch, button, sensor,…) funktioniert meines Wissens (und meiner Tests) nach nicht.


!include_dir_merge_named:
Jede Datei im Verzeichnis muss ein YAML-Dictionary enthalten. Home Assistant nimmt dann all diese Dictionaries und verschmilzt sie zu einem großen Dictionary. Kollidierende Schlüssel werden überschrieben (der zuletzt geladene Wert gewinnt), daher sollten Schlüssel eindeutig sein oder bewusst überschrieben werden.
Das ist, was ich bei meinen Tests gesehen habe (ich hatte alle Schlüssel doppelt (switch, button, sensor,…) mit Ausnahme von „select“, das ich nur unter in8015HD als Dropdown für die Infrarot LED Einstellungen hatte (ist bei in8015 „auto“ oder „close“, bei in8815 sind das nummern 0,1, und 2)

Resultat war, dass bei in8815 (Datei wird wegen Namen als letztes geladen) alle Sensoren verfügbar waren (switch, button, sensor,…) und bei in8015 nur der eine „select“ Sensor (die anderen wie switch, button, sensor,… wurden von in8815 überschrieben), den „select“ Sensor gab es nur bei in8015 .

D.h. mein Fazit wäre (zumindest bis jetzt :winking_face_with_tongue:), dass eine Datei pro Device/Kamera nicht funktioniert. Man kann nur per Domains (switch, button, sensor,…) trennen und da dann eine Datei je Domain und Device/Kamera anlegen.
Also so:

mqtt:
 switch: !include_dir_merge_list mqtt/switch/
 button: !include_dir_merge_list mqtt/button/
 number: !include_dir_merge_list mqtt/number/

Und dann in jedem Verzeichnis pro Kamera eine Datei, die dann ausschließlich switches, buttons, usw… der Kamera abdeckt:

mqtt/switch/instar_in8815_4K_switches.yaml
mqtt/switch/instar_in8015_HD_switches.yaml
mqtt/button/instar_in8815_4K_buttons.yaml
mqtt/button/instar_in8015_HD_buttons.yaml
...

ja, aber mehrere Dateien pro Kamera fand ich persönlich unschön. Ich habe jetzt eine Datei pro Kamera. (Im Vergleich zu dem ersten Post habe ich Dinge, die meine 9408 nicht hat/kann schon gelöscht…)

configuration.yaml:

mqtt: !include_dir_merge_list mqtt/devices/

mqtt/devices/haustuer.yaml:

# Sensoren
    # Kamera als Device (alle anderen Entitäten können dann über den "identifiers" dem Device zugewiesen werden)
- sensor:
    device:
      identifiers: <Kamera_EindeutigeID_inHA>
      manufacturer: INSTAR Deutschland GmbH
      model: INSTAR 4K IN-9408
      name: IN-9408 4K Haustür
      configuration_url: "http://<InstarIP>:80"
    availability:
      topic: instar/<MQTT-Klient-ID>/status/connection
      payload_available: '{"val":"online"}'
      payload_not_available: '{"val":"offline"}'
    object_id: in9408_<präfix_Entitäten>_testament
    unique_id: in9408_<präfix_Entitäten>_testament
    name: IN-9408 Haustür Status
    state_topic: instar/<MQTT-Klient-ID>/status/connection
    value_template: '{{ value_json.val }}'

    # Alarmserver Status (normalerweise 0 oder Unknown, wird 1 usw. bei Alarmauslösung)
- sensor:
    unique_id: <präfix_Entitäten>_alarmserver
    name: Alarmserver Status
    icon: mdi:clipboard-list
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/triggered
    device_class: current
    value_template: '{{ value_json.val }}'
    device:
      identifiers: <Kamera_EindeutigeID_inHA>
    
    # Aktuell installierte Firmware Version
- sensor:
    unique_id: <präfix_Entitäten>_update_current
    name: Aktuelle FW Version
    icon: mdi:cpu-64-bit
    state_topic: instar/<MQTT-Klient-ID>/status/system/update/current
    value_template: "{{ value_json.val }}"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Neuste verfügbare Firmware Version (0, wenn keine neue)
- sensor:
    unique_id: <präfix_Entitäten>_update_latest
    name: Neueste FW Version
    icon: mdi:cpu-64-bit
    state_topic: instar/<MQTT-Klient-ID>/status/system/update/latest
    value_template: "{{ value_json.val }}"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # SD Karte Gesamtkapazität in GB
- sensor:
    unique_id: <präfix_Entitäten>_sd_total
    name: SD-Karte Gesamt
    state_topic: instar/<MQTT-Klient-ID>/status/features/sd/sdtotalspace
    value_template: "{{ (value_json.val | float / 1073741824) | round(2) }}"
    device_class: data_size
    unit_of_measurement: "GB"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # SD Karte freier Speicherplatz in GB
- sensor:
    unique_id: <präfix_Entitäten>_sd_free
    name: SD-Karte Frei
    state_topic: instar/<MQTT-Klient-ID>/status/features/sd/sdfreespace
    value_template: "{{ (value_json.val | float / 1073741824) | round(2) }}"
    device_class: data_size
    unit_of_measurement: "GB"
    device:
      identifiers: <Kamera_EindeutigeID_inHA>


# Schalter (An / Aus): schalten/ändern von Zuständen
    # Alarmbereich Rot aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_red_alarm_area
    name: Alarm Area Red
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/red/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/red/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>    
    
    # Alarmbereich Blau aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_blue_alarm_area
    name: Alarm Area Blue
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/blue/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/blue/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarmbereich Grün aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_green_alarm_area
    name: Alarm Area Green
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/green/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/green/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarmbereich Gelb aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_yellow_alarm_area
    name: Alarm Area Yellow
    icon: mdi:shield-home
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/yellow/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/yellow/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
    
    # Privatsphären Bereich 1 aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_privacy_mask_1
    name: Privacy Mask 1
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region1/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region1/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Privatsphären Bereich 2 aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_privacy_mask_2
    name: Privacy Mask 2
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region2/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region2/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Privatsphären Bereich 3 aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_privacy_mask_3
    name: Privacy Mask 3
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region3/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region3/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Privatsphären Bereich 4 aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_privacy_mask_4
    name: Privacy Mask 4
    icon: mdi:eye-off
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/privacy/region4/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/privacy/region4/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Auto Gamma aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_auto_gamma
    name: Auto Gamma
    icon: mdi:brightness-auto
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/gamma/auto
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/gamma/auto
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Auto Entrauschen aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_auto_denoise
    name: Auto Denoise
    icon: mdi:brightness-auto
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/denoise/auto
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/denoise/auto
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Auto Lebendigkeit aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_auto_vibrancy
    name: Auto Vibrancy
    icon: mdi:brightness-auto
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/vibrancy/auto
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/vibrancy/auto
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
    
    # Bildeinstellungen - Tag - WDR (Wide Dynamic Range) aktiviert / deaktiviert  
- switch:
    unique_id: <präfix_Entitäten>_wdr
    name: WDR
    icon: mdi:hdr
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/wdr/enable
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/wdr/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Bild vertikal spiegeln aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_flip
    name: Flip
    icon: mdi:flip-vertical
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/transform/flip
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/transform/flip
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Bild horizontal spiegeln aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_mirror
    name: Mirror
    icon: mdi:flip-horizontal
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/transform/mirror
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/transform/mirror
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Global aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_alarm_enable
    name: Alarm Enabled
    icon: mdi:alarm-light
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Sende Push message aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_alarm_push_enable
    name: Alarm Push
    icon: mdi:message-alert
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/push/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/push/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Sende Email aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_alarm_email_enable
    name: Alarm Email
    icon: mdi:email-arrow-right
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/email/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/email/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Speichere Foto auf SD Karte aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_alarm_sd_photo_enable
    name: Alarm SD Photo
    icon: mdi:micro-sd
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/sd/snapshot/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/sd/snapshot/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Speichere Video auf SD Karte aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_alarm_sd_video_enable
    name: Alarm SD Video
    icon: mdi:micro-sd
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/sd/video/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/sd/video/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 
      
    # Alarm: Sende Foto auf FTP Share aktiviert / deaktiviert  
- switch:
    unique_id: <präfix_Entitäten>_alarm_ftp_photo_enable
    name: Alarm FTP Photo
    icon: mdi:file-upload
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/ftp/snapshot/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/ftp/snapshot/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Sende Video auf FTP Share aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_alarm_ftp_video_enable
    name: Alarm FTP Video
    icon: mdi:file-upload
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/ftp/video/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/ftp/video/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

    # Alarm: Globale Objekterkennung aktiviert / deaktiviert      
- switch:
    unique_id: <präfix_Entitäten>_objectdetection_enable
    name: Objekterkennung Global
    icon: mdi:semantic-web
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/enable
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Objekterkennung Personen aktiviert / deaktiviert 
- switch:
    unique_id: <präfix_Entitäten>_objectdetection_persons_enable
    name: Objekterkennung Personen
    icon: mdi:account
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/link/person
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/link/person
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Objekterkennung Fahrzeuge aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_objectdetection_vehicles_enable
    name: Objekterkennung Fahrzeuge
    icon: mdi:car
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/link/vehicle
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/link/vehicle
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm: Objekterkennung Tiere aktiviert / deaktiviert
- switch:
    unique_id: <präfix_Entitäten>_objectdetection_animals_enable
    name: Objekterkennung Tiere
    icon: mdi:cat
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/actions/objects/link/animal
    command_topic: instar/<MQTT-Klient-ID>/alarm/actions/objects/link/animal
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 


# Knöpfe zum Auslösen von Aktionen
    # Manuellen Alarm auslösen (alle Alarm-Aktionen werden ausgelöst)
- button:
    unique_id: <präfix_Entitäten>_alarm_trigger
    name: Alarm Trigger
    command_topic: instar/<MQTT-Klient-ID>/alarm/pushalarm
    payload_press: '{"val":"1"}'
    icon: mdi:gesture-tap-button
    qos: 2
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Kamera neu starten
- button:
    unique_id: <präfix_Entitäten>_reboot
    name: Reboot
    command_topic: instar/<MQTT-Klient-ID>/system/reboot/now
    payload_press: '{"val":"1"}'
    icon: mdi:cog-refresh-outline
    qos: 2
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Photoserie auf SD Karte aufnehmen:
- button:
    unique_id: <präfix_Entitäten>_snapshot
    name: Snapshot erstellen
    command_topic: instar/<MQTT-Klient-ID>/task/photoseries/snap/sd
    payload_press: '{"val":"1"}'
    qos: 1
    retain: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

# Einstellbare Zahlenwerte

    # Bildeinstellungen - Tag - Helligkeit
- number:
    unique_id: <präfix_Entitäten>_brightness
    name: Brightness
    object_id: in9408_brightness
    icon: mdi:brightness-6
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/brightness
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/brightness
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Kontrast    
- number:
    unique_id: <präfix_Entitäten>_contrast
    name: Contrast
    object_id: in9408_contrast
    icon: mdi:contrast-box
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/contrast
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/contrast
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Sättigung
- number:
    unique_id: <präfix_Entitäten>_saturation
    name: Saturation
    object_id: in9408_saturation
    icon: mdi:palette-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/saturation
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/saturation
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Farbton
- number:
    unique_id: <präfix_Entitäten>_hue
    name: Hue
    object_id: in9408_hue
    icon: mdi:palette-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/hue
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/hue
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 360
    step: 1
    mode: slider
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Schärfe
- number:
    unique_id: <präfix_Entitäten>_sharpness
    name: Sharpness
    object_id: in9408_sharpness
    icon: mdi:shark-fin-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/sharpness
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/sharpness
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 100
    step: 1
    unit_of_measurement: '%'
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Lebendigkeit
- number:
    unique_id: <präfix_Entitäten>_vibrancy
    name: Vibrancy
    object_id: in9408_vibrancy
    icon: mdi:palette-outline
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/vibrancy/value
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/vibrancy/value
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 255
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA>  

    # Bildeinstellungen - Tag - Gamma 
- number:
    unique_id: <präfix_Entitäten>_gamma
    name: Gamma
    object_id: in9408_gamma
    icon: mdi:gamma
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/gamma/preset
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/gamma/preset
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 18
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Entrauschen 
- number:
    unique_id: <präfix_Entitäten>_denoise
    name: Denoise
    object_id: in9408_denoise
    icon: mdi:contrast-box
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/denoise/preset
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/denoise/preset
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 15
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - Maximale ISO 
- number:
    unique_id: <präfix_Entitäten>_max_iso
    name: Max ISO
    object_id: in9408_isomax
    icon: mdi:brightness-6
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/isomax
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/isomax
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 32
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Tag - WDR (Wide Dynamic Range) Stärke
- number:
    unique_id: <präfix_Entitäten>_wdr_strength
    name: WDR Strength
    object_id: in9408_wdrstrength
    icon: mdi:brightness-6
    state_topic: instar/<MQTT-Klient-ID>/status/multimedia/image/day/wdr/strength
    command_topic: instar/<MQTT-Klient-ID>/multimedia/image/day/wdr/strength
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 1
    max: 7
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Nachtsicht - Tag/Nacht-Modus - 0 (kein IR), 1 (immer IR), 2 (automatisch)
- number:
    unique_id: <präfix_Entitäten>_auto_ir
    name: IR LED Steuerung
    object_id: in9408_autoled
    icon: mdi:lightbulb-night-outline
    state_topic: instar/<MQTT-Klient-ID>/status/features/nightvision/autoled
    command_topic: instar/<MQTT-Klient-ID>/features/nightvision/autoled
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 2
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Bildeinstellungen - Nachtsicht - IRcut Filter - `0` (aus), `1` (an), `2` (auto).
- number:
    unique_id: <präfix_Entitäten>_auto_ircut
    name: IR CUT Filter
    object_id: in9408_autoircut
    icon: mdi:lightbulb-night-outline
    state_topic: instar/<MQTT-Klient-ID>/status/features/nightvision/autoircut
    command_topic: instar/<MQTT-Klient-ID>/features/nightvision/autoircut
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 2
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm - Bereich Rot Empfindlichkeit
- number:
    unique_id: <präfix_Entitäten>_red_alarm_area_sensitivity
    name: Alarm Area Red Sensitivity
    object_id: in9408_red_area_sense
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/red/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/red/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm - Bereich Blau Empfindlichkeit
- number:
    unique_id: <präfix_Entitäten>_blue_alarm_area_sensitivity
    name: Alarm Area Blue Sensitivity
    object_id: in9408_blue_area_sense
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/blue/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/blue/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm - Bereich Grün Empfindlichkeit
- number:
    unique_id: <präfix_Entitäten>_green_alarm_area_sensitivity
    name: Alarm Area Green Sensitivity
    object_id: in9408_blue_area_green
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/green/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/green/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

    # Alarm - Bereich Gelb Empfindlichkeit
- number:
    unique_id: <präfix_Entitäten>_yellow_alarm_area_sensitivity
    name: Alarm Area Yellow Sensitivity
    object_id: in9408_blue_area_yellow
    icon: mdi:motion-sensor
    state_topic: instar/<MQTT-Klient-ID>/status/alarm/areas/yellow/sensitivity
    command_topic: instar/<MQTT-Klient-ID>/alarm/areas/yellow/sensitivity
    value_template: '{{ value_json.val }}'
    command_template: '{"val":"{{ value }}"}'
    min: 0
    max: 100
    step: 1
    qos: 1
    optimistic: false
    device:
      identifiers: <Kamera_EindeutigeID_inHA> 

# Binär (0 oder 1) Sensoren
# Ist ein Firmware Update verfügbar?
- binary_sensor:
    unique_id: <präfix_Entitäten>_update_verfuegbar
    name: Update verfügbar
    state_topic: instar/<MQTT-Klient-ID>/status/system/update/updateavailable
    value_template: '{{ value_json.val }}'
    payload_on: "1"
    payload_off: "0"
    device_class: update
    device:
      identifiers: <Kamera_EindeutigeID_inHA>

Weitere Dateien wie z.B. mqtt/devices/garten.yaml sind dann analog.
Der Name der Datei ist völlig irrelevant, kann auch 01.yaml etc. heißen - nur der Speicherort ist festgelegt.
Falls weitere Device (also jetzt nicht Kameras) hinzugefügt werden sollen, müssen diese dann auch im „List“-Style sein, da List-Style und Key-style nicht gemischt werden dürfen.
Wie gesagt am Ende ist es Geschmackssache, aber so hat jede Kamera ihre eigene Datei.

ok danke, dann muss ich das nochmal versuchen. Hatte bei mir so ( !include_dir_merge_list mqtt/devices/ und eine yaml pro device) nicht geklappt. Das wäre auch die Konfiguration, die ich bevorzugen würde.

Jetzte habe ich es auch hinbekommen (dank deinem Code Beispiel).
configuration.yaml

mqtt: !include_dir_merge_list mqtt/devices/

Was ich falsch hatte, war, dass ich die Konfiguration aus der entities.yaml (alle Kameras in einer Datei) einfach in zwei Dateien aufgeteilt hatte. Daduch waren die „sensor“, „switch“ usw keine Liste)

mqtt/devices/instar_in8015_HD.yaml:

sensor:    #   <---------HIER FALSCH, da so kein List-Elemet (mit vorangestelltem "-")
    # Kamera als Device (alle anderen Entitäten können dann über den "identifiers" dem Device zugewiesen werden)
  - device:
      identifiers: in8015_wohnzimmer
      manufacturer: INSTAR Deutschland GmbH
      model: INSTAR HD IN-8015 WLAN
      name: IN-8015 HD Wohnzimmer
      configuration_url: "http://192.168.178.66:80"
    availability:
      topic: instar/8015FullHD/status/connection
      payload_available: '{"val":"online"}'
      payload_not_available: '{"val":"offline"}'
    object_id: in80815_instar_wohnzimmer_testament
    unique_id: in8015_instar_wohnzimmer_testament
    name: IN-8015 Wohnzimmer Status
    state_topic: instar/8015FullHD/status/connection
    value_template: '{{ value_json.val }}'
    # Alarmserver Status (normalerweise 0 oder Unknown, wird 1 usw. bei Alarmauslösung)

  - unique_id: instar_in8015HD_alarmserver
    name: Alarmserver Status
    icon: mdi:clipboard-list
    state_topic: instar/8015FullHD/status/alarm/triggered
    device_class: current
    value_template: '{{ value_json.val }}'
    device:
      identifiers: in8015_wohnzimmer

switch: 
    # Alarmbereich 1 aktiviert / deaktiviert
  - unique_id: instar_in8015HD_alarm_area1
    name: Alarm Area 1
    icon: mdi:shield-home
    state_topic: instar/8015FullHD/status/alarm/area1/enable
    command_topic: instar/8015FullHD/alarm/area1/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: in8015_wohnzimmer
...

Daraufhin habe ich es erst mal so versucht, und das hat bereits geklappt.
Bin mir aber nicht 100% sicher, ob das die gute Lösung ist (unique_id auch als List Element)

- sensor:  # <--------- Jetzt ist es ein List element...
    # Kamera als Device (alle anderen Entitäten können dann über den "identifiers" dem Device zugewiesen werden)
  - device:  # <--------- aber hier ist auch noch ein untergeordnetes
      identifiers: in8015_wohnzimmer
      manufacturer: INSTAR Deutschland GmbH
      model: INSTAR HD IN-8015 WLAN
      name: IN-8015 HD Wohnzimmer
      configuration_url: "http://192.168.178.66:80"
    availability:
      topic: instar/8015FullHD/status/connection
      payload_available: '{"val":"online"}'
      payload_not_available: '{"val":"offline"}'
    object_id: in80815_instar_wohnzimmer_testament
    unique_id: in8015_instar_wohnzimmer_testament
    name: IN-8015 Wohnzimmer Status
    state_topic: instar/8015FullHD/status/connection
    value_template: '{{ value_json.val }}'

    # Alarmserver Status (normalerweise 0 oder Unknown, wird 1 usw. bei Alarmauslösung)
  - unique_id: instar_in8015HD_alarmserver    # <--------- aber hier ist auch noch ein untergeordnetes
    name: Alarmserver Status
    icon: mdi:clipboard-list
    state_topic: instar/8015FullHD/status/alarm/triggered
    device_class: current
    value_template: '{{ value_json.val }}'
    device:
      identifiers: in8015_wohnzimmer
      
- switch:      # <--------- Jetzt ist es ein List element...
    # Alarmbereich 1 aktiviert / deaktiviert
  - unique_id: instar_in8015HD_alarm_area1   # <--------- aber hier ist auch noch ein untergeordnetes
    name: Alarm Area 1
    icon: mdi:shield-home
    state_topic: instar/8015FullHD/status/alarm/area1/enable
    command_topic: instar/8015FullHD/alarm/area1/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: in8015_wohnzimmer
...

Dann so weiter angepasst (die „-“ vor device / unique_id entfernt) und dann jeder Entität eine List elemet (- sensor, - switch, …) vorangestellt, um das als Liste zu bekommen (entspricht dann auch deine Konfiguration):

- sensor:  # <--------- Jetzt ist es ein List element...
    # Kamera als Device (alle anderen Entitäten können dann über den "identifiers" dem Device zugewiesen werden)
    device:
      identifiers: in8015_wohnzimmer
      manufacturer: INSTAR Deutschland GmbH
      model: INSTAR HD IN-8015 WLAN
      name: IN-8015 HD Wohnzimmer
      configuration_url: "http://192.168.178.66:80"
    availability:
      topic: instar/8015FullHD/status/connection
      payload_available: '{"val":"online"}'
      payload_not_available: '{"val":"offline"}'
    object_id: in80815_instar_wohnzimmer_testament
    unique_id: in8015_instar_wohnzimmer_testament
    name: IN-8015 Wohnzimmer Status
    state_topic: instar/8015FullHD/status/connection
    value_template: '{{ value_json.val }}'

- sensor:   # <--------- Nächste Entität muss jetzt den sensor wieder als List Elemet bekommen.
    # Alarmserver Status (normalerweise 0 oder Unknown, wird 1 usw. bei Alarmauslösung)
    unique_id: instar_in8015HD_alarmserver
    name: Alarmserver Status
    icon: mdi:clipboard-list
    state_topic: instar/8015FullHD/status/alarm/triggered
    device_class: current
    value_template: '{{ value_json.val }}'
    device:
      identifiers: in8015_wohnzimmer
      
- switch: # <--------- Nächste Entität muss jetzt den switch wieder als List Elemet bekommen.
    # Alarmbereich 1 aktiviert / deaktiviert
    unique_id: instar_in8015HD_alarm_area1
    name: Alarm Area 1
    icon: mdi:shield-home
    state_topic: instar/8015FullHD/status/alarm/area1/enable
    command_topic: instar/8015FullHD/alarm/area1/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: in8015_wohnzimmer

- switch:  # <--------- Nächste Entität muss jetzt den switch wieder als List Elemet bekommen.
    unique_id: instar_in8015HD_alarm_area2
    name: Alarm Area 2
    icon: mdi:shield-home
    state_topic: instar/8015FullHD/status/alarm/area2/enable
    command_topic: instar/8015FullHD/alarm/area2/enable
    qos: 1
    payload_on: '{"val":"1"}'
    payload_off: '{"val":"0"}'
    optimistic: false
    retain: false
    device:
      identifiers: in8015_wohnzimmer
...

Hi, habe eure Beiträge zu MQTT und Home Assistant gerade erst gesehen. Hatte in 05/2025 die die Integration für mehrere INSTAR Cams mit einem ‚manuellen‘ Integrations-Script umgesetzt und den Link hier im Forum veröffentlicht.

Ihr könnt ja mal hier nachsehen:

https://github.com/wolwin/WW-mySHT/blob/master/SHT_HA_INSTAR/README.md

Es sollten alle mir wichtigen Entititäten berücksichtigt sein - lässt sich jedoch einfach anpassen.

2 „Gefällt mir“