该项目可以从 Panasonic Aquarea 热泵读取信息,并将数据报告给 MQTT 服务器或通过 HTTP 以 JSON 格式报告。
Eine deutschsprachige README_DE.md 找到你的。
请阅读荷兰语 README_NL.md 文件。
请参阅 README_FI.md luettavissa täällä。
欢迎帮助翻译成其他语言。
最新版本可在此处获取。 ESP8266 编译的二进制文件可以安装在 Wemos D1 mini 上、HeishaMon PCB 上以及通常安装在与 Wemos 构建设置兼容的任何基于 ESP8266 的板上(至少 4MB 闪存)。您还可以下载代码并自行编译(请参阅下面所需的库)。 ESP32-S3 二进制文件适用于较新的大型版本的 heishamon。
HeishaMon 能够与松下 Aquarea H、J、K 和 L& 系列进行通信。您可以在此处找到经用户确认的 HP 类型
如果您想自己编译此映像,请务必使用上述库并支持 esp8266 上的文件系统,因此请在 arduino ide 中选择正确的闪存选项。
启动时,如果没有配置 wifi,将显示一个开放的 wifi 热点,允许您配置 wifi 网络和 MQTT 服务器。配置页面位于 http://192.168.4.1 。
配置并启动后,映像将能够读取热泵并与热泵对话。 GPIO13/GPIO15 连接将用于通信,因此您可以根据需要将计算机/上传器连接到开发板。
串行 1 (GPIO2) 可用于连接另一条串行线(仅来自电路板的 GND 和 TX)以读取一些调试数据。
所有接收到的数据将发送到不同的 MQTT 主题(主题说明见下文)。还有一个“panasonic_heat_pump/log”MQTT 主题,它提供调试日志记录和接收到的数据包的十六进制转储(如果在 Web 门户中启用)。
您可以在 GPIO4 上连接 1wire 网络,该网络将在单独的 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 输出。您可以将上一主题中的“Watt”替换为“Watthour”,以获取以 WattHour 为单位的消耗计数器(每个 mqtt 消息),或者替换为“WatthourTotal”以获取以 WattHour 为单位测量的总消耗量。要将 WatthourTotal 与您的千瓦时电表同步,请在 heishamon 重新启动时使用“retain”选项将正确的值发布到 MQTT 到 panasonic_heat_pump/s0/WatthourTotal/1 或 panasonic_heat_pump/s0/WatthourTotal/2 主题。重新启动后,heishamon 会读取此值作为最后一个已知值,您可以使用此方法进行同步。
更新固件就像进入固件菜单一样简单,在使用用户名“admin”和密码“heisha”(或设置过程中提供的其他密码)进行身份验证后,上传二进制文件。
所有接收到的数据(热泵和 1wire)的 json 输出可通过 URL http://heishamon.local/json 获取(如果 MDNS 不适合您,请将 heishamon.local 替换为您的 heishamon 设备的 IP 地址)。
在“集成”文件夹中,您可以找到如何将自动化平台连接到 HeishaMon 的示例。
规则功能允许您从 HeishaMon 本身控制热泵。这使得它比通过 WiFi 处理外部家庭自动化更加可靠。发布新规则集时,会立即对其进行验证并在有效时使用。当新的规则集无效时,它将被忽略并重新加载旧的规则集。您可以检查控制台以获取对此的反馈。如果新的有效规则集以某种方式导致 HeishaMon 崩溃,它将在下次重新启动时自动禁用,允许您进行更改。这可以防止 HeishaMon 进入启动循环。
规则库中使用的技术允许您使用非常大的规则集,但最佳实践是将其保持在 10.000 字节以下。
请注意,向热泵发送命令是异步完成的。因此,在语法开头发送到热泵的命令不会立即反映在稍后来自热泵的值中。因此,热泵值应该从热泵本身读取,而不是基于您自己保存的值。
两个一般规则是空格是强制性的并且分号用作行尾字符。
该规则集使用以下变量结构:
#
:全局变量 这些变量可以在整个规则集中访问,但必须在规则块内定义。不要对所有变量使用全局变量,因为它将持续使用内存。
$
: Locals 这些变量位于规则块内。当规则块完成时,这些变量将被清除,释放所有使用的内存。
@
:热泵参数 这些参数与管理主题文档页面中列出的以及 HeishaMon 主页上找到的相同。该规则集还遵循通过 MQTT 和 REST API 使用的 R/W 逻辑。这意味着读取主题与写入主题不同。因此读取热泵状态是通过@Heatpump_State
完成的,通过@SetHeatpump
更改热泵状态。
%
:日期时间变量 这些可用于基于日期和时间的规则。目前支持%hour
(0 - 23)、 %minute
(0 - 59)、 %month
(1 - 12) 和day
(1 - 7)。全部都是普通整数。需要正确的 NTP 配置才能在 HeishaMon 上设置正确的系统日期和时间。
?
:恒温器参数 这些变量反映使用 OpenTherm 功能时从连接的恒温器读取的参数。当支持 OpenTherm 时,该文档将包含更准确的信息。可以检查 opentherm 选项卡中可以使用的变量。读取和写入的名称相同,但并非所有值都支持读取和/或写入。 opentherm 选项卡也列出了这一点。
ds18b20#2800000000000000
:达拉斯 1 线温度值 使用这些变量读取所连接传感器的温度。这些值当然是只读的。传感器的 ID 应放置在主题标签之后。
当变量被调用但尚未设置值时,该值将为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
当输入变量仍为NULL
时返回 boolean true,其他情况下将返回 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
可以在 Web 界面上执行出厂重置,但如果 Web 界面不可用,您可以执行双重重置。双重复位的执行不应太快,但也不能太慢。通常两次重置之间间隔半秒就可以解决问题。为了表明双重重置执行了出厂重置,蓝色 LED 将快速闪烁(您现在需要再次按重置以重新启动 HeishaMon 恢复正常状态,此时 WiFi 热点应该再次可见)。
您可以在下面找到有关该项目的一些技术细节。如何构建自己的电缆。如何构建自己的PCB等。
可以通过两个套接字之一建立通信:CN-CNT 或 CN-NMODE。如果您想要用 HeishaMon 替换现有的 Panasonic CZ-TAW1 WiFi 接口,只需从 CZ-TAW1 上拔下电缆并重新连接到您的 HeishaMon 设备即可。然而,HeishaMon 和原始 CZ-TAW1 模块不能作为有源设备一起使用。然而,可以将 HeishaMon 置于“仅监听”模式,这将允许 HeishaMon 和原始 CZ-TAW1 模块共存。唯一的缺点是 HeishaMon 无法发送命令并使用可选的 PCB 选项。
通讯参数:TTL 5V UART 9600,8,E,1
CN-CNT 引脚排列(从上到下)
1 - +5V(250mA)
2 - 0-5V TX(来自热泵)
3 - 0-5V RX(至热泵)
4 - +12V(250mA)
5 - 接地
CN-NMODE 引脚分配(从左到右)
“警告!PCB 上印有,左侧引脚为引脚 4,右侧引脚为引脚 1。请勿从左数 1 到 4!
4 - +5V(250mA)
3 - 0-5V TX(来自热泵)
2 - 0-5V RX(至热泵)
1 - 接地
HeishaMon 将通过电缆从 Panasonic 接收电源(5v 电源)。
可以远距离连接黑煞兽。使用普通电缆时最长可达 5 米。对于较长距离,可以使用 TTL 至 RS485 配置,如下图所示。然而,HeishaMon 需要使用 5v 电源(例如通过 USB 电缆)从外部供电。
RS-在线订单
康拉德订单
使用一些 24 AWG 屏蔽 4 芯电缆。
连接热泵所需的 PCB 由项目成员设计,如下所列。硬件中最重要的部分是启动后从 Panasonic 的 5v 到 HeishaMon 的 3.3v 之间的电平转换以及 GPIO13/GPIO15 使能线。
项目成员的 PCD 设计
图片 Wemos D1 测试版
图片 ESP12-F
为了让事情变得简单,您可以从一些项目成员那里订购完整的 PCB:
来自荷兰 Igor Ybema(又名 TheHogNL)的 Tindie 商店
板:
esp8266 由 esp8266 社区版本 3.0.2 Arduino
我们使用的所有编译所需的库。
当前记录的 MQTT 主题列表可以在此处找到
该软件还支持ds18b20 1-wire温度传感器读取。连接到 GPIO4 的正确 1 线配置(带 4.7kohm 上拉电阻)将在每个配置秒(最少 5 秒)内读取,并在 panasonic_heat_pump/1wire/"sensor-hex-address" 主题中发送。在预制板上已经安装了这个 4.7kohm 电阻。
较新的大型 Heishamon 包含两个板载继电器,可以使用 MQTT 命令打开和关闭。这些继电器可用于任何触点切换,甚至 230V 电源(最大 5A)。例如,切换热泵中的 230V 触点以控制“外部恒温器”、打开或关闭泵或其他功率较低的设备。我不建议使用继电器作为电加热器的开关,因为它们消耗太多功率。要控制继电器,只需将值 1 或 0 发送到 MQTT 主题“panasonic_heat_pump/gpio/relay/one”(对于继电器 1)或“panasonic_heat_pump/gpio/relay/two”(对于继电器 2)。
如果您的 heishamon 板支持 opentherm,该软件还可以用于通过 MQTT 或 JSON 将 opentherm 信息从兼容的恒温器桥接到您的家庭自动化,如上所述,它也可以直接在规则中连接,以将 opentherm 信息连接到热泵并返回,例如显示 opentherm 恒温器上热泵的外部温度。如果您在设置中启用 opentherm 支持,网页中将会出现一个新选项卡。在该选项卡上,您将看到 opentherm 值。有些是 R(ead) 类型,有些是 W(rite) 类型,有些是两者兼而有之。读取意味着恒温器可以从 Heishamon 读取该信息。您可以通过 MQTT(或使用规则)更新 mqtt“opentherm/read”主题上的该值(例如“panasonic_heat_pump/opentherm/read/outsideTemp”)来提供该信息。写入值是来自恒温器的信息,例如“roomTemp”。这些可在 mqtt 主题“opentherm/write”上找到。您可以使用这些值以您想要的方式使用家庭自动化和 mqtt 设置命令来更改热泵行为,以使用内部规则。
可用的 opentherm 变量有:
chEnable 这是一个布尔值,显示是否应启用中央供暖。当恒温器想要为您的房子供暖时,通常会使用此功能。
dhwEnable 这是一个布尔值,显示是否应启用 DHW 加热。通常用作恒温器上的用户选项,以在假期期间禁用 DHW 加热
CoolingEnable 这是一个布尔值,显示是否应启用冷却。冷却量是在“coolingControl”中请求的,见下文。
roomTemp 是恒温器测量的室温的浮点值
roomTempSet 是恒温器上请求的室温设定点的浮点值
chSetpoint 是恒温器计算出的水设定点的浮点值。 Opentherm 恒温器尝试将此 chSetpoint 设置为不超过房间设定点。可用于设置热泵上的水设定点,但与热泵的工作方式相比,大多数恒温器的响应速度太快
maxRelativeModulation 是允许热泵(opentherm 从机)使用的调制量 (0-100%)(请参阅 READ 值中的relativeModulation,该值应始终等于或低于此最大值)
CoolingControl 是恒温器向热泵请求的冷却量 (0-100%)。需要带有冷却支持的 opentherm 恒温器。
dhwSetpoint 是浮点值,它是恒温器当前的 DHW 设置点,但也可以由 heishamon 设置来覆盖它。但并非所有恒温器都支持这一点。它不应设置高于 dhwSetUppBound,见下文。
maxTSet 是定义最大水设定点的浮点值。用户可以在恒温器上进行设置,也可以从 heishamon 进行设置。它不应设置高于 chSetUppBound,见下文。
chPressure 是浮点值,定义由 heishamon 提供的中央供暖测量水压
OutsideTemp 是浮点值,定义由 heishamon 提供的中央供暖系统测量的室外温度
importTemp 是浮点值,定义由 heishamon 提供的中央供暖测量的进水温度
exitTemp 是浮点值,定义由 heishamon 提供的集中供暖测量出水温度
dhwTemp 是浮点值,定义由 Heishamon 提供的中央供暖测量的 DHW 温度
relativeModulation 是热泵(opentherm 从机)当前运行的调制量 (0-100%),应始终低于或等于恒温器设置的 maxRelativeModulation
FlameState 是一个布尔值(发送“true”、“on”或“1”以启用),定义中央供暖是否正在提供中央供暖
chState 是一个布尔值(发送“true”、“on”或“1”以启用),定义热泵是否处于房间/中央供暖模式(例如房间上的三通阀处于供暖模式)
dhwState 是一个布尔值(发送“true”、“on”或“1”以启用),定义热泵是否处于 DHW 模式(例如 DHW 上的三通阀)
CoolingState 是一个布尔值(发送“true”、“on”或“1”以启用),定义热泵是否处于房间/中央冷却模式(例如房间上的三通阀处于冷却模式)
dhwSetUppBound 是 0 到 127 之间的整数值,用于设置支持的最大 DHW 温度,因此恒温器无法请求高于此值的 dhwSetpoint。默认设置为 75。要覆盖,请向此主题发送 MQTT 消息并保留它,以便 heishamon 在重新启动后再次收到它。
dhwSetLowBound 是一个 0 到 127 之间的整数值,用于设置支持的最低 DHW 温度,因此恒温器无法请求低于此值的 dhwSetpoint。默认设置为 40。要覆盖,请向此主题发送 MQTT 消息并保留它,以便 heishamon 在重新启动后再次收到它。
chSetUppBound 是一个 0 到 127 之间的整数值,用于设置支持的最大 CH(热水)温度,因此恒温器无法请求高于此值的 chSetpoint。默认设置为 65。要覆盖,请向此主题发送 MQTT 消息并保留它,以便 heishamon 在重新启动后再次收到它。
chSetLowBound 是一个 0 到 127 之间的整数值,用于设置支持的最低 CH(热水)温度,因此恒温器无法请求低于此值的 chSetpoint。默认设置为 20。要覆盖,请向此主题发送 MQTT 消息并保留它,以便 heishamon 在重新启动后再次收到它。
当前解密的记录字节列表可以在此处找到
开放哈布2
家庭助理
IO经纪商手册
多莫蒂茨