LoginSignup
0
0

More than 5 years have passed since last update.

Arduino IDE を使って Tasmota を Mosquitto TLS + パスワード認証に対応するようビルドする。

Last updated at Posted at 2019-02-24

※超初心者が書いた自分への備忘録です。

公式サイトのArduino IDEを参考に進めていく。

公式サイトの clone and download からtempにzipをダウンロードして解凍する。

platform.txt, boards.txt, espupload.py をコピーする。

Arduino IDE のアプリケーションデータフォルダとして
C:\Users\xxx\AppData\Local\Arduino15 に各種データが保存されている。

私の環境では
C:\Users\xxx\AppData\Local\Arduino15 ⇒ C:\Users\xxx\OneDrive\AppData\Local\Arduino15 とシンボリックリンクを設定している。

  • 解凍した中からファイルをコピーする。※オリジナルファイルはバックアップしておく。 バックアップ
cd "C:\Users\admin\OneDrive\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta2\"
move platform.txt platform.txt.bak
move boards.txt boards.txt.bak
cd "C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta2\tools\"
move espupload.py espupload.py.bak

カレントディレクトリ Sonoff-Tasmota-6.4.1 として三つのファイルをコピーする。
platform.txt
boards.txt
espupload.py

cd "C:\Users\admin\OneDrive\Documents\Arduino\Sonoff-Tasmota-6.4.1"

copy /y "arduino\version 2.5.0\platform.txt" "C:\Users\admin\OneDrive\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\"
copy /y "arduino\version 2.5.0\boards.txt" "C:\Users\admin\OneDrive\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\"
copy /y "arduino\espupload.py" "C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\tools\"

lib フォルダのライブラリをコピーする。

xcopy /Y /Q /S /E lib\* "C:\Users\admin\OneDrive\Documents\Arduino\libraries\" 

ビルドして重複するライブラリがあったら Tasmota で使わない方を削除する

sonoff フォルダをコピーする。

xcopy /Y /Q /S /E sonoff ..\

Mosquitto TLS 通信する為に Tasmota にフィンガープリント を設定する

  • mosquitto のフィンガープリントを取得する(Pi にログインして実行する)
openssl s_client -connect localhost:8883 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin | sed 's/^.*=//' | sed 's/:/ /g'
  • my_user_config.h の91~92行に フィンガープリント、ユーザー名、パスワードをセットする
#define MQTT_HOST              "pi.local"                // [MqttHost]
#define MQTT_FINGERPRINT1      "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07"  // [MqttFingerprint1]
#define MQTT_FINGERPRINT2      "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07"  // [MqttFingerprint2]
#define MQTT_PORT              8883              // [MqttPort] MQTT port (10123 on CloudMQTT)
#define MQTT_USER              "DVES_USER"       // [MqttUser] MQTT user
#define MQTT_PASS              "DVES_PASS"       // [MqttPassword] MQTT password

Arduino IDE でアップロード設定をする。

ツール >
arduinoide242b.png
Upload Using : Sereal ※先ずはUSBケーブルでテストする。

コンパイルする。

ファイル > 開く > sonoff\sonoff.ino
コンパイルだけを実行する。
無事エラーなしでコンパイル完了!

Witty にアップロードする。

COM7 でアップロード実行。
完了すると、RGB-LEDのブルー(GPIO13)が点滅した。
シリアルモニタを表示してWittyをリセットした。

00:00:00 Project sonoff Sonoff Version 6.4.1(sonoff)-2_5_0_BETA2
00:00:00 WIF: WifiManager active for 3 minutes
00:00:00 HTP: Web server active on sonoff-4540 with IP address 192.168.4.1
00:02:00 RSL: tele/sonoff/UPTIME = {"Time":"1970-01-01T00:02:00","Uptime":"0T00:02:00"}
00:03:02 APP: Restarting

ets Jan 8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v0fd86a07
~ld

00:00:00 Project sonoff Sonoff Version 6.4.1(sonoff)-2_5_0_BETA2
00:00:00 WIF: WifiManager active for 3 minutes
00:00:00 HTP: Web server active on sonoff-4540 with IP address 192.168.4.1
00:02:00 RSL: tele/sonoff/UPTIME = {"Time":"1970-01-01T00:02:00","Uptime":"0T00:02:00"}

00:03:02 APP: Restarting

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v0fd86a07
~ld

00:00:00 Project sonoff Sonoff Version 6.4.1(sonoff)-2_5_0_BETA2
00:00:00 WIF: WifiManager active for 3 minutes
00:00:00 HTP: Web server active on sonoff-4540 with IP address 192.168.4.1

何もしなければ3分経つとリスタートする仕様のようだ。

Sonoff for Witty にアクセスする。

PCのWiFiを sonoff-xxxx に接続して
ブラウザで 192.168.4.1 にアクセスすると
sonoff-web-start.jpg
AP1, AP2 に家のWiFiをセットしたら設定終了で 192.168.4.1 の接続が切断される。

フィンガープリントチェックでエラーが出る。

orz

6.4.1 では TLS 接続できなかったので 5.14.0 にダウングレードして再チャレンジ

  • Tasmota-5.14.0 上記と同じ手順で配置
  • Arduino IDE > ツール > ボード > ボードマネージャー > 検索 ESP8266 > 2.4.1 にダウングレード
  • Arduino IDE > ツール のアップロード設定を前記と同じようにする
