Этот проект позволяет считывать информацию с теплового насоса Panasonic Aquarea и передавать данные либо на сервер MQTT, либо в формате JSON через HTTP.
Eine deutschsprachige README_DE.md нашел здесь больше всего.
В Нидерландах вы найдете README_NL.md здесь.
Suomen kielella README_FI.md luettavissa täällä.
Помощь по переводу на другие языки приветствуется.
Последний выпуск доступен здесь. Скомпилированный двоичный файл ESP8266 можно установить на Wemos D1 mini, на печатную плату HeishaMon и, как правило, на любую плату на базе ESP8266, совместимую с настройками сборки Wemos (флэш-память не менее 4 МБ). Вы также можете скачать код и скомпилировать его самостоятельно (см. необходимые библиотеки ниже). Бинарный файл ESP32-S3 предназначен для новой, большой версии heishamon.
HeishaMon может взаимодействовать с Panasonic Aquarea H, J, K и L&series. Подтвержденные пользователями типы HP вы можете найти здесь.
Если вы хотите скомпилировать этот образ самостоятельно, обязательно используйте упомянутые библиотеки и поддержку файловой системы на esp8266, поэтому выберите для этого правильный вариант флэш-памяти в arduino ide.
При запуске без настроенного Wi-Fi будет видна открытая точка доступа Wi-Fi, позволяющая настроить сеть Wi-Fi и сервер MQTT. Страница конфигурации будет расположена по адресу http://192.168.4.1.
После настройки и загрузки образ сможет читать и общаться с вашим тепловым насосом. Соединение GPIO13/GPIO15 будет использоваться для связи, поэтому вы можете, если захотите, оставить свой компьютер/загрузчик подключенным к плате.
Последовательный порт 1 (GPIO2) можно использовать для подключения другой последовательной линии (только GND и TX от платы) для чтения некоторых отладочных данных.
Все полученные данные будут отправлены в разные темы MQTT (описания тем см. ниже). Существует также раздел MQTT «panasonic_heat_pump/log», который обеспечивает ведение журнала отладки и шестнадцатеричный дамп полученных пакетов (если это разрешено на веб-портале).
Вы можете подключить сеть 1wire к GPIO4, которая будет отправлять отчеты в отдельные темы MQTT (panasonic_heat_pump/1wire/sensorid).
Программное обеспечение также может измерять мощность на порте S0 двух счетчиков кВтч. Вам нужно только подключить GPIO12 и GND к S0 одного счетчика кВтч, а если вам нужен второй счетчик кВтч, используйте GPIO14 и GND. Он будет сообщать о темах MQTT panasonic_heat_pump/s0/Watt/1 и panasonic_heat_pump/s0/Watt/2, а также в выходных данных JSON. Вы можете заменить «Ватт» в предыдущем разделе на «Ватт-час», чтобы получить счетчик потребления в Ватт-часах (на сообщение mqtt), или на «WatthourTotal», чтобы получить общее потребление, измеренное в Ватт-часах. Чтобы синхронизировать WatthourTotal с вашим счетчиком кВтч, опубликуйте правильное значение в MQTT в теме panasonic_heat_pump/s0/WatthourTotal/1 или panasonic_heat_pump/s0/WatthourTotal/2 с опцией «сохранить», пока heishamon перезагружается. После перезагрузки Heishamon считывает это значение как последнее известное значение, которое вы можете синхронизировать с помощью этого метода.
Обновить прошивку так же просто, как зайти в меню прошивки и после аутентификации с использованием имени пользователя «admin» и пароля «heisha» (или другого, указанного во время установки), загрузить туда двоичный файл.
Вывод всех полученных данных (тепловой насос и 1wire) в формате JSON доступен по URL-адресу http://heishamon.local/json (замените heishamon.local на IP-адрес вашего устройства Heishamon, если MDNS у вас не работает).
В папке «Интеграции» вы можете найти примеры подключения вашей платформы автоматизации к HeishaMon.
Функциональность правил позволяет вам управлять тепловым насосом изнутри самого HeishaMon. Это делает его намного более надежным, чем необходимость иметь дело с внешней домашней сетью через Wi-Fi. При публикации нового набора правил он немедленно проверяется и, если он действителен, используется. Если новый набор правил недействителен, он будет проигнорирован, и старый набор правил будет загружен снова. Вы можете проверить консоль на наличие отзывов по этому поводу. Если каким-то образом новый действующий набор правил приведет к сбою HeishaMon, он будет автоматически отключен при следующей перезагрузке, что позволит вам внести изменения. Это предотвращает попадание HeishaMon в цикл загрузки.
Техники, используемые в библиотеке правил, позволяют работать с очень большими наборами правил, но лучше всего держать их менее 10 000 байт.
Обратите внимание, что отправка команд на тепловой насос осуществляется асинхронно. Таким образом, команды, отправленные тепловому насосу в начале вашего синтаксиса, не будут немедленно отражены в значениях теплового насоса позже. Поэтому значения теплового насоса следует считывать с самого теплового насоса, а не значения, основанные на значениях, которые вы сохраняете самостоятельно.
Два общих правила заключаются в том, что пробелы являются обязательными, а точки с запятой используются в качестве символа конца строки.
Набор правил использует следующую структуру переменных:
#
: Глобальные переменные. Эти переменные доступны во всем наборе правил, но их необходимо определить внутри блока правил. Не используйте глобальные переменные для всех переменных, поскольку они будут постоянно использовать память.
$
: Локальные переменные. Эти переменные находятся внутри блока правил. Когда блок правил завершится, эти переменные будут очищены, освободив всю используемую память.
@
: Параметры теплового насоса. Они такие же, как указано на странице документации «Управление темами» и на домашней странице HeishaMon. Набор правил также соответствует логике чтения и записи, используемой через MQTT и REST API. Это означает, что темы чтения отличаются от тем записи. Таким образом, чтение состояния теплового насоса осуществляется через @Heatpump_State
, а изменение состояния теплового насоса — через @SetHeatpump
.
%
: переменные даты и времени. Их можно использовать для правил, основанных на дате и времени. В настоящее время поддерживаются %hour
(0–23), %minute
(0–59), %month
(1–12) и day
(1–7). Все они являются простыми целыми числами. Для установки правильной системной даты и времени на HeishaMon необходима правильная конфигурация NTP.
?
: Параметры термостата Эти переменные отражают параметры, считываемые с подключенного термостата при использовании функции OpenTherm. Когда OpenTherm будет поддерживаться, эта документация будет дополнена более точной информацией. На вкладке opentherm можно проверить переменные, которые можно использовать. Имена для чтения и записи одинаковы, но не все значения поддерживают чтение и/или запись. Это также указано на вкладке opentherm.
ds18b20#2800000000000000
: Значения температуры по 1-проводной схеме Далласа. Используйте эти переменные для считывания температуры подключенных датчиков. Эти значения, конечно, доступны только для чтения. Идентификатор датчика должен быть указан после хэштега.
Когда переменная вызывается, но ей еще не присвоено значение, значение будет NULL
.
Переменные могут иметь логический ( 1
или 0
), плавающий ( 3.14
), целочисленный ( 10
) и строковый тип. Определение строк осуществляется с помощью одинарных или двойных кавычек.
Правила записываются в блоках event
или function
блоках. Это блоки, которые срабатывают, когда что-то происходит; либо было получено новое значение теплового насоса или термостата, либо сработал таймер. Или может использоваться как простые функции
on [event] then [...] end on [name] then [...] end
Событиями могут быть параметры теплового насоса или термостата или таймеры:
on @Heatpump_State then [...] end on ?setpoint then [...] end on timer=1 then [...] end
При определении функций вы просто называете свой блок, а затем можете вызывать его из любого другого места:
on foobar then [...] end on @Heatpump_State then foobar(); end
Функции могут иметь параметры, которые вы можете вызывать:
on foobar($a, $b, $c) then [...] on @Heatpump_State then foobar(1, 2, 3); end
Если вы вызываете функцию с меньшим количеством значений, чем принимает функция, все остальные параметры будут иметь значение NULL.
В настоящее время существует одна специальная функция, которая вызывается при загрузке системы и сохранении нового набора правил:
on System#Boot then [...] end
Эту специальную функцию можно использовать для первоначальной установки глобальных переменных или определенных таймеров.
Обычные операторы поддерживаются со своей стандартной ассоциативностью и приоритетом. Это позволяет вам также использовать обычную математику.
&&
: И
||
: Или
==
: Равно`
>=
: больше или равно тогда
>
: Тогда больше
<
: Тогда меньше
<=
: Меньше или равно тогда
-
: Минус
%
: Модуль
*
: Умножить
/
: Разделять
+
: Плюс
^
: Мощность
Круглые скобки можно использовать для определения приоритета операторов, как это работает в обычных математических вычислениях.
coalesce
Возвращает первое значение, отличное от NULL
. Например, $b = NULL; $a = coalesce($b, 1);
вернет 1. Эта функция принимает неограниченное количество аргументов.
max
Возвращает максимальное значение входных параметров.
min
Возвращает минимальное значение входных параметров.
isset
Возвращает логическое значение true, когда входная переменная все еще имеет NULL
в любых других случаях она возвращает false.
round
Округляет входное число с плавающей запятой до ближайшего целого числа.
floor
Наибольшее целое значение, меньшее или равное входному значению с плавающей запятой.
ceil
Наименьшее целое значение, большее или равное входному значению с плавающей запятой.
setTimer
Устанавливает таймер, который сработает через X секунд. Первый параметр — это номер таймера, а второй — количество секунд до его срабатывания. Таймер срабатывает только один раз, поэтому его необходимо переустанавливать для повторяющихся событий. Когда таймер сработает, он может вызвать событие таймера, как описано выше. Например
print
Выводит значение на консоль.
concat
Объединяет различные значения в объединенную строку. Например: @SetCurves = concat('{zone1:{heat:{target:{high:', @Z1_Heat_Curve_Target_High_Temp, ',low:32}}}}');
on System#Boot then setTimer(3, 60); end on timer=3 then [...] setTimer(3, 60); end
Поддерживаются только следующие условия: if
, else
и elseif
:
if [condition] then [...] else if [condition] then [...] end end
if [condition] then [...] elseif [condition] then if [condition] then [...] else [...] end elseif [condition] then [...] else [...] end
Как только система правил будет использоваться все большим количеством пользователей, в документацию будут добавлены дополнительные примеры.
Расчет войны
on calcWar($Ta1, $Tb1, $Ta2, $Tb2) then #maxTa = $Ta1; if @Outside_Temp >= $Tb1 then #maxTa = $Ta1; elseif @Outside_Temp <= $Tb2 then #maxTa = $Ta2; else #maxTa = $Ta1 + (($Tb1 - @Outside_Temp) * ($Ta2 - $Ta1) / ($Tb1 - $Tb2)); end end
Уставка термостата
on ?roomTemp then calcWar(32, 14, 41, -4); $margin = 0.25; if ?roomTemp > (?roomTempSet + $margin) then if @Heatpump_State == 1 then @SetHeatpump = 0; end elseif ?roomTemp < (?roomTempSet - $margin) then if @Heatpump_State == 0 then @SetHeatpump = 1; end else @SetZ1HeatRequestTemperature = round(#maxTa); end end
Сброс к заводским настройкам можно выполнить через веб-интерфейс, но если веб-интерфейс недоступен, вы можете выполнить двойной сброс. Двойной сброс следует выполнять не слишком быстро, но и не слишком медленно. Обычно полсекунды между двумя сбросами достаточно. Чтобы указать, что двойной сброс привел к возврату к заводским настройкам, синий светодиод будет быстро мигать (вам нужно снова нажать кнопку сброса, чтобы перезапустить HeishaMon в нормальное состояние, где снова должна быть видна точка доступа Wi-Fi).
Ниже вы можете найти некоторые технические подробности о проекте. Как сделать кабели своими руками. Как собрать свою собственную печатную плату и т. д.
Связь может быть установлена через один из двух разъемов: CN-CNT или CN-NMODE. Если у вас есть WiFi-интерфейс Panasonic CZ-TAW1, который вы хотите заменить на HeishaMon, достаточно лишь отсоединить кабель от CZ-TAW1 и повторно подключиться к устройству HeishaMon. Однако невозможно использовать HeishaMon и оригинальный модуль CZ-TAW1 вместе в качестве активного устройства. Однако можно перевести HeishaMon в режим «Только прослушивание», что позволит HeishaMon и оригинальному модулю CZ-TAW1 сосуществовать. Единственным недостатком этого является то, что HeishaMon не может отправлять команды и использовать дополнительную опцию печатной платы.
Параметры связи: TTL 5V UART 9600,8,E,1
Распиновка CN-CNT (сверху вниз)
1–+5 В (250 мА)
2 – 0–5 В TX (от теплового насоса)
3 – RX 0–5 В (к тепловому насосу)
4 - +12 В (250 мА)
5 - Земля
Распиновка CN-NMODE (слева направо)
«Внимание! Как указано на печатной плате, левый контакт — это контакт 4, а правый — контакт 1. Не считайте от 1 до 4 слева!
4–+5 В (250 мА)
3 – 0–5 В TX (от теплового насоса)
2 – RX 0–5 В (к тепловому насосу)
1 - Земля
HeishaMon будет получать питание от Panasonic по кабелю (питание 5 В).
HeishaMon можно подключить на большом расстоянии. С обычным кабелем работает до 5 метров. Для больших расстояний возможна конфигурация TTL-RS485, как показано на рисунке ниже. Однако для HeishaMon требуется внешнее питание напряжением 5 В (например, от USB-кабеля).
RS-Онлайн заказы
Конрад приказывает
Используйте экранированный 4-жильный кабель сечением 24 AWG.
Печатные платы, необходимые для подключения к тепловому насосу, разработаны участниками проекта и перечислены ниже. Самая важная часть аппаратного обеспечения — это переключение уровня между 5 В у Panasonic и 3,3 В у HeishaMon и линия включения GPIO13/GPIO15 после загрузки.
Проекты PCD от участников проекта
Изображение Wemos D1 бета
Изображение ESP12-F
Чтобы упростить задачу, вы можете заказать готовую печатную плату у некоторых участников проекта:
Магазин Tindie от Игоря Юбемы (он же TheHogNL) из Нидерландов.
доски:
esp8266 от сообщества esp8266, версия 3.0.2 Arduino
Все библиотеки, которые мы используем, необходимы для компиляции.
Текущий список документированных тем MQTT можно найти здесь.
Программное обеспечение также поддерживает считывание однопроводных датчиков температуры ds18b20. Правильная 1-проводная конфигурация (с подтягивающим резистором 4,7 кОм), подключенная к GPIO4, будет считываться каждую настроенную секунду (минимум 5) и отправляться в тему panasonic_heat_pump/1wire/"sensor-hex-address". На готовых платах уже установлен этот резистор 4,7кОм.
Новый, большой Heishamon содержит два встроенных реле, которые можно включать и выключать с помощью команд MQTT. Реле можно использовать для переключения любых контактов, даже в сети 230 В (макс. 5 А). Например, для переключения контактов 230 В в тепловом насосе для управления «внешним термостатом», включения или выключения насоса или других устройств малой мощности. Я не рекомендую использовать реле в качестве выключателя электронагревателя, так как они потребляют слишком большую мощность. Чтобы управлять реле, просто отправьте значение 1 или 0 в тему MQTT «panasonic_heat_pump/gpio/relay/one» для первого реле или «panasonic_heat_pump/gpio/relay/two» для второго реле.
Если ваша плата Heishamon поддерживает opentherm, программное обеспечение также можно использовать для передачи информации opentherm от совместимого термостата к вашей домашней автоматизации через MQTT или JSON, и, как упоминалось выше, его также можно подключить непосредственно в правилах для подключения информации opentherm к тепловому насосу и обратно. , например, для отображения наружной температуры от теплового насоса на термостате opentherm. Если вы включите поддержку opentherm в настройках, на веб-странице появится новая вкладка. На этой вкладке вы увидите значения opentherm. Некоторые из них относятся к типу R(читать), некоторые — к W(ритуалу), а некоторые — к обоим. Чтение означает, что термостат может прочитать эту информацию от хейшамона. Вы предоставляете эту информацию через MQTT (или с помощью правил), обновляя это значение в теме mqtt «opentherm/read», например «panasonic_heat_pump/opentherm/read/outsideTemp». Значения записи — это информация от термостата, например «roomTemp». Они доступны в теме mqtt «opentherm/write». Вы можете использовать эти значения для изменения поведения теплового насоса в любом случае, используя вашу домашнюю автоматизацию и команды установки mqtt, чтобы использовать внутренние правила.
Доступные переменные opentherm:
chEnable — логическое значение, показывающее, следует ли включить центральное отопление. Это часто используется, когда термостат хочет обогреть ваш дом.
dhwEnable — логическое значение, указывающее, следует ли включать нагрев ГВС. Часто используется в качестве пользовательской опции на термостате для отключения нагрева горячей воды во время отпуска.
CoolingEnable — логическое значение, указывающее, следует ли включать охлаждение. Степень охлаждения запрашивается в «coolingControl», см. ниже.
roomTemp — это значение с плавающей запятой, измеренное термостатом комнатной температуры.
roomTempSet — это значение с плавающей запятой запрошенной уставки комнатной температуры на термостате.
chSetpoint — это значение с плавающей запятой, рассчитанное термостатом. Термостаты Opentherm пытаются установить это значение chSetpoint так, чтобы оно не превышало заданное значение помещения. Может использоваться для установки заданного значения воды на тепловом насосе, но большинство термостатов реагируют слишком быстро по сравнению с тем, как работают тепловые насосы.
maxRelativeModulation — это величина модуляции (0–100%), которую разрешено использовать тепловому насосу (подчиненному устройству opentherm) (см. относительную модуляцию в значениях READ, которые всегда должны быть равны или ниже этого максимального значения).
CoolingControl — это количество охлаждения (0–100%), которое термостат запрашивает у теплового насоса. Требуется термостат opentherm с поддержкой охлаждения.
dhwSetpoint — это значение с плавающей запятой, которое является текущим заданным значением ГВС, заданным термостатом, но также может быть установлено Heishamon для его отмены. Однако не все термостаты поддерживают эту функцию. Его не следует устанавливать выше, чем dhwSetUppBound, см. ниже.
maxTSet — это значение с плавающей запятой, которое определяет максимальную уставку воды. Пользователь может установить это на термостате или также из Heishamon. Его не следует устанавливать выше, чем chSetUppBound, см. ниже.
chPressure — это значение с плавающей запятой, которое определяет измеренное давление воды центрального отопления, предоставляемое Heishamon.
externalTemp — это значение с плавающей запятой, которое определяет измеренную внешнюю температуру центрального отопления, предоставляемую Heishamon.
inletTemp — это значение с плавающей запятой, которое определяет измеренную температуру воды на входе в систему центрального отопления, предоставляемую Heishamon.
outTemp — это значение с плавающей запятой, которое определяет измеренную температуру воды на выходе из системы центрального отопления, предоставляемую Heishamon.
dhwTemp — это значение с плавающей запятой, которое определяет измеренную температуру ГВС центрального отопления, предоставляемую Heishamon.
относительная модуляция — это величина (0–100 %) модуляции, на которой в данный момент работает тепловой насос (ведомое устройство opentherm), всегда должна быть ниже или равна значению maxRelativeModulation, установленному термостатом.
FlameState — это логическое значение (отправьте «true», «on» или «1», чтобы включить), которое определяет, обеспечивает ли центральное отопление центральное отопление.
chState — это логическое значение (для включения отправьте «true», «on» или «1»), которое определяет, находится ли тепловой насос в режиме комнатного/центрального отопления (например, 3-ходовой клапан в помещении, в режиме отопления).
dhwState — это логическое значение (для включения отправьте «true», «on» или «1»), которое определяет, находится ли тепловой насос в режиме ГВС (например, 3-ходовой клапан на ГВС).
CoolingState — это логическое значение (для включения отправьте «true», «on» или «1»), которое определяет, находится ли тепловой насос в режиме комнатного/центрального охлаждения (например, трехходовой клапан в помещении, в режиме охлаждения).
dhwSetUppBound — это целое значение от 0 до 127, которое устанавливает максимальную поддерживаемую температуру ГВС, поэтому термостат не может запросить значение dhwSetpoint выше этого значения. По умолчанию установлено значение 75. Чтобы переопределить, отправьте сообщение MQTT в эту тему и сохраните его, чтобы хейшамон снова получил его после перезагрузки.
dhwSetLowBound — это целое число от 0 до 127, которое устанавливает поддерживаемую минимальную температуру ГВС, поэтому термостат не может запросить значение dhwSetpoint ниже этого значения. По умолчанию установлено значение 40. Чтобы переопределить, отправьте сообщение MQTT в эту тему и сохраните его, чтобы хейшамон снова получил его после перезагрузки.
chSetUppBound — это целое число от 0 до 127, которое устанавливает максимальную поддерживаемую температуру отопления (воды отопления), поэтому термостат не может запросить chSetpoint выше этого значения. По умолчанию установлено значение 65. Чтобы переопределить, отправьте сообщение MQTT в эту тему и сохраните его, чтобы хейшамон снова получил его после перезагрузки.
chSetLowBound — это целое число от 0 до 127, которое устанавливает минимальную поддерживаемую температуру отопления (воды отопления), поэтому термостат не может запросить chSetpoint ниже этого значения. По умолчанию установлено значение 20. Чтобы переопределить, отправьте сообщение MQTT в эту тему и сохраните его, чтобы хейшамон снова получил его после перезагрузки.
Текущий список задокументированных расшифрованных байтов можно найти здесь.
Openhab2
Домашний помощник
Инструкция по IOBroker
Домотиц