該專案可以從 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。
dhwSetLowBound 是一個 0 到 127 之間的整數值,用於設定支援的最低 DHW 溫度,因此恆溫器無法要求低於此值的 dhwSetpoint。預設為 40。
chSetUppBound 是一個 0 到 127 之間的整數值,用於設定支援的最大 CH(熱水)溫度,因此恆溫器無法要求高於此值的 chSetpoint。預設為 65。
chSetLowBound 是一個 0 到 127 之間的整數值,用於設定支援的最低 CH(熱水)溫度,因此恆溫器無法要求低於此值的 chSetpoint。預設為 20。
目前解密的記錄位元組清單可以在此處找到
開放哈布2
家庭助理
IO經紀商手冊
多莫蒂茨