TASMOTA

中国で購入できるWEBスマートスイッチSONOFFシリーズは、一部中国語の専用ソフトをインストールしないと使えない。 またSONOFFのサーバーを経由して通信する為、安全性にも問題がある。 このSONOFFにTASMOTAというESPxxシリーズ用のカスタムファームウェアを入れれば、完全にローカルでコントロールできるようになり、コマンドを駆使して色々な事ができるようになる。

インストール手順

カスタムしない標準ファームウェアの場合、Tasmotizerを使うのが早い。使い方は以下の通り。 （要別途記述）

カスタムファームウェア

TASMOTAの標準ファームウェアには、基本的に電源をON/OFFするだけのものと、それに加えて1つ追加機能があるものしかない。下記例：

リモコンの送受信を行いたい場合は、tasmota-ir.binを使用する。

温湿度モジュールを使いたい場合は、tasmota-sensor.binを使用する。

上記2つを同時に使用したい場合は、どうしてもファームウェアを自分でコンパイルする必要がある。 下記に最も簡単に作成できる手順と設定を記録する。

前条件：Githubのアカウントをあらかじめ作成しておくこと。

tasmocompilerを使用する。まずこのリンクをクリックする。

Gitpodというオンラインで使用するVisual Studio Codeのようなものが開き、自動的に必要なものを拾ってコンパイルを開始する。ここでGithubアカウントのユーザー名とパスワードを問われるので用意すること。

(Chromeブラウザの場合）1～2分後にURL欄にポップアップブロックがありましたと表示されるので、アイコンをクリックして、URLを開く。（その他のブラウザの場合）勝手に別タブが開く。

Download Sourceを押下して、Nextを押下する。

WiFIのSSIDとパスワードを入力してNextを押下する。（正直言ってなぜ必要なのかわからない）

Generic ESP8266を選択して、機能としては下記を選択してNextを押下する。

Custom Parametersには何も記載せずNextを押下する。

バージョンの指定が表示されるので、Developから最新バージョンに変更してCompileをクリックする。

コンパイルが完了すると、下記のように表示されるので、Firmware.binをクリックしてダウンロードする。
必要ならばplatformio_override.iniもダウンロードする。（後で何の機能を選択したかを追うことができる）

自動化の方法

tasmotaで自動化するには３つの方法がある。

コマンド操作

Script

Rule

3つのうち後者2つは、カスタムファームウェアを自作する必要がある。めんどい。 また、ScriptとRuleは排他仕様なので、どちらかしか選択できない。 コマンド操作はBacklogを使って、最大30命令までのバッチ処理を行う事ができる。

ScriptとRuleの違い

RuleはTASMOTA同様、ESPシリーズ用カスタムファームのESP Easyに実装されているRuleと互換のあり、標準ファームウェアの殆どは、Ruleが使える。
設定時間おき（ArduinoでいうTicker）とか、センサーの温度が上回ったり下がったり等をトリガーとして、指定したルールを実行するという設定をする。
Rules - Tasmota
Tutorial Rules - Let's Control It

ScriptはTASMOTAオリジナルの機能。夜間だけライトをつけてカメラの顔検出を有効にしたり、センサー値から体積を計算してアームの角度を変更したりなど、高度な処理ができる。
コマンドの追加と廃止があり、エラーログも最小限しか出力されないので、完全にプロ用。
Scripting - Tasmota

コマンド

基本的には次のように入力する。

注意：スペースや特殊文字は、ASCII 16進コードに置き換えて、前に%を付けること。 よく使うのは半角スペース（commandとvalueを切り分ける）が%20、セミコロン（次に実行するcommand）が%3Bとなる。 ここのサイトで正しいエンコード値を所得したほうが良い。

WEB経由：

http://<deviceIP>/cm?cmnd=<command>%20<value>
例：Switch1のモードを変更する
http://192.168.100.1/cm?cmnd=switchMode1%202 → JSONフォーマットで返す {"SwitchMode1":2}

MQTT経由：

Topic: cmnd/<deviceName>/<command> Payload:<value>
例：Switch1のモードを変更する
Topic: cmnd/Switch1/SwitchMode1 Payload:2 → JSONフォーマットで返す{"SwitchMode1":2}

コマンドが正しく実行されるかどうかは、consoleを開いて、Enter Commandに次のように入力する。 これは各種設定を行うときも同様。

<command> <value>

使用するコマンドの一覧は下記参照。 Commands - Tasmota

個人的に設定しておくべき、もしくは使いそうな内容は以下の通り

BacklogとDelay（★必須）

30桁までのバッチ処理を実施したい時、Backlogと入力してからコマンドを入れる。 コマンドとコマンドの区切りは；(セミコロン)、最終行にセミコロンは不要。 待つときはDelayを使う。単位は0.1秒なので、1秒は10、1分は600となる。最大3600（6分）。 ※時間はあまり正確ではないらしい

例：（電源OFF、10秒待ってから電源ON） Backlog Power off; Delay 100; Power on

タイムゾーンの設定（★必須）

初期値はグリニッジ標準時になっているので、日本なら+9時間にしないといけない。 現在日時はstatus 7と入力すれば表示される。

例： Timezone +9

NTPサーバーの設定

初期で登録されているNTPサーバー3つは遠いので、国内サーバーに変更する。しなくても別段問題はない。 3つ指定ができるので、先頭に数字を入れる必要がある。

例： NtpServer1 ntp.jst.mfeed.ad.jp

Latitude(緯度)とLongitude（経度）

Timerの設定でsunrise(日の出)とsunset(日の入り）時刻を指定できるが、この計算に使用する。 要するに日が落ちたらライトをつけ、日が昇ったらライトを消す等の運用に使用する。 googleマップで目的地にピンを刺し、右クリックメニューにて緯度経度の順で表示されるので、その値を代入する。 注：TASMOTAは利用状況の確認としてこの情報を送るので、最寄りの県庁所在地等、自宅以外が望ましい。

例： Latitude 35.68963 Longitude 139.69218

34.49190, 133.94605

自分のMACアドレスを調べる

Status 5と入力する。

電源投入時の動作

停電等で一時的に電源が落ちた後に復旧した場合、どのように動作するかを指定するには、PowerOnStateを使用する。 0:常にオフ 1:常にオン 2:最後に保存した状態の反対 3:最後に保存した状態（初期値）4:オンにした後、以降の操作は無効 5:PulseTime秒後にオン 現在の状態はSetOption 0で確認、PulseTimeは1~111までは0.1秒単位だけど、112以降は100足して1秒単位となる。例:113 → 13秒、460 → 360秒で6分

導入時にすること

SONOFFテスト 20210803

ON用： http://192.168.1.106/cm?cmnd=Power%201

OFF用： http://192.168.1.106/cm?cmnd=Power%200

再起動試験用（OFFして5秒後にON）→ OK! http://192.168.1.106/cm?cmnd=Backlog%20Power%200%3B%20Delay%2050%3B%20Power%201

NTPサーバー設定用 http://192.168.1.106/cm?cmnd=Backlog%20Timezone%20%2B9%3B%20NtpServer1%20ntp.jst.mfeed.ad.jp%3B%20

デバイスの回復

原文はこちら： Device Recovery - Tasmota Getting Started - Tasmota

まずデフォルトでは、TASMOTAはOTAアップグレードによる自動更新を行うために、既存の設定を保持しようとする。 それでもWifiがつながらない等の適切な操作が出来なくなった場合、電源のOFF/ONでデバイスをリカバリーすることができる。 これをFast Power Cycle Device Recoveryという。 この機能はSetOption65にて確認できる。初期値は0で有効だが、電源が不安定で再発する場合は、これを1にして無効にすることができる。 作業手順は以下の通り。

デバイスの電源を30秒以上オフにする。

10秒未満の間隔でデバイスの電源を6回オン、オフして、7回目にオンにしたままにする。

デバイスが初期化されて、WiFiがホストモードで起動するので、スマホなどで接続する。
その時のAP名はtasmota_XXXXXX-####となる。（例 tasmota_3D5E26-7718）
※ホストモードは起動後3分間のみ有効で、また無効になる。

WiFi接続後、192.168.4.1をブラウザで開くと、初期設定画面になる。
有効なWifiとパスワードを指定してSaveすると、TASMOTAが取得したIPアドレスが表示される。