Страница 44 из 121

Re: ESP8266

Добавлено: Ср окт 14, 2015 5:11 pm
Amarok
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 байт) 274 скачивания

Re: ESP8266

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

Пока ждал ответа, нашел на сайте wiki.barxatperm.ru/index.php?title=ESP8266 описание процесса интеграции.
Сделал все как там написано, все гуд, заработало, потом обновил скрипт на динамический(при котором новые поля создаются автоматом) . даже розетку вкл/выкл могу. но сделано через костыли. посмотреть бы на реализацию нормальную (гибкую, так сказать)) ).

Re: ESP8266

Добавлено: Чт окт 15, 2015 1:46 pm
BeletskyAV
Может кому пригодиться?
Написано при помощи этого плагина для Ардуины
Key_1-4_Switch_1-5_ESP12.zip
(3.8 КБ) 331 скачивание
Получаем от 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" и снова стартануть плату.

Re: ESP8266

Добавлено: Вс окт 18, 2015 1:41 pm
alekszander
Коллеги, доброго времени суток. Собираю стенд с датчиками движения, и esp, не могу понять как MDM принять данные с esp8266, прошивка с homes-smart последняя. прописал в скрипте, но это скорее всего не то.

Re: ESP8266

Добавлено: Вс окт 18, 2015 2:19 pm
ignat99
Вот не понимаю снова если вы делает программы, то почему не сделаете прошивку самостоятельно. Если же вы не программист, то почему не купите готовую систему с поддержкой последенй homes-smart. Если вам нужен MDM - закажите работу создателю этой программы.

Re: ESP8266

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

Может кто скинет скрины созданных объектов и сценариев с системы МДМ?

Re: ESP8266

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

Может кто скинет скрины созданных объектов и сценариев с системы МДМ?
Создаеш в сценариях скрипт с именем espdata
2015-10-21 01-40-17 Панель управления - Google Chrome.png
Вот с таким содержимым
Вот с таким содержимымПоказать
$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 минут а может и меньше и все.

Re: ESP8266

Добавлено: Чт окт 22, 2015 12:34 pm
alekszander
В общем опытным путём выяснилось что во время сработки датчика движения, скрипт отрабатывает, так как меняется время аптайма, но свойство не прописывается. Почему не понятно. Согласно документации разработчика необходимо создать скрипт espdata..... Свойство для датчиков движения active send-"gpioint", в скрипте прописано. Если кто нибудь сталкивался с такой проблемой как решали?

Re: ESP8266

Добавлено: Чт окт 22, 2015 12:40 pm
MaksMS82
В новой версии модуля с поддержкой 4 прерываний нумеруются от 1 до 4 , т.е. gpioint1 , gpioint2, gpioint3, gpioint4, а не gpioint.

Re: ESP8266

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