График расходы воды.

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

Модератор: immortal

Аватара пользователя
blackangel
Сообщения: 148
Зарегистрирован: Пт окт 21, 2016 2:00 pm
Благодарил (а): 31 раз
Поблагодарили: 13 раз

График расходы воды.

Сообщение blackangel » Вт фев 14, 2017 4:44 pm

Всем привет! Возможно уже было, но я что то не нашел, может плохо искал.

В общем хотелось бы реализовать график потребления воды. Что бы по графику можно было увидеть когда был расход воды а когда нет.

У меня есть в системе переменная которая дает импульс при прохождении через счетчик 10л воды.

У кого какие идеи?

Я пока надумал такое: нужен объект для подсчета импульсов (общий расход воды за все время), 2й объект где будут фиксироваться импульсы накопленные за 30мин например. но как это сделать....???? или может у кого другие идеи?
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: График расходы воды.

Сообщение Bagir » Вт фев 14, 2017 4:49 pm

МегаД умеет сама считать импульсы. МД когда нужно может забирать данные счетчика и обнулять его. А может и сам считать, если система работает постоянно. Копите данные в объекте с историей, а потом рисуйте график любым понравившимся способом. Есть встроенные инструменты, а если хочется чего то замудренного, то есть вот такой вариант
СпойлерПоказать
Изображение
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
blackangel
Сообщения: 148
Зарегистрирован: Пт окт 21, 2016 2:00 pm
Благодарил (а): 31 раз
Поблагодарили: 13 раз

Re: График расходы воды.

Сообщение blackangel » Вт фев 14, 2017 4:57 pm

Bagir писал(а):МегаД умеет сама считать импульсы. МД когда нужно может забирать данные счетчика и обнулять его. А может и сам считать, если система работает постоянно. Копите данные в объекте с историей, а потом рисуйте график любым понравившимся способом. Есть встроенные инструменты, а если хочется чего то замудренного, то есть вот такой вариант
СпойлерПоказать
Изображение

График температуры воздуха, влажности и т.д., я давно сделал.

Сейчас именно вопрос в том что бы можно было увидеть когда в какое время было потребления воды и сколько.

Счетчики уже подключены к контроллеру (у меня все на промышленных, Delta, гораздо выше классом чем те что вы написали). Вопрос в реализации, формуле, скрипте и т.д..... я не особо силен в PHP и скриптах. Поэтому и прошу помощи, ну и от меня скрины и описание всего. Вместе мы сможет поставить еще одну галочку в функциональности Majordomo=)
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: График расходы воды.

Сообщение Vit » Вт фев 14, 2017 4:59 pm

Опишите для примера в каком виде вы данные с контроллеров получаете в компьютер...а дальше уже вопрос "техники".
Аватара пользователя
blackangel
Сообщения: 148
Зарегистрирован: Пт окт 21, 2016 2:00 pm
Благодарил (а): 31 раз
Поблагодарили: 13 раз

Re: График расходы воды.

Сообщение blackangel » Вт фев 14, 2017 5:10 pm

Vit писал(а):Опишите для примера в каком виде вы данные с контроллеров получаете в компьютер...а дальше уже вопрос "техники".

цепочка подключения такая: Счетчик воды - контроллер Delta с аналоговыми вводами (modbus) - RaspberryPi3 (majordomo+modbusTCP).

Счетчик делает импульс при проходе 10 литров воды, контроллер фиксирует импульс и выводит в порт modbus по высокому уровню (т.е. в независимости в каком положении встанет счетчик, контроллер делает четкий импульс) этот импульс я могу видеть в majordomo в объекте (пока не реализовал, но вечером сделаю). т.е. допустим: Объект импульса ХВС - impulse_cold (по умолчанию 0, при импульсе 1), объект общего потребления ХВС - consumption_cold_water (тут нужно суммировать все импульсы что бы знать значение счетчика, удобно для передачи показания на портал гос услуг..... вот если бы еще автоматически передавалось бы=))))))) мечты)

Вот собственно вот так, ну и с ГВС тоже самое.
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: График расходы воды.

Сообщение Bagir » Вт фев 14, 2017 5:33 pm

