ESP8266

Подключение исполнительных устройств, датчиков, контроллеров.

Модераторы: Bagir, Ivan, Vit, immortal

Аватара пользователя
Amarok
Сообщения: 1310
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 418 раз
Поблагодарили: 102 раза
Контактная информация:

Re: ESP8266

Сообщение Amarok » Ср окт 14, 2015 5:11 pm

RCremoteПоказать

Код: Выделить всё

//"Управление приборами по радио v1.2"
//
//Пример использования сценария RCremote:
//runScript("RCremote",array("device"=>'устройство',"state"=>'статус'));
//
//устройство - название управляемого устройства. Должно совпадать с названием управляемого объекта из класса RCremote!
//статус - устанавливаемый статус устройства. Может принимать значения on (или 1) для включения, и off (или 0) для выключения,
//также возможны значения fullon и fulloff для включения и выключения всех устройств.

$rcremotehub = "192.168.0.4"; //IP RCRemote передатчика

if ($params['state']=="fullon") {
$objects=getObjectsByClass("RCremote");
foreach($objects as $obj) {
  say("Включаю все доступные по радиоканалу устройства",0);
  if (gg($obj['TITLE'].".on")) { 
    $url = "http://".$rcremotehub."/rcremote?cmd=".gg($obj['TITLE'].".on")."&bits=".gg($obj['TITLE'].".bits"); //Собираем ссылку для RCRemote передатчика
    getURL($url,0); //Посылаем команду для RCRemote передатчика
    sleep(1); //Ждём 1 секунду и продолжаем перебирать доступные по радиоканалу устройства
  } return; }//Перестаем отрабатывать сценарий
} 
if ($params['state']=="fulloff") {
$objects=getObjectsByClass("RCremote");
foreach($objects as $obj) {
  say("Выключаю все доступные по радиоканалу устройства",0);
  if (gg($obj['TITLE'].".off")) { 
    $url = "http://".$rcremotehub."/rcremote?cmd=".gg($obj['TITLE'].".off")."&bits=".gg($obj['TITLE'].".bits"); //Собираем ссылку для RCRemote передатчика
    getURL($url,0); //Посылаем команду для RCRemote передатчика
    sleep(1); //Ждём 1 секунду и продолжаем перебирать доступные по радиоканалу устройства
  } return; }//Перестаем отрабатывать сценарий
}


if ($params['device']=="") {say("Я не знаю с каким устройством должна работать",0); return;} //Если устройство не указано, то перестаем отрабатывать сценарий
$device = $params['device']; //Каким устройством управляем?

if (gg($device.".name") != "") { //Устанавливаем имя устройства
 $name = gg($device.".name");
 } else {$name = $device;}
  
if ($params['state']=="") {say("Я не знаю, что должна сделать с устройством под названием «".$name."»",0);return;} //Если состояние устройства не указано, то перестаем отрабатывать сценарий
$state = $params['state']; //Что делаем с устройством?
if ($state == "on" or $state == "1") {$statestat = "Включаю";} else {$statestat = "Выключаю";}

$bits = gg($device.".bits"); //Устанавливаем битность команд управления

$url = "http://".$rcremotehub."/rcremote?cmd=".gg($device.".".$state)."&bits=".$bits; //Собираем ссылку для RCRemote передатчика
getURL($url,0); //Посылаем команду для RCRemote передатчика

say($statestat." устройство под названием «".$name."»",0);

//P.S.: Сценарий выложен по принципу DonateWare. Это значит, что им можно пользоваться безвоздмездно (т.е. - даром),
//но я не откажусь от любой, не обременительной для пользующегося этим сценарием человека, финансовой благодарности.
//Благодарность можно перечислить на следующие электронные кошельки:
//WebMoney: R382335515497 или Z390998873179
//Яндекс.Деньги: 41001355945165  
Класс RCRemote:
RCremoteClass.zip
(456 байт) 121 скачивание
За это сообщение автора Amarok поблагодарили (всего 2):
AVL (Пт янв 01, 2016 5:06 pm) • kontakter (Пн мар 07, 2016 7:52 pm)
Рейтинг: 2.74%
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
T-REX-XP
Сообщения: 175
Зарегистрирован: Вт июн 16, 2015 10:54 pm
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: ESP8266

Сообщение T-REX-XP » Ср окт 14, 2015 7:08 pm

devoff писал(а):T-REX-XP а что нужно сделать ? управлять розеткой или получать данные о включенной розетки ?
Если управлять то просто через GET, если получать то через скрипт.
Для начала, получать данные.
Второе задание, это управление розетками.

