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

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

Модератор: immortal

Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

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

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

А вариант передавать/принимать все значения одной строкой фиксированной длины, типа 020855001..., где первые 3 символа=020, допустим, температура, вторые 3=855 - ещё что-то, и тд.
А потом парсить и раскидывать по переменным?
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

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

Сообщение FredP » Ср окт 11, 2017 5:49 am

xor писал(а):А вариант передавать/принимать все значения одной строкой фиксированной длины, типа 020855001..., где первые 3 символа=020, допустим, температура, вторые 3=855 - ещё что-то, и тд.
А потом парсить и раскидывать по переменным?
Именно так и делаю. Разве что сообщение переменной длины с разделителями - запятыми. Вот переменная номер один
1,20,50,18,1150,1,90,50,16,400,0,0,0,0,0,0,0,0 и номер два: 4,100,0,0,0,0,100,100,0.5,0,-12.5,-12.5,0.5,0,-12.5,-12.5. Проблема в парсинге и граббинге: эти скрипты тоже съедают весь ЦП. 47 байт раскидать по переменным и такая загрузка от mysql и apache. Где то глюк, нужно искать...
P.S. Обновлять только те переменные, которые изменились - наверное, да. Но MD все равно публикует на броке mqtt все переменные, на зависимо от того, изменились они или нет. Это брокер рассылает подписчикам только измененные переменные. Я попробовал, и получил все тот же результат. Вот минимальная загрузка которой удалось добиться:
Снимок.PNG
Снимок.PNG (124.72 КБ) 4745 просмотров
Снимок.PNG
Снимок.PNG (11.17 КБ) 4742 просмотра
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

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

Сообщение nightwind » Ср окт 11, 2017 11:16 am

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

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

Сообщение Gelezako » Вс окт 15, 2017 8:42 pm

FredP писал(а):По прежнему бьюсь с MD:
вписал все свои 50 переменных в mqtt. Работает, но ЦП загружен на 100%. Решил обмануть систему. Думаю, буду передавать 1 переменную на прием и одну на передачу. А на стороне MD - парсить и грабить. Не получилось... например, вот такой скрипт выполняемый раз в секунду загружает мой атом на 50%:
если вам очень часто надо считывать данные и анализировать их,то лучше использовать настройку для свойства, которая позволяет автоматически вызывать нужный метод при изменении значения свойства. Таким образом у вас существенно уменьшится код в методе onNewMinute и это снизит нагрузку на процессор. У меня достаточно много логики работате по такому принципе и существенной нагрузки я не замечаю.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

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

Сообщение FredP » Пн окт 16, 2017 7:05 am

Дело в том, что я использую MD наверное, не так как задумывалось изначально. Все алгоритмы, общение со сторонним оборудованием у меня работают в другом софте. MD мне нужен только как сайт, интерфейс для пользователя. От сюда вылезла необходимость как то передавать и считывать из MD информацию.
Как оказалось, само по себе обновление числа (переменной, информера) в MD очень не оптимально реализовано. А я привык к промышленным SCADA системам диспетчерского контроля, где обновление 1000 переменных два раза в секунду - не вопрос. Что такое 15 кб переслать, верно? Да еще и машина у меня достаточно слабая (промышленный ПК). Например, MQTT брокер получает и рассылает 100 значений на этой же машине без значительной нагрузки.
---
Методы я не использую. Никаких onNewMinute и прочего. В последней попытке сделал 2 переменных, в одну свожу (сценарием) php кодом все числа которые нужно передать из MD. Во вторую - считать. Практика показала, не важно как запускаешь сценарий - он сильно загружает ЦП.
Сначала я думал, что это процесс передачи информации занимает много ресурсов. Оказалось, что именно процесс обновления переменных в MD. Пока решение вижу в mqtt протоколе, в который завести все переменные и обновлять их только по изменению. То есть, 2-5 переменных в секунду максимум.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн окт 16, 2017 7:56 am

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

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

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

nick7zmail писал(а):Можно и в mqtt засылать "строку" сцепленных переменных, и разбивать их скриптом. Такой вариант не должен грузить систему.
Вот не должен, а грузит...
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн окт 16, 2017 9:57 am

FredP писал(а):например, вот такой скрипт выполняемый раз в секунду загружает мой атом на 50%
Интересно, что за задача такая, которая требует на стороне сервера запускать скрипт (метод, сценарий) раз в секунду?!
Из того примера я вижу получение значений температур, влажности, СО2. Эти величины в домашних условиях в принципе не могут с такой скоростью.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
FredP
Сообщения: 59
Зарегистрирован: Ср авг 23, 2017 5:35 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

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

Сообщение FredP » Пн окт 16, 2017 11:32 am

Да никакой сверхествестенной задачи.
Например, нужно передавать на контроллер уставки температур, влажности, CO2. Положение заслонок вентиляции. Управление шторами.
Считаю, вполне естественным ожидать начало движения шторы от нажатия кнопки не более 1 секунды. Для этого мне нужно передавать данные на контроллер хотя бы 2 раза в секунду. Или если я хочу "похолоднее", кондиционер должен вкючиться не через 10 и хорошо бы даже не через 5 секунд...
Данные с датчиков можно и раз в 5 секунд, согласен. Хотя, тоже ерунда.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн окт 16, 2017 11:56 am

Передавать уставки периодически можно и раз в 10 минут. А вот при изменении уставок передавать непосредственно в момент изменения...аналогично со шторами...передавайте непосредственно нажатие кнопки, которое будет инициировать действие, а не опрашивайте кнопку раз в 1-2 секунды.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить