mirror of
https://github.com/ckaczor/HomeMonitor.git
synced 2026-01-13 17:22:54 -05:00
137 lines
3.1 KiB
Python
137 lines
3.1 KiB
Python
import badger2040
|
|
import machine
|
|
import urequests
|
|
import ntptime
|
|
import datetime
|
|
import math
|
|
from machine import Pin, ADC
|
|
|
|
LOOP = True
|
|
|
|
WIDTH = 296
|
|
HEIGHT = 128
|
|
|
|
COUNTRY = "US"
|
|
STATE = "MA"
|
|
TIMEZONE = "America/New_York"
|
|
|
|
BASE_URL = f"http://172.23.10.3:8081/api/calendar/events/next?country={COUNTRY}&state={STATE}&timezone={TIMEZONE}"
|
|
|
|
badger = badger2040.Badger2040()
|
|
|
|
def get_battery_level():
|
|
global battery_level
|
|
|
|
Pin(25, Pin.OUT, value=1) # Deselect Wi-Fi module
|
|
Pin(29, Pin.IN, pull=None) # Set VSYS ADC pin floating
|
|
|
|
# VSYS measurement
|
|
vsys_adc = ADC(29)
|
|
vsys = (vsys_adc.read_u16() / 65535) * 3 * 3.3
|
|
|
|
battery_level = vsys
|
|
|
|
def get_data(url):
|
|
global name, type, date, days_until, hours_until, minutes_until, is_today, response_time
|
|
|
|
print(f"Requesting URL: {url}")
|
|
response = urequests.get(url)
|
|
|
|
json = response.json()
|
|
print("Data obtained!")
|
|
print(json)
|
|
|
|
value = json["responseTime"];
|
|
response_time = datetime.datetime.fromisoformat(value[0:19])
|
|
|
|
event = json["event"]
|
|
|
|
name = event["name"]
|
|
type = event["type"]
|
|
date = event["date"]
|
|
is_today = event["isToday"]
|
|
|
|
if event["durationUntil"] is None:
|
|
days_until = 0
|
|
hours_until = 0
|
|
minutes_until = 0
|
|
else:
|
|
days_until = event["durationUntil"]["days"]
|
|
hours_until = event["durationUntil"]["hours"]
|
|
minutes_until = event["durationUntil"]["minutes"]
|
|
|
|
response.close()
|
|
|
|
def update_display():
|
|
badger.set_pen(15)
|
|
badger.clear()
|
|
|
|
badger.set_pen(0)
|
|
badger.set_font("bitmap8")
|
|
|
|
text = f"{name}"
|
|
text_width = badger.measure_text(text, scale=2)
|
|
badger.text(text, math.floor((WIDTH - text_width) / 2), 25, scale=2)
|
|
|
|
text = "Today" if is_today else f"{days_until} days {hours_until} hours"
|
|
text_width = badger.measure_text(text, scale=2)
|
|
badger.text(text, math.floor((WIDTH - text_width) / 2), 65, scale=2)
|
|
|
|
badger.text(f"Battery: {battery_level:.2f}V", 2, HEIGHT - 10, scale=1)
|
|
|
|
text = f"{response_time.date()} {response_time.time()}"
|
|
text_width = badger.measure_text(text, scale=1)
|
|
badger.text(text, WIDTH - text_width - 2, HEIGHT - 10, scale=1)
|
|
|
|
badger.update()
|
|
|
|
step = 0
|
|
|
|
while True:
|
|
try:
|
|
step = 0
|
|
|
|
badger.connect(status_handler=None)
|
|
|
|
step += 1
|
|
|
|
try:
|
|
if badger.isconnected():
|
|
ntptime.settime()
|
|
except Exception as e:
|
|
print(f"{step} - {repr(e)}")
|
|
|
|
step += 1
|
|
|
|
get_data(BASE_URL)
|
|
|
|
step += 1
|
|
|
|
get_battery_level()
|
|
|
|
step += 1
|
|
|
|
update_display()
|
|
|
|
step += 1
|
|
|
|
if LOOP:
|
|
badger2040.sleep_for(30)
|
|
else:
|
|
break
|
|
except Exception as e:
|
|
badger.set_pen(15)
|
|
badger.clear()
|
|
|
|
badger.set_pen(0)
|
|
badger.set_font("bitmap8")
|
|
|
|
badger.text(f"{step} - {repr(e)}", 0, 0, WIDTH, scale=1)
|
|
|
|
badger.update()
|
|
|
|
if LOOP:
|
|
badger2040.sleep_for(1)
|
|
else:
|
|
break
|