Пока ждал ответа, нашел на сайте wiki.barxatperm.ru/index.php?title=ESP8266 описание процесса интеграции.
Сделал все как там написано, все гуд, заработало, потом обновил скрипт на динамический(при котором новые поля создаются автоматом) . даже розетку вкл/выкл могу. но сделано через костыли. посмотреть бы на реализацию нормальную (гибкую, так сказать)) ).
За это сообщение автора T-REX-XP поблагодарил:
mirsum (Ср окт 28, 2015 1:17 pm)
Рейтинг: 1.37%
BeletskyAV
Сообщения: 8
Зарегистрирован: Пт фев 13, 2015 9:16 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 3 раза

Re: ESP8266

Сообщение BeletskyAV » Чт окт 15, 2015 1:46 pm

Может кому пригодиться?
Написано при помощи этого плагина для Ардуины
Key_1-4_Switch_1-5_ESP12.zip
(3.8 КБ) 144 скачивания
Получаем от 1 кнопка,1 реле,5 свичей(датчик движения,кнопка на дверь,...) до 4 кнопки, 4 реле, 1 свич. Выбирается до прошивки.
GET запросы под ремами в закладке "ReadFromServer".
Запускать скрипт естественно кликнув на "Key_1-4_Switch_1-5_ESP12.ino"

Добавить Объекты/класс : IPaddress

В MajorDoMo Скрипты :

Start
СпойлерПоказать

Код: Выделить всё

 $addr = $params["addr"];
 $digital = $params["digital"];
 $analog = $params["analog"];
 $switch = $params["switch"];
// Имя устройства
say("Старт $addr",4);
$name = gg("Address$addr.name");
$reboot = gg("Address$addr.reboot");
$reboot = $reboot + 1;
sg("Address$addr.reboot","$reboot");
if($name =="") $name ="NEW";
if($digital =="") $digital ="0";
if($analog =="") $analog ="0";
if($switch =="") $switch ="0";

//$hostname = ("Relay$name");

 addClassObject('IPaddress',"Address$addr");
sg("Address$addr.name","$name");
sg("Address$addr.digital","$digital");
sg("Address$addr.analog","$analog");
sg("Address$addr.switch","$switch");

 if($name !="NEW") {
for($a=0;$a<$digital;$a++) {
if (strlen($a) == 1) $a = "0".$a;
addClassObject('Relays', "Relay$name$a");
  sg("Relay$name$a.IP",$addr);
  sg("Relay$name$a.pin",$a);
 
 }
}

//Температурные датчики DS1820 максимум 8 шт.
for($b=0;$b<8;$b++) {
 $dn = "ds$b";
 $dn = $params["ds$b"];
if ($dn != "") {
 $tn = "$t$b";
 $tn = $params["t$dn"];
 addClassObject("tempSensors", "$name$dn");
sg("$name$dn.temp",$tn);
 }
}

//==================================
if ($digital != "") {
for($i=0;$i<$digital;$i++) {
if (strlen($i) == 1) $i = "0".$i;
 $onoff = gg("Relay$name$i.OnOff");
 if ($onoff == "1")  {
$read = getURL("http://192.168.1.$addr/Donoff$i,1",0);
if ($read)
{
if (ereg ("([0-9]{3}):([0-9]{2}):([0-1]{1}):([0-9]{3})", $read, $data)) {
 $IP = $data[1];
 $pin = $data[2];
 $onoff = $data[3];
 $level = $data[4];
 
$name = gg("Address$IP.name");
$hostname = ("Relay$name");

sg("$hostname$pin.IP",$IP);
sg("$hostname$pin.pin",$pin);
sg("$hostname$pin.OnOff",$onoff);
 
 if ($onoff == "0") {
  sg("$hostname$pin.OnOff","0");
  sg("$hostname$pin.TextOnOff","off");
  sg("$hostname$pin.Text","выключен");
  
 }
 if ($onoff == "1") {
  sg("$hostname$pin.OnOff","1");
  sg("$hostname$pin.TextOnOff","on");
  sg("$hostname$pin.Text","включён");
  
 }
}
}
 }
 }
}
//==================================

if ($analog != "") {
for($i=0;$i<$analog;$i++) {
if (strlen($i) == 1) $i = "0".$i;
 $onoff = gg("Lamp$name$i.OnOff");
 $level = gg("Lamp$name$i.Level");
getURL("http://192.168.1.$addr/Alevel$i,$onoff,$level",0);
 }
}
Relay
СпойлерПоказать

Код: Выделить всё

//$name = "Relays";
$days = "400";

