W dzisiejszym wpisie zaprezentuje w jaki sposób można pobierać informacje z zewnątrz wprost do wirtualnego urządzenia w Domoticz. Całość wykonamy z użyciem wbudowanego modułu skryptów dzVents. W związku z obecna sytuacja na świecie wykorzystamy dane na temat koronawirusa.
Jako źródło danych wykorzystamy projekt:
https://github.com/novelcovid/api
Aby wyświetlić aktualne informacje na temat Polski wystarczy odwiedzić adres: https://corona.lmao.ninja/countries/poland
W przeglądarce otrzymujemy następującą odpowiedź:
{"country":"Poland","countryInfo":{"_id":616,"iso2":"PL","iso3":"POL","lat":52,"long":20,"flag":"https://raw.githubusercontent.com/NovelCOVID/API/master/assets/flags/pl.png"},"cases":2554,"todayCases":0,"deaths":43,"todayDeaths":0,"recovered":56,"active":2455,"critical":50,"casesPerOneMillion":67,"deathsPerOneMillion":1,"updated":1585805640443}
Interesujące nas pola to „active” oraz „todayCases”, przejdźmy do Domoticza.
W zakładce sprzęt tworzymy nowe urządzenie Dummy. Z listy rozwijanej wybieramy „Custom Sensor”, jako oś podajemy np. „Przypadki”. Tworzymy w ten sposób dwa urządzenia:
- Pierwsze w którym widoczna będzie łączna liczba zakażeń.
- Drugie w którym będziemy mogli zaprezentować dzienny przyrost nowych przypadków.
Po dodaniu urządzeń czas na dane. Przechodzimy do zdarzeń, tworzymy nowe dzVents, timer.
Możemy podejrzeć jakie możliwości wyzwalania skryptu daje parametr czasu:
'every minute', -- causes the script to be called every minute
'every other minute', -- minutes: xx:00, xx:02, xx:04, ..., xx:58
'every <xx> minutes', -- starting from xx:00 triggers every xx minutes
-- (0 > xx < 60)
'every hour', -- 00:00, 01:00, ..., 23:00 (24x per 24hrs)
'every other hour', -- 00:00, 02:00, ..., 22:00 (12x per 24hrs)
'every <xx> hours', -- starting from 00:00, triggers every xx
-- hours (0 > xx < 24)
'at 13:45', -- specific time
'at *:45', -- every 45th minute in the hour
'at 15:*', -- every minute between 15:00 and 16:00
'at 12:45-21:15', -- between 12:45 and 21:15. You cannot use '*'!
'at 19:30-08:20', -- between 19:30 and 8:20 then next day
'at 13:45 on mon,tue', -- at 13:45 only on Monday en Tuesday (english)
'every hour on sat', -- you guessed it correctly
'at sunset', -- uses sunset/sunrise info from Domoticz
'at sunrise',
'at sunset on sat,sun',
'xx minutes before sunset',
'xx minutes after sunset',
'xx minutes before sunrise',
'xx minutes after sunrise' -- guess ;-)
'between aa and bb' -- aa/bb can be a time stamp like 15:44
-- aa/bb can be sunrise/sunset
-- aa/bb can be 'xx minutes before/after
-- sunrise/sunset'
'at nighttime', -- between sunset and sunrise
'at daytime', -- between sunrise and sunset
'at civildaytime', -- between civil twilight start and civil twilight end
'at civilnighttime', -- between civil twilight end and civil twilight start
'at daytime on mon,tue', -- between sunrise and sunset
-- only on monday and tuesday
Początkowo, aby sprawdzić działanie skryptu ustawmy wywoływanie na czas 1 minuty.
Kod aktualizujący urządzenie dummy z liczbą przypadków w Polsce będzie wyglądał następująco:
return {
on = {
timer = { 'every 1 minutes' },
httpResponses = { 'cases' }
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'https://corona.lmao.ninja/countries/poland',
method = 'GET',
callback = 'cases'
})
end
if (item.isHTTPResponse and item.ok) then
domoticz.devices('Koronawirus w Polsce').updateCustomSensor(item.json['cases'])
end
end
}
’Koronawirus w Polsce’ – zmieniamy na nazwę urządzenia dummy, które dodaliśmy wcześniej w Domoticz.
Po zapisaniu, przechodzimy na zakładkę urządzeń użytkowych:
Działa! To samo wykonujemy dla drugiego urządzenia, zmieniając pole callback = ’cases’ na ’todayCases’, oraz nazwę Dummy device 'Koronawirus w Polsce’ na nazwę którą podaliśmy tworząc drugie urządzenie do przypadków dziennych.
Zgromadzone dane możemy zaprezentować np przy pomocy Imperihome, lub np na wyświetlaczu opartym o ESPEasy:
Nowy link https://corona.lmao.ninja/v3/covid-19/countries/poland