Весть дом под управлениями МегаД. Доволен. Работают уже хрен знает сколько без остановок. Промышленное железо не значит круче. Да, о Delta у меня тоже положительные отзывы. Но не суть.
blackangel писал(а):График температуры воздуха, влажности и т.д., я давно сделал.
Карты в руки! Тут совершенно схожая задача. Если на входе мы имеем событие прихода импульса, то можем вызывать Объект.Метод При этом мы можем писать в свойство с историей например единичку, или дату-время прихода импульса, чтобы не возиться с вариантом оптимизации базы данных, которая подрежет одинаковые значения. Далее выбираем условный период, и считаем количество записей в базе данных. Получаем замечательный массив и рисуем по нему красивый график.
Всё нужно начать с накопления данных в истории свойства. посмотреть просто.
Изображение
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
blackangel
Сообщения: 148
Зарегистрирован: Пт окт 21, 2016 2:00 pm
Благодарил (а): 31 раз
Поблагодарили: 13 раз

Re: График расходы воды.

Сообщение blackangel » Вт фев 14, 2017 5:59 pm

Эх... если бы поподробнее про реализацию... у меня на delta Т.к с объектов остались.
Аватара пользователя
blackangel
Сообщения: 148
Зарегистрирован: Пт окт 21, 2016 2:00 pm
Благодарил (а): 31 раз
Поблагодарили: 13 раз

Re: График расходы воды.

Сообщение blackangel » Вт фев 14, 2017 7:22 pm

По сути надо написать сценарий который будет записывать в объект значения от импульса, Т.е прибавлять. Ну и раз в какой то промежуток обнулять.... верно? Если да то поделитесь скриптом если не сложно.
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 183 раза

Re: График расходы воды.

Сообщение Jager » Вт фев 14, 2017 7:52 pm

blackangel писал(а):По сути надо написать сценарий который будет записывать в объект значения от импульса, Т.е прибавлять. Ну и раз в какой то промежуток обнулять.... верно? Если да то поделитесь скриптом если не сложно.
При использовании мегад данные забираю каждый час так

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

$state = file_get_contents('http://192.168.2.95/sec/?pt=3&cmd=get');
$value = explode('/',$state);
sg('countWater.status',substr($value[0],0));
sg('countWater.const',substr($value[1],0)/100);
sg("countWater.updatedTime",date("H:i",time()));
 
и раз в сутки, в 00:01 делаю так

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

$state = file_get_contents('http://192.168.2.95/sec/?pt=3&cmd=get');
$value = explode('/',$state);
sg('countWater.status',substr($value[0],0));
sg('countWater.24h',substr($value[1],0)/100);// записываем показания за сутки
sg("countWater.updatedTime",date("H:i",time()));
getUrl('http://192.168.2.95/sec/?pt=3&cnt=0');// сбрасываем счетчик в 0   
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: График расходы воды.

Сообщение Bagir » Вт фев 14, 2017 7:53 pm

Не сложно конечно, весь мой код всегда коннекте, чтобы другие смогли что то для себя найти. Просто нет такого универсального скрипта, да и быть не может. Но мы можем прямо сейчас начать решать эту задачу по шагам.
Если стоит задача не просто посчитать итоги, а построить график, то нам понадобится свойство с историей. Вот с него и начнем.
Есть класс keySensors. В нем могут располагаться объекты разных датчиков. Но не всем им нужно хранить историю. Поэтому изначально у свойства status история не включена. Я предлагаю создать в этом классе подкласс, и назвать его flowmeter.
покажу на примере моего подкласса для температурных датчиковПоказать
Изображение
В этом подклассе у нас будут находиться объекты датчиков, которые что то измеряют. Например воду по импульсам. Добавим в наш подкласс одноименное свойство status. Затем нужно включить историю свойства.
СпойлерПоказать
Изображение
После этого можно через браузер вызнать метод нашего объекта и перейти к написанию его кода Для начала добавим в код метода просто say('Это случилось'); или debmes('Это случилось'); чтобы удостовериться, что код вызываемого метода исполняется.

На пока достаточно, а потом потом перейдем к записи данных в историю свойства status. Жду результатов с картинками.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить