このプロジェクトにより、Panasonic Aquarea ヒート ポンプから情報を読み取り、そのデータを MQTT サーバーまたは HTTP 経由の JSON 形式でレポートできるようになります。
Eine deutschsprachige README_DE.md を見つけてください。
README_NL.md を参照してください。
Suomen kielellä README_FI.md luettavissa täällä.
他の言語への翻訳に関するサポートは大歓迎です。
最新リリースはここから入手できます。 ESP8266 でコンパイルされたバイナリは、Wemos D1 mini、HeishaMon PCB、および通常は Wemos ビルド設定 (少なくとも 4MB フラッシュ) と互換性のある ESP8266 ベースのボードにインストールできます。コードをダウンロードして自分でコンパイルすることもできます (以下の必要なライブラリを参照してください)。 ESP32-S3 バイナリは、heishamon の新しい大規模バージョン用です。
HeishaMon は、Panasonic アクアエリア H、J、K、L&シリーズと通信することができます。ユーザーが確認したHPの種類はこちら
このイメージを自分でコンパイルする場合は、必ず前述のライブラリと esp8266 上のファイルシステムのサポートを使用してください。そのため、Arduino IDE で適切なフラッシュ オプションを選択してください。
Wi-Fi が設定されていない状態で開始すると、オープン Wi-Fi ホットスポットが表示され、Wi-Fi ネットワークと MQTT サーバーを設定できるようになります。構成ページは http://192.168.4.1 にあります。
構成して起動すると、イメージはヒートポンプを読み取り、通信できるようになります。 GPIO13/GPIO15 接続は通信に使用されるため、必要に応じてコンピューター/アップローダーをボードに接続したままにすることができます。
シリアル 1 (GPIO2) を使用して別のシリアル ライン (ボードからの GND および TX のみ) を接続し、デバッグ データを読み取ることができます。
受信したすべてのデータは、さまざまな MQTT トピックに送信されます (トピックの説明については以下を参照)。デバッグ ログと受信パケットの 16 進ダンプを提供する「panasonic_heat_pump/log」MQTT トピックもあります (Web ポータルで有効になっている場合)。
GPIO4 で 1wire ネットワークに接続すると、別個の MQTT トピック (panasonic_heat_pump/1wire/sensorid) でレポートされます。
このソフトウェアは、2 kWh メーターの S0 ポートでワットを測定することもできます。 GPIO12 と GND を 1 つの kWh メーターの S0 に接続するだけで済みます。2 番目の kWh メーターが必要な場合は、GPIO14 と GND を使用します。 MQTT トピック panasonic_heat_pump/s0/Watt/1 および panasonic_heat_pump/s0/Watt/2 をレポートし、JSON 出力でもレポートします。前のトピックの「Watt」を「Watthour」に置き換えて消費量カウンターを WattHour (mqtt メッセージごと) で取得するか、「WatthourTotal」に置き換えて Watthour で測定された合計消費量を取得できます。 WatthourTotal を kWh メーターと同期するには、heishamon の再起動中に、panasonic_heat_pump/s0/WatthourTotal/1 または panasonic_heat_pump/s0/WatthourTotal/2 トピックに正しい値を MQTT に「retain」オプションを指定してパブリッシュします。再起動時に、heishamon はこの値を、このメソッドを使用して同期できる最後の既知の値として読み取ります。
ファームウェアの更新は、ファームウェア メニューに移動し、ユーザー名「admin」とパスワード「heisha」(またはセットアップ中に指定したもの)で認証した後、そこにバイナリをアップロードするだけで簡単です。
受信したすべてのデータ (ヒートポンプと 1wire) の json 出力は、URL http://heishamon.local/json で入手できます (MDNS が機能しない場合は、heishamon.local を heishamon デバイスの IP アドレスに置き換えてください)。
「integrations」フォルダー内には、自動化プラットフォームを HeishaMon に接続する方法の例があります。
ルール機能を使用すると、HeishaMon 自体からヒートポンプを制御できます。これにより、WiFi 経由で外部の domotica を処理するよりもはるかに信頼性が高くなります。新しいルールセットを投稿すると、即座に検証され、有効な場合は使用されます。新しいルールセットが無効な場合、それは無視され、古いルールセットが再度ロードされます。これに関するフィードバックについては、コンソールを確認してください。何らかの理由で新しい有効なルールセットが HeishaMon をクラッシュさせた場合、次回の再起動時に自動的に無効になり、変更が可能になります。これにより、HeishaMon がブート ループに陥るのを防ぎます。
ルール ライブラリで使用される手法を使用すると、非常に大規模なルールセットを操作できますが、ベスト プラクティスは 10.000 バイト未満に抑えることです。
ヒートポンプへのコマンドの送信は非同期で行われることに注意してください。したがって、構文の先頭でヒートポンプに送信されたコマンドは、後でヒートポンプからの値にすぐには反映されません。したがって、ヒートポンプの値は、自分で保持している値に基づく値ではなく、ヒートポンプ自体から読み取る必要があります。
2 つの一般的なルールは、スペースが必須であることと、セミコロンが行末文字として使用されることです。
ルールセットは次の変数構造を使用します。
#
: グローバル これらの変数はルールセット全体でアクセスできますが、ルール ブロック内で定義する必要があります。メモリを永続的に使用するため、すべての変数にグローバルを使用しないでください。
$
: ローカル これらの変数はルール ブロック内に存在します。ルール ブロックが終了すると、これらの変数はクリーンアップされ、使用されていたメモリが解放されます。
@
: ヒートポンプ パラメーター これらは、トピックの管理ドキュメント ページおよび HeishaMon ホームページに記載されているものと同じです。ルールセットは、MQTT および REST API を通じて使用される R/W ロジックにも準拠します。これは、読み取りトピックと書き込みトピックが異なることを意味します。したがって、ヒートポンプの状態の読み取りは@Heatpump_State
を通じて行われ、ヒートポンプの状態の変更は@SetHeatpump
を通じて行われます。
%
: 日時変数 これらは日時ベースのルールに使用できます。現在、 %hour
(0 ~ 23)、 %minute
(0 ~ 59)、 %month
(1 ~ 12)、およびday
(1 ~ 7) がサポートされています。すべては単純な整数です。 HeishaMon で正しいシステム日付と時刻を設定するには、適切な NTP 構成が必要です。
?
: サーモスタットのパラメータ これらの変数は、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 値になります。
現在、新しいルールセットが保存されるときにシステムが起動するときに呼び出される特別な関数が 1 つあります。
on System#Boot then [...] end
この特別な関数を使用して、グローバルまたは特定のタイマーを初期設定することができます。
通常の演算子は、標準の結合性と優先順位でサポートされています。これにより、通常の数学も使用できるようになります。
&&
: そして
||
: または
==
: 等しい`
>=
: 以上
>
:それならすごいですね
<
: それより小さい
<=
: 以下の値または等しい値
-
: マイナス
%
: 弾性率
*
: 乗算
/
: 分ける
+
: プラス
^
: パワー
通常の数学と同様に、括弧を使用して演算子に優先順位を付けることができます。
coalesce
NULL
以外の最初の値を返します。たとえば、 $b = NULL; $a = coalesce($b, 1);
この関数は無制限の数の引数を受け入れます。
max
入力パラメータの最大値を返します。
min
入力パラメータの最小値を返します。
isset
入力変数がまだNULL
場合はブール値 true を返し、それ以外の場合は false を返します。
round
入力浮動小数点を最も近い整数に丸めます。
floor
入力 float 以下の最大の整数値。
ceil
入力浮動小数点以上の最小の整数値。
setTimer
X 秒後にトリガーするタイマーを設定します。最初のパラメータはタイマー番号で、2 番目のパラメータはタイマーが起動するまでの秒数です。タイマーは 1 回だけ起動するため、定期的なイベントの場合は再設定する必要があります。タイマーがトリガーされると、上記のようにタイマー イベントが発生します。例えば
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
ルール システムがより多くのユーザーによって使用されるようになると、追加の例がドキュメントに追加されます。
WARの計算
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 インターフェイスが使用できない場合は、二重リセットを実行できます。ダブルリセットは、速すぎず、遅すぎずに実行する必要があります。通常、両方のリセットの間は 0.5 秒で十分です。二重リセットによって工場出荷時設定へのリセットが実行されたことを示すために、青色の LED が急速に点滅します (ここでもう一度リセットを押して、HeishaMon を通常の状態に再起動し、WiFi ホットスポットが再び表示されるようにする必要があります)。
以下に、プロジェクトに関する技術的な詳細を示します。独自のケーブルを構築する方法。独自のPCBを構築する方法など。
通信は、CN-CNT または CN-NMODE の 2 つのソケットのいずれかを介して確立できます。既存の Panasonic CZ-TAW1 WiFi インターフェイスを HeishaMon に置き換えたい場合は、CZ-TAW1 からケーブルを抜き、HeishaMon デバイスに再接続するだけです。ただし、HeishaMon とオリジナルの CZ-TAW1 モジュールをアクティブ デバイスとして一緒に使用することはできません。ただし、HeishaMon を「Listen Only」モードに設定することは可能で、これにより 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 はパナソニックからケーブル経由で電力を受け取ります (5V 電力)。
ヘイシャモンを長距離接続することが可能です。通常のケーブル配線では最大 5 メートルまで動作します。長距離の場合は、下の図に示すように TTL-to-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 by esp8266 コミュニティ バージョン 3.0.2 Arduino
コンパイルに必要なすべてのライブラリを使用します。
文書化された MQTT トピックの最新リストはここにあります。
このソフトウェアは、ds18b20 1 線式温度センサーの読み取りもサポートしています。 GPIO4 に接続された適切な 1 線構成 (4.7kΩ プルアップ抵抗付き) は、構成された秒ごと (最小 5 秒) に読み取られ、panasonic_heat_pump/1wire/"sensor-hex-address" トピックに送信されます。既製のボードには、この 4.7kΩ の抵抗がすでに取り付けられています。
新しい大型のヘイシャモンには、MQTT コマンドを使用してオン/オフを切り替えることができる 2 つのオンボード リレーが含まれています。リレーは、230V 主電源 (最大 5A) であっても、あらゆる接点スイッチングに使用できます。たとえば、「外部サーモスタット」を制御するためにヒートポンプの 230V 接点を切り替えたり、ポンプのオン/オフやその他の低電力デバイスを切り替えたりします。リレーを電気ヒーターのスイッチとして使用するのは、電力を大量に消費するためお勧めしません。リレーを制御するには、リレー 1 の場合は「panasonic_heat_pump/gpio/relay/one」、リレー 2 の場合は「panasonic_heat_pump/gpio/relay/two」の MQTT トピックに 1 または 0 の値を送信するだけです。
ヘイシャモン ボードが opentherm をサポートしている場合、このソフトウェアを使用して、互換性のあるサーモスタットから MQTT または JSON を介してホーム オートメーションに opentherm 情報をブリッジすることもできます。また、前述したように、ルール内で直接接続して、opentherm 情報をヒートポンプに接続して戻すこともできます。たとえば、opentherm サーモスタットのヒートポンプからの外気温度を表示します。設定で opentherm サポートを有効にすると、Web ページに新しいタブが表示されます。そのタブには、opentherm の値が表示されます。タイプ R(ead) のものと W(rite) のもの、およびその両方のものもあります。 Read は、サーモスタットがヘイシャモンからその情報を読み取ることができることを意味します。その情報を MQTT 経由で (またはルールを使用して) 提供するには、mqtt の「opentherm/read」トピックでこの値 (たとえば、「panasonic_heat_pump/opentherm/read/outsideTemp」) を更新します。書き込み値は、「roomTemp」などのサーモスタットからの情報です。これらは、mqtt トピック「opentherm/write」で入手できます。これらの値を使用して、ホーム オートメーションと mqtt set-command を使用して内部ルールの使用をヘイシャモンし、任意の方法でヒートポンプの動作を変更できます。
利用可能な opentherm 変数は次のとおりです。
chEnable はセントラルヒーティングを有効にするかどうかを示すブール値です。これは、サーモスタットが家を暖めたいときによく使用されます。
dhwEnable は、dhw 加熱を有効にするかどうかを示すブール値です。休暇中に DHW 加熱を無効にするサーモスタットのユーザー オプションとしてよく使用されます。
CoolingEnable は、冷却を有効にするかどうかを示すブール値です。冷却量は「coolingControl」で要求されます。以下を参照してください。
roomTemp は、サーモスタットによって測定された室温の浮動小数点値です。
roomTempSet は、サーモスタットの要求された室温設定値の浮動小数点値です。
chSetpoint は、サーモスタットによって計算された水設定値の浮動小数点値です。 Opentherm サーモスタットは、部屋の設定値をオーバーシュートしないように、この chSetpoint を設定しようとします。ヒートポンプの水の設定値を設定するために使用できますが、ほとんどのサーモスタットはヒートポンプの動作と比較して応答が速すぎます。
maxRelativeModulation は、ヒートポンプ (opentherm スレーブ) が使用できる変調量 (0 ~ 100%) です (READ 値の相対変調を参照してください。常にこの最大値以下である必要があります)。
CoolingControl は、サーモスタットがヒートポンプに要求する冷却量 (0 ~ 100%) です。冷却サポート付きの opentherm サーモスタットが必要です。
dhwSetpoint は、サーモスタットによる現在の DHW セットポイントである浮動小数点値ですが、heishamon によって設定してオーバーライドすることもできます。ただし、すべてのサーモスタットがこれをサポートしているわけではありません。 dhwSetUppBound より高く設定しないでください。以下を参照してください。
maxTSet は、最大水設定値を定義する浮動小数点値です。これはユーザーがサーモスタットで設定することも、ヘイシャモンから設定することもできます。 chSetUppBound より高く設定しないでください。以下を参照してください。
chPressure は、heishamon が提供するセントラル ヒーティングの測定水圧を定義する浮動小数点値です。
externalTemp は、heishamon によって提供されるセントラル ヒーティングの測定された外気温度を定義する浮動小数点値です。
inletTemp は、heishamon によって提供されるセントラル ヒーティングの測定水入口温度を定義する浮動小数点値です。
OutletTemp は、heishamon が提供するセントラル ヒーティングの測定水出口温度を定義する浮動小数点値です。
dhwTemp は、heishamon によって提供されるセントラル ヒーティングの測定された dhw 温度を定義する浮動小数点値です。
relativeModulation は、ヒートポンプ (opentherm スレーブ) が現在実行している変調量 (0 ~ 100%) であり、常にサーモスタットによって設定された maxRelativeModulation 以下である必要があります。
FlameState は、セントラル ヒーティングがセントラル ヒーティングに熱を提供しているかどうかを定義するブール値 (有効にするには「true」、「on」、または「1」を送信します)
chState は、ヒートポンプが部屋/集中暖房モードであるかどうかを定義するブール値 (有効にする場合は「true」、「on」、または「1」を送信します) (たとえば、部屋の 3 方弁、暖房モード)
dhwState は、ヒートポンプが DHW モードであるかどうかを定義するブール値 (有効にするには「true」、「on」、または「1」を送信します) (たとえば、dhw の 3 方バルブ)
CoolingState は、ヒートポンプが室内/集中冷却モードであるかどうかを定義するブール値 (有効にするには「true」、「on」、または「1」を送信します) (たとえば、部屋の 3 方バルブ、冷却モード)
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
ホームアシスタント
IOBroker マニュアル
ドモティチ