以前、EPS32で複数のスイッチをAlexaに認識させて家電のコントロールをするというブログを書きました。
最近までは問題なく動いていたけど、突然反応しなくなりました。まぁ…この時まではネットワーク上の問題だろうと軽く見ていました。上のリンクのソースコードをみていただけるとわかると思うけど、FauxmoESPを使ってデバイスを複数追加してAlexaで定型アクションで動作させるという至極単純な仕組み。けどデバイスを複数追加してAlexaアプリでチェックしてもスイッチ類が正常にリストに出てこず(1台のみでたり、消すと変になったり)、動作させようにも他のデバイスのオンオフをしたり挙動が滅茶苦茶になっていました。
あー、これ面倒な奴だ…
直感で思いました。アマゾンやAlexa側の問題であれば、issueやXで大騒ぎになってるはずと思い検索をしまくります。日本語ではあんま騒がれてなかったのですがFauxmoESPのissueで似たような症状のスレッドが開いていました。
まぁスレ主はEchoSpotで症状が出てたみたいですが、スレッドの返信をよく読んでいくと
rtotte commented Oct 11, 2024
Good morning. This is exactly the problem I have right now, and I am glad that I found someone working on this. I really dont know what gen is my alexa, but it discover all devices and just assume one. You only see that the others are there when you delete. After the first deleted, the second appear, and so on…..
I tried the fix you wrote, but the line on the file fauxmoESP.cpp is different. This is what I have there: snprintf(device.uniqueid, FAUXMO_DEVICE_UNIQUE_ID_LENGTH, “%s:%s-%02X”, mac.c_str(), “00:00”, device_id);
I tried change only “%s:%s-%02X” by “%02X:%s:AB-%02X”, but doesn’t work. I tried also your line, but no success.
Any thoughts what I have to change/do to solve?
Thanks,
ルトッテさんの「何世代目のアレクサかはわかんないけど…(略) 1つめのデバイスを消すと、2つめが現れて…(略)」の症状が正に同じ症状です。ルトッテさんはライブラリのfixで一旦しくった様子ですがw
というわけで、修正を行います。あんま勧められた方法ではないですがライブラリを直でいじります。ライブラリをアップデートしていまうと戻る可能性がありますが、まぁ忘れないようにブログに書き留めておくのでOKとします。
“..\Arduino\libraries\FauxmoESP\src\fauxmoESP.cpp”を開きます。そして
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
~略~ unsigned char fauxmoESP::addDevice(const char * device_name) { fauxmoesp_device_t device; unsigned int device_id = _devices.size(); // init properties device.name = strdup(device_name); device.state = false; device.value = 0; // create the uniqueid String mac = WiFi.macAddress(); <strong> //snprintf(device.uniqueid, 27, "%s:%s-%02X", mac.c_str(), "00:00", device_id); snprintf(device.uniqueid, 27, "%02X:%s:AB-%02X", device_id, mac.c_str(), device_id); </strong> // Attach _devices.push_back(device); DEBUG_MSG_FAUXMO("[FAUXMO] Device '%s' added as #%d\n", device_name, device_id); return device_id; } ~略~ |
元々のコードがスレ主さんとのものと違うのがちょっと気になりますが…ルトッテさんと一緒みたいですけど
1 2 |
スレ主) snprintf(device.uniqueid, 27, "%s:00:00-%02X", mac.c_str(), device_id); ワイの) snprintf(device.uniqueid, 27, "%s:%s-%02X", mac.c_str(), "00:00", device_id); |
まぁformat文の一部をエスケープに変えてあるだけで出力結果は同じになるのでこの行を修正するのでしょう(笑)。これで正しく認識しました。
EsAlexaも同じエラーを抱えているらしく、やはりissueに挙がっていました
こちらもsrc/Espalexa.hのソースの修正が必要です。これで正しく動作しているみたいです。まだ長時間の運用はしてないですが1週間程度たちますが問題なく動作しているみたいですね
あんま深くコードを追ってませんけどユニークIDの生成方法が(変わって?)うまくいかないで正しく認識できてないような感じなんでしょうね。公式にFixされればいいんですけど検証が必要だみたいな感じですね。いやー原因追及まで速かったけどモヤモヤしますね