これは、Thermoworks Smoke X2またはSmoke X4リモート温度計からRF信号を受信し、MQTTブローカーに情報を公開するESP32+LORAアプリケーションです。これは、既存の煙X2/X4レシーバーと一緒に動作します(つまり、すべてのペアの受信機がまだ機能します)。このプロジェクトは、ホームアシスタントと統合するために特別に設計されましたが、他のMQTTベースのアプリケーションでも使用する場合があります。さらに、このアプリケーションは、フィールド使用のためにスタンドアロンファッション(MQTTまたはホームアシスタントなしでAPモードのWLANインターフェイス)で動作する場合があります。
注このアプリケーションは、元のサーモウォークスの煙またはサーモウォークス信号製品と互換性がありません。
Smoke Xはしっかりと構築され、正確で、RFの範囲が優れており、インターネットを機能させる必要はありません。しかし、提供されたレシーバーユニットは、記録または追跡の傾向を除いて、現在のプローブの測定値のみを示しています。

このアプリケーションにより、Smoke XユーザーはRF信号から温度データを収集し、Web UI(ESP32が提供)、ホームアシスタントダッシュボード、および/またはその他のデータ視覚化ツールを介して温度履歴を視覚化できます。



以下に示すように、すべてのデータが取得、処理、および局所的に保存されます。
フローチャートLR
ベース - > | lora rf | ESP32
mqclient-> mq
MQ-> ha
Web->ブラウザ(任意のWebブラウザ)
サブグラフ煙x2/x4
プローブ - >ベース(ベースステーション) - > | lora rf | RECV(受信機)
大波 - >ベース
終わり
サブグラフESP32 [Smoke-X-Receiver]
mqclient(mqttクライアント)
Web(HTTPサーバー)
終わり
subgraph mqttb [mqttブローカー]
MQ(Homeassistantトピック)
終わり
サブグラフホームアシスタント
mq_int
終わり
subgraph ha_dev [x2/x4用のhaデバイス]
E1(バイナリセンサーエンティティ)
E2(センサーエンティティ)
終わり
サブグラフmq_int [mqtt統合]
ha(auto discovery) - > ha_dev
ha_dev
終わり
ホームアシスタントユーザーでなくても、このアプリケーションの組み込みのWebインターフェイスを使用して、気温を監視し、トレンドを監視できます。
915 MHz ISMバンドで動作するSemTech Loraトランシーバーが添付されているESP32が必要です。 Heltec Wifi Lora 32 V2やV3などのESP32+LORA開発ボードを組み合わせたものは理想的ですが、SPI接続SX1276またはSX1262を備えたESP32ボードは機能するはずです。
$ source /path/to/esp-idf/export.sh$ git clone --recurse-submodules [email protected]:G-Two/smoke-x-receiver.git
$ cd smoke-x-receiverこのプロジェクトのデフォルト構成は、Heltec WiFi Lora 32 V3 (SX1262に基づく)用に記述されました。この正確なハードウェアを使用している場合は、おそらくこのセクションをスキップできます。他のハードウェアで実行している場合は、ビルドをカスタマイズする場合、またはデフォルトのビルドが機能しない場合は、menuconfigを実行する必要があります。
$ idf.py menuconfig注: SX1276(Heltec WiFi Lora 32 V2など)を使用している場合は、「Smoke X Receiver HW/App Config」メニューでSX127Xドライバーを選択し、SX127X SPI PINの割り当てを構成する必要があります。
特定のハードウェアやその他のニーズをサポートするには、追加の構成変更が必要になる場合があります
$ idf.py set-target esp32s3 # If using a Heltec WiFi LoRa 32 v3, otherwise set target as appropriate to your hardware
$ idf.py flashアプリケーションとWebアセットは、ESP32フラッシュに構築および書き込まれます。
ESP32がフラッシュされた後、いくつかのアイテムを構成してNVRAMに保存する必要があります。これらのアイテムの構成は、ESP32リセットとアプリケーションソフトウェアの更新後に持続します。
WLAN情報が構成されていない場合、または接続が失敗した場合、デバイスはデフォルトでAPモードになります。デフォルトのAPモード情報(Menuconfigで構成可能)は次のとおりです。
ESP32のAPに接続し、Webブラウザを使用してhttp://192.168.4.1/wlanに移動します。自己拡散Web UIが表示され、デバイスをホームネットワークに設定します。 WPA2-PSKおよびWPA2-Enterprise(EAP-TTLS)がサポートされています。ネットワーク認証情報を適用すると、デバイスはリセットされ、ホームネットワークに参加しようとします。 ESP32は、 smoke_xのDHCPクライアントホスト名リクエストを提供します。ホームネットワークでESP32を見つけたら、セットアッププロセスの残りの部分を進めることができます。 ESP32がネットワークに参加できない場合、デフォルトのAPモードに戻ります。
Web UIの「ペアリング」タブは、デバイスがSmoke Xベースユニットにペアリングする必要があることを示します。デバイスが対応のない状態にある場合、2つの同期チャネル(X2の場合は920 MHz、X4で915 MHz)を監視し、受信する最初のSmoke X同期伝送と組み合わせます。ペアリングするには、Smoke Xベースユニットを同期モードに配置し、3秒ごとに同期バーストを送信します。 ESP32がバーストを受信して解析すると、ターゲット周波数で同期応答が送信され、ベースユニットは通常の動作に戻ります。この時点で、Web UIで、デバイスが特定のデバイスIDと周波数とペアになっていることを確認できます。これは、ESP32がLORA信号を送信する唯一の時間です。デバイスは、常にWeb UIを介して対応できない場合があります。 ESP32のペアリング/ペアリングは、他のデバイスのペアリングステータスに影響しません。
ペアになったら、ステータスページに温度グラフが表示されます。
Web UIは、MQTTブローカーに接続するようにデバイスを構成するためにも使用されます。 MQTT URIは唯一の必須フィールドであり、残りはオプションであり、特定のMQTTブローカー構成に依存します。 MQTTSサーバー認証は、Web UIを介して信頼できるCA PEMを入力することによりサポートされます。 PKIクライアント認証は現在サポートされていません。
MQTTが構成および有効になっている場合、アプリケーションはSmoke XベースステーションからRF送信を受信するとステータスメッセージを公開します。基地局は30秒ごとに送信されます。公開されたメッセージの内容は次のとおりです。
{
"probe_1_attached" : " ON " ,
"probe_1_alarm" : " ON " ,
"probe_1_temp" : 70.4 ,
"probe_1_max" : 185 ,
"probe_1_min" : 32 ,
"billows_target" : " offline " ,
"probe_2_attached" : " ON " ,
"probe_2_alarm" : " ON " ,
"probe_2_temp" : 70.4 ,
"probe_2_max" : 91 ,
"probe_2_min" : 50 ,
"billows_attached" : " OFF "
}注: X4デバイスには、プローブ3および4の追加データも含まれます
このアプリケーションは、ホームアシスタントMQTT発見をサポートします。 Home Assistant Instanceに発見のためにMQTT統合が構成されている場合、次のSmoke Xセンサーが自動的に追加されます。
MQTTブローカーへの接続が成功した後、デバイスは次のようなディスカバリーメッセージを公開することにより、各センサーを構成します(各エンティティに1つ)。
{
"dev" : {
"name" : " Smoke X Receiver " ,
"identifiers" : " |ABC12 " ,
"sw_version" : " 0.1.0 " ,
"model" : " X2 " ,
"manufacturer" : " ThermoWorks "
},
"exp_aft" : 120 ,
"pl_not_avail" : " offline " ,
"stat_t" : " homeassistant/smoke-x/state " ,
"dev_cla" : " temperature " ,
"unit_of_meas" : " °F " ,
"uniq_id" : " smoke-x_probe_1_temp " ,
"name" : " Smoke X Probe 1 Temp " ,
"val_tpl" : " {{value_json.probe_1_temp}} "
}さらに、アプリケーションは、出生アナウンスのためにホームアシスタントステータストピックを購読します。ホームアシスタントが再起動した場合、出生発表はアプリケーションに合図して、ディスカバリーメッセージを再発行します。デフォルトのホームアシスタントトピック名が使用されますが、ESP32 Web UIでカスタマイズされる場合があります。
このアプリケーションは、HTTP API(Web UIの温度履歴グラフで使用)を提供します。これは、HTTPリクエストをESP32に送信できる他のクライアントが使用することもできます。
応答:
{
"probe_1" : {
"current_temp" : 95.3 ,
"alarm_max" : 185 ,
"alarm_min" : 32 ,
"history" : [ 95.1 , 95.2 , 95.3 ]
},
"probe_2" : {
"current_temp" : 165.9 ,
"alarm_max" : 91 ,
"alarm_min" : 50 ,
"history" : [ 165.7 , 165.8 , 165.9 ]
},
"billows" : false
}注: X4デバイスには、プローブ3および4の追加データも含まれます
バグを修正したり、機能を強化/追加したりするPRは大歓迎です!アプリケーションを正常に構築した場合、それを変更するために必要なものはすべて揃っています。
デバッグを支援するために、最初のアプリケーションセットアップ中にESP32ログを監視すると役立つ場合があります。 ESP32がまだコンピューターに接続されていますが、実行してログを監視してください。
$ idf.py monitor
このアプリケーションは、ESP-IDF V4 SDKで構築されており、次のLORAモデムドライバーとの外部依存関係があります。
WebインターフェイスはVUEで記述されており、ESP32 Webサーバーが提供する圧縮静的WebアセットとしてESP32フラッシュファイルシステムにロードされます。開発と手動テストを支援するために、Webインターフェイスを次のようにプレビューできます。
$ ./mock_web_ui.sh