Created
February 26, 2025 13:16
-
-
Save Akkiesoft/5759d3b24f5a4944cd7e2d688752b2a0 to your computer and use it in GitHub Desktop.
実家の冷蔵庫の開閉監視用CircuitPythonスクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import adafruit_connection_manager | |
import wifi | |
class akkie_wifi(): | |
def __init__(self, ap_list): | |
self.ap_list = ap_list | |
self.connected = False | |
self.pool = None | |
self.ssl_context = None | |
def connect(self): | |
wifi.radio.start_station() | |
wifi.radio.enabled = True | |
for ap in self.ap_list: | |
try: | |
print("Trying to connect with %s..." % ap[0]) | |
wifi.radio.connect(ap[0], ap[1]) | |
print("Connected with %s." % ap[0]) | |
self.pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio) | |
self.ssl_context = adafruit_connection_manager.get_radio_ssl_context(wifi.radio) | |
self.connected = True | |
break | |
except Exception as e: | |
print("Failed to connect: %s" % e) | |
if not self.connected: | |
print("Failed to connect for all aps.") | |
def disconnect(self): | |
wifi.radio.enabled = False | |
wifi.radio.stop_station() | |
self.connected = False | |
self.pool = None |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import board | |
import digitalio | |
import time | |
import adafruit_requests | |
from akkie_wifi import akkie_wifi | |
import microcontroller | |
# ネットワークの用意 | |
network = akkie_wifi( (('SSID', 'PASSPHRASE'),) ) | |
requests = False | |
# スイッチ | |
sw = digitalio.DigitalInOut(board.GP2) | |
sw.switch_to_input(pull=digitalio.Pull.UP) | |
last_value = False | |
# 本体LED。冷蔵庫が開いてる間ONにする | |
led = digitalio.DigitalInOut(board.LED) | |
led.direction = digitalio.Direction.OUTPUT | |
led.value = False | |
# SlackのIncoming Webhook | |
slack_webhook_url = "https://hooks.slack.com/services/XXXXXXXX/XXXXXXXX/XXXXXXXXXXXXXXX" | |
# Slackに投稿する関数 | |
def post_slack(text, icon=":reizouko_closed:"): | |
global requests | |
network.connect() | |
if not network.connected: | |
print("Failed to post.") | |
print("Posting to slack.") | |
if not requests: | |
requests = adafruit_requests.Session(network.pool, network.ssl_context) | |
payload = { | |
"text": text, | |
"icon_emoji": icon | |
} | |
response = requests.post(slack_webhook_url, json=payload) | |
network.disconnect() | |
print("Post successfully.") | |
try: | |
# 起動のごあいさつ | |
post_slack("冷蔵庫Botが起動しました") | |
# 以下ループ | |
while True: | |
if sw.value != last_value: | |
last_value = sw.value | |
if not sw.value: | |
print("Closed") | |
led.value = False | |
post_slack("冷蔵庫が閉じました", icon=":reizouko_closed:") | |
else: | |
print("Open") | |
led.value = True | |
post_slack("冷蔵庫が開きました", icon=":reizouko_opened:") | |
except Exception as e: | |
# なにかあったら、すべてをにぎりつぶし、とりあえずリセットする | |
try: | |
post_slack("なにかあったので冷蔵庫Botをリセットします(%s)" % e) | |
except: | |
# これすらエラーになる分はどうしようもないのでパス | |
pass | |
time.sleep(30) | |
# ハードリセット | |
microcontroller.reset() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment