Using a To-Do List for Messages
Home Assistant Automation
I first created a new To-Do list called todo.messages. This will receive any Messages which need to be sent to users and displayed on the dashboard. It was simply created on the Helpers tab in Devices.
Adding a message is as simple as calling the todo,additem service call.
service: todo.add_item data: item: Title description: Description target: entity_id: todo.messages
The next challenge was to get a compact view on the dashboard as the standard To-Do list is very large.
The display simply shows a greeting when there are no outstanding messages. When there is one or more messages it shows the messages so they can be ticked off when complete.


type: vertical-stack cards: - type: custom:mushroom-template-card primary: |- {{states('sensor.date_full_format')}} {{states('sensor.time')}} secondary: >- {%- from 'easy_time.jinja' import easy_time %} {%- from 'tools.jinja' import days_till, time_of_day -%}Good {{time_of_day()}}. {%- set count = state_attr('sensor.downloads','number_of_files')|int %} {%- if count > 0 %} {%- for file in state_attr('sensor.downloads','file_list') %} ({{loop.index}}) Voicemail - {%- set datestring = file | replace("/media/downloads/voicemail-",'')| replace('.mp3','') %} {%- set fmat = "%Y%m%d%H%M%S" %} {%- set datetime = strptime(datestring, fmat) | as_local %} {{- ' '}}{{easy_time(datetime)}} ago {%- endfor %} {%- endif %} icon: mdi:message tap_action: action: call-service service: input_boolean.turn_off target: entity_id: input_boolean.notify_light data: {} badge_icon: '' icon_color: |- {% if states('todo.messages') | int > 0 %}red{% endif %} entity: todo.messages multiline_secondary: true - type: conditional conditions: - condition: numeric_state entity: todo.messages above: 0 card: type: todo-list entity: todo.messages card_mod: style: .: | ha-card.type-todo-list div.header { display: none; } ha-card.type-todo-list .addRow { display: none; } ha-card.type-todo-list div.divider { display: none; } ha-card.type-todo-list mwc-list#checked { display: none; } ha-check-list-item$: | mwc-checkbox { display: none; }
The next job was to update the Voicemail automation and Rubbish automation to use the new messages. Then to change the phone and tablet charging routine to send and clear messages when needed.
When new messages arrive we need to be able to see them. So I have a couple of automations to handle that.
Send Notification when items added to to do list such as Messages or Shopping
This will send a standard notify.notify message each time something is added to any To Do list.
alias: >- Send Notification when items added to to do list such as Messages or Shopping List. description: Lists can include any todo list such as Messages or Shopping List trigger: - platform: event event_type: call_service event_data: domain: todo service: add_item variables: date: "{{now().strftime(' %A %d/%m at %H:%M')}}" list_name: > {{ state_attr((trigger.event.data.service_data.entity_id)[0], 'friendly_name') }} item: "{{ trigger.event.data.service_data.item | title }}" description: "{{ trigger.event.data.service_data.description}}" user_name: > {% set uid = trigger.event.context.user_id %} {% set user = None %} {% set matching_users = states.person | selectattr('attributes.user_id', '==', uid) | list %} {% set user = matching_users | first if matching_users | length > 0 else "Jarvis" %} {{ user if user == "Jarvis" else state_attr(user.entity_id,"friendly_name") }} condition: [] action: - service: notify.notify data: title: "{{list_name}}: {{item}}" message: | {{description}} - added by {{user_name}} on {{date}}. mode: single
This turns on the Warning Light in the Living Room when there are outstanding messages and the Living room becomes occupied.
alias: Turn notify light when a new message arrives description: >- This can be enhanced to turn on light for other reasons. It should only turn on once the Family is Home. trigger: - platform: state entity_id: - binary_sensor.living_room_occupied to: "on" - platform: state entity_id: - todo.messages condition: - condition: state state: "on" entity_id: binary_sensor.living_room_occupied action: - if: - condition: numeric_state entity_id: todo.messages above: 0 then: - service: input_boolean.turn_on data: {} target: entity_id: input_boolean.notify_light else: - service: input_boolean.turn_off target: entity_id: input_boolean.notify_light data: {} alias: If there are messages turn on flasher else turn off mode: single
In all I have around a dozen automations which now send messages this way.
Using a web hook to process internal messages from other servers
In addition to Home Assistant I have several other servers on Proxmox which are monitored by using Update Kuma. This can call a web hook so I have an internal message hook which takes the payload and then uses the standard messaging to pass it on.
alias: New Internal Message description: "" mode: single triggers: - allowed_methods: - POST - PUT - GET local_only: false webhook_id: internalmessage trigger: webhook conditions: [] actions: - metadata: {} data: title: Internal message action: create_message message: "{{trigger.json.message}} {{trigger.json.msg}} " action: script.messages_update