Reworked some JSON building using the json.dumps() function
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
2026-09-12 17:32:34 -04:00
parent 2768616be4
commit d607a1ed29
+29 -41
View File
@@ -1,5 +1,6 @@
import time import time
from machine import Pin, SoftI2C from machine import Pin, SoftI2C
import json
import network import network
from simple_mqtt import SimpleMQTT from simple_mqtt import SimpleMQTT
@@ -31,14 +32,12 @@ else:
# Home Assistant MQTT Discovery # Home Assistant MQTT Discovery
# ------------------------------------------------------------- # -------------------------------------------------------------
def register_ha_discovery(mqtt, sensor_type): def register_ha_discovery(mqtt, sensor_type):
device_info = ( device_info = {
f'"device":{{' "identifiers": [Config.NODE_ID],
f'"identifiers":["{Config.NODE_ID}"],' "name": NODE_NAME,
f'"name":"{NODE_NAME}",' "model": f"Pico 2 W ({sensor_type.upper()})",
f'"model":"Pico 2 W ({sensor_type.upper()})",' "manufacturer": "Raspberry Pi",
f'"manufacturer":"Raspberry Pi"' }
f"}}"
)
configs = [ configs = [
{ {
@@ -58,31 +57,29 @@ def register_ha_discovery(mqtt, sensor_type):
] ]
if sensor_type == "bme280": if sensor_type == "bme280":
configs.append( configs.append({
{ "id": "pressure",
"id": "pressure", "name": "Pressure",
"name": "Pressure", "unit": "hPa",
"unit": "hPa", "cls": "atmospheric_pressure",
"cls": "atmospheric_pressure", "val_tpl": "{{ value_json.pressure }}",
"val_tpl": "{{ value_json.pressure }}", })
}
)
for c in configs: for c in configs:
topic = f"homeassistant/sensor/{Config.NODE_ID}/{c['id']}/config" topic = f"homeassistant/sensor/{Config.NODE_ID}/{c['id']}/config"
unique_id = f"{Config.NODE_ID}_{c['id']}" payload = {
payload = ( "name": c["name"],
f'{{"name":"{c["name"]}",' "has_entity_name": True,
f'"has_entity_name":true,' "unique_id": f"{Config.NODE_ID}_{c['id']}",
f'"unique_id":"{unique_id}",' "device_class": c["cls"],
f'"device_class":"{c["cls"]}",' "state_class": "measurement",
f'"state_class":"measurement",' "unit_of_measurement": c["unit"],
f'"unit_of_measurement":"{c["unit"]}",' "state_topic": STATE_TOPIC,
f'"state_topic":"{STATE_TOPIC}",' "value_template": c["val_tpl"],
f'"value_template":"{c["val_tpl"]}",' "device": device_info,
f"{device_info}}}" }
)
mqtt.publish(topic, payload, retain=True) mqtt.publish(topic, json.dumps(payload), retain=True)
print(f"Registered HA discovery: {c['id']}") print(f"Registered HA discovery: {c['id']}")
@@ -148,17 +145,8 @@ def main():
try: try:
data = sensor.read_values() data = sensor.read_values()
if data.get("pressure") is not None: payload = {k: v for k, v in data.items() if v is not None}
state_json = ( state_json = json.dumps(payload)
f'{{"temperature":{data["temperature"]},'
f'"humidity":{data["humidity"]},'
f'"pressure":{data["pressure"]}}}'
)
else:
state_json = (
f'{{"temperature":{data["temperature"]},'
f'"humidity":{data["humidity"]}}}'
)
mqtt.publish(STATE_TOPIC, state_json) mqtt.publish(STATE_TOPIC, state_json)
print(f"[{NODE_NAME}] Published: {state_json}") print(f"[{NODE_NAME}] Published: {state_json}")