$addr = $params['addr'];
$pin = $params['pin'];
$onoff = $params['onoff'];

$name = gg("Address$addr.name");
$hostname = ("Relay$name");
addClassObject("Relays", "$hostname$pin");
addClassProperty("Relays", "OnOff", "$days");

sg("$hostname$pin.pin",$pin);
sg("$hostname$pin.IP",$addr);
sg("$hostname$pin.OnOff",$onoff);
if ($onoff == 0) {
 sg("$hostname$pin.Text","выключен");
 sg("$hostname$pin.TextOnOff","off");
}
if ($onoff == 1) {
 sg("$hostname$pin.Text","включен");
 sg("$hostname$pin.TextOnOff","on");
}
//$say=gg("$hostname$pin.Text");

//say("Реле $say",3);        
Switch
СпойлерПоказать

Код: Выделить всё

$days = "400";

$addr = $params['addr'];
$sw = $params['sw'];
$onoff = $params['onoff'];

$name = gg("Address$addr.name");
$hostname = ("Switch$name");
addClassObject("Switchs", "$hostname$sw");
addClassProperty("Switchs", "OnOff", "$days");
sg("$hostname$sw.OnOff",$onoff);

$Metod = gg("$hostname$sw.Metod");

//+++++++ Metod - "move" start +++++++++++++++++

if($Metod =="move") {
$rele = gg("$hostname$sw.OffReley");

$ip=gg("$rele.IP");
$pin=gg("$rele.pin");

$read = getURL("http://192.168.1.$ip/Donoff$pin,$onoff",0);
}
if ($onoff == 0) {
 sg("$hostname$sw.Text","нет движения");
 sg("$hostname$sw.TextOnOff","off");
}
if ($onoff == 1) {
 sg("$hostname$sw.Text","есть движение");
 sg("$hostname$sw.TextOnOff","on");
}
//+++++++ Metod - "move" stop ++++++++++++++++++
//+++++++ Metod - "door" start +++++++++++++++++

if($Metod =="door") {
$rele = gg("$hostname$sw.OffReley");

$ip=gg("$rele.IP");
$pin=gg("$rele.pin");

if ($onoff == 1) {
 sg("$hostname$sw.Text","дверь открыта");
 sg("$hostname$sw.TextOnOff","on");
$read = getURL("http://192.168.1.$ip/Donoff$pin,$onoff",0);
}
if ($onoff == 0) {
 sg("$hostname$sw.Text","дверь закрыта");
 sg("$hostname$sw.TextOnOff","off");
}
}
//+++++++ Metod - "door" stop ++++++++++++++++++

if ($read)
{
if (ereg ("([0-9]{3}):([0-9]{2}):([0-1]{1}):([0-9]{3})", $read, $data)) {
 $IP = $data[1];
 $pin = $data[2];
 $onoff = $data[3];
 $level = $data[4];
 
$name = gg("Address$IP.name");
$hostname = ("Relay$name");

sg("$hostname$pin.IP",$IP);
sg("$hostname$pin.pin",$pin);
sg("$hostname$pin.OnOff",$onoff);
 
 if ($onoff == "0") {
  sg("$hostname$pin.OnOff","0");
  sg("$hostname$pin.TextOnOff","off");
  sg("$hostname$pin.Text","выключен");
  
 }
 if ($onoff == "1") {
  sg("$hostname$pin.OnOff","1");
  sg("$hostname$pin.TextOnOff","on");
  sg("$hostname$pin.Text","включён");
  
 }
}
}

Releys Методы

refresh
СпойлерПоказать

Код: Выделить всё

$ip=$this->getProperty("IP");
$pin=$this->getProperty("pin");

$read = getURL("http://192.168.1.$ip/Dswitch$pin",0);
if ($read)
{
if (ereg ("([0-9]{3}):([0-9]{2}):([0-1]{1}):([0-9]{3})", $read, $data)) {
 $IP = $data[1];
 $pin = $data[2];
 $onoff = $data[3];
 $level = $data[4];
 
$name = gg("Address$IP.name");
$hostname = ("Relay$name");

sg("$hostname$pin.IP",$IP);
sg("$hostname$pin.pin",$pin);
sg("$hostname$pin.OnOff",$onoff);
 $room = gg("$hostname$pin.room");
 $roomOn = gg("$room.ReleyOnOff");
 
 if ($onoff == "0") {
  sg("$hostname$pin.OnOff","0");
  sg("$hostname$pin.TextOnOff","off");
  sg("$hostname$pin.Text","выключен");
  $roomOn = $roomOn -1;
  sg("$room.ReleyOnOff","$roomOn");
  
 }
 if ($onoff == "1") {
  sg("$hostname$pin.OnOff","1");
  sg("$hostname$pin.TextOnOff","on");
  sg("$hostname$pin.Text","включён");
  $roomOn = $roomOn +1;
  sg("$room.ReleyOnOff","$roomOn");
  
 }
}
} 
switch
СпойлерПоказать

Код: Выделить всё

$onoff=$this->getProperty("OnOff");
$ip=$this->getProperty("IP");
$pin=$this->getProperty("pin");

$read = getURL("http://192.168.1.$ip/Donoff$pin,$onoff",0);

if ($read)
{
if (ereg ("([0-9]{3}):([0-9]{2}):([0-1]{1}):([0-9]{3})", $read, $data)) {
 $IP = $data[1];
 $pin = $data[2];
 $onoff = $data[3];
 $level = $data[4];
 
$name = gg("Address$IP.name");
$hostname = ("Relay$name");

sg("$hostname$pin.IP",$IP);
sg("$hostname$pin.pin",$pin);
sg("$hostname$pin.OnOff",$onoff);
 
 if ($onoff == "0") {
  sg("$hostname$pin.OnOff","0");
  sg("$hostname$pin.TextOnOff","off");
  sg("$hostname$pin.Text","выключен");
  
 }
 if ($onoff == "1") {
  sg("$hostname$pin.OnOff","1");
  sg("$hostname$pin.TextOnOff","on");
  sg("$hostname$pin.Text","включён");
  
 }
}
} 
После старта платы зайти в свойства IPaddress/AddressXXX(XXX - последние 3 знака IPишника),
заменить в "name" NEW на свой типа "Bedroom" и снова стартануть плату.
За это сообщение автора BeletskyAV поблагодарил:
mirsum (Чт окт 15, 2015 5:58 pm)
Рейтинг: 1.37%
alekszander
Сообщения: 177
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 14 раз

Re: ESP8266

Сообщение alekszander » Вс окт 18, 2015 1:41 pm

Коллеги, доброго времени суток. Собираю стенд с датчиками движения, и esp, не могу понять как MDM принять данные с esp8266, прошивка с homes-smart последняя. прописал в скрипте, но это скорее всего не то.
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: ESP8266

Сообщение ignat99 » Вс окт 18, 2015 2:19 pm

Вот не понимаю снова если вы делает программы, то почему не сделаете прошивку самостоятельно. Если же вы не программист, то почему не купите готовую систему с поддержкой последенй homes-smart. Если вам нужен MDM - закажите работу создателю этой программы.
lcf2003
Сообщения: 13
Зарегистрирован: Вт фев 25, 2014 2:13 pm
Благодарил (а): 6 раз
Поблагодарили: 0

Re: ESP8266

Сообщение lcf2003 » Пн окт 19, 2015 10:34 pm

присоединяюсь к вопросу alekszander.
Я первый раз имею дело с системой МДМ. И мне с первого раза не понятно как оно работает. В настройках дачтика (у меня дачтик температуры) прописал IP адрес МДМ сервера. А вот что и как прописывать в самой МДМ не понятно.

Может кто скинет скрины созданных объектов и сценариев с системы МДМ?
alekszander
Сообщения: 177
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 14 раз

Re: ESP8266

Сообщение alekszander » Вт окт 20, 2015 6:49 pm

lcf2003 писал(а):присоединяюсь к вопросу alekszander.
Я первый раз имею дело с системой МДМ. И мне с первого раза не понятно как оно работает. В настройках дачтика (у меня дачтик температуры) прописал IP адрес МДМ сервера. А вот что и как прописывать в самой МДМ не понятно.

