Compare commits
No commits in common. "181264277353dee79fa394b9fb047aba03d5ac40" and "9c434bf22c54badbce79e357707e343c329ab4cf" have entirely different histories.
1812642773
...
9c434bf22c
@ -6,7 +6,6 @@ from homeassistant import config_entries
|
||||
from homeassistant.helpers.event import async_track_point_in_utc_time
|
||||
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
||||
import homeassistant.util.dt as dt_util
|
||||
from homeassistant.helpers import device_registry as dr
|
||||
|
||||
from . import pyplejd
|
||||
|
||||
@ -29,21 +28,7 @@ async def async_setup(hass, config):
|
||||
async def async_setup_entry(hass, config_entry):
|
||||
|
||||
plejdManager = pyplejd.PlejdManager(config_entry.data)
|
||||
|
||||
devices = await plejdManager.get_devices()
|
||||
|
||||
if sum(d.type in ["light", "switch"] for d in devices.values()) == 0:
|
||||
site_data = await plejdManager.get_site_data()
|
||||
|
||||
device_registry = dr.async_get(hass)
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=config_entry.entry_id,
|
||||
identifiers={(DOMAIN, config_entry.data["siteId"])},
|
||||
manufacturer="Plejd",
|
||||
name=site_data.get("site", {}).get("title", "Unknown site"),
|
||||
entry_type=dr.DeviceEntryType.SERVICE,
|
||||
)
|
||||
|
||||
for dev in devices.values():
|
||||
ble_device = bluetooth.async_ble_device_from_address(
|
||||
hass, dev.BLE_address, True
|
||||
|
@ -1,6 +0,0 @@
|
||||
from . import pyplejd
|
||||
|
||||
async def async_get_config_entry_diagnostics(hass, config_entry):
|
||||
plejdManager = pyplejd.PlejdManager(config_entry.data)
|
||||
|
||||
return await plejdManager.get_site_data()
|
@ -48,10 +48,10 @@ class PlejdLight(LightEntity, CoordinatorEntity):
|
||||
"identifiers": {(DOMAIN, self.device.BLE_address)},
|
||||
"name": self.device.name,
|
||||
"manufacturer": "Plejd",
|
||||
"model": {self.device.model},
|
||||
"model": f"{self.device.model} ({self.device.hardwareId})",
|
||||
#"connections": ???,
|
||||
"suggested_area": self.device.room,
|
||||
"sw_version": f"{self.device.firmware} ({self.device.hardwareId})",
|
||||
"sw_version": self.device.firmware,
|
||||
}
|
||||
|
||||
@property
|
||||
|
@ -4,7 +4,7 @@ from datetime import timedelta
|
||||
from bleak_retry_connector import close_stale_connections
|
||||
|
||||
from .mesh import PlejdMesh
|
||||
from .api import get_cryptokey, get_devices, get_site_data
|
||||
from .api import get_cryptokey, get_devices
|
||||
from .plejd_device import PlejdDevice
|
||||
|
||||
from .const import PLEJD_SERVICE
|
||||
@ -32,9 +32,6 @@ class PlejdManager:
|
||||
def connected(self):
|
||||
return self.mesh is not None and self.mesh.connected
|
||||
|
||||
async def get_site_data(self):
|
||||
return await get_site_data(**self.credentials)
|
||||
|
||||
async def get_devices(self):
|
||||
devices = await get_devices(**self.credentials)
|
||||
self.devices = {k: PlejdDevice(self, **v) for (k,v) in devices.items()}
|
||||
|
@ -43,17 +43,13 @@ async def _get_site_details(session, siteId):
|
||||
# fp.write(json.dumps(data))
|
||||
return data
|
||||
|
||||
site_data = None
|
||||
async def get_site_data(username, password, siteId):
|
||||
global site_data
|
||||
if site_data is not None:
|
||||
return site_data
|
||||
# TODO: Memoize this somehow?
|
||||
async with ClientSession(base_url=API_BASE_URL, headers=headers) as session:
|
||||
session_token = await _login(session, username, password)
|
||||
_LOGGER.debug("Session token: %s", session_token)
|
||||
session.headers["X-Parse-Session-Token"] = session_token
|
||||
details = await _get_site_details(session, siteId)
|
||||
site_data = details
|
||||
return details
|
||||
|
||||
async def get_sites(username, password):
|
||||
|
@ -74,7 +74,7 @@ class PlejdMesh():
|
||||
return False
|
||||
|
||||
self.client = client
|
||||
self.connected_node = binascii.a2b_hex(address.replace(":", "").replace("-", ""))[::-1]
|
||||
self.connected_node = binascii.a2b_hex(address.replace(":", ""))[::-1]
|
||||
|
||||
await asyncio.sleep(2)
|
||||
|
||||
@ -149,7 +149,7 @@ class PlejdMesh():
|
||||
return False
|
||||
try:
|
||||
_LOGGER.debug("Authenticating")
|
||||
await self.client.write_gatt_char(PLEJD_AUTH, b"\0x00", response=True)
|
||||
await self.client.write_gatt_char(PLEJD_AUTH, [0], response=True)
|
||||
challenge = await self.client.read_gatt_char(PLEJD_AUTH)
|
||||
response = auth_response(self.crypto_key, challenge)
|
||||
await self.client.write_gatt_char(PLEJD_AUTH, response, response=True)
|
||||
|
@ -7,10 +7,10 @@ Device = namedtuple("Device", ["model", "type", "dimmable"])
|
||||
LIGHT = "light"
|
||||
SENSOR = "sensor"
|
||||
SWITCH = "switch"
|
||||
UNKNOWN = "unknown"
|
||||
|
||||
|
||||
HARDWARE_TYPES = {
|
||||
"0": Device("-unknown-", UNKNOWN, False),
|
||||
"0": Device("-unknown-", LIGHT, False),
|
||||
"1": Device("DIM-01", LIGHT, True),
|
||||
"2": Device("DIM-02", LIGHT, True),
|
||||
"3": Device("CTR-01", LIGHT, False),
|
||||
@ -19,15 +19,18 @@ HARDWARE_TYPES = {
|
||||
"6": Device("WPH-01", SWITCH, False),
|
||||
"7": Device("REL-01", SWITCH, False),
|
||||
"8": Device("SPR-01", SWITCH, False),
|
||||
"9": Device("-unknown-", LIGHT, False),
|
||||
"10": Device("WRT-01", SWITCH, False),
|
||||
"11": Device("DIM-01", LIGHT, True),
|
||||
"12": Device("-unknown-", LIGHT, False),
|
||||
"13": Device("Generic", LIGHT, False),
|
||||
"14": Device("DIM-01", LIGHT, True),
|
||||
"15": Device("DIM-02", LIGHT, True),
|
||||
"17": Device("REL-01-2P", SWITCH, False),
|
||||
"15": Device("-unknown-", LIGHT, False),
|
||||
"16": Device("-unknown-", LIGHT, False),
|
||||
"17": Device("REL-01", SWITCH, False),
|
||||
"18": Device("REL-02", SWITCH, False),
|
||||
"19": Device("-unknown-", LIGHT, False),
|
||||
"20": Device("SPR-01", SWITCH, False),
|
||||
"36": Device("LED-75", LIGHT, True),
|
||||
}
|
||||
|
||||
class PlejdDevice:
|
||||
|
@ -19,8 +19,8 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
async def updateCallback(data):
|
||||
coordinator.async_set_updated_data(data)
|
||||
dev.updateCallback = updateCallback
|
||||
switch = PlejdSwitch(coordinator, dev)
|
||||
entities.append(switch)
|
||||
light = PlejdSwitch(coordinator, dev)
|
||||
entities.append(light)
|
||||
async_add_entities(entities, False)
|
||||
|
||||
class Coordinator(DataUpdateCoordinator):
|
||||
@ -48,10 +48,10 @@ class PlejdSwitch(SwitchEntity, CoordinatorEntity):
|
||||
"identifiers": {(DOMAIN, self.device.BLE_address)},
|
||||
"name": self.device.name,
|
||||
"manufacturer": "Plejd",
|
||||
"model": self.device.model,
|
||||
"model": f"{self.device.model} ({self.device.hardwareId})",
|
||||
#"connections": ???,
|
||||
"suggested_area": self.device.room,
|
||||
"sw_version": f"{self.device.firmware} ({self.device.hardwareId})",
|
||||
"sw_version": self.device.firmware,
|
||||
}
|
||||
|
||||
@property
|
||||
|
Loading…
x
Reference in New Issue
Block a user