Updated apps
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
"""Amazon Orders sensors."""
|
||||
|
||||
import logging
|
||||
from homeassistant.helpers.entity import Entity
|
||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from datetime import datetime
|
||||
from homeassistant.components.sensor import SensorEntity
|
||||
from .coordinator import AmazonOrdersCoordinator
|
||||
from homeassistant.util.dt import as_local
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
STATUSES = [
|
||||
"Ordered",
|
||||
"Shipped",
|
||||
"Out for delivery",
|
||||
"Delivered",
|
||||
]
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
async_add_entities,
|
||||
):
|
||||
"""Set up Amazon Order Status sensors."""
|
||||
coordinator: AmazonOrdersCoordinator = hass.data["amazon_order_status"][entry.entry_id]
|
||||
|
||||
sensors = [
|
||||
AmazonOrderStatusSensor(coordinator, status)
|
||||
for status in STATUSES
|
||||
]
|
||||
sensors.append(AmazonOrdersLastUpdatedSensor(coordinator))
|
||||
|
||||
async_add_entities(sensors)
|
||||
|
||||
|
||||
class AmazonOrderStatusSensor(CoordinatorEntity, Entity):
|
||||
"""Sensor representing Amazon orders in a specific status."""
|
||||
|
||||
def __init__(self, coordinator: AmazonOrdersCoordinator, status: str):
|
||||
super().__init__(coordinator)
|
||||
self.status = status
|
||||
self._attr_unique_id = f"amazon_order_status_{status.lower().replace(' ', '_')}"
|
||||
self._attr_name = f"Amazon Orders {status}"
|
||||
self._attr_icon = "mdi:package-variant"
|
||||
|
||||
@property
|
||||
def state(self) -> int:
|
||||
"""Return number of orders in this status."""
|
||||
return len(self._orders_for_status())
|
||||
|
||||
@property
|
||||
def extra_state_attributes(self):
|
||||
"""Return order details for this status."""
|
||||
orders = self._orders_for_status()
|
||||
return {
|
||||
"order_count": len(orders),
|
||||
"orders": orders,
|
||||
}
|
||||
|
||||
def _orders_for_status(self) -> list[dict]:
|
||||
"""Return orders matching this sensor's status."""
|
||||
if not self.coordinator.data:
|
||||
return []
|
||||
|
||||
return [
|
||||
{
|
||||
"order_id": data.get("order_id"),
|
||||
"subject": data.get("subject"),
|
||||
"updated": data.get("updated"),
|
||||
"tracking_url": data.get("tracking_url"),
|
||||
}
|
||||
for data in self.coordinator.data
|
||||
if data.get("status") == self.status
|
||||
]
|
||||
|
||||
|
||||
class AmazonOrdersLastUpdatedSensor(CoordinatorEntity, Entity):
|
||||
"""Sensor showing when Amazon orders were last updated."""
|
||||
|
||||
def __init__(self, coordinator: AmazonOrdersCoordinator):
|
||||
super().__init__(coordinator)
|
||||
self._attr_unique_id = "amazon_order_status_last_updated"
|
||||
self._attr_name = "Amazon Orders Last Updated"
|
||||
self._attr_icon = "mdi:clock-check-outline"
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
"""Return ISO timestamp of last successful update."""
|
||||
if not getattr(self.coordinator, "last_check", None):
|
||||
return None
|
||||
return self.coordinator.last_check.isoformat()
|
||||
Reference in New Issue
Block a user