Страница 2 из 3
Re: Передача данных черех API
Добавлено: Вт окт 10, 2017 10:32 pm
xor
А вариант передавать/принимать все значения одной строкой фиксированной длины, типа 020855001..., где первые 3 символа=020, допустим, температура, вторые 3=855 - ещё что-то, и тд.
А потом парсить и раскидывать по переменным?
Re: Передача данных черех API
Добавлено: Ср окт 11, 2017 5:49 am
FredP
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 (124.72 КБ) 5318 просмотров

- Снимок.PNG (11.17 КБ) 5315 просмотров
Re: Передача данных черех API
Добавлено: Ср окт 11, 2017 11:16 am
nightwind
Батенька, и винт то у вас не с бэдами? Не помню точно, входит ли в загрузку процессора на винде iowait, но возможно это шуршит винт, а проц тупо ждет данных.
Возможно к статусам привязаны методы statusupdate, и тормозят именно они.
А вообще винда - ЗЛО. все эти apache и mysql были разработаны под линух.
Попробуй хотя бы останавливать по одному ненужные циклы - пути электронов неисповедимы, бывает проблема прячется там, где никогда не стал бы искать
Re: Передача данных черех API
Добавлено: Вс окт 15, 2017 8:42 pm
Gelezako
FredP писал(а):По прежнему бьюсь с MD:
вписал все свои 50 переменных в mqtt. Работает, но ЦП загружен на 100%. Решил обмануть систему. Думаю, буду передавать 1 переменную на прием и одну на передачу. А на стороне MD - парсить и грабить. Не получилось... например, вот такой скрипт выполняемый раз в секунду загружает мой атом на 50%:
если вам очень часто надо считывать данные и анализировать их,то лучше использовать настройку для свойства, которая позволяет автоматически вызывать нужный метод при изменении значения свойства. Таким образом у вас существенно уменьшится код в методе onNewMinute и это снизит нагрузку на процессор. У меня достаточно много логики работате по такому принципе и существенной нагрузки я не замечаю.
Re: Передача данных черех API
Добавлено: Пн окт 16, 2017 7:05 am
FredP
Дело в том, что я использую MD наверное, не так как задумывалось изначально. Все алгоритмы, общение со сторонним оборудованием у меня работают в другом софте. MD мне нужен только как сайт, интерфейс для пользователя. От сюда вылезла необходимость как то передавать и считывать из MD информацию.
Как оказалось, само по себе обновление числа (переменной, информера) в MD очень не оптимально реализовано. А я привык к промышленным SCADA системам диспетчерского контроля, где обновление 1000 переменных два раза в секунду - не вопрос. Что такое 15 кб переслать, верно? Да еще и машина у меня достаточно слабая (промышленный ПК). Например, MQTT брокер получает и рассылает 100 значений на этой же машине без значительной нагрузки.
---
Методы я не использую. Никаких onNewMinute и прочего. В последней попытке сделал 2 переменных, в одну свожу (сценарием) php кодом все числа которые нужно передать из MD. Во вторую - считать. Практика показала, не важно как запускаешь сценарий - он сильно загружает ЦП.
Сначала я думал, что это процесс передачи информации занимает много ресурсов. Оказалось, что именно процесс обновления переменных в MD. Пока решение вижу в mqtt протоколе, в который завести все переменные и обновлять их только по изменению. То есть, 2-5 переменных в секунду максимум.
Re: Передача данных черех API
Добавлено: Пн окт 16, 2017 7:56 am
nick7zmail
Можно и в mqtt засылать "строку" сцепленных переменных, и разбивать их скриптом. Такой вариант не должен грузить систему.
Re: Передача данных черех API
Добавлено: Пн окт 16, 2017 8:42 am
FredP
nick7zmail писал(а):Можно и в mqtt засылать "строку" сцепленных переменных, и разбивать их скриптом. Такой вариант не должен грузить систему.
Вот не должен, а грузит...
Re: Передача данных черех API
Добавлено: Пн окт 16, 2017 9:57 am
skysilver
FredP писал(а):например, вот такой скрипт выполняемый раз в секунду загружает мой атом на 50%
Интересно, что за задача такая, которая требует на стороне сервера запускать скрипт (метод, сценарий) раз в секунду?!
Из того примера я вижу получение значений температур, влажности, СО2. Эти величины в домашних условиях в принципе не могут с такой скоростью.
Re: Передача данных черех API
Добавлено: Пн окт 16, 2017 11:32 am
FredP
Да никакой сверхествестенной задачи.
Например, нужно передавать на контроллер уставки температур, влажности, CO2. Положение заслонок вентиляции. Управление шторами.
Считаю, вполне естественным ожидать начало движения шторы от нажатия кнопки не более 1 секунды. Для этого мне нужно передавать данные на контроллер хотя бы 2 раза в секунду. Или если я хочу "похолоднее", кондиционер должен вкючиться не через 10 и хорошо бы даже не через 5 секунд...
Данные с датчиков можно и раз в 5 секунд, согласен. Хотя, тоже ерунда.
Re: Передача данных черех API
Добавлено: Пн окт 16, 2017 11:56 am
nick7zmail
Передавать уставки периодически можно и раз в 10 минут. А вот при изменении уставок передавать непосредственно в момент изменения...аналогично со шторами...передавайте непосредственно нажатие кнопки, которое будет инициировать действие, а не опрашивайте кнопку раз в 1-2 секунды.