Centralka Xiaomi Getaway stanowi u mnie jeden z ważniejszych elementów sytemu. Podłączyłem pod nią masę czujników i przełączników. Za jej pomocą monitoruje temperaturę i wilgotność w pomieszczeniach, steruję oświetleniem, uruchamiam bojler itp. Posiada również funkcję radia, którego słucham do śniadania. Domyślnie obsługuje tylko kilka chińskich stacji, ale po zmianie DNS można już znaleźć np. Trójkę, Zet czy RMF. Domoticz nie obsługuje jednak wbudowanego w centralkę radia. Jednak na forum Domoticza znalazłem na to sposób.
Na początek dodajemy polskie stacje do listy. W sieci jest dużo poradników jak to zrobić. Najprostszy moim zdaniem sposób wygląda jak poniżej.
- Wchodzimy na stronę http://ximiraga.ru/?chlang=en#install i zapamiętujemy DNS: 82.146.38.202
- Dowolnym programem na Andrioda np. DNS Changer zmieniamy DNS w telefonie
- Uruchamiamy Mi Home i przechodzimy do radia
- Aplikacja powinna sama pobrać całą masę dodatkowych stacji.
- Znajdujemy interesującą nas rozgłośnie i dodajemy do ulubionych i gotowe. Trzeba się trochę naszukać ponieważ nie działa filtrowanie stacji. Po tej operacji można ponownie zmienić DNS na preferowane.
Ja sprawę wygodnego sterowania rozwiązałem przy pomocy przycisku Xiaomi Wireless Switch. Umieściłem włącznik na ścianie. Naciśnięcie włącza mi domyślne radio, drugie wyłącza. Ale do starowania z Domoticza jeszcze daleka droga. Na forum znalazłem jednak skrypt dzVents, który robi takie czary.
W pierwszej kolejności znajdujemy Ip i token centrali. Na początek wersja trudniejsza. Instalujemy pakiet php-miio.
sudo apt update sudo apt upgrade sudo apt install php7.0 git clone https://github.com/skysilver-lab/php-miio.git php-miio
Przechodzimy do katalogu php-miio i szukamy podłączonych urządzeń.
cd /home/pi/php-miio/ php miio-cli.php --discover all
Niestety u mnie nie zadziałało. Może u innych będzie ok, więc opisuje sposób.
Po wielu próbach olśniło mnie i zajrzałem do aplikacji MiHome. W zakładce Hub Info, pomiędzy krzaczkami znajdujemy nasz token i Ip. Jeżeli nie wyświetli się wszystko naciskamy prawy przycisk na dole.
Teraz musimy utworzyć przełącznik, który sczyta ID radia i oczywiście przełącznik do wyboru i uruchomienia radia. Proponuje pozostawić domyślne nazwy ze skryptu aby uniknąć literówek. Proponuje tworzyć skrypt w Zdarzeniach bezpośrednio w Domoticzu.
Poniżej kod.
return { on = { --timer = {'every minute'}, devices = {'miGateway FM', 'miGateway FM - Source'} }, logging = { level = domoticz.LOG_ERROR }, execute = function(dz, item) local Path = "/home/pi/php-miio/" -- php-miio path local IP = 'xxxxxxxxxxxx' -- Xiaomi Gateway IP local Token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -- Xiaomi Gateway Token local FM = dz.devices('miGateway FM') local Source = dz.devices('miGateway FM - Source') -- Channel ID, Channel Name ch1ID, ch1Name = '527782024', 'Trojka' ch2ID, ch2Name = '527782027', 'Zet' ch3ID, ch3Name = '527782029', 'Eska' ch4ID, ch4Name = '527782034', 'Złote przeboje' ch5ID, ch5Name = '527782069', 'RMF Maxxx' chID = {} chID[#chID+1] = {ch1ID, ch1Name} chID[#chID+1] = {ch2ID, ch2Name} chID[#chID+1] = {ch3ID, ch3Name} chID[#chID+1] = {ch4ID, ch4Name} chID[#chID+1] = {ch5ID, ch5Name} function SendCommand() cmd = "cd "..Path.." && php miio-cli.php --ip "..IP.." --token "..Token.." --sendcmd '{\"id\":1,\"method\":\""..method.."\",\"params\":"..param.."}'" end if (item.isDevice) then if (item.name == 'miGateway FM') then if (item.levelName == 'Get Channel ID') then method = "get_prop_fm" param = "[]" SendCommand() local h = io.popen(cmd) local r = h:read("*a") h:close() _, _, num1, num2, num3, num4, channel = string.find(r, "(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]") print('Channel ID = '..channel) item.switchOff().afterSec(1).silent() else method = "play_fm" if (item.levelName == 'On') then param = "[\"on\"]" elseif (item.levelName == 'Off') then param = "[\"off\"]" Source.switchOff().checkFirst().silent() end SendCommand() dz.utils.osExecute('('..cmd..' > /dev/null)&') end end if (item.name == 'miGateway FM - Source') then if (item.state == 'Off') then method = "play_fm" param = "[\"off\"]" dz.devices('miGateway FM').switchOff().silent() else for i in pairs(chID) do if (item.levelName == chID[i][2]) then method = "play_specify_fm" param = "["..chID[i][1].."]" if (FM.levelName ~= 'On') then FM.switchSelector(30).silent() end end end end SendCommand() dz.utils.osExecute('('..cmd..' > /dev/null)&') end end if (item.isTimer) then method = "get_prop_fm" param = "[]" SendCommand() local h = io.popen(cmd) local r = h:read("*a") h:close() if (string.find(r, '"pause"')) then Source.switchOff().checkFirst().silent() FM.switchOff().checkFirst().silent() end if (string.find(r, '"run"')) then _, _, num1, num2, num3, num4, channel = string.find(r, "(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]") if (channel == ch1ID and Source.levelName ~= ch1Name) then Source.switchSelector(10).silent() elseif (channel == ch2ID and Source.levelName ~= ch2Name) then Source.switchSelector(20).silent() elseif (channel == ch3ID and Source.levelName ~= ch3Name) then Source.switchSelector(30).silent() elseif (channel == ch4ID and Source.levelName ~= ch4Name) then Source.switchSelector(40).silent() elseif (channel == ch5ID and Source.levelName ~= ch5Name) then Source.switchSelector(50).silent() elseif (channel ~= ch1ID) and (channel ~= ch2ID) and (channel ~= ch3ID) and (channel ~= ch4ID) and (channel ~= ch5ID) then if (Source.levelName ~= 'Unknown') then Source.switchSelector(60).silent() end end if (FM.levelName ~= 'On') then FM.switchSelector(30).silent() end end end end }
Zmieniamy dane w poniższych liniach na własne.
local Path = "/home/pi/php-miio/" -- php-miio path local IP = 'xxxxxxxxxxxx' -- Xiaomi Gateway Ip local Token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -- Xiaomi Gateway Token
Następnie tworzymy 2 zwykłe przełączniki.
Teraz magia. Uruchamiamy radio np. Trójkę poprzez MiHome. W trakcie odtwarzania naciskamy przycisk Get Channel ID na przełączniku miGateway FM. W logach zobaczymy
Aktualizujemy skrypt wpisując sczytany channel id i nazwę stacji.
-- Channel ID, Channel Name ch1ID, ch1Name = '527782241', 'Trojka' ch2ID, ch2Name = '527782027', 'Zet' ch3ID, ch3Name = '527782029', 'Eska' ch4ID, ch4Name = '527782034', 'Złote przeboje' ch5ID, ch5Name = '527782069', 'RMF Maxxx'
I cała filozofia. Teraz na pulpicie mam
U mnie nie działa … po wciśnięciu ” Get Chanell ID” w logach mam tylko :
2018-05-21 15:04:30.561 User: Admin initiated a switch command (80/miGateway FM/Set Level)
2018-05-21 15:04:30.566 (Virtual_sensors) Light/Switch (miGateway FM
Wygląda jak by skrypt dzVentz się nie wykonywał 😦
PolubieniePolubienie
Okazało się , że w ustawieniach domoticz miałem wyłączoną opcję dzVents (2.2.0)
Teraz w logach mam tylko:
2018-05-21 15:15:06.279 User: Admin initiated a switch command (80/miGateway FM/Set Level)
2018-05-21 15:15:06.404 dzVents: Info: Handling events for: „miGateway FM”, value: „Get Channel ID”
2018-05-21 15:15:06.412 (Virtual_sensors) Light/Switch (miGateway FM)
PolubieniePolubienie
Musisz przejść na wersje beta domoticza
PolubieniePolubienie
Może wiesz jak regulować głośność
PolubieniePolubienie
U mnie w logach pokazuje taki błąd, skrypt kopiowany ze strony.
2018-05-24 12:05:25.085 dzVents: Error (2.4.1): An error occured when calling event handler XiaomiFM
2018-05-24 12:05:25.085 dzVents: Error (2.4.1): …/domoticz/scripts/dzVents/generated_scripts/XiaomiFM.lua:32: attempt to concatenate global ‚param’ (a nil value)
PolubieniePolubienie
Jeżeli ktoś potrzebuje mogę przesłać swój skrypt. Może coś źle sformatowało na blogu. Czasami ginie jakiś nawias lub kropka.
PolubieniePolubienie
To ja poproszę skrypt na email.
PolubieniePolubienie
To ja poproszę adres 🙂
PolubieniePolubienie
olekkolonko@gmail.com
PolubieniePolubienie
Czy sposób ze zmianą DNS (DNS Changer – Android) powinien dalej zadziałać? Zmieniam na: 82.146.38.202, przechodzę do ustawień radia w Mi Home, jednak nie pokazuje mi większej liczby stacji. Any updates?
PolubieniePolubienie
Przed chwilą sprawdziłem na nowej bramce. Działa bez problemu. Po zmianie DNS, wchodzimy do MiHome i czekamy ( ok. minutę ) aby odświeżyła się lista stacji.
PolubieniePolubienie
Witam, po wpisaniu komendy „sudo apt install php7.0” mam stronę „Apache2 Debian Default Page”
to jest pierwsza strona po zainstalowaniu Apache. Jak się tego pozbyć!!!
PolubieniePolubienie
Udało mi się odzyskać stronę Domoticz’a ale dopiero po odinstalowaniu PHP7.0. Więc ze sterowania radyjkiem Xiaomi nici 😦
PolubieniePolubienie
Mi działa (chociaż miałem pewne przygody), dzięki że Ci się chciało to opisać! 🙂
PolubieniePolubienie
Ma ktoś pomysł jak sterować głośnością ?
PolubieniePolubienie
Jak mam dodać nowy przełącznik? Widzę tylko domyślnie zdefiniowane przez xiaomi.
PolubieniePolubienie
Dzięki za super poradnik. U mnie radio Xiaomi działa. Dobra robota!
@Piotr – Dummy devices -> Create Virtual Sensors -> Selector Switch (nazwy dokładnie takie jak w poradniku.
PolubieniePolubienie
Witam,
Dziękuje za instrukcję, sposób oczywiście działa super :))
mam tylko pytanie jak już było wyżej o możliwość zmiany głośności radia.
PolubieniePolubienie