Автоналив.

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
Sapizdullin
Сообщения: 408
Зарегистрирован: Сб фев 18, 2017 9:47 am
Откуда: Земля
Благодарил (а): 54 раза
Поблагодарили: 61 раз

Автоналив.

Сообщение Sapizdullin » Ср май 10, 2017 3:41 pm

Народ окажите помощь. Учитывая полную профанацию в php. Задача - по выбору или из меню или прямым вводом (все равно) выбрать количество литров. На трубе счетчик и клапан. Налилось и адью. Не могу понять как прикрепить начальное значение к скрипту. Что-то типа:

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

$val=getGlobal("counterPoliv.valueWr");  //записанное значение подсчитанных литров всего
$vol=getGlobal("counterPoliv.volume");  //введенное значение
CallMethod("relayAutoPoliv.turnOn"); //включает реле клапана 
if ($val==($val+$vol)) {
   CallMethod("relayAutoPoliv.turnOff");  // тут должна выключать..
  };
  
Мозг кипит как котел, но толку нету.
Intel(R) Core(TM) i7-6700, Debian 9 "Stretch", Zoneminder, Avreg.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Автоналив.

Сообщение xor » Ср май 10, 2017 9:38 pm

у вас что-то с алгоритмом, даже без пхп
($val==($val+$vol)) - клапан отключится лишь при $vol=0. У вас $vol уменьшаетя что ли при счете?
B цикле надо реальное значение счетчика проверять, а не константу. Или приведенный скрипт сам в каком-то цикле вызывается?
Опишите алгоритм по-подробней
Аватара пользователя
Sapizdullin
Сообщения: 408
Зарегистрирован: Сб фев 18, 2017 9:47 am
Откуда: Земля
Благодарил (а): 54 раза
Поблагодарили: 61 раз

Re: Автоналив.

Сообщение Sapizdullin » Чт май 11, 2017 3:14 pm

Согласен. Объясню по порядку.
Есть труба с клапаном и счетчиком. Счетчик отправляет счет в ESPшки (сбрасываемым счетчиком, но это отдельная тема).
Есть метод, который запускается при каждом поступлении импульса со счетчика - приплюсовывает полученные данные к имеющейся переменной назовем ее

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

counter.valueWr
. Задача в следующем - делаю в меню управления выбор значений с шагом 5 литров. Это значение пишется в переменную

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

counter.volume
.
Все это должно крутится в скрипте, который запускается кнопкой в меню управления (как сделать понятно).
Т.е. выбрав значение (5,10,!5,20... л) и нажав кнопку допустим "Старт" должен запустится скрипт который методом

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

CallMethod("relayAutoPoliv.turnOn"); 
включит клапан. Отсчитав сумму обоих переменных - выключить клапан

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

CallMethod("relayAutoPoliv.turnOff"); 
. И желательно, чтоб при отсчете литров при открытом клапане значение valueWr менялось в реальном времени.
С логикой действительно что-то не так (я про голову). :roll:
Intel(R) Core(TM) i7-6700, Debian 9 "Stretch", Zoneminder, Avreg.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Автоналив.

Сообщение xor » Чт май 11, 2017 9:02 pm

counter.valueWr - кол-во импульсов счетчика на трубе онлайн, так?
counter.volume - желаемое кол-во литров - сколько нужно долить, так?
Допустим, и то и другое - одной размерности (или литры, или количество импульсов счетчика)


уже_налито=counter.valueWr
дельта=counter.volume
всего_налить=уже_налито+дельта
включаем клапан
[ждём]:
если counter.valueWr <всего_налить то [ждём]
выключаем клапан


Так, что ли?
upd/ Если так, то я бы доверил Мажордому только интерфейс -отображение налитого, выбор дельты, состояние клапана, а управление клапаном перенес бы на контроллер, передав ему дельту.
Мажордомо затупит на неск. секунд, а водичка-то будет литься.
Аватара пользователя
Sapizdullin
Сообщения: 408
Зарегистрирован: Сб фев 18, 2017 9:47 am
Откуда: Земля
Благодарил (а): 54 раза
Поблагодарили: 61 раз

Re: Автоналив.

