• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESPEasy как передать информацию на другое устройство ESPEasy

ask1

Member
Есть такой тип команды, которую, если запустить в браузере, позволяет управлять устройством. Вот например такая команда покажет пять градусов на экране 7-segment display:

При этом, в ESPEasy есть команда SendToHTTP, с помощью которой можно отправить данные на сервер в интернете, выглядит примерно так

SendToHTTP 192.168.100.24,80,/control?cmd=7dt,5

Вот только по какой-то причине эта команда не работает. Если вместо ip адреса поставить свой сайт, который ожидает эту команду, то она будет получена, но другое устройство ESPEasy с IP-адресом 192.168.100.24, которое спокойно принимает команду с любого компьютера из локальной сети, откажется отрабатывать эту же команду.

Мне нужно, чтобы один прибор опрашивал датчик температуры и пересылал эту информацию на другой прибор с той же прошивкой ESPEasy.

Как это можно реализовать?
 

CodeNameHawk

Moderator
Команда форума
Если вместо ip адреса поставить свой сайт, который ожидает эту команду, то она будет получена, но другое устройство ESPEasy с IP-адресом 192.168.100.24,
Надо, что бы другое устройство ESPEasy с IP-адресом 192.168.100.24, ожидало эту команду.
Попробуйте запустить на ней вебсервер.
SendToHTTP 192.168.100.24,80,/control?cmd=7dt,5
А что, номер порта, сейчас через запятые носят?
 

ask1

Member
Надо, что бы другое устройство ESPEasy с IP-адресом 192.168.100.24, ожидало эту команду.
А это как-то по особенному нужно делать? Само устройство команду принимает и исполняет, если из браузера отправить.

А что, номер порта, сейчас через запятые носят?
Номер порта через запятую пишется в синтаксисе команды SendToHTTP, там все параметры через запятую идут.
 

CodeNameHawk

Moderator
Команда форума
Само устройство команду принимает и исполняет, если из браузера отправить.
Что мешает отравить такуежу команду как из браузера?
Из браузера вы ведь не посылаете
SendToHTTP 192.168.100.24,80,/control?cmd=7dt,5
Есть httpclient.
 

ask1

Member
Что мешает отравить такуежу команду как из браузера?
Из браузера вы ведь не посылаете
Ничего не мешает. Из браузера я посылаю http-get-запрос:
http://192.168.100.24/control?cmd=7dt,5

Из скрипта Rules это выглядит так:
SendToHTTP 192.168.100.24,80,/control?cmd=7dt,5

А как его активировать?

Первая же ссылка про httpclient приводит на форум https://www.letscontrolit.com/forum/viewtopic.php?t=2655
, где почти сразу отвечают:

You can do that using rules and the command "SendToHTTP"

Please study the wiki. Get back here once you have done that.
 

ask1

Member
Решение найдено путем усиленных размышлений. В интернетах почему-то я его не нашел. Проблема в запятых, которые используются в синтаксисе команд и в строке, которую нужно передать, поэтому решается с помощью кавычек:
Код:
SendToHTTP 192.168.100.155,80,"/control?cmd=event,eventname=[DS18T1#Temperature]"
А прием данных на другом устройстве работает так:
Код:
on eventname do
  let,1,%eventvalue%  // если хочется использовать глобальную переменную %v1% или [VAR#1]
  TaskValueSet 9,1,%eventvalue% // если хочется использовать Dummy-устройство: 9 - номер устройства, 1 - номер параметра
endon
Еще можно принимать несколько параметров, когда они передаются пачкой через запятую:
Код:
on eventname do
  let,1,%eventvalue1%
  TaskValueSet 9,2,%eventvalue2% 
endon
 

Ivomcload

New member
Привет. Можешь написать пример обмена данными. Не очень понятно куда вставлять код и где просмотреть полученные данные. Возможно нужны ещё какие-то настройки. В общем напиши подробнее что и как, если не сложно. Спасибо.
 

ask1

Member
Там есть вкладка "Rules" - туда вставляется код.
Еще в разделе Tools - Advanced нужно поставить галки на Rules и Old Engine.

А если нужно управлять с компьютера то все еще проще:
запрос в браузере, как открытие страницы
192.168.4.4/control?cmd=event,NAZNAVNIEFUNCII=555

Можно в своей программе делать такие запросы, тут уж на каком языке программирования писать - ваше личное дело.


В коде ESPeasy обработка такая же:
Код:
on NAZNAVNIEFUNCII do
// тут можно gpio управлять, отсылать на какие-то сайты или на другие устройства информацию
endon
 

ask1

Member
Доступ к устройствам (Devices) из кода записывается в квадратных скобках - [DS18T1#Temperature]

Выглядит примерно так:

Код:
TaskValueSet 9,2,[DS18T1#Temperature]
Тут значение из параметра Temperature устройства DS18T1 записывается во второй параметр (может называться как угодно) девятого устройства (используется устройство Dummy). Например это нужно, чтобы округлить или какие-то средние значения посчитать или передать куда-то дальше. У меня два термометра с разных сторон дома на двух устройствах ESPeasy. И вот одно передает значение другому, а второе выясняет меньшее значение и отправляет на сайт.

Отправка выше и прием описаны выше, а сравнение делается как обычно:

Код:
if [DS18T1#Temperature] < [RIVERSIDE#TOut]
    TaskValueSet 9,2,[DS18T1#Temperature]
  else
    TaskValueSet 9,2,[RIVERSIDE#TOut]
endif
Второй параметр девятого устройства имеет имя RIVERSIDE#TMin и оно передается на сайт:

Код:
SendToHTTP sitename.com,80,/sensors/?ID=111111&Temperature=[RIVERSIDE#TMin]
Можно вместо того, чтобы засунуть одно из двух значений в переменную [RIVERSIDE#TMin] просто сделать два отправления:

Код:
if [DS18T1#Temperature] < [RIVERSIDE#TOut]
   SendToHTTP sitename.com,80,/sensors/?ID=111111&Temperature=[DS18T1#Temperature]
  else
    SendToHTTP sitename.com,80,/sensors/?ID=111111&Temperature=[RIVERSIDE#TOut]
  endif
Это не очень "красиво" и такая запись длиннее, а там ограничение на код - 2048 байт на один Rules (их там четыре, все работают одинаково).

Возможно, есть способ присвоение значений для Dummy-устройств какой-то более короткий, но я нашел только TaskValueSet.
 
Сверху Снизу