1 """Support for powerwall binary sensors."""
3 from typing
import TYPE_CHECKING
5 from tesla_powerwall
import GridStatus, MeterType
8 BinarySensorDeviceClass,
14 from .entity
import PowerWallEntity
15 from .models
import PowerwallConfigEntry
17 CONNECTED_GRID_STATUSES = {
18 GridStatus.TRANSITION_TO_GRID,
25 entry: PowerwallConfigEntry,
26 async_add_entities: AddEntitiesCallback,
28 """Set up the powerwall sensors."""
29 powerwall_data = entry.runtime_data
32 sensor_class(powerwall_data)
34 PowerWallRunningSensor,
35 PowerWallGridServicesActiveSensor,
36 PowerWallGridStatusSensor,
37 PowerWallConnectedSensor,
38 PowerWallChargingStatusSensor,
45 """Representation of an Powerwall running sensor."""
47 _attr_translation_key =
"status"
48 _attr_device_class = BinarySensorDeviceClass.POWER
52 """Device Uniqueid."""
53 return f
"{self.base_unique_id}_running"
57 """Get the powerwall running state."""
58 return self.
datadatadata.site_master.is_running
62 """Representation of an Powerwall connected sensor."""
64 _attr_translation_key =
"connected_to_tesla"
65 _attr_device_class = BinarySensorDeviceClass.CONNECTIVITY
69 """Device Uniqueid."""
70 return f
"{self.base_unique_id}_connected_to_tesla"
74 """Get the powerwall connected to tesla state."""
75 return self.
datadatadata.site_master.is_connected_to_tesla
79 """Representation of a Powerwall grid services active sensor."""
81 _attr_translation_key =
"grid_services_active"
82 _attr_device_class = BinarySensorDeviceClass.POWER
86 """Device Uniqueid."""
87 return f
"{self.base_unique_id}_grid_services_active"
91 """Grid services is active."""
92 return self.
datadatadata.grid_services_active
96 """Representation of an Powerwall grid status sensor."""
98 _attr_translation_key =
"grid_status"
99 _attr_device_class = BinarySensorDeviceClass.POWER
103 """Device Uniqueid."""
104 return f
"{self.base_unique_id}_grid_status"
108 """Grid is online."""
109 return self.
datadatadata.grid_status
in CONNECTED_GRID_STATUSES
113 """Representation of an Powerwall charging status sensor."""
115 _attr_device_class = BinarySensorDeviceClass.BATTERY_CHARGING
119 """Powerwall is available."""
123 and self.
datadatadata.meters.get_meter(MeterType.BATTERY)
is not None
128 """Device Uniqueid."""
129 return f
"{self.base_unique_id}_powerwall_charging"
133 """Powerwall is charging."""
134 meter = self.
datadatadata.meters.get_meter(MeterType.BATTERY)
137 assert meter
is not None
139 return meter.is_sending_to()
None async_setup_entry(HomeAssistant hass, PowerwallConfigEntry entry, AddEntitiesCallback async_add_entities)