I recently integrated an ETA PU15 pellet boiler into Home Assistant using the
native rest: platform (no custom integration, no HACS needed), and hit a
gotcha that isn’t documented anywhere I could find — so I wrote it up in case
it saves someone else a few hours.
The short version: if your ETA boiler responds with XML (content-type
application/xml), Home Assistant silently converts it to a JSON-like
structure before your value_template ever sees it. Attributes get prefixed
with @ and text content lands under #text. Any value_template written
with regex against the raw XML syntax (uri="...") will just silently fail —
no error, the entity sits at unknown forever, while a curl on the same
endpoint shows perfectly normal XML.
The fix is to use value_json instead of regex on value:
value_template: >-
{% set item = value_json.eta.vars.variable | selectattr('@uri', 'equalto', '40/10021/0/0/12011') | first %}
{{ ((item['#text'] | float) / (item['@scaleFactor'] | float)) | round(1) }}
Full writeup + working example configuration.yaml + a log of every dead-end I
hit along the way (IndexError crashes, availability bugs on multi-sensor
REST resources, etc.):
Also covers the “variable set” pattern to batch multiple readings into one
HTTP request, useful since this boiler doesn’t handle concurrent connections
well.
Happy to help if anyone’s stuck on a similar ETA integration.