Может кто скинет скрины созданных объектов и сценариев с системы МДМ?
Создаеш в сценариях скрипт с именем espdata
2015-10-21 01-40-17 Панель управления - Google Chrome.png
2015-10-21 01-40-17 Панель управления - Google Chrome.png (51.79 КБ) 25063 просмотра
Вот с таким содержимым
Вот с таким содержимымПоказать
$bmpp=$params['bmpp']; //Данные с датчика BMP (давление)
$bmpt=$params['bmpt']; //Данные с датчика BMP (температура)
$dhth1=$params['dhth1']; //Данные с первого датчика DHT (влажность)
$dhth2=$params['dhth2']; //Данные со второго датчика DHT (влажность)
$dhtt1=$params['dhtt1']; //Данные с первого датчика DHT (температура)
$dhtt2=$params['dhtt2']; //Данные со второго датчика DHT (температура)
$dsw1=$params['dsw1']; //Данные с датчика DS18B20 №1
$dsw2=$params['dsw2']; //Данные с датчика DS18B20 №2
$dsw3=$params['dsw3']; //Данные с датчика DS18B20 №3
$dsw4=$params['dsw4']; //Данные с датчика DS18B20 №4
$dsw5=$params['dsw5']; //Данные с датчика DS18B20 №5
$freemem=$params['freemem']; //Объем свободной памяти модуля
$hostname=$params['$hostname']; //Имя модуля
$idesp=$params['idesp']; //ID устройства
$light=$params['light']; //Данные с датчика BH1750
$uptime=$params['uptime']; //Время непрерывной работы модуля
$vdd=$params['vdd']; //Напряжение на модуле
$ver=$params['ver']; //Версия прошивки
if ($idesp=="") { return; } //Если ID устройства отсутствует, то перестаем отрабатывать сценарий
addClass('ESP8266'); //Создаем класс ESP8266
addClassObject('ESP8266',$idesp); //Создаёт класс заданного имени дочерним от ParentClass
//say("yyyyyyyyyyyyy");
//Распихиваем всё по свойствам. Если полученное значение пустое, то свойство не записываем
if ($bmpp!="") { sg(($idesp.".bmpp"),$bmpp); }
if ($bmpt!="") { sg(($idesp.".bmpt"),$bmpt); }

if ($dhth1!="") { sg(($idesp.".dhth1"),$dhth1); }
if ($dhth2!="") { sg(($idesp.".dhth2"),$dhth2); }
if ($dhtt1!="") { sg(($idesp.".dhtt1"),$dhtt1); }
if ($dhtt2!="") { sg(($idesp.".dhtt2"),$dhtt2); }
if ($dsw1!="") { sg(($idesp.".dsw1"),$dsw1); }
if ($dsw2!="") { sg(($idesp.".dsw2"),$dsw2); }
if ($dsw3!="") { sg(($idesp.".dsw3"),$dsw3); }
if ($dsw4!="") { sg(($idesp.".dsw4"),$dsw4); }
if ($dsw5!="") { sg(($idesp.".dsw5"),$dsw5); }
if ($freemem!="") { sg(($idesp.".freemem"),$freemem); }
if ($hostname!="") { sg(($idesp.".hostname"),$hostname); }
if ($light!="") { sg(($idesp.".light"),$light); }
if ($uptime!="") { sg(($idesp.".uptime"),$uptime); }
if ($vdd!="") { sg(($idesp.".vdd"),$vdd); }
if ($ver!="") { sg(($idesp.".ver"),$ver); }
В настройках ESP указывашь IP MDM ждешь 5 минут а может и меньше и все.
За это сообщение автора alekszander поблагодарили (всего 2):
mirsum (Вс окт 25, 2015 5:30 pm) • Securbond (Пн май 02, 2016 12:19 pm)
Рейтинг: 2.74%
alekszander
Сообщения: 177
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 14 раз

Re: ESP8266

Сообщение alekszander » Чт окт 22, 2015 12:34 pm

В общем опытным путём выяснилось что во время сработки датчика движения, скрипт отрабатывает, так как меняется время аптайма, но свойство не прописывается. Почему не понятно. Согласно документации разработчика необходимо создать скрипт espdata..... Свойство для датчиков движения active send-"gpioint", в скрипте прописано. Если кто нибудь сталкивался с такой проблемой как решали?
MaksMS82
Сообщения: 421
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Благодарил (а): 0
Поблагодарили: 70 раз
Контактная информация:

Re: ESP8266

Сообщение MaksMS82 » Чт окт 22, 2015 12:40 pm

В новой версии модуля с поддержкой 4 прерываний нумеруются от 1 до 4 , т.е. gpioint1 , gpioint2, gpioint3, gpioint4, а не gpioint.
За это сообщение автора MaksMS82 поблагодарили (всего 2):
Amarok (Чт окт 22, 2015 12:40 pm) • alekszander (Чт окт 22, 2015 3:57 pm)
Рейтинг: 2.74%
alekszander
Сообщения: 177
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 14 раз

Re: ESP8266

Сообщение alekszander » Вт окт 27, 2015 4:08 pm

Всем доброго времени суток. В общем так и не ушла система дальше стола, до сих пор не могу понять, почему mdm не может нормально в свойствах объекта отбразить сработку геркона. Подключаю к GPIO14. Причем опять же, по времени видно, что скрипт отрабатывает, так как обновляется время. Но свойства gpioint1 не обновляется.
Ответить