Dodatkowo zyskujecie pełną automatyzację np.: wracając wieczorem do domu zapalą się światła albo otwierając bramę zapalicie światła na podjeździe i w przedpokoju...
Jest to rozwiązanie przejściowe - czekamy na natywne wsparcie dla Homekita przez Suple.
Mamy coś "na dziś" - rozwiązanie dla niecierpliwych.
Z pomocą przyjdzie oczywiście @fracz i jego skrypty. Ale nie tylko skrypty.
Co potrzebujecie:
1. Własny serwer Supla oraz Supla-Script - wersje docker (certyfikaty nie są obowiązkowe),
2. Homebridge
3. Plugin homebridge-http-webhooks,
4. SimulateEvents do pokazywania stanów poszczególnych urządzeń Supla - dzięki @fracz
Instalacja:
1. Instalujecie Supla i Supla-Script w wersji dockerowej - jak to zrobić czytajcie na forum viewtopic.php?f=40&t=2695 albo lepiej viewtopic.php?f=40&t=2675
Dodajecie oczywiście urządzenia do waszego serwera Supla i sprawdzacie czy działa(ją)
2. Instalujecie Homebridge. Instalacja jest dokładnie opisana w podanym poniżej linku. Na czystym raspibianie nie napotkałem chyba nigdy problemów... tutaj stosowny filmik https://www.youtube.com/watch?v=g4Smfn1Q5Qc
3. Instalujecie plugin, zgodnie z instrukcją instalacji podanej na stronie pluginu. Poniżej wkleiłem też cały moj config.json - jeśli go przekleicie do siebie, na pewno Wam zadziała. W pliku config.json zauważycie np. port serwera/klienta webhookowego, który jest integralną częścią pluginu homebridge-http-webhooks. "webhook_port":"51827". Dodatkowo zwróćcie uwagę na "id":dowolna_nazwa_waszego_virtualnego_urzadzenia_ktore_laczycie_z_Supla" (u mnie np.: "garagedooropener1") - będziecie z tego korzystać przy konfiguracji.
Po skonfigurowaniu "Homebridge" - iPhonik w łapki, i w aplikacji "Dom" dodajecie "Homebridge" do iPhona.
To pierwszy etap. Jeśli przez niego właściwie przebrnęliście, to macie na swoim iPhonie, w aplikacji Dom: 8 urządzeń i jeden węzeł "Homebridge" (o ile macie mój config.json). Urządzenia oczywiście nie robią nic... jeszcze
Za to w pełni działają Supla i Supla-Script.
Idziemy dalej:
Etap drugi
Konfiguracja Supla-Script
Tworzymy nową scenę. Np. "Światło Taras ON" do zapalania świateł na tarasie. Robimy to tak jak opisane w wątku o supla-scripts. Zaznaczamy (to ważne) "scena dostępna pod publicznym adresem". Dodatkowo w polu "Odpowiedź" w nawiasach [[kwadratowych]] wpisujemy adres webhooka, jaki nam zmieni stan urządzenia w aplikacji na iOS. U mnie, w przypadku jednej z lamp, w pliku z config.json, jest to adres: [[http://test:test@adres-ip-mojego-raspbe ... state=true]]. ((((Ostatecznie zrezygnowałem z test:test@ - bo i tak wszystko uruchamiany w naszej sieci LAN a w dodatku wysyłanie loginu i hasła w url'u jest... głupie. Wywaliłem też "http_auth_user": "test", "http_auth_pass": "test", z pliku config.json))))
Teraz przechodzimy do naszego config.json. Odszukujemy sekcję "lights" i w linii zaczynającej się od "on_url": podmieniamy mój adres na ten nowowygenerowany w supla-scripts, adres publiczny.
Potem robimy kolejną scenę: "Światło Taras OFF" i, jej publiczny link, wklejamy do linii "off_url": zamiast mojego adresu. W polu "Odpowiedź" wpisujemy [[http://test:test@adres-ip-mojego-raspbe ... tate=false]]
Pozostałe urządzenia Supla dodajemy podobnie ==>> Czyli najpierw scena w Sulpa-Scripts, ==>> potem config.json.
Mamy do dyspozycji sporo typów urządzeń. Dopasowanie ich do naszych potrzeb nie powinno nastręczać problemów (lights, switch, pushbutton, outlet... garage).
Bramę lub garaż proponuję męczyć dopiero po poprawnym skonfigurowaniu światełek - problemem jest prezentacja ich aktualnego stanu.
Oczywiście nie jest to superobowiązkowe ale bez aktualnego stanu, trudno będzie poproscić Siri, o otwarcie bramy, zanim dojedziemy do domu. Może się okazać, że brama była otwarta i właśnie ją zamknęliśmy...
Z garażem (lub bramą) jest trochę więcej roboty, bo tam musimy (oszukać) ustawić stan bramy, oraz mieć link z Supla-Script, do sterowania bramą.
Postaram się wytłumaczyć.
Problemem jest fakt, że Homekit potrzebuje do prawidłowego sterowania bramą, jej stan obecny i końcowy, oraz info, czy przypadkiem nie ma ona przeszkody. Tu z pomocą przyjdą oczywiście sceny w skryptach.
Robimy scenę "Otwórz bramę". W polu "odpowiedź" musimy podać najpierw "targetstate", potem "obstruction" (składnię linku sprawdzcie na stronie pluginu). Jeśli nie uruchamiamy SimulateEvents to musimy jeszcze w tym samym miejscu podać "currentstate". U mnie jest link: [[http://192.168.0.31:51827/?accessoryId= ... oorstate=0]],[[http://192.168.0.31:51827/?accessoryId= ... detected=0]] - czyli bez currentstate.
W skrócie - dwa linki, gdy mamy skonfigurowane SimulateEvents (lub trzy gdy nie mamy... ja mam, dałem dwa linki) z: targetstate=1,obstruction=0-(i_ewentualnie currentstate=1 dla wersji bez SE). W kolejnej scenie "Zamknij bramę" odpowiedź ustawiamy na przeciwną (targetstate=0,obstruction=0-(i_ewentualnie currentstate=0)
Jeśli wszystko Wam działa to potraficie włączać oświetlenie tarasu i je wyłączać. Niecierpliwi otwierają garaż Niestety nie możecie sprawdzić czy światła faktycznie świecą czy są zgaszone.
Do tego potrzeba nam jeszcze jednej rzeczy - SimulateEvents
SimulateEvents sprawdza stan urządzenia w Waszym lokalnym serwerze Supla
Na szczęście @fracz to opisał więc dam link viewtopic.php?f=24&t=3791 .
Zauważcie. Ja sterując bramą daję dwa linki. Jeden z targetstate, drugi obstruction. Trzeci załatwia SimulateEvents (currentstate), powtarzajac wcześniej targetstate i obstruct. U mnie działa ze to 100% skutecznością.
Na samym dole posta jest mój config events.yml.
W Supli i homekicie mamy też sensory (np. humidity, temperature, smoke, motion itd) - sensory konfigurujemy nieco inaczej, bo potrzeba znać ich stan. Do tego także wykorzystamy Supla-Scripts i SimulateEvents ale dopiero jak @fracz doda ten ficzer
Postaram się to opisać jak SimulateEvents będzie gotowe na czujniki.
Tymczasem walczcie i dajcie znać jak idzie
W dniu pisania postu, u mnie, działa to wszystko już na tyle długo, że przyjmuję, iż jest stabilne
************
************
************
Linki:
Homebridge - strona programu https://github.com/nfarina/homebridge
Homebrigge - instalacja na Raspberry Pi https://github.com/nfarina/homebridge/ ... pberry-Pi
plugin Homebridge-http-webhooks - https://github.com/benzman81/homebridge-http-webhooks
SimulateEvents - link viewtopic.php?f=24&t=3791
************
************
************
Mój config.json:
Code: Select all
{
"bridge": {
"name": "Homebridge",
"username": "AC:27:93:FE:CF:39",
"port": 57117,
"pin": "031-45-154"
},
"description": "This is a webhook for Supla",
"accessories": [],
"platforms": [
{
"platform": "HttpWebHooks",
"webhook_port": "51827",
"cache_directory": "/home/pi/.node-persist/storage",
"http_auth_user": "test",
"http_auth_pass": "test",
"sensors":
[],
"switches":
[],
"lights": [
{
"id": "light1",
"name": "Oswietlenie Taras",
"on_url": "http://192.168.200.212/api/scenes/public/ab7a0733-fc37-4736-a67d-3ffa58a869ba",
"on_method": "GET",
"off_url": "http://192.168.200.212/api/scenes/public/c6c464ba-7816-44a3-9bef-06f1f5382939",
"off_method": "GET"
}
],
"pushbuttons":
[
{
"id": "pushbutton1",
"name": "Main Door",
"push_url": "https://192.168.200.212/api/scenes/public/a2b34e70-6cdb-4b54-a214-30f8e223eef6",
"push_method": "GET"
},
{
"id": "pushbutton2",
"name": "Second Door",
"push_url": "https://192.168.200.212/api/scenes/public/d5fb6792-ade7-4916-8986-968c61db9e13",
"push_method": "GET"
}
,
{
"id": "pushbutton2",
"name": "Accesory Door",
"push_url": "https://192.168.200.212/api/scenes/public/6cdac503-76d5-485b-928b-85b610a2d7d1",
"push_method": "GET"
}
],
"garagedooropeners":
[
{
"id": "garagedooropener1",
"name": "Gate",
"open_url" : "http://192.168.200.212/api/scenes/public/29ce949f--43d5-9976-c26ae699589a",
"open_method" : "GET",
"close_url" : "http://192.168.200.212/api/scenes/public/29ce949f--43d5-9976-c26ae699589a",
"close_method" : "GET"
},
{
"id": "garagedooropener2",
"name": "W Garage",
"open_url" : "https://192.168.200.212/api/scenes/public/a2b34e70--4b54-a214-30f8e223eef6",
"open_method" : "GET",
"close_url" : "https://192.168.200.212/api/scenes/public/a2b34e70--4b54-a214-30f8e223eef6",
"close_method" : "GET"
},
{
"id": "garagedooropener3",
"name": "P Garage",
"open_url" : "https://192.168.200.212/api/scenes/public/d5fb6792-ade7--8986-968c61db9e13",
"open_method" : "GET",
"close_url" : "https://192.168.200.212/api/scenes/public/d5fb6792-ade7--8986-968c61db9e13",
"close_method" : "GET"
},
{
"id": "garagedooropener4",
"name": "Slow Gate",
"open_url" : "https://192.168.200.212/api/scenes/public/6cdac503-76d5--928b-85b610a2d7d1",
"open_method" : "GET",
"close_url" : "https://192.168.200.212/api/scenes/public/6cdac503-76d5--928b-85b610a2d7d1",
"close_method" : "GET"
}
]
}]
}
Mój events.yml (Uwaga. Mam dwa serwery webhookowe dlatego webhooks są podwójne - na port 51827 oraz 61827):
Code: Select all
events:
- condition: state(1).on
time_conditions: "* * * * *"
webhooks: ["http://192.168.0.31:51827/?accessoryId=light1&state=true","http://192.168.0.31:61827/?accessoryId=light1&state=true"]
- condition: not state(1).on
time_conditions: "* * * * *"
webhooks: ["http://192.168.0.31:51827/?accessoryId=light1&state=false","http://192.168.0.31:61827/?accessoryId=light1&state=false"]
- condition: state(11).hi
webhooks: ["http://192.168.0.31:51827/?accessoryId=garagedooropener1&targetdoorstate=1","http://192.168.0.31:51827/?accessoryId=garagedooropener1&obstructiondetected=0","http://192.168.0.31:51827/?accessoryId=garagedooropener1¤tdoorstate=1","http://192.168.0.31:61827/?accessoryId=garagedooropener1&targetdoorstate=1","http://192.168.0.31:61827/?accessoryId=garagedooropener1&obstructiondetected=0","http://192.168.0.31:61827/?accessoryId=garagedooropener1¤tdoorstate=1"]
- condition: not state(11).hi
webhooks: ["http://192.168.0.31:51827/?accessoryId=garagedooropener1&targetdoorstate=0","http://192.168.0.31:51827/?accessoryId=garagedooropener1&obstructiondetected=0","http://192.168.0.31:51827/?accessoryId=garagedooropener1¤tdoorstate=0","http://192.168.0.31:61827/?accessoryId=garagedooropener1&targetdoorstate=0","http://192.168.0.31:61827/?accessoryId=garagedooropener1&obstructiondetected=0","http://192.168.0.31:61827/?accessoryId=garagedooropener1¤tdoorstate=0"]
- condition: state(14).hi
webhooks: ["http://192.168.0.31:51827/?accessoryId=garagedooropener2&targetdoorstate=1","http://192.168.0.31:51827/?accessoryId=garagedooropener2&obstructiondetected=0","http://192.168.0.31:51827/?accessoryId=garagedooropener2¤tdoorstate=1","http://192.168.0.31:61827/?accessoryId=garagedooropener2&targetdoorstate=1","http://192.168.0.31:61827/?accessoryId=garagedooropener2&obstructiondetected=0","http://192.168.0.31:61827/?accessoryId=garagedooropener2¤tdoorstate=1"]
- condition: not state(14).hi
webhooks: ["http://192.168.0.31:51827/?accessoryId=garagedooropener2&targetdoorstate=0","http://192.168.0.31:51827/?accessoryId=garagedooropener2&obstructiondetected=0","http://192.168.0.31:51827/?accessoryId=garagedooropener2¤tdoorstate=0","http://192.168.0.31:61827/?accessoryId=garagedooropener2&targetdoorstate=0","http://192.168.0.31:61827/?accessoryId=garagedooropener2&obstructiondetected=0","http://192.168.0.31:61827/?accessoryId=garagedooropener2¤tdoorstate=0"]
- condition: state(17).hi
webhooks: ["http://192.168.0.31:51827/?accessoryId=garagedooropener3&targetdoorstate=1","http://192.168.0.31:51827/?accessoryId=garagedooropener3&obstructiondetected=0","http://192.168.0.31:51827/?accessoryId=garagedooropener3¤tdoorstate=1","http://192.168.0.31:61827/?accessoryId=garagedooropener3&targetdoorstate=1","http://192.168.0.31:61827/?accessoryId=garagedooropener3&obstructiondetected=0","http://192.168.0.31:61827/?accessoryId=garagedooropener3¤tdoorstate=1"]
- condition: not state(17).hi
webhooks: ["http://192.168.0.31:51827/?accessoryId=garagedooropener3&targetdoorstate=0","http://192.168.0.31:51827/?accessoryId=garagedooropener3&obstructiondetected=0","http://192.168.0.31:51827/?accessoryId=garagedooropener3¤tdoorstate=0","http://192.168.0.31:61827/?accessoryId=garagedooropener3&targetdoorstate=0","http://192.168.0.31:61827/?accessoryId=garagedooropener3&obstructiondetected=0","http://192.168.0.31:61827/?accessoryId=garagedooropener3¤tdoorstate=0"]