Issue mqtt.publish with sensor values in json format

Hello community,

so far, I found every solution for my home automation issues here in this forum. Now, I’ve got a problem, I cannot really solve myself. I want to publish a mqtt message like:

sensor/Testdevice/values/{“temperature”: 20, “humidity”: 40}

I’ve got a sensor for the humidity and temperature values in:
sensor.temperature_158d0001b8f488.state
states.sensor.humidity_158d0001b8f488.state

For testing, I wrote a script:

script:
  mqtttest:
    sequence:
      - service: mqtt.publish
        data:
          topic: "sensor/Testdevice/values"
          payload: >-
            {
              "temperature": {{ states.sensor.temperature_158d0001b8f488.state }},
              "humidity": {{ states.sensor.humidity_158d0001b8f488.state }}
            }

When I sniff my mqtt-message with “MQTT - Lightweight Client” I get the message:

sensor/Testdevice/values/{“temperature”: {{ states.sensor.temperature_158d0001b8f488.state }}, “humidity”: {{ states.sensor.humidity_158d0001b8f488.state }}}

Sure, I want the Sensor values instead of the plain name. I also testet it with:

      payload: >-
        {
          "temperature": {{ states.sensor.temperature_158d0001b8f488.state | int }},
          "humidity": {{ states.sensor.humidity_158d0001b8f488.state | int }}
        }

because I though it would be an unit issue, but no difference.

Does somebody know, where I can get back to the right track?

Thank you very much :slight_smile:

1 Like

May want to use data_template: instead of just data:
Look at https://home-assistant.io/docs/automation/templating/#important-template-rules

try this:

payload: >
  {% set mydict = {"temperature": states.sensor.temperature_158d0001b8f488.state, "humidity": states.sensor.humidity_158d0001b8f488.state} %}
  {{ mydict }}
1 Like

You are the men!
It works like a charm :slight_smile:

script:
  mqtttest:
    sequence:
      - service: mqtt.publish
        data_template:
          topic: "sensor/Testdevice/values"
          payload: >
            {% set mydict = {"temperature": states.sensor.temperature_158d0001b8f488.state | int, "humidity": states.sensor.humidity_158d0001b8f488.state | int} %}
            {{ mydict }}

Thank you :slight_smile:

2 Likes

Ah, I just noticed something

Now its sending ’ ’ instead of " ":

sensor/Testdevice/values/{‘temperature’: 20, ‘humidity’: 40}

but I need:

sensor/Testdevice/values/{“temperature”: 20, “humidity”: 40}

is there something I missed?

I fixed it myself:

just changed it to

{{ mydict | tojson}}

weird, ‘’ vrs “” typically has no difference in python/yaml. Glad you fixed the isue though.

1 Like