begin adding radio

This commit is contained in:
death916 2025-12-05 04:17:31 -08:00
parent bb266d405b
commit f859756f46
4 changed files with 71 additions and 17 deletions

17
utils/radio.py Normal file
View file

@ -0,0 +1,17 @@
#!/usr/bin/python3
# connect to rda5807 chip and control it and display the current station
import reflex as rx
class Radio(rx.Base):
def open_radio_button(self):
return rx.button("Radio", on_click=self.open_radio_button)
def radio_card(self):
return rx.card(title="Radio")
class Radio_Control:
def __init__(self):
pass

View file

@ -1,17 +1,21 @@
# /home/death916/code/python/deathclock/utils/weather.py
import datetime
import logging # Optional: Use logging for better error messages
import os
import subprocess
import datetime
import reflex as rx
import logging # Optional: Use logging for better error messages
# Configure logging (optional but recommended)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
)
# Define the target filename consistently
WEATHER_FILENAME = "weather.jpg"
# Define the web path expected by the frontend
WEATHER_WEB_PATH = f"/{WEATHER_FILENAME}" # This should be relative to the assets dir
WEATHER_WEB_PATH = f"/{WEATHER_FILENAME}" # This should be relative to the assets dir
class Weather(rx.Base):
# No __init__ needed here for Pydantic compatibility
@ -23,7 +27,7 @@ class Weather(rx.Base):
script_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.dirname(script_dir)
assets_dir = os.path.join(project_root, 'assets')
assets_dir = os.path.join(project_root, "assets")
# Ensure the assets directory exists
if not os.path.exists(assets_dir):
@ -38,11 +42,11 @@ class Weather(rx.Base):
"""Deletes the specific weather file in the given 'assets' directory."""
target_file = os.path.join(assets_dir, WEATHER_FILENAME)
if os.path.exists(target_file):
try:
os.remove(target_file)
logging.info(f"Deleted old weather file: {target_file}")
except OSError as e:
logging.error(f"Failed to delete old weather file {target_file}: {e}")
try:
os.remove(target_file)
logging.info(f"Deleted old weather file: {target_file}")
except OSError as e:
logging.error(f"Failed to delete old weather file {target_file}: {e}")
def get_weather_screenshot(self) -> str | None:
"""
@ -56,24 +60,29 @@ class Weather(rx.Base):
curl_command = [
"curl",
"-s", # Silent mode
"v2.wttr.in/Sacramento.png?0u", # Fetch PNG, no border, no terminal escapes
"v2.wttr.in/Sacramento.png?0u", # Fetch PNG, no border, no terminal escapes
"-o",
screenshot_path, # Save to the correct assets path
screenshot_path, # Save to the correct assets path
]
# Delete the old file before creating the new one
self.delete_old_screenshots(assets_dir)
logging.info(f"Running curl command to fetch weather: {' '.join(curl_command)}")
process = subprocess.run(curl_command, check=True, capture_output=True, text=True)
logging.info(f"Curl command successful. Weather image saved to: {screenshot_path}") # Log correct save path
logging.info(
f"Running curl command to fetch weather: {' '.join(curl_command)}"
)
logging.info(
f"Curl command successful. Weather image saved to: {screenshot_path}"
) # Log correct save path
return WEATHER_WEB_PATH # e.g., "/weather.jpg"
return WEATHER_WEB_PATH # e.g., "/weather.jpg"
except subprocess.CalledProcessError as e:
logging.error(f"Curl command failed for path {screenshot_path}: {e}")
logging.error(f"Curl stderr: {e.stderr}")
return None
except Exception as e:
logging.error(f"An unexpected error occurred saving to {screenshot_path}: {e}")
logging.error(
f"An unexpected error occurred saving to {screenshot_path}: {e}"
)
return None