Страница 1 из 2
Автоналив.
Добавлено: Ср май 10, 2017 3:41 pm
Sapizdullin
Народ окажите помощь. Учитывая полную профанацию в php. Задача - по выбору или из меню или прямым вводом (все равно) выбрать количество литров. На трубе счетчик и клапан. Налилось и адью. Не могу понять как прикрепить начальное значение к скрипту. Что-то типа:
Код: Выделить всё
$val=getGlobal("counterPoliv.valueWr"); //записанное значение подсчитанных литров всего
$vol=getGlobal("counterPoliv.volume"); //введенное значение
CallMethod("relayAutoPoliv.turnOn"); //включает реле клапана
if ($val==($val+$vol)) {
CallMethod("relayAutoPoliv.turnOff"); // тут должна выключать..
};
Мозг кипит как котел, но толку нету.
Re: Автоналив.
Добавлено: Ср май 10, 2017 9:38 pm
xor
у вас что-то с алгоритмом, даже без пхп
($val==($val+$vol)) - клапан отключится лишь при $vol=0. У вас $vol уменьшаетя что ли при счете?
B цикле надо реальное значение счетчика проверять, а не константу. Или приведенный скрипт сам в каком-то цикле вызывается?
Опишите алгоритм по-подробней
Re: Автоналив.
Добавлено: Чт май 11, 2017 3:14 pm
Sapizdullin
Согласен. Объясню по порядку.
Есть труба с клапаном и счетчиком. Счетчик отправляет счет в ESPшки (сбрасываемым счетчиком, но это отдельная тема).
Есть метод, который запускается при каждом поступлении импульса со счетчика - приплюсовывает полученные данные к имеющейся переменной назовем ее
. Задача в следующем - делаю в меню управления выбор значений с шагом 5 литров. Это значение пишется в переменную
.
Все это должно крутится в скрипте, который запускается кнопкой в меню управления (как сделать понятно).
Т.е. выбрав значение (5,10,!5,20... л) и нажав кнопку допустим "Старт" должен запустится скрипт который методом
включит клапан. Отсчитав сумму обоих переменных - выключить клапан
. И желательно, чтоб при отсчете литров при открытом клапане значение valueWr менялось в реальном времени.
С логикой действительно что-то не так (я про голову).

Re: Автоналив.
Добавлено: Чт май 11, 2017 9:02 pm
xor
counter.valueWr - кол-во импульсов счетчика на трубе онлайн, так?
counter.volume - желаемое кол-во литров - сколько нужно долить, так?
Допустим, и то и другое - одной размерности (или литры, или количество импульсов счетчика)
уже_налито=counter.valueWr
дельта=counter.volume
всего_налить=уже_налито+дельта
включаем клапан
[ждём]:
если counter.valueWr <всего_налить то [ждём]
выключаем клапан
Так, что ли?
upd/ Если так, то я бы доверил Мажордому только интерфейс -отображение налитого, выбор дельты, состояние клапана, а управление клапаном перенес бы на контроллер, передав ему дельту.
Мажордомо затупит на неск. секунд, а водичка-то будет литься.
Re: Автоналив.
Добавлено: Чт май 11, 2017 10:51 pm
Sapizdullin
xor писал(а):counter.valueWr - кол-во импульсов счетчика на трубе онлайн, так?
counter.volume - желаемое кол-во литров - сколько нужно долить, так?
Допустим, и то и другое - одной размерности (или литры, или количество импульсов счетчика)
уже_налито=counter.valueWr
дельта=counter.volume
всего_налить=уже_налито+дельта
включаем клапан
[ждём]:
если counter.valueWr <всего_налить то [ждём]
выключаем клапан
Так, что ли?
Практически да, но с одним нюансом. Если Вы знакомы с прошивкой ESP Wi-Fi Iot от Maksa, то все завязано на нее, и есть небольшая проблема с ней, которую я решил несколько топорно, но иначе не получилось, а именно -
В прошивке есть режим счетчика, который сам считает импульсы и передает хоть по MQTT хоть по http в МД. Но в случае если произошел рестарт ESP счетчик у нее сбрасывается, сбрасывая счет в МДМ. Данную проблему я решил (хоть и через костыль). И теперь значение counter.valueWr показывает накопленное значение, с которым колдовать не желательно. Т.е. нужно ввести думаю еще какую-то виртуальную переменную. И у меня затык именно в
включаем клапан
[ждём]:
если counter.valueWr <всего_налить то [ждём]
выключаем клапан
в этом самом ждем..
Вы бы буквами скрипта написали, а я попробую... А то все в кучу в голове смешалось - циклы, переменные, константы..

Re: Автоналив.
Добавлено: Чт май 11, 2017 11:30 pm
xor
Извините, я не знаю всех ваших нюансов, наверное, будет неверным в этом случае давать какие-то конкретные советы((
И, повторюсь, уже не раз обжегшись, зарёкся доверять Мажордомо единолично управлять железом - светом, водой - я доверяю ему регистрацию и выдачу "рекомендаций" контроллерам - "закат, хорошо бы включить наружное освещение" - "жарко уже давно, нагрев бы убавили" - "помидоры вянут, полили бы" - с последующим контролем. Задайтесь вопросом, что будет, если скрипт Мажордома после открытия клапана зависнет - кто закроет клапан?
Re: Автоналив.
Добавлено: Пт май 12, 2017 10:13 am
Sapizdullin
Спасибо за помощь. Настоящий русский форум - задаешь вопрос и узнаешь в итоге какой ты м...к.. Вы можете мне сказать как сделать паузу в скрипте? До окончания счета и закрытия клапана? Повиснет скрипт - это мои проблемы.
Re: Автоналив.
Добавлено: Пт май 12, 2017 11:55 am
yurat2008
xor писал(а):т, если скрипт Мажордома после открытия клапана зависнет - кто закроет клапан?
а железо какое на месте эти команды выполняет? Можно esp8266 поставить и оно будет управлять, а МД только будет констатировать факт и в случае надобности подаст команду.
Re: Автоналив.
Добавлено: Пт май 12, 2017 12:35 pm
xor
[Ждём] как бесконечный цикл с проверкой:
While(gg('counter.valueWr')<$всего_налить){
Sleep(1);
}
выключаем клапан;
Отправлено с моего Nexus 5 через Tapatalk
Re: Автоналив.
Добавлено: Пт май 12, 2017 12:43 pm
xor
Sleep(1), сорри, sleep, кажется, только целые секунды позволяет указать
Отправлено с моего Nexus 5 через Tapatalk