ã¯ããã«
ãããŸã§ãSwitchBotã®é²æ°Žæž©æ¹¿åºŠèšããããŒã¿ãååŸããPythonã¹ã¯ãªããã1ã€ã®ã³ã³ããå ã§è€æ°ããã€ã¹ãæ±ãéçŽåã§éçšããŠããŸããããã®æ¹åŒã¯åçŽã§å®å®ããŠããŸãããã¹ãã£ã³ééãé·ããªããšã¬ã¹ãã³ã¹ãæªåãããŸã1å°ã®ã¹ã¯ãªããé害ãå šäœã«åœ±é¿ãããšãã課é¡ããããŸããããã§ä»åã¯ãã鲿°Žæž©æ¹¿åºŠèšããšã«å°çšã³ã³ãããç«ã¡äžãããã©ã¬ã«ã«åäœãããããšãå¯èœãããæ€èšããŸãããããã«ãããåã ã®ããã€ã¹ãç¬ç«ããŠåäœããã¹ãã£ã³é »åºŠããšã©ãŒåŠçãåé¢ã§ããããã«ãªããŸãã
æ¬èšäºã§ã¯ãå®éã«ãã©ã¬ã«åãå®çŸããããã§åé¡ãšãªã3ã€ã®æè¡çè«ç¹ â (1) Bluetoothã¢ããã¿ã®æä»å¶åŸ¡ã(2) ã³ã³ããããšã®èšå®åé¢ã(3) SQLite DBã®å ±æãŸãã¯åé¢ â ãäžå¿ã«ãæ§ææ¡ãšèæ ®ç¹ãæŽçããããšæããŸãã
1. ãªãœãŒã¹ïŒBluetoothã¢ããã¿ïŒã®æä»å¶åŸ¡
çŸåšã®ã·ã¹ãã ã§ã¯ã1æ¬ã®ã¹ã¯ãªããããã¹ãäžã®Bluetoothã¢ããã¿ãç¬å çã«äœ¿çšããŠãããããç«¶åã¯çºçããŠããŸããã ããããããã€ã¹ããšã«è€æ°ã®ã³ã³ãããç«ã¡äžãããšãè€æ°ã®ããã»ã¹ãåäžã¢ããã¿ãžåæã¢ã¯ã»ã¹ããç«¶åãé¿ããããªããªããŸãã
Bluetoothã¢ããã¿ã®æä»å¶åŸ¡ã®æ€èš
課é¡: çŸåšã¯
docker-compose.ymlã§privileged: trueããã³network_mode: hostã䜿çšããŠãããå šãŠã®ã³ã³ããããã¹ãã®Bluetoothããã€ã¹ãžãã«ã¢ã¯ã»ã¹å¯èœã§ãã ãã®ãããè€æ°ã¹ãã£ã³ãåæå®è¡ããããšå®å®æ§ãäœäžããŸãã解決ç1ïŒå°çšã¢ããã¿ã®å²ãåœãŠïŒæšå¥šïŒ ãã¹ãã«è€æ°ã®Bluetooth USBãã³ã°ã«ãæ¥ç¶ããåã³ã³ããã«å°çšã®ã¢ããã¿ãå²ãåœãŠãŸãã ã³ã³ããèµ·åæã«
devicesèšå®ã§ããŠã³ãããå¿ èŠã«å¿ããŠhciconfigãbluetoothctlã³ãã³ãã§æå¹åã»ç¡å¹åãå¶åŸ¡ããŸãã ãã®æ¹åŒã¯æã確å®ã§ãå®å šãªäžŠååŠçãå®çŸã§ããŸãã解決ç2ïŒã·ãªã¢ã«å®è¡ã»æéåå² 1ã€ã®ã¢ããã¿ãå ±æããåã³ã³ãããçæéã¹ãã£ã³ã亀代ã§å®è¡ããããã¹ã±ãžã¥ãŒã«å¶åŸ¡ããŸãã ãã ããããã¯ã䞊ååãã§ã¯ãªããæåå²å ±æãã§ãããã¹ãã£ã³ã¿ã€ãã³ã°ã®èª¿æŽãè€éã«ãªãæ¬ ç¹ããããŸãã
çµè«: BLEéä¿¡ã¯ããŒããŠã§ã¢è³æºãå ±æãã¥ãããããå®å®ãããã©ã¬ã«éçšãç®æãå Žåã¯ããã€ã¹æ°åã®Bluetoothã¢ããã¿ãçšæããã®ãçŸå®çã§ãã
2. ã³ã³ããããšã®èšå®ã»åé¢
次ã«ãã³ã³ããããšã«å¯Ÿè±¡ããã€ã¹ãä¿åå
ãåããå¿
èŠããããŸããçŸç¶ã§ã¯å
šãŠã®MACã¢ãã¬ã¹ã config.json ã§äžå
管çããŠããŸãããããã忣åããä»çµã¿ãå¿
èŠã§ãã
ããã€ã¹åºæèšå®ã®å€éšåãšæ³šå ¥
課é¡: åäžã®èšå®ãã¡ã€ã«ã«å šããã€ã¹æ å ±ããŸãšããŠãããããè€æ°ã³ã³ããã§å ±æããå Žåã«æå³ããªãããã€ã¹ãŸã§ã¹ãã£ã³ããŠããŸãå¯èœæ§ããããŸãã
解決çïŒç°å¢å€æ°ã®å©çšïŒæšå¥šïŒ åã³ã³ããã«ãç£èŠå¯Ÿè±¡MACã¢ãã¬ã¹ãç°å¢å€æ°ãšããŠæž¡ããŸãã
services: sensor_bath: environment: - TARGET_MAC=xx:xx:xx:xx:xx:xx # æµŽæ§œã®æž©åºŠèš sensor_outside: environment: - TARGET_MAC=yy:yy:yy:yy:yy:yy # 倿°æž©èš
ã¹ã¯ãªãã (ble_scanner.py) åŽã§ã¯ os.environ["TARGET_MAC"] ãèªã¿èŸŒã¿ãæå®ããã€ã¹ã®ã¿ãã¹ãã£ã³ããŸãã
ããã«ãããã³ã³ããããšã«å®å
šãªèšå®åé¢ãå®çŸã§ããŸãã
3. SQLite DBã®å ±æãŸãã¯åé¢
æåŸã«ãããŒã¿ä¿åæ¹åŒã®åé¡ããããŸãã SQLiteã¯ã·ã³ãã«ã§äŸ¿å©ã§ãããè€æ°ããã»ã¹ããåææžã蟌ã¿ãè¡ããšãã¡ã€ã«ããã¯ç«¶åãçºçãããããªããŸãã
察å¿çã®æ¯èŒ
- â SQLiteãã¡ã€ã«ãåé¢ïŒæšå¥šïŒ åã³ã³ãããç¬èªã®DBãã¡ã€ã«ãæã¡ãå¹²æžãé¿ããŸãã
services: sensor_bath: volumes: - ./data/bath:/app/data sensor_outside: volumes: - ./data/outside:/app/data
åŸåŠçãšããŠããŒã¿éçŽïŒETLïŒãžã§ããå¥éçšæããã®ãçŸå®çã§ãã
- â¡ å€éšDBã®æ¡çšïŒåŒ·ãæšå¥šïŒ SQLiteã廿¢ããMySQLãPostgreSQLãªã©ã®ãããã¯ãŒã¯æ¥ç¶DBãå¥ã³ã³ãããšããŠçšæããŸãã åã»ã³ãµãŒã³ã³ããã¯å ±éDBãžããŒã¿ãæžã蟌ã¿ãDBåŽã§åææžã蟌ã¿ãå¶åŸ¡ããŸãã ãã®æ¹åŒãªãæ¡åŒµæ§ãé«ããGrafanaãªã©ã®å¯èŠåããŒã«ãšã飿ºãããããªããŸãã
ãããã«
ä»åã®æ€èšãéããŠãäžèšãSwitchBot鲿°Žæž©æ¹¿åºŠèšã®äžŠåååŸã·ã¹ãã ãæ§ç¯ããããã§ã®èª²é¡ãšæ¹éãšããããšæããŸãã
- Bluetoothã¢ããã¿ã¯ç©ççã«åé¢ããããåäžã¢ããã¿ãéçŽåã§å ±æããã
- åã³ã³ããã¯ç°å¢å€æ°ã§å¯Ÿè±¡ããã€ã¹ãæå®ããèšå®ãç¬ç«ãããã
- ããŒã¿ã¯SQLiteã®åé¢ãŸãã¯å€éšDBã«ããéäžç®¡çãéžæããã