Achtergrond:
Vorig jaar is mijn nieuwbouwhuis opgeleverd. Vanuit de bouw is daar een smart home systeem, genaamd One Smart Control ingebouwd (zie ook: [Domotica] One Smart Control)Helaas is het een enorm gesloten systeem, wat dus alleen via de knoppen op de muur en via de eigen app bediend kan worden. Wel zeggen ze (inmiddels al 1,5 jaar of zo) dat er ondersteuning voor Google Assistant komt. Buiten dat is er geen web-interface of api.
Buiten Google Assistant (via een aantal Google Home apparaten) gebruik ik ook Home Assistant (zie: Home Assistant: Open source Python3 home automation - deel 2). Daarin kan ik van alles automatiseren, bijvoorbeeld dat de lichten uit moeten gaan als er niemand meer thuis is. Echter kan ik daar dus niet mijn One Smart Control systeem mee bedienen. Ik kan uiteraard slimme lampen (bijvoorbeel Hue, of in mijn geval Tuya) gebruiken, maar het nadeel daarvan is weer dat die niet werken als je de wandknop gebruikt, de stroom is er dan immers af.
Nu bedacht ik me dat het wellicht mogelijk is om Google Assistant aan te sturen via Home Assistant, en na een korte zoektocht kwam ik op Google Assistant Relay uit (zie: https://github.com/Apipa169/Assistant-Relay-for-Hassio)
Nu kan het best nog lang duren voordat Google Assistant werkt met One Smart Control, maar ik wilde vast voorbereid zijn, en alvast uitzoeken hoe het dan zou kunnen werken
Wellicht ook handig om te melden, ik heb bar weinig programmeerervaring, en ben ook pas een goeie maand ofzo met Home Assistant bezig. Ik knoop van alles aan elkaar wat ik via Google vind, en hoop dan maar dat het werkt
Waarom een apart topic
Omdat het zowel Home Assistant en Google Assistant raakt, wist ik niet echt waar ik het kwijt moest. Daarnaast dacht ik dat het wellicht wat een te groot onderwerp is voor in een verzameltopic, ook omdat anderen misschien ook met dit probleem worstelen (wellicht niet met One Smart Control, maar met een ander systeem wat ook alleen via Google Assistant aan te sturen is).Wat ik tot op heden gedaan heb
Allereerst heb ik Google Assistant Relay geïnstalleerd. Dat ging vrij soepel via de instructies op de Github pagina. Als je de stappen volgt moet dat op zich wel goed gaan. Je moet wel in de Google Console een API aanmaken, maar alles wordt vrij duidelijk omschreven.Om vervolgens de Google Assistant Relay ook in Home Assistant te kunnen gebruiken, moet je het volgende toevoegen aan je configuration.yaml:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # assistant relay rest_command: assistant_broadcast: url: http://192.168.2.179:3000/assistant method: POST content_type: 'application/json' payload: '{"command":"{{ command }}", "user":"TheFes", "broadcast":true}' assistant_converse: url: http://192.168.2.179:3000/assistant method: POST content_type: 'application/json' payload: '{"command":"{{ command }}", "user":"TheFes", "converse":true}' assistant_relay: url: http://192.168.2.179:3000/assistant method: POST content_type: 'application/json' payload: '{"command":"{{ command }}", "user":"TheFes"}' |
Vervang in bovenstaande code het IP adres naar jouw lokale IP, en de username naar de username die je tijdens de configuratie van Google Assistant Relay aangemaakt hebt. Alleen de laatste is nodig om commando's als "zet het licht aan" te sturen. De bovenste twee zijn voor broadcasts naar je Google Home apparaten.
Daarna heb ik een dummy lamp aangemaakt in Home Assistant. Aangezien ik One Smart Control nog niet kan aansturen, ga ik onderstaande voorbeelden een Tuya lamp schakelen. Vrij nutteloos natuurlijk want die kan ik ook gewoon direct in Home Assistant schakelen, maar voor nu is dit een concept-test.
configuration.yaml
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| # de dummy lamp zelf light: - platform: template lights: test_staande_lamp: friendly_name: "Test Staande lamp" turn_on: service: input_boolean.turn_on entity_id: input_boolean.test_staande_lamp turn_off: service: input_boolean.turn_off entity_id: input_boolean.test_staande_lamp set_level: service: input_number.set_value data_template: value: "{{ brightness }}" entity_id: input_number.test_staande_lamp # een input_boolean die aan/uit schakelt input_boolean : test_staande_lamp: # een input_number om de helderheid in te stellen input_number: test_staande_lamp: min: 0 max: 100 |
Na een reboot heb je dan vervolgens een lamp! Je kunt de helderheid instellen (van 1 tot 100%) en de lamp aan en uitzetten. Alleen er gebeurt uiteraard nog niets. Voor het aan/uit-zetten heb ik twee scripts en een automation gemaakt. Het schakelen van de helderheid kon met alleen een automation.
scripts.yaml:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
| test_staandelamp_on: alias: Test Staande Lamp On sequence: - data: command: zet staande lamp aan service: rest_command.assistant_relay test_staandelamp_off: alias: Test Staande Lamp Off sequence: - data: command: zet staande lamp uit service: rest_command.assistant_relay |
automations.yaml:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| - id: '1592232113619' alias: Test Staande Lamp GA trigger: - entity_id: input_boolean.test_staande_lamp platform: state action: - service_template: script.test_staandelamp_{{trigger.to_state.state}} - id: '15922321136191' alias: Test Staande Lamp GA brightness trigger: - entity_id: input_number.test_staande_lamp platform: state action: - data_template: command: "zet staande lamp op {{ trigger.to_state.state | int }} procent" service: rest_command.assistant_relay |
Zoals je ziet gebruik ik Google Assistant in het Nederlands. Dat is ook waarom ik voor aan/uit wel scripts nodig had, en voor de helderheid niet. De state van de boolean is namelijk on of off, en in mijn Google Assistant commando heb ik aan en uit nodig. Ik kan dus niet direct de state van de boolean gebruiken.
Wat ik nu doe is de state van de boolean gebruiken als een wildcard in de automation om te bepalen of het on-script of het off-script getriggerd moet worden.
Bij een getal speelt dit taalprobleem niet, en de stat van het input_number kan dus wel meteen in de automation gebruikt worden. Als je Google Assistant in het Engels gebruikt, zou je het aan/uit-schakelen dus ook in een automation kunnen afvangen, zonder de twee scripts.
Na het herladen van de scripts en automations (of na een reboot van Home Assistant) zou het moeten werken.
Als je nu de test-lamp aanzet, wordt er via de Google Assistant Relay het commando "zet staande lamp aan" gestuurd naar Google Assistant, en gaat de staande lamp aan.
Op zich heb ik nu al wel iets wat zou kunnen werken voor automatiseringen. Bijvoorbeeld dus om alle lampen uit te zetten als ik weg ga. Voor die automatisering zou zelfs één dummy lamp genoeg zijn, die dan het commando "zet alle lampen uit" triggert
Wat ik met dit topic wil
- Allereerst dus wellicht andere mensen helpen die een vergelijkbaar probleem hebben
- Tips krijgen om bovenstaande te verbeteren
- Onderstaand probleem oplossen
Ik heb nog niets bedacht om die wijzigingen ook weer naar de dummy lamp terug te sturen.
Dat zorgt ook voor een probleem. Stel de dummy lamp staat uit, en je zet vervolgens via de Google Home de lamp aan. De staat van de dummy lamp verander dan niet. Als je vervolgens via een automation of script in Home Assistant de dummy lamp uitzet, verander de staat ook niet, en wordt Google Assistant Relay dus niet getriggerd. Ofwel als iedereen het huis verlaten heeft, gaat de lamp alsnog niet uit.
Daarvoor zoek ik dus ie ieder geval nog een oplossing