43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
# environment/wireless_sensor.py
|
|
|
|
import logging
|
|
from datetime import datetime
|
|
|
|
import requests
|
|
from constants import SENSOR_HTTP
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class WirelessSensor:
|
|
|
|
def __init__(self, session: requests.Session) -> None:
|
|
self._sensor_data = {}
|
|
self._last_poll = None
|
|
self._session = session
|
|
|
|
def _poll_sensor(self) -> None:
|
|
try:
|
|
resp = self._session.get(SENSOR_HTTP, timeout=6)
|
|
resp.raise_for_status()
|
|
|
|
self._last_poll = datetime.now()
|
|
self._sensor_data = resp.json()
|
|
except requests.RequestException as e:
|
|
logger.error(f"Network error connecting to wireless sensor: {e}")
|
|
except Exception as e:
|
|
logger.error(f"Error parsing wireless sensor data: {e}")
|
|
|
|
def get(self) -> dict:
|
|
logger.debug("Polling Wireless Sensor...")
|
|
self._poll_sensor()
|
|
|
|
if self._last_poll:
|
|
age_seconds = abs((datetime.now() - self._last_poll).total_seconds())
|
|
if age_seconds < 600:
|
|
return self._sensor_data
|
|
else:
|
|
logger.warning("Wireless sensor data is too old (over 10 mins).")
|
|
|
|
return {}
|