Зарегистрируйтесь на OpenWeatherMap, получите свой appid, создайте новое правило weather.js, скопируйте туда код, внесите свои изменения в части запроса.
Скрипт, позволяющий делать запросы к API OpenWeatherMap.org, парсить их и выводить в virtualDevice.
defineVirtualDevice("weather", { //Виртуальное устройство для записи данных и отправки их в MQTT
title: "Погода Кингисепп",
cells: {
temperature: {
type: "temperature",
value: -12.0,
},
humidity: {
type: "rel_humidity",
value: 75,
},
wind: {
type: "wind_speed",
value: 3,
}
}
});
defineRule("weather_call", { // регулярный запрос к серверу погоды
when: cron("@every 30m"),
then: function() {
runShellCommand("wget -qO /usr/weather/data.json 'https://api.openweathermap.org/data/2.5/weather?id=548602&appid=here_needed_your_api_key&units=metric'");
startTimer("wait_weather", 5 * 1000); // запустили таймер на задержку для получения данных погоды
// log("Request sent");
}
});
defineRule("parse_weather", { // чтение полученных от сервера данных погоды
when: function() {
return timers.wait_weather.firing;
},
then: function() {
var weather_data = readConfig("/usr/weather/data.json");
dev["weather"]["temperature"] = format(weather_data.main.temp);
dev["weather"]["humidity"] = format(weather_data.main.humidity);
dev["weather"]["wind"] = format(weather_data.wind.speed);
// log("Time: {}".format(weather_data.dt));
// log("Temperature is: {}".format(weather_data.main.temp));
// log("Humidity is: {}".format(weather_data.main.humidity));
// log("Wind speed is: {}".format(weather_data.wind.speed));
}
});
log("Weather script updated!");
Изменения в запрос:
Вместо id=548602 (Кингисепп) подставьте свой код населенного пункта, также вместо id=548602 можно подставить q=Kingisepp,RU или координаты широты и долготы lat=59.37&lon=28.61.
Вместо appid=here_needed_your_api_key подставьте свой appid, который получите при регистрации на OpenWeatherMap.
Результат:
Возможно, если скрипт не создаст файл данных, то перед запуском потребуется создать папку /usr/weater и положить туда файл data.json.
{"coord":{"lon":28.61,"lat":59.37},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"base":"stations","main":{"temp":-12.89,"pressure":1017.54,"humidity":79,"temp_min":-12.89,"temp_max":-12.89,"sea_level":1026.34,"grnd_level":1017.54},"wind":{"speed":2.76,"deg":188.503},"clouds":{"all":80},"dt":1548221415,"sys":{"message":0.0039,"country":"RU","sunrise":1548225311,"sunset":1548252012},"id":548602,"name":"Kingisepp","cod":200}
UPD:Как сделать в сообщении, чтобы длинный код спрятать под спойлер?