家庭のエアコン制御 - BACnet

優れた設計の高気密高断熱住宅だと、 小容量のエアコン1台と全熱交換器で家屋全体を快適温度に維持できますが、 それでも人体をとりまく 部屋の床や天井と周囲壁面の放射温度湿度は気象条件で変わりますし、 住人の代謝量も日中と夜間の就寝中とか、 日中の作業強度でかなり変わりますから、 同じ気温で、ある程度の調湿を行なっていても、 快適と感じる室温が変化して、 エアコンの設定温度設定風量も状況に会わせた調節が必要です。

また、より高度な省エネを考えると、 気象条件により、エアコンの動作モード(冷房、暖房、送風)を変更したり、 全熱交換器の動作モード(熱交換あり、なし)を切替える必要もあります。

こういった調整を人がリモコン操作で頻繁に行なうのはたいへんで、 自動化しようとすると エアコンと全熱交換器のコンピュータインタフェースが必要ですが、 ビルや工場と違って、戸建住宅では顧客の要求がないのか、 工務店ルートで問い合わせてみても、 「そんなものはない」と言われてしまいました。 (注1)

それにしても、ビルや工場設備に使われる可能性があれば何かあるはずと、 別ルートで調べると、 LONWORKSBACnet/IPの2種類のインタフェースの存在が確認できます。

LONWORKS は 20 年ほど前に自分が設計した工場で使ったことがあって価格も安いのですが、 あまり好きになれず、今更使いたくないので、 アメリカなどと比べると異様に高い価格には眼をつぶって BACnet/IP を使うことにしました。 (注2)

BACnet は ASHRAE, ANSI, ISO で標準化され、空調、照明、セキュリティーなどで使われていますが、 これまでに開発された全ての Field Network を含有する設計で、 現時点の ANSI/ASHRAE 135-2016 は 1364 ページになっています。

今回は IP 接続で家庭内 LAN に収容しますので、 このうちの一部しか必要なくて、 47808 (0xBAC0) ポートを使った UDP でアクセスすることになります。

オープンソースのプログラムもいくつかありますが、 今ならBACnet Stack が良いと思います。

これは組み込みシステム(embedded systems) 用に開発されていますが、 ports ディレクトリには arm7, at91sam7s, atmega168, atmega8, bdk-atxx4-mstp, bsd, dos, linux, lwip, pic18f6720, rtos32, rx62n, stm32f10x, vrs51c1000, win32 向けのコードがあって、 この中の bsd は Mac OS X 用ですから、 ほんの少し書換えるだけで、FreeBSD で使えるようになります。 (注3)

FreeBSD 対応差分

最低限必要な変更は時刻設定の UTC からの offset time zone を tblock->tm_gmtoff に書換えるだけで、

  gmake clean
  gmake BACNET_PORT=bsd all
でコンパイルして、使用する LAN インタフェースを環境変数
  export BACNET_IFACE="re0"
等で設定して、bin ディレクトリにできたコマンド
  bacwi - WhoIs service request
  bacwh - WhoHas service request
  bakepics - Generate Full EPICS file, including Object and Property List
  bacrp - ReadProperty service request
  bacrpm - ReadPropertyMultiple service request
  bacwp - WriteProperty service request
  bacts - TimeSynchronization request
  ..
を起動すれば良いのですが、 default の LAN インタフェース名を FreeBSD 用に変更したり、 gmake all だけでコンパイルできるようにしたり、 bash でなく /bin/sh で使えるようにするための変更も追加してあります。

エアコンの制御は単純で、普段は現状確認と設定温度の変更だけ。 時折、設定風量の変更と運転モードの変更に時刻合わせ。 稀に、運転停止と起動といったところですから、 使うのは簡単です。

例えば、エアコンの BACnet/IP の device-instance が 123 に設定されていれば、 このエアコンのインタフェースの場合、 前記のコマンドを次のように操作することになります。

  bacwp 123 2 10 85 16 -1 4 24	# 設定温度を 24℃にする
  bacwp 123 14 7 85 16 -1 2 3	# 設定風量を 3 (強)にする
  bacwp 123 14 5 85 16 -1 2 2	# 運転モードを 2 (送風)にする
  bacwp 123 4 1 85 16 -1 1 1	# 運転を開始にする (最後の 1 が 0 なら停止)
  ..
  bacrp 123 0 9 85		# 室内温度を読み出す
  bacrp 123 2 10 85		# 設定温度を読み出す
  bacrp 123 13 8 85		# 設定風量を読み出す
  bacrp 123 13 6 85		# 運転モードを読み出す
  bacrp 123 3 30 85		# 室内ファンの運転状態を調べる
  bacrp 123 3 28 85		# サーモ状態を調べる
  bacrp 123 3 29 85		# 圧縮機運転状態を調べる
  bacrp 123 3 11 85		# フィルタ使用限度信号を調べる
  ..
  bacts --dnet 123		# 時刻合わせ
  ..
  bacrpm 123 8 123 8		# 全 Property の読み出し (日時もわかる)
  ..
