Skip to content

Instantly share code, notes, and snippets.

@Akkiesoft
Created February 26, 2025 13:16
Show Gist options
  • Save Akkiesoft/5759d3b24f5a4944cd7e2d688752b2a0 to your computer and use it in GitHub Desktop.
Save Akkiesoft/5759d3b24f5a4944cd7e2d688752b2a0 to your computer and use it in GitHub Desktop.
実家の冷蔵庫の開閉監視用CircuitPythonスクリプト
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
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