Gør Sonos til din nye ringeklokke

Læsetid: ca 5 min - Skrevet af Sean Nielsen | 11 September, 2018

Vil du have lidt mere kontrol over din ringeklokke? så læs med her hvor Home Assistant, Sonos og Xiaomi er det smarte hjem's ringeklokke

Vil du have lidt mere kontrol over din ringeklokke? så læs med her hvor Home Assistant, Sonos og Xiaomi er det smarte hjem's ringeklokke

Til denne guide skal du bruge:

  1. Sonos
  2. Xiaomi smart home knap anmeldelse af Xiaomi smart home her
  3. Home Assistant. Følg instalationsguide her

Home assistant her en rigtig god integration af Sonos, og du kan frit oprette zoner, dele zoner op eller afspille musik eller lydklip (som f.eks. en ringeklokke)
vil du se hvad Home Assistant kan med Sonos, så kig på deres komponent her

Det giver en utrolig stor frihed i hvordan du bruger din ringeklokke, du kan f.eks. sende en besked til din telefon når nogen ringer på,
eller hvis børnene sover til middag, så kan du selv bestemme hvor Sonos skal spille og hvor højt. (En slags “forstyr ikke” funktion til ringeklokken)

Som overskriften afslører, så vil vi i denne guide, vise hvordan man sætter Sonos op som en rigtig dyr ringeklokke!
Den Xiaomi tryk knap jeg har valgt er ikke vandtæt, så hvis knappen sidder meget udsat, så bør du finde en anden knap der er vejrbestandig.

Men lad os komme igang med lidt kode eksempler:

der er 3 måder at få Sonos ind i Home Assistant.

Den første metode er at lade Home Assistant finde din Sonos selv.

Den anden metode er med en konfigurationsfil, som du kan placere i Home Assitant’s /config mappe
her kan du enten tilføje Sonos i “configuration.yaml” filen, og oprette automatikken i en anden fil, eller oprette en mappe der hedder “packages” og samle både automatikken og komponenten i en fil (og det er det vi gør her)
her et lille udtræk af filen, hvor at automatikken er fjernet

################################################################
## Packages / Sonos
################################################################

################################################
## Customize
################################################

homeassistant:
  customize:
    ################################################
    ## Node Anchors
    ################################################

    package.node_anchors:
      customize: &customize
        package: 'sonos'

      expose: &expose
        <<: *customize

#################################################
## Sonos
#################################################

sonos:
  media_player:
    hosts:
      - 192.168.18.166

Alt indtil ####### Sonos ####### indramningen er en skabelon, og er mere eller mindre den samme til alle de pakker man sætter op i denne mappe.

Efter indramningen finder vi selve opsætningen af Sonos, hvor at jeg manuelt har indtastet ip adressen ind for mine enheder (Jeg har for overskuelighedens skyld kun vist een her)

Den 3 metode er hvor man integrere Sonos via et web interface.
Tryk ind under configuration -> integrations og vælg Sonos-Configure

Home Assistant Sonos integrations

Når Sonos er blevet sat op (i nogle tilfælde skal Home Assitant genstartes) så vil du finde Sonos komponenten under entities.
entity_id er her vigtig, da det skal bruge så at Home Assistant ved hvilken højttaler der skal spille.

Nu ved vi hvilken Sonos enhed som skal spille, så skal vi finde ud af hvilken knap der skal aktivere ringeklokken.
Her bruger jeg en Xiaomi knap, og jeg kan i min entities se at knappen hedder binary_sensor.switch_123456789
Opsætning af Xiaomi hubben kan være lidt bøvlet, men læs evt. anmeldelsen for at komme i gang.

Vent lige lidt.. på IFTTT skal jeg bare trykke på en knap, og så er jeg i gang!

Allerede nu, er det tydeligt at Home Assistant ikke er lige så brugervenligt som f.eks. IFTTT.
Det meste er tekst basseret, og lidt omsonst at komme i gang med.
Tilgengæld kan Home Assistant langt mere en IFTTT.

Høre du f.eks. musik på 3 zoner, og ringeklokken lyder (Eller hvis du bruger Sonos som alarm) så behøver du ikke bryde zonerne, får så manuelt at sætte zonerne sammen igen,
Home Assistant kan gøre det for dig!

Automatikken

Her er den automatik vi vil bruge.

