Плагин HTTP-Client



  • @gis Добрый день, покажите пожалуйста формулу обработки значения



  • @dev Спасибо, все заработало после того, как удалил и заново создал каналы.



  • Добрый день! пытаюсь получить данные temp из json

    {"observations":[{"stationID":"ISCHEP1","obsTimeUtc":"2019-11-22T14:25:55Z","obsTimeLocal":"2019-11-22 17:25:55","neighborhood":"Schepkinskoe","softwareType":null,"country":"RU","solarRadiation":null,"lon":39.80593491,"realtimeFrequency":null,"epoch":1574432755,"lat":47.34576416,"uv":null,"winddir":102,"humidity":52.0,"qcStatus":-1,"metric":{"temp":-4.9,"heatIndex":-4.9,"dewpt":-13.1,"windChill":-8.3,"windSpeed":7.4,"windGust":9.3,"pressure":1033.86,"precipRate":0.00,"precipTotal":0.25,"elev":24.4}}]}

    но что то не пойму что надо записать в Извлечение данных JSON
    data.observations.metric.temp ошибка



  • observations - это массив
    Попробуйте так: data.observations[0].metric.temp



  • спасибо попробую



  • опрашиваемое устройство присылает ответ в JSON в виде 6 разрядного числа, каждый из разрядов которого может принимать значение 0 или 1. Как грамотно написать запрос для извлечения данных, что бы не отбрасывались первые незначащие нули?
    Т.е , например, плагин читает ответ вида 010000 но в сценарий передает 10000. Куда смотреть?
    UPD: Как вариант можно "выровнять" в самом сценарии,
    типа:

    while (val.length <6 ) vl='0' + val; // добиваем 0-ми  до 6 символов
    

    но это все равно полностью не снимает вопрос...



  • @alesle Добрый день, для начала попробуйте отключить галочку преобразовать в число, если не поможет тогда:

    String(val).padStart(6, '0')  // 010000
    


  • ни то не другое не помогает - из плагина все равно передается число без лидирующих нулей. Впрочем, это легко исправляется в скрипте.



  • @alesle Добрый день, для устройства сделайте тип сенсор аналоговый универсальный



  • @dev
    так и есть , но - не работает...



  • Участник @intrahouse написал в Плагин HTTP-Client:

    Опубликована статья "Парсинг сайта погоды" https://ih-systems.com/ru/weather-parsing/
    ,,,,

    dev 13 мар. 2019 г., 18:52

    Добрый день в Блоге опубликована статья "Как получить информацию о подключенных клиентов с WI-FI роутера" https://ih-systems.com/ru/parsing-podkljuchennyh-klientov-s-wi-fi-routera/

    Можно проверить корректность ссылок?

    "Не найдено....."



  • Господа, имеется ответ от девайса в виде массива JSOn вида:

     "onew_temp": [
        {
          "id": "1",
          "adr_hex": "28BC6B2D09000066",
          "name": "S6",
          "t": "25.31"
        },
        {
          "id": "2",
          "adr_hex": "28AADE403D1401D6",
          "name": "S2",
          "t": "25.06"
        },
    

    Как правильно написать выражение для извлечения данных, что бы оно извлекало t там, где name="S6" ?
    Понятно что,
    data.onew_temp[0].t
    извлечет то что нужно, но дело в том что нет уверенности что эти данные всгда будут на этом месте. А вот "name": "S6" будет всегда.



  • Участник @alesle написал в Плагин HTTP-Client:

    но дело в том что нет уверенности что эти данные всгда будут на этом месте. > А вот "name": "S6" будет всегда.

    Если "name": "S6" будет всегда, то можно так:

    data.onew_temp.filter(item => item.name=="S6")[0].t
    


  • Блин, работает!!!
    Я правда нифига не вкурил как , но - работает!!!
    Буду разбираться..
    Спасибо огромное!



  • @alesle пожалуйста 🙂
    Вот вариант еще короче

    data.onew_temp.find(item => item.name=="S6").t
    

    Современный javascript мощный и гибкий язык, особенно если использовать синтаксис ES6 (или ES2015, что одно и то же) , в данном случае стрелочные функции.
    Магия этих выражений раскрывается в 2 шага

    1. Массивы в JS имеют встроенные методы для поиска по заданному критерию, в частности filter, find

      • find - ищет первый элемент массива, возвращает найденный объект
      • filter - сюрприз 🙂 - фильтрует входной массив и возвращает все найденные элементы (learn.javascript.ru/array-methods)
    2. Методу нужно передать критерий отбора - функцию для обработки элемента массива.

      Если писать, используя синтаксис классических функций, то получится так:

       arr.filter( function (item) {
         return item.name == 'S6';  
      });
      

      Функция вызывается по очереди для каждого элемента массива (item), если возвращает true, то элемент берется в новый массив

      С введением в ES6 стрелочных функций все стало компактнее:

       function (item) {return item.name == 'S6';} 
      

      можно заменить на

       (item)  => item.name == 'S6' 
      

      Что произошло

    • убрали function
    • грубо говоря return заменили на =>
    • если входной аргумент ровно один - то и скобки можно не ставить

    Подробнее https://learn.javascript.ru/arrow-functions
    Получаем:

     arr.filter( item => item.name == 'S6' );
    

    Ну и надо иметь в виду, что возвращает метод массива.
    Если результат - массив, то берем свойство его первого элемента

    data.onew_temp.filter(item => item.name=="S6")[0].t
    

    Если результат - объект, то просто берем свойство t

    data.onew_temp.find(item => item.name=="S6").t
    


  • Спасибо за доходчивое объяснение!



  • Здравствуйте.
    А как действовать, если веб страница скриптами заполняется?
    Выглядит так
    alt text
    а внутри
    Текст ссылки

    Как вытащить, например, напряжение на входе?



  • @Erik а SNMP у него нет?



  • @homa

    В него нужно какую то плату вставить, а я их в продаже не нашел.
    Без платы нет.
    Подключается по USB к компьютеру, и через веб-сервер на этом компьютере можно смотреть и настраивать хоть локально, хоть с другого ПК.



  • @Erik Добрый день, обычно в таком случае в отладчике хрома, в разделе network можно найти запросы типа JSON


Log in to reply