Подключение исполнительных устройств, датчиков, контроллеров.
Модератор: immortal
-
Amarok
- Сообщения: 1425
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
-
Благодарил (а):
460 раз
-
Поблагодарили:
126 раз
-
Контактная информация:
Сообщение
Amarok » Ср окт 14, 2015 5:11 pm
Код: Выделить всё
//"Управление приборами по радио 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:
- За это сообщение автора Amarok поблагодарили (всего 2):
- AVL (Пт янв 01, 2016 5:06 pm) • kontakter (Пн мар 07, 2016 7:52 pm)
-
T-REX-XP
- Сообщения: 174
- Зарегистрирован: Вт июн 16, 2015 10:54 pm
-
Благодарил (а):
16 раз
-
Поблагодарили:
32 раза
Сообщение
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)
-
BeletskyAV
- Сообщения: 9
- Зарегистрирован: Пт фев 13, 2015 9:16 pm
- Откуда: Москва
-
Благодарил (а):
0
-
Поблагодарили:
4 раза
Сообщение
BeletskyAV » Чт окт 15, 2015 1:46 pm
Может кому пригодиться?
Написано при помощи этого плагина для Ардуины
Получаем от 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)
-
alekszander
- Сообщения: 178
- Зарегистрирован: Вс янв 05, 2014 5:37 am
-
Благодарил (а):
10 раз
-
Поблагодарили:
17 раз
Сообщение
alekszander » Вс окт 18, 2015 1:41 pm
Коллеги, доброго времени суток. Собираю стенд с датчиками движения, и esp, не могу понять как MDM принять данные с esp8266, прошивка с homes-smart последняя. прописал в скрипте, но это скорее всего не то.
-
ignat99
- Сообщения: 206
- Зарегистрирован: Сб дек 21, 2013 9:21 pm
- Откуда: Spain
-
Благодарил (а):
1 раз
-
Поблагодарили:
22 раза
Сообщение
ignat99 » Вс окт 18, 2015 2:19 pm
Вот не понимаю снова если вы делает программы, то почему не сделаете прошивку самостоятельно. Если же вы не программист, то почему не купите готовую систему с поддержкой последенй homes-smart. Если вам нужен MDM - закажите работу создателю этой программы.
-
lcf2003
- Сообщения: 13
- Зарегистрирован: Вт фев 25, 2014 2:13 pm
-
Благодарил (а):
6 раз
-
Поблагодарили:
0
Сообщение
lcf2003 » Пн окт 19, 2015 10:34 pm
присоединяюсь к вопросу alekszander.
Я первый раз имею дело с системой МДМ. И мне с первого раза не понятно как оно работает. В настройках дачтика (у меня дачтик температуры) прописал IP адрес МДМ сервера. А вот что и как прописывать в самой МДМ не понятно.
Может кто скинет скрины созданных объектов и сценариев с системы МДМ?
-
alekszander
- Сообщения: 178
- Зарегистрирован: Вс янв 05, 2014 5:37 am
-
Благодарил (а):
10 раз
-
Поблагодарили:
17 раз
Сообщение
alekszander » Вт окт 20, 2015 6:49 pm
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 минут а может и меньше и все.
- За это сообщение автора alekszander поблагодарили (всего 2):
- mirsum (Вс окт 25, 2015 5:30 pm) • Securbond (Пн май 02, 2016 12:19 pm)
-
alekszander
- Сообщения: 178
- Зарегистрирован: Вс янв 05, 2014 5:37 am
-
Благодарил (а):
10 раз
-
Поблагодарили:
17 раз
Сообщение
alekszander » Чт окт 22, 2015 12:34 pm
В общем опытным путём выяснилось что во время сработки датчика движения, скрипт отрабатывает, так как меняется время аптайма, но свойство не прописывается. Почему не понятно. Согласно документации разработчика необходимо создать скрипт espdata..... Свойство для датчиков движения active send-"gpioint", в скрипте прописано. Если кто нибудь сталкивался с такой проблемой как решали?
-
MaksMS82
- Сообщения: 422
- Зарегистрирован: Ср сен 05, 2012 7:30 am
- Откуда: Киров
-
Благодарил (а):
0
-
Поблагодарили:
70 раз
-
Контактная информация:
Сообщение
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)
-
alekszander
- Сообщения: 178
- Зарегистрирован: Вс янв 05, 2014 5:37 am
-
Благодарил (а):
10 раз
-
Поблагодарили:
17 раз
Сообщение
alekszander » Вт окт 27, 2015 4:08 pm
Всем доброго времени суток. В общем так и не ушла система дальше стола, до сих пор не могу понять, почему mdm не может нормально в свойствах объекта отбразить сработку геркона. Подключаю к GPIO14. Причем опять же, по времени видно, что скрипт отрабатывает, так как обновляется время. Но свойства gpioint1 не обновляется.