Re: Система защиты от протечек на ESP 8266
Добавлено: Пн янв 14, 2019 8:33 pm
Собственно, skysilver всё хорошо расписал.
Сценарий обновляет свойства объектов класса ESP8266 плюс реагирует на прерывания на самой ЕСП:
Есть несколько классов, объекты которых ссылаются на тот или иной объект ЕСП : реле, информеры, датчики итд.
Также имеются сценарии, которые циклично (например, раз в минуту) "разносят" данные с объектов ЕСП по связанным объектам реле, датчиков итд и обрабатывают эти данные.
Масштабируемость - в иерархии : на один объект ЕСП могут ссылаться самые разные объекты, ведь ЕСП весьма функциональна.
А у вас всё крутится вокруг одного объекта : ThisComputer. Это оправдано, если датчиков и исполнительных устройств 1, 2, 3... Но у меня сейчас в сети 14 штук ЕСП и добавляются новые.
У меня ЕСП сами инициируют передачу данных на сервак. Я не вижу принципиальных возражений против периодического опроса сервером, но всё равно придется городить механизм, когда ЕСП сама хочет вам сообщить, что воды уже 1мм, а к моменту очередного опроса от сервака воды уже будет по колено.
есть сценарий, который обрабатывает get от ESPJackOfShadows писал(а): ↑Пн янв 14, 2019 5:06 pmКак именно Вы делали, и в чём у меня немасштабируемость?
СпойлерПоказать
$idesp=$params['idesp'];
$host=$params['hostname'];
if (!$host) return;
say1("ESP.Host=".$host);
//addClass('ESP8266'); //Создаем класс ESP8266
addClassObject('ESP8266',$host); //Создаёт класс заданного имени дочерним от ParentClass
sg ('ESP8266.'.$host.".idesp",$idesp);
sg ('ESP8266.'.$host.".hostname",$host);
$esp=getObjectsByClass("ESP8266");
foreach($esp as $obj)
{
// say($obj['TITLE']);
// say(gg($obj['TITLE'].".idesp"));
if (gg($obj['TITLE'].".hostname") ==$host) //
{
// say($obj['TITLE']);
if (is_array($params)) {
sg ($obj['TITLE'].".LastUpdate",date("d-m-Y H:i:s",time()));
//если модуль был неактивный, то отмечаем активность
if (gg($obj['TITLE'].".alive")=='false') callMethod($obj['TITLE'].".testAlive");
foreach($params as $k=>$v) {
if ($k!="script") {
sg($obj['TITLE'].".".$k,$v);
}
}
}
$ibutton = $params['ibutton']; //если произошло считывание, то ЕСП передает этот параметр. В обычной периодической посылке этого параметра нет
if ($ibutton != '') {
say($host.".ibutton = ".$ibutton);
cm("keyAccess.iButton_read", array("iButton"=>$ibutton, "iButtonst"=>$params["ibuttonst"]));
}
$wiegandID = $params['wiegand'];
if ($wiegandID != '')
say($host.".Wiegand = ".$wiegandID);
//обработка прерываний
if ($params['gpioint1']==1) {
// getURL('http://192.168.1.218/gpio?st=2&pin=12', 0);
runScript("INT1_received", array("module"=>$host));
say('INT1');
}
if ($params['gpioint2']==1) {
runScript("INT2_received", array("module"=>$host));
say('INT2');
}
}
}
$host=$params['hostname'];
if (!$host) return;
say1("ESP.Host=".$host);
//addClass('ESP8266'); //Создаем класс ESP8266
addClassObject('ESP8266',$host); //Создаёт класс заданного имени дочерним от ParentClass
sg ('ESP8266.'.$host.".idesp",$idesp);
sg ('ESP8266.'.$host.".hostname",$host);
$esp=getObjectsByClass("ESP8266");
foreach($esp as $obj)
{
// say($obj['TITLE']);
// say(gg($obj['TITLE'].".idesp"));
if (gg($obj['TITLE'].".hostname") ==$host) //
{
// say($obj['TITLE']);
if (is_array($params)) {
sg ($obj['TITLE'].".LastUpdate",date("d-m-Y H:i:s",time()));
//если модуль был неактивный, то отмечаем активность
if (gg($obj['TITLE'].".alive")=='false') callMethod($obj['TITLE'].".testAlive");
foreach($params as $k=>$v) {
if ($k!="script") {
sg($obj['TITLE'].".".$k,$v);
}
}
}
$ibutton = $params['ibutton']; //если произошло считывание, то ЕСП передает этот параметр. В обычной периодической посылке этого параметра нет
if ($ibutton != '') {
say($host.".ibutton = ".$ibutton);
cm("keyAccess.iButton_read", array("iButton"=>$ibutton, "iButtonst"=>$params["ibuttonst"]));
}
$wiegandID = $params['wiegand'];
if ($wiegandID != '')
say($host.".Wiegand = ".$wiegandID);
//обработка прерываний
if ($params['gpioint1']==1) {
// getURL('http://192.168.1.218/gpio?st=2&pin=12', 0);
runScript("INT1_received", array("module"=>$host));
say('INT1');
}
if ($params['gpioint2']==1) {
runScript("INT2_received", array("module"=>$host));
say('INT2');
}
}
}
Код: Выделить всё
if ($params['gpioint2']==1) {
runScript("INT2_received", array("module"=>$host));
Также имеются сценарии, которые циклично (например, раз в минуту) "разносят" данные с объектов ЕСП по связанным объектам реле, датчиков итд и обрабатывают эти данные.
Масштабируемость - в иерархии : на один объект ЕСП могут ссылаться самые разные объекты, ведь ЕСП весьма функциональна.
А у вас всё крутится вокруг одного объекта : ThisComputer. Это оправдано, если датчиков и исполнительных устройств 1, 2, 3... Но у меня сейчас в сети 14 штук ЕСП и добавляются новые.
У меня ЕСП сами инициируют передачу данных на сервак. Я не вижу принципиальных возражений против периодического опроса сервером, но всё равно придется городить механизм, когда ЕСП сама хочет вам сообщить, что воды уже 1мм, а к моменту очередного опроса от сервака воды уже будет по колено.