MQTT Automation: parse payload as JSON (#4703)
This commit is contained in:
parent
9bf13231f7
commit
b2a15e17d3
2 changed files with 19 additions and 9 deletions
|
@ -4,6 +4,8 @@ Offer MQTT listening automation rules.
|
|||
For more details about this automation rule, please refer to the documentation
|
||||
at https://home-assistant.io/components/automation/#mqtt-trigger
|
||||
"""
|
||||
import json
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.core import callback
|
||||
|
@ -31,13 +33,20 @@ def async_trigger(hass, config, action):
|
|||
def mqtt_automation_listener(msg_topic, msg_payload, qos):
|
||||
"""Listen for MQTT messages."""
|
||||
if payload is None or payload == msg_payload:
|
||||
hass.async_run_job(action, {
|
||||
'trigger': {
|
||||
data = {
|
||||
'platform': 'mqtt',
|
||||
'topic': msg_topic,
|
||||
'payload': msg_payload,
|
||||
'qos': qos,
|
||||
}
|
||||
|
||||
try:
|
||||
data['payload_json'] = json.loads(msg_payload)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
hass.async_run_job(action, {
|
||||
'trigger': data
|
||||
})
|
||||
|
||||
return mqtt.async_subscribe(hass, topic, mqtt_automation_listener)
|
||||
|
|
|
@ -42,16 +42,17 @@ class TestAutomationMQTT(unittest.TestCase):
|
|||
'service': 'test.automation',
|
||||
'data_template': {
|
||||
'some': '{{ trigger.platform }} - {{ trigger.topic }}'
|
||||
' - {{ trigger.payload }}'
|
||||
' - {{ trigger.payload }} - '
|
||||
'{{ trigger.payload_json.hello }}'
|
||||
},
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
fire_mqtt_message(self.hass, 'test-topic', 'test_payload')
|
||||
fire_mqtt_message(self.hass, 'test-topic', '{ "hello": "world" }')
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(1, len(self.calls))
|
||||
self.assertEqual('mqtt - test-topic - test_payload',
|
||||
self.assertEqual('mqtt - test-topic - { "hello": "world" } - world',
|
||||
self.calls[0].data['some'])
|
||||
|
||||
automation.turn_off(self.hass)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue