The “path” leads to complex JSON data when all you want is one element. So you have to use jinja template to extract the data of interets.
Hi!
now I’m trying to set the Em_OperatingMode to manual. I can do it with this curl command:
curl -X PUT -d EM_OperatingMode=1 --header 'Auth-Token: TOKEN' http://sonnen:80/api/v2/configurations
And I get the appropriate response:
{"EM_OperatingMode":"1"}
I would like to have it as a switch though:
switch:
- name: Sonnen battery manual mode
platform: rest
resource: http://sonnen:80/api/v2/configurations
method: put
headers:
Auth-Token: !secret sonnen_api_token
body_on: "EM_OperatingMode=1"
body_off: "EM_OperatingMode=2"
is_on_template: '{{ value_json["EM_OperatingMode"] == "1" }}'
But it doesn’t work. In the logs I only get:
ERROR (MainThread) [homeassistant.components.rest.switch] Can't turn on http://sonnen:80/api/v2/configurations. Is resource/endpoint offline?
Any clues?
I think the problem lies in how you’re specifying the body_on
and body_off
parameters.
In your curl
command, you’re using -d EM_OperatingMode=1
, which sends a JSON payload to the API. However, in your Home Assistant configuration, you’ve specified body_on: "EM_OperatingMode=1"
and body_off: "EM_OperatingMode=2"
, without any indication that these should be treated as JSON payloads.
When you send a request with these values, it’s likely being interpreted as a query string (e.g. http://sonnen:80/api/v2/configurations?EM_OperatingMode=1
) instead of a JSON payload. This is why the API is not receiving the expected data and returning an error.
To fix this, you should use the following configuration:
switch:
- name: Sonnen battery manual mode
platform: rest
resource: http://sonnen:80/api/v2/configurations
method: put
headers:
Auth-Token: !secret sonnen_api_token
body_on: '{"EM_OperatingMode": "1"}'
body_off: '{"EM_OperatingMode": "2"}'
is_on_template: '{{ value_json["EM_OperatingMode"] == "1" }}'
By surrounding the values with double quotes and curly braces, you’re telling Home Assistant to treat them as JSON payloads.