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
