Yes. Call the MQTT publish service in your action: https://home-assistant.io/components/mqtt/#publish-service
Thank you. Is there any chance you could show me what that would look like in the example below?
- alias: 'Update Available Notifications'
trigger:
platform: state
entity_id: updater.updater
action:
service: mqtt
action:
service: mqtt.publish
data:
topic: 'your/topic'
payload: 'your payload'
That is super helpful! Thank you so much. Think I can integrate MQTT Dash nicely with every component now, regardless of its protocol.
For those that want to do the same, here is my automation code hiding inside a folder called ‘auto’ and included using the automation: !include_dir_merge_list auto
method.
### Publish Wemo state via MQTT ###
- alias: Wemo MQTT on
trigger:
platform: state
entity_id: switch.wemo_switch
state: 'on'
action:
service: mqtt.publish
data:
topic: 'mqtt/switch/wemo'
payload: 'on'
- alias: Wemo MQTT off
trigger:
platform: state
entity_id: switch.wemo_switch
state: 'off'
action:
service: mqtt.publish
data:
topic: 'mqtt/switch/wemo'
payload: 'off'
I now have a light icon on MQTT Dash that changes state when the Wemo does. Now to get the icon to turn it on and off.
OK, trying to get control but not working. Anyone see a glitch?
## Wemo control via MQTT ##
- alias: Control Wemo via MQTT
trigger:
platform: mqtt
topic: mqtt/switch/wemo/control
# Optional
payload: 'on'
action:
service: switch.turn_on
data:
entity_id: switch.wemo_switch
I’m publishing the payload ‘on’ to mqtt/switch/wemo/control via MQTT.fx and the switch is not turning on. Also, when I add this yaml file to the ‘auto’ folder, the previous automation to track the status of the wemo also stops working. Can see anything in the log.
Peter, still new to HASS, but have you tried to remove the data: field so its like this?
action:
service: switch.turn_on
entity_id: switch.wemo_switch
Yep, surely have.
OK. All working now.
- alias: Arduino on via MQTT
trigger:
platform: mqtt
topic: switch/arduino/control
# Optional
payload: 'on'
action:
service: switch.turn_on
entity_id: switch.internal_led
- alias: Arduino off via MQTT
trigger:
platform: mqtt
topic: switch/arduino/control
# Optional
payload: 'off'
action:
service: switch.turn_off
entity_id: switch.internal_led
- alias: Publish Arduino on
trigger:
platform: state
entity_id: switch.internal_led
state: 'on'
action:
service: mqtt.publish
data:
topic: 'switch/arduino/state'
payload: 'on'
- alias: Publish Arduino off
trigger:
platform: state
entity_id: switch.internal_led
state: 'off'
action:
service: mqtt.publish
data:
topic: 'switch/arduino/state'
payload: 'off'
OK, one last bit of advice. How do I add QOS and retain?
- alias: Publish Orvibo off
trigger:
platform: state
entity_id: switch.kitchen_socket
state: 'off'
action:
service: mqtt.publish
data:
topic: 'switch/orvibo/state'
payload: 'off'
Disregard. Pulled some info from MQTT Switch and this now works a treat with MQTT Dash.
## Publish Orvibo Status to MQTT ##
- alias: Publish Orvibo on
trigger:
platform: state
entity_id: switch.kitchen_socket
state: 'on'
action:
service: mqtt.publish
data:
topic: 'switch/orvibo/state'
payload: 'on'
qos: 1
retain: true
- alias: Publish Orvibo off
trigger:
platform: state
entity_id: switch.kitchen_socket
state: 'off'
action:
service: mqtt.publish
data:
topic: 'switch/orvibo/state'
payload: 'off'
qos: 1
retain: true
I’m trying to achieve something similar by using a physical switch I made connected to the gpio pin on my pi. When the switch is pressed, it goes login HIGH (5V). I can’t for the life of me get it to work with the physical switch.
I’ve tried rpi_gpio with both binary_sensor and switch methods to no avail. This is the code I’ve tried for each:
- platform: rpi_gpio
ports:
21: Hallway Light Switch
pull_mode: "DOWN"
invert_logic: true
and this is my automation yaml config:
### Publish Hallway Light state via MQTT ###
- alias: Hallway Light MQTT on
trigger:
platform: state
entity_id: switch.hallway_light_switch
state: 'on'
action:
service: mqtt.publish
data:
topic: 'left/hallwaylight'
payload: '1'
- alias: Hallway Light MQTT off
trigger:
platform: state
entity_id: switch.hallway_light_switch
state: 'off'
action:
service: mqtt.publish
data:
topic: 'left/hallwaylight'
payload: '0'
Any ideas?
Have you got the GPIO working on its own? According to the Wiki, the GPIO pin 21 is a digital out, 20 is digital in. Have not played with Pi GPIO at all but I’d get that working first and then concentrate on MQTT second.
I’m pretty much just trying to get the GPIO working on its own at the moment. I’m pretty confident that the MQTT stuff is working properly so not even focusing on that. I’ll check out the DIGI in/out of the pins though. Cheers.
You also say the input is ‘active’ when you switch 5v to that GPIO pin so it is normally pulled low. The active state would therefore be high?
The Raspberry PI GPIO Binary Sensor page states:
invert_logic (Optional): If true, inverts the output logic to ACTIVE LOW. Default is false (ACTIVE HIGH).
Wouldn’t you therefore need to remove your invert_logic line?
Thanks for documenting your work on this- It saved me a bunch of hassle trying to do the same thing!
Thanks, this is exactly what i was looking for !
You’re welcome
Hi @xbmcnut
I tried your code to control my GPIO switch via MQTT. But it can only control and publish “OFF” and it has no response when I control “ON” or publish “ON”. Do you know why?
Im trying todo the same thing to control my TV from smartthings using the smartthings bridge already set up.
I want to use the service_template also so I only have one automation that can both turn the TV off or on, so far I have this:
- id: '1508074319617'
alias: Switch TV
trigger:
- platform: mqtt
topic: smartthings/TV/switch/state
condition: []
action:
- service_template: "{{ media_player.turn_on if trigger.payload == 'on' else media_player.turn_off }}"
entity_id: media_player.sony_bravia_tv
If anyone has experience with the syntax and could tell me if there are any issues with the above?