Передача данных черех API
Модератор: immortal
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Передача данных черех API
А вариант передавать/принимать все значения одной строкой фиксированной длины, типа 020855001..., где первые 3 символа=020, допустим, температура, вторые 3=855 - ещё что-то, и тд.
А потом парсить и раскидывать по переменным?
А потом парсить и раскидывать по переменным?
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 59
- Зарегистрирован: Ср авг 23, 2017 5:35 pm
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Передача данных черех API
Именно так и делаю. Разве что сообщение переменной длины с разделителями - запятыми. Вот переменная номер один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 все переменные, на зависимо от того, изменились они или нет. Это брокер рассылает подписчикам только измененные переменные. Я попробовал, и получил все тот же результат. Вот минимальная загрузка которой удалось добиться:
- nightwind
- Сообщения: 333
- Зарегистрирован: Вс июн 26, 2016 4:42 pm
- Откуда: Барановичи
- Благодарил (а): 28 раз
- Поблагодарили: 52 раза
- Контактная информация:
Re: Передача данных черех API
Батенька, и винт то у вас не с бэдами? Не помню точно, входит ли в загрузку процессора на винде iowait, но возможно это шуршит винт, а проц тупо ждет данных.
Возможно к статусам привязаны методы statusupdate, и тормозят именно они.
А вообще винда - ЗЛО. все эти apache и mysql были разработаны под линух.
Попробуй хотя бы останавливать по одному ненужные циклы - пути электронов неисповедимы, бывает проблема прячется там, где никогда не стал бы искать
Возможно к статусам привязаны методы statusupdate, и тормозят именно они.
А вообще винда - ЗЛО. все эти apache и mysql были разработаны под линух.
Попробуй хотя бы останавливать по одному ненужные циклы - пути электронов неисповедимы, бывает проблема прячется там, где никогда не стал бы искать
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Передача данных черех API
если вам очень часто надо считывать данные и анализировать их,то лучше использовать настройку для свойства, которая позволяет автоматически вызывать нужный метод при изменении значения свойства. Таким образом у вас существенно уменьшится код в методе onNewMinute и это снизит нагрузку на процессор. У меня достаточно много логики работате по такому принципе и существенной нагрузки я не замечаю.FredP писал(а):По прежнему бьюсь с MD:
вписал все свои 50 переменных в mqtt. Работает, но ЦП загружен на 100%. Решил обмануть систему. Думаю, буду передавать 1 переменную на прием и одну на передачу. А на стороне MD - парсить и грабить. Не получилось... например, вот такой скрипт выполняемый раз в секунду загружает мой атом на 50%:
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
-
- Сообщения: 59
- Зарегистрирован: Ср авг 23, 2017 5:35 pm
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Передача данных черех API
Дело в том, что я использую MD наверное, не так как задумывалось изначально. Все алгоритмы, общение со сторонним оборудованием у меня работают в другом софте. MD мне нужен только как сайт, интерфейс для пользователя. От сюда вылезла необходимость как то передавать и считывать из MD информацию.
Как оказалось, само по себе обновление числа (переменной, информера) в MD очень не оптимально реализовано. А я привык к промышленным SCADA системам диспетчерского контроля, где обновление 1000 переменных два раза в секунду - не вопрос. Что такое 15 кб переслать, верно? Да еще и машина у меня достаточно слабая (промышленный ПК). Например, MQTT брокер получает и рассылает 100 значений на этой же машине без значительной нагрузки.
---
Методы я не использую. Никаких onNewMinute и прочего. В последней попытке сделал 2 переменных, в одну свожу (сценарием) php кодом все числа которые нужно передать из MD. Во вторую - считать. Практика показала, не важно как запускаешь сценарий - он сильно загружает ЦП.
Сначала я думал, что это процесс передачи информации занимает много ресурсов. Оказалось, что именно процесс обновления переменных в MD. Пока решение вижу в mqtt протоколе, в который завести все переменные и обновлять их только по изменению. То есть, 2-5 переменных в секунду максимум.
Как оказалось, само по себе обновление числа (переменной, информера) в 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
Можно и в mqtt засылать "строку" сцепленных переменных, и разбивать их скриптом. Такой вариант не должен грузить систему.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 59
- Зарегистрирован: Ср авг 23, 2017 5:35 pm
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Передача данных черех API
Вот не должен, а грузит...nick7zmail писал(а):Можно и в mqtt засылать "строку" сцепленных переменных, и разбивать их скриптом. Такой вариант не должен грузить систему.
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Передача данных черех API
Интересно, что за задача такая, которая требует на стороне сервера запускать скрипт (метод, сценарий) раз в секунду?!FredP писал(а):например, вот такой скрипт выполняемый раз в секунду загружает мой атом на 50%
Из того примера я вижу получение значений температур, влажности, СО2. Эти величины в домашних условиях в принципе не могут с такой скоростью.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 59
- Зарегистрирован: Ср авг 23, 2017 5:35 pm
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
Re: Передача данных черех API
Да никакой сверхествестенной задачи.
Например, нужно передавать на контроллер уставки температур, влажности, CO2. Положение заслонок вентиляции. Управление шторами.
Считаю, вполне естественным ожидать начало движения шторы от нажатия кнопки не более 1 секунды. Для этого мне нужно передавать данные на контроллер хотя бы 2 раза в секунду. Или если я хочу "похолоднее", кондиционер должен вкючиться не через 10 и хорошо бы даже не через 5 секунд...
Данные с датчиков можно и раз в 5 секунд, согласен. Хотя, тоже ерунда.
Например, нужно передавать на контроллер уставки температур, влажности, CO2. Положение заслонок вентиляции. Управление шторами.
Считаю, вполне естественным ожидать начало движения шторы от нажатия кнопки не более 1 секунды. Для этого мне нужно передавать данные на контроллер хотя бы 2 раза в секунду. Или если я хочу "похолоднее", кондиционер должен вкючиться не через 10 и хорошо бы даже не через 5 секунд...
Данные с датчиков можно и раз в 5 секунд, согласен. Хотя, тоже ерунда.
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Передача данных черех API
Передавать уставки периодически можно и раз в 10 минут. А вот при изменении уставок передавать непосредственно в момент изменения...аналогично со шторами...передавайте непосредственно нажатие кнопки, которое будет инициировать действие, а не опрашивайте кнопку раз в 1-2 секунды.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<