Сообщение Sapizdullin » Чт май 11, 2017 10:51 pm

xor писал(а):counter.valueWr - кол-во импульсов счетчика на трубе онлайн, так?
counter.volume - желаемое кол-во литров - сколько нужно долить, так?
Допустим, и то и другое - одной размерности (или литры, или количество импульсов счетчика)


уже_налито=counter.valueWr
дельта=counter.volume
всего_налить=уже_налито+дельта
включаем клапан
[ждём]:
если counter.valueWr <всего_налить то [ждём]
выключаем клапан


Так, что ли?
Практически да, но с одним нюансом. Если Вы знакомы с прошивкой ESP Wi-Fi Iot от Maksa, то все завязано на нее, и есть небольшая проблема с ней, которую я решил несколько топорно, но иначе не получилось, а именно -
В прошивке есть режим счетчика, который сам считает импульсы и передает хоть по MQTT хоть по http в МД. Но в случае если произошел рестарт ESP счетчик у нее сбрасывается, сбрасывая счет в МДМ. Данную проблему я решил (хоть и через костыль). И теперь значение counter.valueWr показывает накопленное значение, с которым колдовать не желательно. Т.е. нужно ввести думаю еще какую-то виртуальную переменную. И у меня затык именно в
включаем клапан
[ждём]:
если counter.valueWr <всего_налить то [ждём]
выключаем клапан
в этом самом ждем..
Вы бы буквами скрипта написали, а я попробую... А то все в кучу в голове смешалось - циклы, переменные, константы.. :mrgreen:
Intel(R) Core(TM) i7-6700, Debian 9 "Stretch", Zoneminder, Avreg.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Автоналив.

Сообщение xor » Чт май 11, 2017 11:30 pm

Извините, я не знаю всех ваших нюансов, наверное, будет неверным в этом случае давать какие-то конкретные советы((

И, повторюсь, уже не раз обжегшись, зарёкся доверять Мажордомо единолично управлять железом - светом, водой - я доверяю ему регистрацию и выдачу "рекомендаций" контроллерам - "закат, хорошо бы включить наружное освещение" - "жарко уже давно, нагрев бы убавили" - "помидоры вянут, полили бы" - с последующим контролем. Задайтесь вопросом, что будет, если скрипт Мажордома после открытия клапана зависнет - кто закроет клапан?
Аватара пользователя
Sapizdullin
Сообщения: 408
Зарегистрирован: Сб фев 18, 2017 9:47 am
Откуда: Земля
Благодарил (а): 54 раза
Поблагодарили: 61 раз

Re: Автоналив.

Сообщение Sapizdullin » Пт май 12, 2017 10:13 am

Спасибо за помощь. Настоящий русский форум - задаешь вопрос и узнаешь в итоге какой ты м...к.. Вы можете мне сказать как сделать паузу в скрипте? До окончания счета и закрытия клапана? Повиснет скрипт - это мои проблемы.
Intel(R) Core(TM) i7-6700, Debian 9 "Stretch", Zoneminder, Avreg.
yurat2008
Сообщения: 147
Зарегистрирован: Сб мар 04, 2017 7:04 pm
Благодарил (а): 15 раз
Поблагодарили: 13 раз

Re: Автоналив.

Сообщение yurat2008 » Пт май 12, 2017 11:55 am

xor писал(а):т, если скрипт Мажордома после открытия клапана зависнет - кто закроет клапан?
а железо какое на месте эти команды выполняет? Можно esp8266 поставить и оно будет управлять, а МД только будет констатировать факт и в случае надобности подаст команду.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Автоналив.

Сообщение xor » Пт май 12, 2017 12:35 pm

[Ждём] как бесконечный цикл с проверкой:

While(gg('counter.valueWr')<$всего_налить){
Sleep(1);
}
выключаем клапан;

Отправлено с моего Nexus 5 через Tapatalk
Последний раз редактировалось xor Пт май 12, 2017 12:53 pm, всего редактировалось 1 раз.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Автоналив.

Сообщение xor » Пт май 12, 2017 12:43 pm

Sleep(1), сорри, sleep, кажется, только целые секунды позволяет указать

Отправлено с моего Nexus 5 через Tapatalk
Ответить