これらの操作では、 device-instance 123 の BACnet server の IP address が指定されていませんが、 これは WhoIs や WhoHas を使って自動的に調べる仕組みになっているためです。 device-instance (device-ID) の値は 0 から 4194303 までの整数で、 システム設計者が自由に選べますが、通常は 1 から 4194302 を使います。

これ以外の数値は BACnet の仕組みと、このプログラムの include/bacenum.h、操作対象のデバイスの仕様で決まりますので、 必要な方向けに別途解説します。

なお、BACnet Stack には bacserv という BACnetserver エミュレータがあって、

  ./bin/bacserv 1234
といった構文で Device-ID 1234 の BACnet server が動きますので、 他の端末とか、同じ端末でも他の window から
  ./bin/bacwc -1
などを実行すれば、BACnet の動作を体験することができます。

また、wireshark で Packet capture すると、 BACnet 通信の仕組みがよくわかると思います。

注1 - 住宅メーカーが採用した空調機器と高気密住宅での問題

使われていたエアコンは Daikin FHMMP50DB+RZRP50BV、 全熱交換器は Panasonic FY-30KBD1 でした。 こういった住宅用機器でも、ガスレンジやガス乾燥機同様、 最近の高気密住宅への対応を考えていないようで、 電源の瞬停があると止まってしまいます。

しかし、高気密住宅は屋内 CO2 の濃度管理を全面的に 機械換気に依存していますから、 換気システムが止まると、夜間の狭い寝室などでは急激に CO2 濃度が増加し、 あっというまに危険レベルに到達します。 酸欠は安らかに死ねますから自殺手段としては良いと思いますが、 死にたくない場合は CO2 濃度を監視して警報を出す必要があって、 バッテリバックアップ付きの CO2 濃度計を全居室に配置してありますが、 2019-04-11 未明に枕元の警報で起こされました。 UPS でバックアップしているコンピュータシステムや計測機器は動作していますが、 全熱交換器とエアコンは停止しています。

ほとんどの瞬停は 2 秒以内に復帰しますので、 空調機器が自動的に再始動してくれるとよいのですが、 FY-30KBD1 の場合は「無電圧 100 ms でファン停止、 その後 500 ms 以内に電圧が回復したら運転継続」だそうで、 どうにもなりません。 Panasonic の窓口では「危険防止のため」と言うのですが、 私には理解できません。

FHMMP50DB+RZRP50BV の場合は 0.05 秒の停電で停止、 設置時設定で再起動するように設定されていれば、 2 秒程度で再起動ということがメーカー窓口でわかったのですが、 代理店経由だと「設置時設定の方法は教えられない」と断られました。 幸いインタネットで得られる情報と多少の試行錯誤で、 設定方法がわかって、多少、改善されました。

エアコンが再起動すれば、 寝室内部の空気のかなりが家屋全体に拡散されるため、 CO2 濃度の上昇速度が大幅に低下し、 危険レベルに達する時間が長くなります。 ただ、それにしても危険は残しますから、 瞬停時に大型ベルを鳴らす簡単な装置を追加しました。

つまり、私自身が『まだ生きていたい』と考えるようですが、 この理由もよくわからず、 Panasonic や Daikin の工事部門の方針が正しいのかもしれません。

それでも、私の場合は、今の日本の首相と「お友達」の応援団として、 我が身を犠牲に社会保険費削減に協力する気にはなれません。

注2 - 日本のコンピュータ技術

日本のコンピュータは先進国から 20 年遅れと考えれば良いと思います。 官庁主導の中央集権システムからは革新的技術は生まれません。 その結果、日本の BACnet 関連製品も 数年から 10 年もすれば、もっと普及し、 価格も 1/100 程度に下がって家庭にも普及すると思います。 20 年すれば常識の一つになると思います。 私自身の 50 年を越える経験が覆ると良いのですが。

Daikin の場合、現状では LONWORKS インタフェースのほうがずっと安くて (それでも高い)、 LonMark Internationalが標準化している LONWORKS の物理的実体を表す変数を BACnet の Object/Property に変換して LAN 接続可能にする Gatewayもいくつか市販されていますから、 価格的には安くなりますが、私の場合は将来を考えて、やめました。

2002 年の私自身が設計した長野県塩尻市の工場では、 設備を設計した大気社が日立製のエアコンを採用し、 日立が RS232 のインタフェースを作ってくれましたので、 それを LAN 変換して社内ネットワークに接続し、 長年安定して動いています。 24 時間稼働の FA サーバー 1 台で完全に自動化されていますので、 人間の負担は大幅に軽減されました。

注3 - BACnet Stack の ports/bsc

ソースコードには Mac OSX と FreeBSD 共用と書かれていますが、 FreeBSD-10.3, FreeBSD-11.2 ではコンパイルできません。

平林 浩一, 2019-09