From e16ccd5c760ca13d86f0ad29c11be456e53cbb81 Mon Sep 17 00:00:00 2001 From: seaspotter Date: Tue, 10 Nov 2026 14:01:20 +0100 Subject: [PATCH] generic JSON consumer: don't publish temperatures=[None] when jq_temperatures is unset --- .../consumers/generic/json/consumer.py | 4 +- .../consumers/generic/json/consumer_test.py | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 packages/modules/consumers/generic/json/consumer_test.py diff --git a/packages/modules/consumers/generic/json/consumer.py b/packages/modules/consumers/generic/json/consumer.py index ab9603aa2a..fe93b36174 100644 --- a/packages/modules/consumers/generic/json/consumer.py +++ b/packages/modules/consumers/generic/json/consumer.py @@ -67,7 +67,9 @@ def update() -> ConsumerState: currents=currents, imported=imported, exported=exported, - temperatures=temperatures if isinstance(temperatures, list) else [temperatures], + temperatures=(temperatures if isinstance(temperatures, list) + else [temperatures] if temperatures is not None + else None), ) def switch_on(): diff --git a/packages/modules/consumers/generic/json/consumer_test.py b/packages/modules/consumers/generic/json/consumer_test.py new file mode 100644 index 0000000000..c7a2af2f20 --- /dev/null +++ b/packages/modules/consumers/generic/json/consumer_test.py @@ -0,0 +1,38 @@ +from unittest.mock import Mock + +import requests_mock + +from modules.common import configurable_consumer +from modules.consumers.generic.json.config import Json, JsonConfiguration +from modules.consumers.generic.json.consumer import create_consumer + +SAMPLE_URL = "http://1.1.1.1/status" + + +def _create_consumer(monkeypatch, **configuration_kwargs): + # ConfigurableConsumer.__init__ needs a store, uninteresting for these tests + monkeypatch.setattr(configurable_consumer, "get_component_value_store", Mock()) + config = Json(configuration=JsonConfiguration( + url=SAMPLE_URL, jq_power=".power", **configuration_kwargs)) + return create_consumer(config) + + +def test_temperatures_is_none_when_jq_temperatures_not_configured(monkeypatch, requests_mock: requests_mock.Mocker): + # discussion #3466, discussioncomment-19500817: without jq_temperatures, temperatures must stay + # None, not [None] - setdata.py rejects a list containing None as an invalid payload + requests_mock.get(SAMPLE_URL, json={"power": 123}) + consumer = _create_consumer(monkeypatch) + + state = consumer.module_updater() + + assert state.temperatures is None + + +def test_temperatures_is_wrapped_in_list_when_jq_temperatures_configured( + monkeypatch, requests_mock: requests_mock.Mocker): + requests_mock.get(SAMPLE_URL, json={"power": 123, "temp": 42.5}) + consumer = _create_consumer(monkeypatch, jq_temperatures=".temp") + + state = consumer.module_updater() + + assert state.temperatures == [42.5]