Страница 1 из 3
Передача данных черех API
Добавлено: Пн окт 02, 2017 6:45 am
FredP
Так получилось, что мне нужно передавать в 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 (10.06 КБ) 7017 просмотров
Во вторых, из азбуки непонятно, можно ли таким методом считывать значения?
Надеюсь, все понятно описал. Если кто использовал API - прошу помощи...
Re: Передача данных черех API
Добавлено: Пн окт 02, 2017 8:28 am
nick7zmail
В том же api написано
Так же можно запускать методы (а не только скрипты) с большим количеством параметров в 1 ссылке, каждый из которых будет передаваться в разные свойства. Ограничение - только длина url запроса, которую поддерживает апач, но 20 параметров, думаю, туда влезут, особенно если их называть не param1, param2 а p1, p2 и тд.
Более правильно, конечно, использовать не get запросы, а, скажем, mqtt протокол.
В командной строке тоже немного не правильно вызвали.
Надо
Код: Выделить всё
C:\_majordomo\htdocs\obj.bat co2_2.method param1:"znachenie1" param2:"znachenie2"
Так в вызываемый метод передадутся указанные параметры. У меня это работало, когда на виндах сидел.
Re: Передача данных черех API
Добавлено: Пн окт 02, 2017 8:41 am
FredP
Хм. Но я не использую методы. Вот так выглядят мои переменные (часть)
//чтение
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 - как вариант, сейчас попробую почитать как оно работает... Нужен отдельный плагин?
Re: Передача данных черех API
Добавлено: Вт окт 03, 2017 8:24 pm
Gelezako
FredP писал(а):
mqtt - как вариант, сейчас попробую почитать как оно работает... Нужен отдельный плагин?
да, он очень простой, через mqtt на мой взгляд проще всего передавать и получать данные, хороший протокол.
Re: Передача данных черех API
Добавлено: Ср окт 04, 2017 6:38 am
nick7zmail
На mqtt нужен брокер mosquitto, и немного прочитать про протокол. У меня даже видео было про базовую установку.
А методы-зря не используете...создайте у любого объекта метод...или, если не хотите - можно в "Сценариях" скрипт создать, и из него выставлять нужные вам свойства.
Re: Передача данных черех API
Добавлено: Чт окт 05, 2017 4:47 pm
FredP
Ну что же. Пока результат такой:
1. API через http очень требователен к ресурсам.
2. API через командную строку не позволяет считывать значения, только передавать. Кстати, ошибка была в том, что после выполнения командного файла остается не верный путь (прописан в следующем исполняемом файле)
3. mqtt majordomo работает быстро, я публикую информацию в москито брокер раз в секунду, если обновлять страницу настроек mqtt - видно, что данные обновляются. Записываю значения в информер, а он обновляется раз в 3-4 секунды... Видимо есть еще куда копать. НО!!! mqtt majordomo умеет только работать подписчиком. Функции издателя - нет. То есть, я не могу передать данные из majordomo на устройства. Опять не подходит =(
Какие еще есть идеи? Попробовал modbus. Работает и в ту и в другую сторону, скорость обновления информера 3-4 секунды. Но я не пробовал обновлять меню. Сейчас попробую.
Re: Передача данных черех API
Добавлено: Чт окт 05, 2017 5:17 pm
nick7zmail
FredP писал(а):НО!!! mqtt majordomo умеет только работать подписчиком. Функции издателя - нет.
В смысле нет?? Создаёте топик, привязываете любой объект.свойство - и при любом изменении этого свойства идёт публикация этого значения в топик...
Re: Передача данных черех API
Добавлено: Чт окт 05, 2017 7:07 pm
FredP
Значит, пока не до конца разобрался с новым для меня mqtt. Ок, беру паузу. По результатам - отпишусь.
Re: Передача данных черех API
Добавлено: Вт окт 10, 2017 8:45 pm
FredP
По прежнему бьюсь с 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 это ведь очень простая задача, где то баг, как разобраться?
Re: Передача данных черех API
Добавлено: Вт окт 10, 2017 10:21 pm
xor
А если передавать не всё подряд, а только то что изменилось больше порога? Или у Вас контроль какого-то химпроцесса в реальном времени ?))
зы. Сам всё хочу посадить Алису самогонку варить))