Povesteam într-un articol de acum ceva vreme cum mi-am făcut apartamentul smart cu ajutorul Home Assistant și cum am integrat între ele produse de la mai multe companii. Dincolo de aceste integrări am creat și câteva automatizări pentru a aduce un plus de confort că doar despre asta e ideea de casă smart, să știe când să facă chestii în locul tău.
Când e vorba de automatizări în propria locuință nu e foarte complicat și pașii sunt destul de lejer de urmat de către cineva cu un background tehnic minim. Ba aș putea spune că dacă sunt urmărite suficiente tutoriale de pe YouTube oricine ar putea să pună în aplicare indicațiile de acolo pentru a-și automatiza câteva becuri.
Problema de care m-a lovit acum vine dintr-o nevoie cauzată de un side hustle. Ca să pun un pic de context în articol, pe lângă job-ul pe care-l am la corporație, mă mai ocup și de short term rentals (STR) sau închiriere în regim hotelier cum este denumită această îndeletnicire la noi.
În mod normal ora de check-out este la 11:00, dar în realitate oamenii pleacă atunci când vor ei, unii mai devreme, iar alții mai târziu, iar eu nu aveam o modalitate de a controla acest aspect în afară de a întreba direct. Poate singura variantă ar fi fost să pun o cameră video în fața ușii de la intrare, dar așa ceva nu se face. Nu e nici etic și nici nu aș avea cum să stau să urmăresc oamenii care vin și pleacă.
Din această cauză a trebuit să mă gândesc la o altă modalitate de a putea fi informat în momentul în care oaspeții părăsesc locația.
Aici intervine Home Assistant. Cum spuneam mai sus, în propria locuință e ușor de implementat așa ceva, dar într-o locație diferită situația se schimbă pentru că nu mai este aceeași rețea la care se conectează toate dispozitivele, iar comunicarea se face prin Internet.
Soluția pe care am gândit-o a fost să amplasez un cod QR pe care oaspeții să-l scaneze la check-out, iar în acel moment să primesc o notificare pe telefon și să se deschidă o pagină web cu un mesaj. Totul funcționează astfel:
De aici începe distracția mai tehnică. Pentru această implementare am folosit Home Assistant, Node Red și ChatGPT. Trebuie să mărturisesc că nu le știu pe toate și că mi-a luat 2-3 ore până să reușesc să pun totul cap la cap cu ajutorul unor tutoriale și a câtorva clipuri de pe YouTube.
Așadar, pentru început am instalat într-un Docker container Node Red urmărind documentația de aici și folosind comanda de mai jos:
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
Evident, acestea sunt porturile pe care rulează aplicația local. Din Internet sunt alte porturi și conexiunea este SSL. Pentru a ajunge la Node Red am folosit un reverse proxy.
După ce am instalat aplicația, a fost nevoie să instalez paleta pentru a face integrarea cu Home Assistant. Pentru asta, se merge pe Settings -> Pallete și se alege node-red-contrib-home-assistant-websocket
Urmează partea în care se setează detaliile pentru conexiunea cu HA. Pentru asta am ales un e event din partea stângă te tipul entity: state și i-am făcut drag&drop în partea de editare. La câmpul Server se alege Add a new server și se configurează detaliile pentru HA (Base URL & Token). Se poate alege fie să se comunice over the Internet sau local.
Într-un alt tab din browser se deschide Home Assistant și se generează un nou token de autentificare. Eu am ales să creez și un user nou care să fie folosit doar pentru această integrare.
Se dă click pe username și apoi se apasă pe Create Token.
După ce am făcut integrarea celor două aplicații, am început să construiesc flow-ul ca în imaginea de mai jos:
Pentru a nu intra într-un loop continuu și pentru a închide conexiunea cu serverul a fost nevoie să setez un răspuns pentru browser cu HTTP Code 200 (Successful):
Pană aici e partea de afișare a paginii web în momentul în care se scanează codul QR, adică partea cu verde din flow-ul prezentat la începutul articolului.
Pentru a primi o notificare pe telefon când se accesează URL-ul a fost nevoie să creez un webhook în Home Assistant. Am aflat că acestea nu se pot accesa direct din browser și e nevoie de un fel de curl. Acesta este motivul pentru care am folosit Node Red, pentru a putea face un POST request către URL-ul Webhook-ului.
Acesta se creează din meniul de automatizări din Home Assistant și arată astfel:
Aceasta a fost bucata ce ține de Home Assistant și de Node Red, iar pentru generarea QR code-ului ca să accesez URL-ul am folosit un tool online care se găseste aici: https://www.qr-code-generator.com
Pentru a putea avea o pagină web funcțională care să arate decent am folosit ChatGPT să generez codul din spate.
Ulterior mi-a venit ideea ca la finalul paginii să adaug și un buton care să salveze în telefon datele mele de contact pentru a putea primi rezervări direct, fără intermedierea altor platforme de închiriere. Salvarea datelor de contact funcționează pe orice telefon, indiferent dacă este Android sau iPhone.
Acum totul arată ca mai jos, sper să dea și rezultate.