#define STA_SSID1              "SSID"                // [Ssid1] Wifi SSID
#define STA_PASS1              "パスワード"                // [Password1] Wifi password


#define MQTT_HOST              "Mosquitto IP"                // [MqttHost]
#define MQTT_FINGERPRINT1      "フィンガープリントセット"  // [MqttFingerprint1]
#define MQTT_FINGERPRINT2      "フィンガープリントセット"  // [MqttFingerprint2]
#define MQTT_PORT              8883              // [MqttPort] MQTT port (10123 on CloudMQTT)
#define MQTT_USER              "ユーザー名"       // [MqttUser] MQTT user
#define MQTT_PASS              "パスワード"       // [MqttPassword] MQTT password

225行付近 コメント外す
#define USE_MQTT_TLS                             // Use TLS for MQTT connection (+53k code, +15k mem)

その他全てのサービスをコメントアウトして超ダイエット
  • ビルド書込み
00:00:00 WIF: Connecting to AP1 Abo in mode 11N as sonoff-4540...
00:00:06 WIF: Connected
00:00:07 MQT: Attempting connection...
00:00:07 MQT: Verify TLS fingerprint...
00:00:07 MQT: Verified using Fingerprint1
00:00:07 MQT: Connected
00:00:07 MQT: tele/sonoff/LWT = Online (retained)
00:00:07 MQT: cmnd/sonoff/POWER = 
00:00:07 MQT: tele/sonoff/INFO1 = {"Module":"Sonoff Basic","Version":"5.14.0","FallbackTopic":"DVES_1811BC","GroupTopic":"sonoffs"}
00:00:07 MQT: tele/sonoff/INFO3 = {"RestartReason":"External System"}
00:00:09 MQT: stat/sonoff/RESULT = {"POWER":"OFF"}
00:00:09 MQT: stat/sonoff/POWER = OFF
00:00:16 MQT: tele/sonoff/STATE = {"Time":"1970-01-01T00:00:16","Uptime":"0T00:00:15","POWER":"OFF","Wifi":{"AP":1,"SSId":"Abo","RSSI":64,"APMac":"6A:3B:38:B4:C7:02"}}
00:02:00 MQT: tele/sonoff/UPTIME = {"Time":"1970-01-01T00:02:00","Uptime":"0T00:01:59"}
00:05:16 MQT: tele/sonoff/STATE = {"Time":"1970-01-01T00:05:16","Uptime":"0T00:05:15","POWER":"OFF","Wifi":{"AP":1,"SSId":"Abo","RSSI":58,"APMac":"6A:3B:38:B4:C7:02"}}
00:10:01 APP: Serial logging disabled

Mosquitto TLS + パスワード認証で接続成功!!





6.4.1 + 2.5.0 TLS + パスワード認証で接続成功!!

  • 公式のフォーラムで 6.4.1+2.5.0 で失敗する現象の議論の中でAxTLSを使うと成功したよとの書込みを参考にやってみた。
  • VSCode + PlatformIO 環境でやった。
  • sonoff.ino 36行目付近に

#ifdef USE_CONFIG_OVERRIDE
  #include "user_config_override.h"         // Configuration overrides for my_user_config.h
#endif

// 以下追加
#define USING_AXTLS
#if defined(USE_MQTT_TLS) && defined(ARDUINO_ESP8266_RELEASE_2_5_0) && defined(USING_AXTLS) 
  #include <ESP8266WiFi.h>
  #include "WiFiClientSecureAxTLS.h"
  using namespace axTLS;
  #warning @@@@@@@@@@@ USING_AXTLS @@@@@@@@@@@
#endif // USING_AXTLS
  • prlatform.ini を書き換えて実行
00:00:00 Project sonoff Sonoff Version 6.4.1.19(sonoff)-2_5_0
00:00:00 WIF: Connecting to AP1 aterm-b0135f-g in mode 11N as sonoff-4540...
00:00:04 WIF: Connected
00:00:04 HTP: Web server active on sonoff-4540 with IP address 192.168.0.7
03:44:12 MQT: Attempting connection...
03:44:12 MQT: Verify TLS fingerprint...
03:44:12 MQT: Verified using Fingerprint1
03:44:12 MQT: Connected
03:44:12 MQT: tele/sonoff/LWT = Online (retained)
03:44:12 MQT: cmnd/sonoff/POWER =
03:44:12 MQT: tele/sonoff/INFO1 = {"Module":"Sonoff Basic","Version":"6.4.1.19(sonoff)","FallbackTopic":"cmnd/DVES_1811BCBC_fb/","GroupTopic":"sonoffs"}
03:44:12 MQT: tele/sonoff/INFO2 = {"WebServerMode":"Admin","Hostname":"sonoff-4540","IPAddress":"192.168.0.7"}
03:44:12 MQT: tele/sonoff/INFO3 = {"RestartReason":"Software/System restart"}
03:44:12 MQT: stat/sonoff/RESULT = {"POWER":"OFF"}
03:44:12 MQT: stat/sonoff/POWER = OFF
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0