Update support to external library pypglab to version 0.0.5 (#141876)

update support to external library pypglab to version 0.0.5
pull/141925/head
pglab-electronics 2025-03-31 10:25:48 +02:00 committed by GitHub
parent 0488012c77
commit c0e8f14745
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 142 additions and 285 deletions

View File

@ -5,7 +5,7 @@ from __future__ import annotations
from pypglab.mqtt import (
Client as PyPGLabMqttClient,
Sub_State as PyPGLabSubState,
Subcribe_CallBack as PyPGLabSubscribeCallBack,
Subscribe_CallBack as PyPGLabSubscribeCallBack,
)
from homeassistant.components import mqtt

View File

@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Any
from pypglab.const import SENSOR_REBOOT_TIME, SENSOR_TEMPERATURE, SENSOR_VOLTAGE
from pypglab.device import Device as PyPGLabDevice
from pypglab.sensor import Sensor as PyPGLabSensors
from pypglab.sensor import StatusSensor as PyPGLabSensors
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
@ -31,7 +31,7 @@ class PGLabSensorsCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""Initialize."""
# get a reference of PG Lab device internal sensors state
self._sensors: PyPGLabSensors = pglab_device.sensors
self._sensors: PyPGLabSensors = pglab_device.status_sensor
super().__init__(
hass,

View File

@ -220,7 +220,7 @@ class PGLabDiscovery:
configuration_url=f"http://{pglab_device.ip}/",
connections={(CONNECTION_NETWORK_MAC, pglab_device.mac)},
identifiers={(DOMAIN, pglab_device.id)},
manufacturer=pglab_device.manufactor,
manufacturer=pglab_device.manufacturer,
model=pglab_device.type,
name=pglab_device.name,
sw_version=pglab_device.firmware_version,

View File

@ -37,7 +37,7 @@ class PGLabBaseEntity(Entity):
sw_version=pglab_device.firmware_version,
hw_version=pglab_device.hardware_version,
model=pglab_device.type,
manufacturer=pglab_device.manufactor,
manufacturer=pglab_device.manufacturer,
configuration_url=f"http://{pglab_device.ip}/",
connections={(CONNECTION_NETWORK_MAC, pglab_device.mac)},
)

View File

@ -9,6 +9,6 @@
"loggers": ["pglab"],
"mqtt": ["pglab/discovery/#"],
"quality_scale": "bronze",
"requirements": ["pypglab==0.0.3"],
"requirements": ["pypglab==0.0.5"],
"single_config_entry": true
}

2
requirements_all.txt generated
View File

@ -2223,7 +2223,7 @@ pypca==0.0.7
pypck==0.8.5
# homeassistant.components.pglab
pypglab==0.0.3
pypglab==0.0.5
# homeassistant.components.pjlink
pypjlink2==1.2.1

View File

@ -1814,7 +1814,7 @@ pypalazzetti==0.1.19
pypck==0.8.5
# homeassistant.components.pglab
pypglab==0.0.3
pypglab==0.0.5
# homeassistant.components.pjlink
pypjlink2==1.2.1

View File

@ -0,0 +1,50 @@
"""Common code for PG LAB Electronics tests."""
import json
from homeassistant.core import HomeAssistant
from tests.common import async_fire_mqtt_message
def get_device_discovery_payload(
number_of_shutters: int,
number_of_boards: int,
device_name: str = "test",
) -> dict[str, any]:
"""Return the device discovery payload."""
# be sure the number of shutters and boards are in the correct range
assert 0 <= number_of_boards <= 8
assert 0 <= number_of_shutters <= (number_of_boards * 4)
# define the number of E-RELAY boards connected to E-BOARD
boards = "1" * number_of_boards + "0" * (8 - number_of_boards)
return {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": device_name,
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-BOARD",
"id": "E-BOARD-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": number_of_shutters, "boards": boards},
}
async def send_discovery_message(
hass: HomeAssistant,
payload: dict[str, any] | None,
) -> None:
"""Send the discovery message to make E-BOARD device discoverable."""
topic = "pglab/discovery/E-BOARD-DD53AC85/config"
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload if payload is not None else ""),
)
await hass.async_block_till_done()

View File

@ -1,7 +1,5 @@
"""The tests for the PG LAB Electronics cover."""
import json
from homeassistant.components import cover
from homeassistant.components.cover import (
DOMAIN as COVER_DOMAIN,
@ -19,6 +17,8 @@ from homeassistant.const import (
)
from homeassistant.core import HomeAssistant
from .test_common import get_device_discovery_payload, send_discovery_message
from tests.common import async_fire_mqtt_message
from tests.typing import MqttMockHAClient
@ -43,25 +43,13 @@ async def test_cover_features(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient, setup_pglab
) -> None:
"""Test cover features."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 4, "boards": "10000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=4,
number_of_boards=1,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
assert len(hass.states.async_all("cover")) == 4
@ -75,25 +63,13 @@ async def test_cover_availability(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient, setup_pglab
) -> None:
"""Check if covers are properly created."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 6, "boards": "11000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=6,
number_of_boards=2,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# We are creating 6 covers using two E-RELAY devices connected to E-BOARD.
# Now we are going to check if all covers are created and their state is unknown.
@ -111,25 +87,12 @@ async def test_cover_change_state_via_mqtt(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient, setup_pglab
) -> None:
"""Test state update via MQTT."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 2, "boards": "10000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=2,
number_of_boards=1,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Check initial state is unknown
cover = hass.states.get("cover.test_shutter_0")
@ -165,25 +128,13 @@ async def test_cover_mqtt_state_by_calling_service(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient, setup_pglab
) -> None:
"""Calling service to OPEN/CLOSE cover and check mqtt state."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 2, "boards": "10000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=2,
number_of_boards=1,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
cover = hass.states.get("cover.test_shutter_0")
assert cover.state == STATE_UNKNOWN

View File

@ -1,13 +1,12 @@
"""The tests for the PG LAB Electronics discovery device."""
import json
from syrupy.assertion import SnapshotAssertion
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from tests.common import async_fire_mqtt_message
from .test_common import get_device_discovery_payload, send_discovery_message
from tests.typing import MqttMockHAClient
@ -19,25 +18,13 @@ async def test_device_discover(
setup_pglab,
) -> None:
"""Test setting up a device."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "11000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=2,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Verify device and registry entries are created
device_entry = device_reg.async_get_device(
@ -60,25 +47,12 @@ async def test_device_update(
snapshot: SnapshotAssertion,
) -> None:
"""Test update a device."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "11000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=2,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Verify device is created
device_entry = device_reg.async_get_device(
@ -90,12 +64,7 @@ async def test_device_update(
payload["fw"] = "1.0.1"
payload["hw"] = "1.0.8"
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Verify device is created
device_entry = device_reg.async_get_device(
@ -114,25 +83,12 @@ async def test_device_remove(
setup_pglab,
) -> None:
"""Test remove a device."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "11000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=2,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Verify device is created
device_entry = device_reg.async_get_device(
@ -140,12 +96,7 @@ async def test_device_remove(
)
assert device_entry is not None
async_fire_mqtt_message(
hass,
topic,
"",
)
await hass.async_block_till_done()
await send_discovery_message(hass, None)
# Verify device entry is removed
device_entry = device_reg.async_get_device(

View File

@ -8,34 +8,12 @@ from syrupy import SnapshotAssertion
from homeassistant.core import HomeAssistant
from .test_common import get_device_discovery_payload, send_discovery_message
from tests.common import async_fire_mqtt_message
from tests.typing import MqttMockHAClient
async def send_discovery_message(hass: HomeAssistant) -> None:
"""Send mqtt discovery message."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "00000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
)
await hass.async_block_till_done()
@freeze_time("2024-02-26 01:21:34")
@pytest.mark.parametrize(
"sensor_suffix",
@ -55,7 +33,12 @@ async def test_sensors(
"""Check if sensors are properly created and updated."""
# send the discovery message to make E-BOARD device discoverable
await send_discovery_message(hass)
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=0,
)
await send_discovery_message(hass, payload)
# check initial sensors state
state = hass.states.get(f"sensor.test_{sensor_suffix}")

View File

@ -1,7 +1,6 @@
"""The tests for the PG LAB Electronics switch."""
from datetime import timedelta
import json
from homeassistant import config_entries
from homeassistant.components.switch import (
@ -20,6 +19,8 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from homeassistant.util import dt as dt_util
from .test_common import get_device_discovery_payload, send_discovery_message
from tests.common import async_fire_mqtt_message, async_fire_time_changed
from tests.typing import MqttMockHAClient
@ -38,25 +39,13 @@ async def test_available_relay(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient, setup_pglab
) -> None:
"""Check if relay are properly created when two E-Relay boards are connected."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "11000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=2,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
for i in range(16):
state = hass.states.get(f"switch.test_relay_{i}")
@ -68,25 +57,13 @@ async def test_change_state_via_mqtt(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient, setup_pglab
) -> None:
"""Test state update via MQTT."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "10000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=1,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Simulate response from the device
state = hass.states.get("switch.test_relay_0")
@ -123,25 +100,13 @@ async def test_mqtt_state_by_calling_service(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient, setup_pglab
) -> None:
"""Calling service to turn ON/OFF relay and check mqtt state."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "10000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=1,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Turn relay ON
await call_service(hass, "switch.test_relay_0", SERVICE_TURN_ON)
@ -177,26 +142,13 @@ async def test_discovery_update(
) -> None:
"""Update discovery message and check if relay are property updated."""
# publish the first discovery message
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "first_test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "10000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
device_name="first_test",
number_of_shutters=0,
number_of_boards=1,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# test the available relay in the first configuration
for i in range(8):
@ -206,25 +158,13 @@ async def test_discovery_update(
# prepare a new message ... the same device but renamed
# and with different relay configuration
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "second_test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "11000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
device_name="second_test",
number_of_shutters=0,
number_of_boards=2,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# be sure that old relay are been removed
for i in range(8):
@ -245,25 +185,12 @@ async def test_disable_entity_state_change_via_mqtt(
) -> None:
"""Test state update via MQTT of disable entity."""
topic = "pglab/discovery/E-Board-DD53AC85/config"
payload = {
"ip": "192.168.1.16",
"mac": "80:34:28:1B:18:5A",
"name": "test",
"hw": "1.0.7",
"fw": "1.0.0",
"type": "E-Board",
"id": "E-Board-DD53AC85",
"manufacturer": "PG LAB Electronics",
"params": {"shutters": 0, "boards": "10000000"},
}
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
payload = get_device_discovery_payload(
number_of_shutters=0,
number_of_boards=1,
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Be sure that the entity relay_0 is available
state = hass.states.get("switch.test_relay_0")
@ -298,12 +225,7 @@ async def test_disable_entity_state_change_via_mqtt(
await hass.async_block_till_done()
# Re-send the discovery message
async_fire_mqtt_message(
hass,
topic,
json.dumps(payload),
)
await hass.async_block_till_done()
await send_discovery_message(hass, payload)
# Be sure that the state is not changed
state = hass.states.get("switch.test_relay_0")