На работу не влияет, конечно, но неаккуратно выглядит.
Где посмотреть как это исправить? Если вообще возможно.
На работу не влияет, конечно, но неаккуратно выглядит.
Где посмотреть как это исправить? Если вообще возможно.
Добрый день.
Это у вас виртуальное устройство?
Если так, то не использовать тип “atmospheric_pressure”, а использовать “value” и задать свою единицу измерения, например, units: "мбар",
И тогда оно будет короче.
К сожалению, не подскажу где именно можно единицы измерения подправить для самого типа “atmospheric_pressure”.
Да. Спасибо за подсказку. Ваше решение помогло.
Есть еще вопрос. Сервер погоды отдает часть информации в текстовом, а часть в числовом выражении, которое для удобства преобразуется в текстовое. Каким способом это можно запихать в виджет?
{…“main”:“Clouds”,“description”:“пасмурно”,“icon”:“04d”} … “wind”:{“speed”:1.63,“deg”:146,“gust”:2.83}…
Например первое выделенное уже является текстом, а второе обрабатывается в удобную для восприятия форму, т.к. это числовое представление направления ветра.
var wind_direction = "Измеряется"
var wind_deg = Number(weather_data.wind.deg);
if ((wind_deg >= 350) && (wind_deg <= 10)) {
var wind_direction = "Северный"
}
if ((wind_deg > 10) && (wind_deg < 80)) {
var wind_direction = "Северовосточный"
}
if ((wind_deg >= 80) && (wind_deg <= 100)) {
var wind_direction = "Восточный"
}
if ((wind_deg > 100) && (wind_deg < 170)) {
var wind_direction = "Юговосточный"
}
if ((wind_deg >= 170) && (wind_deg <= 190)) {
var wind_direction = "Южный"
}
if ((wind_deg > 190) && (wind_deg < 260)) {
var wind_direction = "Югозападный"
}
if ((wind_deg >= 260) && (wind_deg <= 280)) {
var wind_direction = "Западный"
}
if ((wind_deg > 280) && (wind_deg < 350)) {
var wind_direction = "Северозападный"
}
//
log("Направление ветра в числовом виде: {}".format(weather_data.wind.deg));
log("Направление ветра в текстовом виде: {}".format(wind_direction));
2023-10-27 16:52:30defineRule: weather_call
2023-10-27 16:52:30defineRule: parse_weather
2023-10-27 16:53:30Request sent
2023-10-27 16:53:35Направление ветра в числовом виде: 104
2023-10-27 16:53:35Направление ветра в текстовом виде: Юговосточный
В отладке вывод верный. А в виджет не впихуется
wind_direction: {
title: "Направление ветра",
type: "text",
value: wind_direction,
order: 5,
},
Есть же общеупотребимые сокращения: СЗ, ЮВ…
Конечно же есть, но к сожалению это не отменяет необходимость преобразовывать числовое представление в текстовую строку и затем пытаться вывести эту строку в виджет.
Немного некорректно реализовано.
Вы создали виртуальное устройство и хотите видеть в нем направление ветра. Тогда вам нужно переменную, в которую кладете текстовое значение ветра, присвоить каналу виртуального устройства.
Например:
dev['my-virtual-device/wind_direction'] = wind_direction
“my-virtual-device” - наименование виртуального устрпойства.
Это я понимаю, что некорректно. Просто приходится черпать знания не из своей головы, а с форума из разрозненных источников ))) Сейчас реализовано так. Пункт в описании виртуального устройства:
defineVirtualDevice('weather', {
title: 'Погода в Москве',
cells: {
...
wind_dir: {
title: "Направление ветра",
type: "text",
value: " ",
order: 5,
},
...
Присвоение переменной wind_deg нужных данных из json-файла, полученного с сервера OpenWeatherMap:
then: function() {
var weather_data = readConfig("/usr/weather/data.json");
var wind_deg = Number(weather_data.wind.deg);
Блок сравнения значения с заданными критериями и присвоение переменной wind_direction строкового значения.
if ((wind_deg >= 350) && (wind_deg <= 10)) {
var wind_direction = "Северный"
...
if ((wind_deg > 280) && (wind_deg < 350)) {
var wind_direction = "Северозападный"
}
И тут уже, как вы посоветовали. Если честно, еще вчера “дотумкал” и так действительно работает.
dev["weather/wind_dir"] = wind_direction;
А не поможете справиться с еще одной проблемкой? Дело в следующем, файл с сайта поступает и сохраняется в таком формате:
{"coord":{"lon":37.6067,"lat":55.7617},"weather":[{"id":111,"main":"Snow","description":"небольшой снег","icon":"13n"}],"base":"stations","main":{"temp":0.11,"feels_like":-4.71,"temp_min":-0.34,"temp_max":0.25,"pressure":993,"humidity":97,"sea_level":993,"grnd_level":973},"visibility":8657,"wind":{"speed":4.88,"deg":21,"gust":10.34},"snow":{"1h":0.49},"clouds":{"all":100},"dt":1698517014,"sys":{"type":2,"id":22222,"country":"RU","sunrise":1698467162,"sunset":1698501632},"timezone":10800,"id":333333,"name":"Москва","cod":200}
затем он парсится, если я правильно понимаю - в объект?
var weather_data = readConfig("/usr/weather/data.json");
Дальше мы сразу присваиваем значения соответствующим пунктам вирт. устройства
var wind_deg = Number(weather_data.wind.deg);
dev["weather/temperature"] = Number(weather_data.main.temp);
dev["weather/temperature_min"] = Number(weather_data.main.temp_min);
dev["weather/temperature_max"] = Number(weather_data.main.temp_max);
dev["weather/humidity"] = Number(weather_data.main.humidity);
dev["weather/wind"] = Number(weather_data.wind.speed);
dev["weather/wind_gust"] = Number(weather_data.wind.gust);
dev["weather/pressure"] = Number(weather_data.main.grnd_level);
А как “выдернуть” значения, которые в дополнительных квадратных скобках?
"weather":[{"id":111,"main":"Snow","description":"небольшой снег","icon":"13n"}],
weather_data.weather.id
напрмер
log("weather_data: {}", weather_data.weather.id);
2023-10-30 14:56:17weather_data: undefined
Как грится: “И чо делать?”
В вашем случае id считывается следующим образом:
log("weather_data_id: {}", weather_data.weather[0].id);
Ура, работает ))) Можете пояснить, это как-то связано с тем, что это массив внутри объекта, или неправильно истолковываю?
Да. Скажем так: массив внутри словаря. Как я это вижу.
Большое спасибо.
Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.