automation:
  - alias: doorbell
    trigger:
      - platform: event
        event_type: click
        event_data:
          entity_id: binary_sensor.switch_123456789
          click_type: single
      - platform: event
        event_type: click
        event_data:
          entity_id: binary_sensor.switch_123456789
          click_type: long_click_press
      - platform: event
        event_type: click
        event_data:
          entity_id: binary_sensor.switch_123456789
          click_type: double
    action:
      - service: script.sonosdoorbell
        data:
          sonos_entity: media_player.kitchen
          volume: 0.5
          delay: '00:00:10'

Xiaomi knappen hedder binary_sensor.switch_123456789
og da knappen understøtter enkelt klik, dobbelt klik og langt klik, er der 3 triggere til knappen.

Min action er at starte et script som hedder script.sonosdoorbell.
jeg har 3 variabler til det script.

  1. vælge hvilken Sonos enhed der skal afspille en lyd.
  2. Sætte en volume og
  3. tilføje et delay fra ringeklokken lyder, til Sonos skal gå tilbage til at afspille musikken.

scriptet vi starter ser således her ud

script:
  sonosdoorbell:
    sequence:
      - service: media_player.sonos_snapshot
        data_template:
          entity_id: "{{ sonos_entity }}"
      - service: media_player.sonos_unjoin
        data_template:
          entity_id: "{{ sonos_entity }}"
      - service: media_player.volume_set
        data_template:
          entity_id: "{{ sonos_entity }}"
          volume_level: "{{ volume }}"
      - service: media_player.play_media
        data_template:
          entity_id: "{{ sonos_entity }}"
          media_content_type: music
          media_content_id: "http://192.168.0.59:8123/local/ding.mp3"
      - delay: "{{ delay }}"
      - service: media_player.sonos_restore
        data_template:
          entity_id: "{{ sonos_entity }}"

Vi starter med at tage et snapshot, dvs et øjebliksbillede af Hvordan Sonos ser ud lige nu.
altså hvad er volume på Sonos, hvilke enheder er sat sammen som en Zone, og hvad musik spilles der.

derefter skiller vi zonerne ad, med unjoin, og sætter vores ønskede volume.

Så beder vi Sonos om at afspille en ding lyd på vores valgte Sonos enhed, ding lyden ligger under mappen www under vores config mappe (i vores home assistant installation) og ip adressen er naturligvis vores Home Assistant boks (Dette kunne ligeså godt være en NAS server eller lignende), findes mappen ikke, oprettes den.

vi venter x antal sekunder (10 sekunder har jeg valgt i vores automatik) og til slut gendanner vi Sonos til vores snapshot fra før,
så hørte du musik med en volume på 30% i køkkenet og stuen, så vil den fortsætte med det.

Den samlede pakke i packages mappen ender altså med at se sådanne her ud:

fil: sonos.yaml

################################################################
## Packages / Sonos
################################################################

################################################
## Customize
################################################

homeassistant:
  customize:
    ################################################
    ## Node Anchors
    ################################################

    package.node_anchors:
      customize: &customize
        package: 'sonos'

      expose: &expose
        <<: *customize

##################################################
##### script
##################################################

script:
  sonosdoorbell:
    sequence:
      - service: media_player.sonos_snapshot
        data_template:
          entity_id: "{{ sonos_entity }}"
      - service: media_player.sonos_unjoin
        data_template:
          entity_id: "{{ sonos_entity }}"
      - service: media_player.volume_set
        data_template:
          entity_id: "{{ sonos_entity }}"
          volume_level: "{{ volume }}"
      - service: media_player.play_media
        data_template:
          entity_id: "{{ sonos_entity }}"
          media_content_type: music
          media_content_id: "http://192.168.0.59:8123/local/ding.mp3"
      - delay: "{{ delay }}"
      - service: media_player.sonos_restore
        data_template:
          entity_id: "{{ sonos_entity }}"


##################################################
##### automation
##################################################
automation:
  - alias: doorbell
    trigger:
      - platform: event
        event_type: click
        event_data:
          entity_id: binary_sensor.switch_123456789
          click_type: single
      - platform: event
        event_type: click
        event_data:
          entity_id: binary_sensor.switch_123456789
          click_type: long_click_press
      - platform: event
        event_type: click
        event_data:
          entity_id: binary_sensor.switch_123456789
          click_type: double
    action:
      - service: script.sonosdoorbell
        data:
          sonos_entity: media_player.kitchen
          volume: 0.5
          delay: '00:00:10'


#################################################
## Sonos
#################################################

sonos:
  media_player:
    hosts:
      - 192.168.18.166
comments powered by Disqus