Skip to content

state.set not working as expected #715

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
phsdv opened this issue Apr 9, 2025 · 1 comment
Closed

state.set not working as expected #715

phsdv opened this issue Apr 9, 2025 · 1 comment

Comments

@phsdv
Copy link

phsdv commented Apr 9, 2025

While trying to write a script to reduce the charge current of my electric car charger (called amina, connected via Zigbee2MQTT) by changing the number.amina_charge_limit value, I can see it in the graph but it does not actually happen. In the image below you can see in blue that the script changes the values (around 10:35) but the actual current (yellow) stays the same. Later, just after 10:38 in the graph, I changed the number.amina_charge_limit in the HA GUI, and then the actual current, with a small delay, does change, as expected.

It looks like state.set does not work as expected. I am expecting the charger to reduce current and the value in the graph to change, but only the value in the graph does change. The new value is somehow not communicated to the underlying device (zigbee2mqtt in this case). I checked also the zigbee2mqtt logs and values of the charge_limit do not change when running the pyscript, but do change when changing it in the GUI.

My test script:

@service
def test_state_set():
    state.set("number.amina_charge_limit", value=13)
    log.warning(f"1: {number.amina_charge_limit=},   {sensor.amina_current=}")
    task.sleep(10)
    state.set("number.amina_charge_limit", value=10)
    log.warning(f"2: {number.amina_charge_limit=},   {sensor.amina_current=}")
    task.sleep(10)
    state.set("number.amina_charge_limit", value=13)
    log.warning(f"3: {number.amina_charge_limit=},   {sensor.amina_current=}")
    task.sleep(10)
    number.amina_charge_limit=9
    log.warning(f"4: {number.amina_charge_limit=},   {sensor.amina_current=}")
    task.sleep(10)
    number.amina_charge_limit=6
    log.warning(f"5: {number.amina_charge_limit=},   {sensor.amina_current=}")
    task.sleep(10)
    number.amina_charge_limit=13
    log.warning(f"6: {number.amina_charge_limit=},   {sensor.amina_current=}")

log file result:

2025-04-09 10:34:38.451 INFO (MainThread) [custom_components.pyscript.global_ctx] Reloaded /config/pyscript/dev_z2mtest.py
2025-04-09 10:34:47.163 WARNING (MainThread) [custom_components.pyscript.file.dev_z2mtest.test_state_set] 1: number.amina_charge_limit=13,   sensor.amina_current=13.04
2025-04-09 10:34:57.166 WARNING (MainThread) [custom_components.pyscript.file.dev_z2mtest.test_state_set] 2: number.amina_charge_limit=10,   sensor.amina_current=12.97
2025-04-09 10:35:07.169 WARNING (MainThread) [custom_components.pyscript.file.dev_z2mtest.test_state_set] 3: number.amina_charge_limit=13,   sensor.amina_current=13.02
2025-04-09 10:35:17.172 WARNING (MainThread) [custom_components.pyscript.file.dev_z2mtest.test_state_set] 4: number.amina_charge_limit=9,   sensor.amina_current=13.02
2025-04-09 10:35:27.175 WARNING (MainThread) [custom_components.pyscript.file.dev_z2mtest.test_state_set] 5: number.amina_charge_limit=6,   sensor.amina_current=13.07
2025-04-09 10:35:37.177 WARNING (MainThread) [custom_components.pyscript.file.dev_z2mtest.test_state_set] 6: number.amina_charge_limit=13,   sensor.amina_current=13.01

Graph of both number.amina_charge_limit in blue and sensor.amina_current in yellow:
Image

@craigbarratt
Copy link
Member

It's likely that integration doesn't monitor the state variable, so changing it won't be noticed.

Perhaps there is a service call or other operation you need to do to actually change the current limit or current?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants