Помогите с термостатом ;(

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

something
Сообщения: 28
Зарегистрирован: Вт ноя 10, 2020 7:00 pm
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Помогите с термостатом ;(

Сообщение something » Пт ноя 12, 2021 2:34 pm

Chainik писал(а):
Пт ноя 12, 2021 11:29 am
Или в вашем случае достаточно установить свойству mqttSensor_temp04.value значение и MQTT-брокер сам "забросит" это значение на контроллер?
Я думал, что да. Через интерфейс это работает. Но по факту написать метод, который вносил бы изменения не получилось. Точно работает так:

file_get_contents("http://127.0.0.1/api.php/module/mqtt?to ... Set&msg=40");

Но возможно я просто не очень догоняю как менять свойства объектов. В интерфейсной части я просто привязываю объект plusminus к mqttSensor_temp04.value и все работает.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Помогите с термостатом ;(

Сообщение Chainik » Пт ноя 12, 2021 3:31 pm

Полный текст команды не видно. На всякий случай напишите, пожалуйста, полный текст, который идет после IP-адреса (api.php/module/mqtt?to ... Set&msg=40).

Но, похоже, да, достаточно будет поменять значение свойства и MQTT-брокер сам отправить установленное значение на контроллер. Будем пока из этого исходить.

И еще вопрос, с каким объект.свойством ассоциирован текущий статус горелки?

1. Создаем в объектах новый класс HeatingSystem.

2. В классе создаем свойства:
Status -- пока не знаю, за что будет отвечать, но обязательно пригодится (пока привяжем общий ярлычок отопления);
... остальные свойства добавим по необходимости.

3. Создаем методы:
targetTempUp -- увеличивает целевую температуру подачи котла на 1 градус;
targetTempDown -- уменьшает целевую температуру подачи котла на 1 градус.

Код метода targetTempUp:

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

$TargetTemp = gg('mqttSensor_temp04.value');
$TargetTemp = $TargetTemp + 1;
sg('mqttSensor_temp04.value', $TargetTemp);
Код метода targetTempDown:

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

$TargetTemp = gg('mqttSensor_temp04.value');
$TargetTemp = $TargetTemp - 1;
sg('mqttSensor_temp04.value', $TargetTemp);
4. Создаем в классе объект Boiler.
Можете у объекта в свойство с целевой температурой вручную сразу вписать начальное значение. Чтобы было чему отображаться в интерфейсе.
И в свойство Status тоже запишите значение "1".

5. Кладем картинки по пути: C:\_majordomo\htdocs\cms\scenes\
icons.rar
(36.5 КБ) 88 скачиваний
6. В меню добавляем элемент типа HTML-блок. HTML-код записывается в поле "Данные".

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

<style type="text/css">
.gorizontalno {
display: inline-block
}

.button:active {
  transform: scale(0.9, 0.9);
}

</style>

<div class="gorizontalno">
<div class="button">
<div style='display:%Boiler.Status|"block;none"%'><img src="\cms\scenes\styles\switch\i_warm_on.png" width="24" height="32"></div>
<div style='display:%Boiler.Status|"none;block"%'><img src="\cms\scenes\styles\switch\i_warm_on.png" width="24" height="32" style="background-color: yellow;"></div>
</div>
</div>


<div class="gorizontalno">
<div class="button">
<div onClick='callMethod("%Boiler.targetTempUp");'><img src="\cms\scenes\minus3.jpg" width="24" height="32"></div>
</div>
</div>

<div class="gorizontalno">
<div style='font-size:18pt; text-align:center; font-stretch:ultra-condensed'>%mqttSensor_temp04.value%</div>
</div>

<div class="gorizontalno">
<div class="button">
<div onClick='callMethod("%Boiler.targetTempUp");'><img src="\cms\scenes\plus3.jpg" width="24" height="32"></div>
</div>
</div>

<div><font size="4" color="blue">Фактическая температура: %mqttSensor_temp02.value%</font></div>
Может что-то сразу и не заработает, т.к. пишу "с колес", но отладка -- дело неизбежное...
За это сообщение автора Chainik поблагодарил:
something (Сб ноя 13, 2021 3:23 am)
Рейтинг: 1.16%
something
Сообщения: 28
Зарегистрирован: Вт ноя 10, 2020 7:00 pm
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Помогите с термостатом ;(

Сообщение something » Сб ноя 13, 2021 3:21 am

то сразу и не заработает, т.к. пишу "с колес", но отладка -- дело неизбежное...
Огромнейшее спасибо. В общем я постиг как это делается. Для котла все сделал. Добавил свойства Current - текущая температура, Purpose - целевая, Status - состояние горелки. Методы up/down реализовал как
up
$this->setProperty('Purpose', $this->getProperty('Purpose') + 0.5);
down
$this->setProperty('Purpose', $this->getProperty('Purpose') - 0.5);

Свойства привязал к MQTT. И в них сразу нужные значения, при изменении значения в Purpose оно автоматом улетает куда надо.

Естественно переписал html и добавил ссылку на историю с рисованием графиков. Пока в первом приближении все круто. Завтра займусь актуаторами, буду их переписывать, там сначала надо код для контроллеров переписать.
Screenshot_20211113_030352.png
Screenshot_20211113_030352.png (7.71 КБ) 1024 просмотра
Screenshot_20211113_031950.png
Screenshot_20211113_031950.png (42.6 КБ) 1024 просмотра
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Помогите с термостатом ;(

Сообщение Chainik » Сб ноя 13, 2021 8:35 am

Ну отлично!
У вас сервоприводы не 3-ходовыми случайно управляют? Я только вчера запустил вчернове алгоритм автоматической "подкрутки" сервоприводов для поддержания заданной температуры в помещениях. Похоже, что работает, наблюдаю...
something
Сообщения: 28
Зарегистрирован: Вт ноя 10, 2020 7:00 pm
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Помогите с термостатом ;(

Сообщение something » Сб ноя 13, 2021 10:19 am

Chainik писал(а):
Сб ноя 13, 2021 8:35 am
Ну отлично!
У вас сервоприводы не 3-ходовыми случайно управляют? Я только вчера запустил вчернове алгоритм автоматической "подкрутки" сервоприводов для поддержания заданной температуры в помещениях. Похоже, что работает, наблюдаю...
Не, у меня не столько сервоприводы, сколько актуаторы. Без питания они открытые, при подаче питания они закрываются. Время закрытия около 2-х минут, время открытия столько же. Соответственно если подавать на них импульсы, то можно держать их в любом промежуточном состоянии. Подключены они у меня через бесконтактные реле, так что отправлять на них импульсы вообще нет проблем. Через мадордомо такое делать было невозможно никакой протокол типа mqtt или http такое не потянул бы. А реализовать это на esp вообще нет проблем.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Помогите с термостатом ;(

Сообщение Chainik » Сб ноя 13, 2021 6:15 pm

Здорово!
Если не затруднит, оставьте здесь, пожалуйста, ссылку на модель ваших актуаторов. Вдруг, если буду брать, пригодиться...
something
Сообщения: 28
Зарегистрирован: Вт ноя 10, 2020 7:00 pm
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Помогите с термостатом ;(

Сообщение something » Вс ноя 14, 2021 12:58 pm

Chainik писал(а):
Сб ноя 13, 2021 6:15 pm
Здорово!
Если не затруднит, оставьте здесь, пожалуйста, ссылку на модель ваших актуаторов. Вдруг, если буду брать, пригодиться...
Я брал тут. У меня 230 Normal Open.
https://aliexpress.ru/item/4000099373075.html

230 чтобы не городить лишних блоков питания, токопотребление у нее почти никакое.
Normal Open, чтобы при глюках контроллеров, отключении электричества и тому подобного, не выморозить дом. Пусть лучше будет сильно жарко, чем все вымерзнет.
За это сообщение автора something поблагодарил:
Chainik (Вс ноя 14, 2021 8:15 pm)
Рейтинг: 1.16%
Ответить