Передача данных черех API

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Передача данных черех API

Сообщение FredP » Пн окт 02, 2017 6:45 am

Так получилось, что мне нужно передавать в MD порядка 20 значений и считывать штук 15.
Использую Windows на системе с intel atom 1.33 Ghz (2 Гб ОЗУ).

Выполняю операции через http get запросы, согласно API http://majordomo.smartliving.ru/Main/Pr ... ntegration
Так вот, проблема: apache.exe кушает 80% времени ЦП, обновление всех значений занимает прядка 2х секунд. Не устраивает ни то ни другое.
Вопрос 1: можно ли записать все переменные в один запрос? Сейчас каждое значение =1 запрос.

Попробовал уйти от http, использовать командную строку. Во первых, что то я делаю не так:
Снимок.PNG
Снимок.PNG (10.06 КБ) 6620 просмотров
Во вторых, из азбуки непонятно, можно ли таким методом считывать значения?

Надеюсь, все понятно описал. Если кто использовал API - прошу помощи...
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Передача данных черех API

Сообщение nick7zmail » Пн окт 02, 2017 8:28 am

В том же api написано
А так же можно запускать сценарии и передавать им параметры:
http://192.168.0.17/objects/?script=mys ... am2=value2
Так же можно запускать методы (а не только скрипты) с большим количеством параметров в 1 ссылке, каждый из которых будет передаваться в разные свойства. Ограничение - только длина url запроса, которую поддерживает апач, но 20 параметров, думаю, туда влезут, особенно если их называть не param1, param2 а p1, p2 и тд.

Более правильно, конечно, использовать не get запросы, а, скажем, mqtt протокол.

В командной строке тоже немного не правильно вызвали.
Надо

Код: Выделить всё

C:\_majordomo\htdocs\obj.bat co2_2.method param1:"znachenie1" param2:"znachenie2"
Так в вызываемый метод передадутся указанные параметры. У меня это работало, когда на виндах сидел.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Передача данных черех API

Сообщение FredP » Пн окт 02, 2017 8:41 am

Хм. Но я не использую методы. Вот так выглядят мои переменные (часть)

//чтение
valve_mode_1.value
Valve_1.value
hum_1.value
temp_1.value
CO2_1.value
//запись
CO2_sensor_1.value
humidity_sensor_1.value
tempsensor_1.value
tempsensor_3.value

http запрос на несколько параметров использует метод, но у меня это отдельные объекты... Командная строка тоже использует метод. Следовательно, мне тоже не подходит?
mqtt - как вариант, сейчас попробую почитать как оно работает... Нужен отдельный плагин?
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Передача данных черех API

Сообщение Gelezako » Вт окт 03, 2017 8:24 pm

FredP писал(а): mqtt - как вариант, сейчас попробую почитать как оно работает... Нужен отдельный плагин?
да, он очень простой, через mqtt на мой взгляд проще всего передавать и получать данные, хороший протокол.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Передача данных черех API

Сообщение nick7zmail » Ср окт 04, 2017 6:38 am

На mqtt нужен брокер mosquitto, и немного прочитать про протокол. У меня даже видео было про базовую установку.
А методы-зря не используете...создайте у любого объекта метод...или, если не хотите - можно в "Сценариях" скрипт создать, и из него выставлять нужные вам свойства.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Передача данных черех API

Сообщение FredP » Чт окт 05, 2017 4:47 pm

Ну что же. Пока результат такой:
1. API через http очень требователен к ресурсам.
2. API через командную строку не позволяет считывать значения, только передавать. Кстати, ошибка была в том, что после выполнения командного файла остается не верный путь (прописан в следующем исполняемом файле)
3. mqtt majordomo работает быстро, я публикую информацию в москито брокер раз в секунду, если обновлять страницу настроек mqtt - видно, что данные обновляются. Записываю значения в информер, а он обновляется раз в 3-4 секунды... Видимо есть еще куда копать. НО!!! mqtt majordomo умеет только работать подписчиком. Функции издателя - нет. То есть, я не могу передать данные из majordomo на устройства. Опять не подходит =(

Какие еще есть идеи? Попробовал modbus. Работает и в ту и в другую сторону, скорость обновления информера 3-4 секунды. Но я не пробовал обновлять меню. Сейчас попробую.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Передача данных черех API

Сообщение nick7zmail » Чт окт 05, 2017 5:17 pm

FredP писал(а):НО!!! mqtt majordomo умеет только работать подписчиком. Функции издателя - нет.
В смысле нет?? Создаёте топик, привязываете любой объект.свойство - и при любом изменении этого свойства идёт публикация этого значения в топик...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Передача данных черех API

Сообщение FredP » Чт окт 05, 2017 7:07 pm

Значит, пока не до конца разобрался с новым для меня mqtt. Ок, беру паузу. По результатам - отпишусь.
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Передача данных черех API

Сообщение FredP » Вт окт 10, 2017 8:45 pm

По прежнему бьюсь с MD:
вписал все свои 50 переменных в mqtt. Работает, но ЦП загружен на 100%. Решил обмануть систему. Думаю, буду передавать 1 переменную на прием и одну на передачу. А на стороне MD - парсить и грабить. Не получилось... например, вот такой скрипт выполняемый раз в секунду загружает мой атом на 50%:
СпойлерПоказать

Код: Выделить всё

$tmp=explode(',',getGlobal('httpvar.parsing_common'));
setGlobal('pvu.speed',$tmp[0]); //1-ый элемент
setGlobal('humidityfier.speed',$tmp[1]); //2-й элемент
setGlobal('cond_sp.speed',$tmp[2]); //3-й элемент
setGlobal('cond_sp.status',$tmp[3]);
setGlobal('cond_zal.speed',$tmp[4]);
setGlobal('cond_zal.status',$tmp[5]);
setGlobal('valve_3.value',$tmp[6]);
setGlobal('valve_4.value',$tmp[7]);
setGlobal('CO2_sensor_1.value',$tmp[8]);
setGlobal('humidity_sensor_1.value',$tmp[9]);
setGlobal('tempsensor_1.value',$tmp[10]);
setGlobal('tempsensor_3.value',$tmp[11]);
setGlobal('CO2_sensor_2.value',$tmp[12]);
setGlobal('humidity_sensor_2.value',$tmp[13]);
setGlobal('tempsensor_2.value',$tmp[14]);
setGlobal('tempsensor_4.value',$tmp[15]); 
Если добавить скрипт с граббингом - то выходит все 100... Пробовал передавать эти 2 переменные через MQTT, http(api). Все одинаково, именно скрипты дико нагружают процессор. У кого есть идеи, почему? засунуть 50 чисел в mysql это ведь очень простая задача, где то баг, как разобраться?
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Передача данных черех API

Сообщение xor » Вт окт 10, 2017 10:21 pm

А если передавать не всё подряд, а только то что изменилось больше порога? Или у Вас контроль какого-то химпроцесса в реальном времени ?))
зы. Сам всё хочу посадить Алису самогонку варить))
Ответить