here it is type: picture-elementsimage: /local/person_blank.jpgelements: - type: ima - Pastebin.com (it’s a picture-elements card)
and attached a sample picture
Thank you for taking the time to share the card but I actually was hoping to get the whole stacked card like this:
Thank you
Inspired by @VaReTaS, I’ve added additional info to my person cards (they look better on mobile):
However, I’d like to display a different entity_picture based on the states Home and Away, but I’m not having much luck with this (see person1.jpg
and person1_alt.jpg
):
type: custom:button-card
entity: sensor.status_person1
aspect_ratio: 1/1
show_entity_picture: true
name: Person
show_name: false
hold_action:
action: none
state:
- value: Home
entity_picture: '/local/person1.jpg'
styles:
custom_fields:
icon:
- border-color: '#77c66e'
- value: Away
entity_picture: '/local/person1_alt.jpg'
styles:
card:
- background-color: '#dedede'
custom_fields:
icon:
- border-color: '#EF4F1A'
I also plan to make some of these fields conditional… drive time and distance from home aren’t relevant if the person is home.
check status of “sensor.status_person1” by HA " Developer Tools" Developer tools - Home Assistant
then check that
state:
- value: Home
is correct.
It is, yes. I’ve tried both capitalized and non-capitalized, just in case. And I can force it in Developer Tools–>States as needed.
I’m using custom button cards elsewhere, but nowhere am I doing what I want to do here: display a different local image based on entity state.
EDIT: Oh, wait… sensor.status_person1
isn’t a toggleable entity. Isn’t that a limitation of the custom button card? If that’s the case… I may have to accomplish this with conditional cards instead.
EDIT 2: I’ll just add a new comment below…
OK, I’ve tweaked this more or less to my liking. A couple of changes I made to @VaReTaS’s excellent card:
-
I use a separate sensor for each person to populate location from either defined zones or from an input_select which determines whether each person is Home, Away, Just Left, Just Arrived, or Extended Away. Those states come out of a Node-RED flow I put in place a few years ago (can share if interested), and the sensors just provide more detail than “Home” or “Away:”
-
On the card itself, I’ve replaced the battery and Wi-Fi sensors when the person is away. I’ve also added a time for when the person either left or arrived at home. I didn’t change any of the custom field names, though, so hopefully it’s not too confusing!
updated YAML for sensors & cards in this comment below
The result is a card that shows different info based on whether the person is home or away. On the left is a home person. On the right is an away person at a known location (defined zone). If a person is away and not in a defined zone, the border is red.
I’m sure I could lay this out a bit better, but it’s way more informative than my person cards were this time last week.
I never actually got the Proximity sensors to work, so I can’t add direction of travel as a sensor to this card. That might be the only thing I can think I would add at this time.
EDIT: I thought I might add the ability to call people from this card (!) using hold_action: navigate
, but so far it’s not working for me:
hold_action:
action: navigate
navigation_path: tel:+15555555555
EDIT 2: updated arrival/departure sensors using from those in this post. Waaaay better.
This looks just great
I will certainly take some of your ideas and modify mine when I have some time
I’ll post code for some further updated cards.
Unfortunately, my device_tracker entities have completely stopped working with 2022.11.2, so I’ll be rolling back today to see if I can get them working. I’ve posted about it but I’m getting no input yet.
EDIT: device_tracker entities now working.
Here’s the updated cards:
Firstly, love your person card setup. I’ve more or less recreated it on mine, but with one huge exception; it looks nothing like yours. I’m almost certain that it has to do with the theme - would you mind please sharing what theme you’ve used?
Gladly… I’m using a theme called Midnight.
I load it through automation like this:
- alias: 01 - Set Default Theme to Midnight on Startup
id: Set Default Theme to Midnight on Startup
initial_state: true
trigger:
- event: start
platform: homeassistant
action:
- data:
name: midnight
service: frontend.set_theme
it’s located in this file…
Midnight Theme
This is in a file called themes.yaml
But also make sure you have -
stack-in-card
mushroom card
both loaded…
Here’s what mine looks like now I’m sure i"ve changed it since that post:
- type: custom:stack-in-card
mode: vertical
card_mod:
style: |
ha-card {
background-color: rgba(255, 255, 255, .1);
border: 0 !important;
}
cards:
- type: custom:stack-in-card
mode: horizontal
card_mod:
style: |
ha-card {
border: 0 !important;
}
cards:
- type: custom:mushroom-person-card
entity: person.john
icon: " "
icon_type: icon
primary_info: none
secondary_info: none
card_mod:
style: |
mushroom-card {
background: url( {{ state_attr('person.john', 'entity_picture') }} ) no-repeat 0px center;
background-size: 42px 42px;
border: 0 !important;
}
ha-card {
background-color: rgba(255, 255, 255, .7);
margin-left: auto;
margin-right: auto;
width: 66px;
border: 0 !important;
}
- type: conditional
card_mod:
style: |
ha-card {
border: 0 !important;
}
conditions:
- entity: sensor.sm_f926u1_battery_state
state: "charging"
card:
type: custom:mushroom-template-card
entity: sensor.sm_f926u1_battery_level
layout: vertical
icon_color: yellow
fill_container: true
name: Fold3
icon: mdi:battery-charging-medium
hide_name: true
primary: "Phone is charging..."
secondary: "Battery Level: {{ states('sensor.sm_f926u1_battery_level') }}%"
card_mod:
style: |
mushroom-shape-icon {
animation: blink 1s linear infinite;
}
@keyframes blink {
50% {opacity: 0;}
}
ha-card {
border: 0 !important;
}
- type: conditional
conditions:
- entity: sensor.sm_f926u1_battery_state
state: "full"
card:
type: custom:mushroom-template-card
card_mod:
style: |
ha-card {
border: 0 !important;
}
entity: sensor.sm_f926u1_battery_level
layout: vertical
icon: |2
{% set bl = states('sensor.sm_f926u1_battery_level') | int %}
{% if bl < 10 %} mdi:battery-outline
{% elif bl < 20 %} mdi:battery-10
{% elif bl < 30 %} mdi:battery-20
{% elif bl < 40 %} mdi:battery-30
{% elif bl < 50 %} mdi:battery-40
{% elif bl < 60 %} mdi:battery-50
{% elif bl < 70 %} mdi:battery-60
{% elif bl < 80 %} mdi:battery-70
{% elif bl < 90 %} mdi:battery-80
{% elif bl < 100 %} mdi:battery-90
{% elif bl == 100 %} mdi:battery
{% else %} mdi:battery-unknown
{% endif %}
icon_color: |2-
{% set bl = states('sensor.sm_f926u1_battery_level') | int %}
{% if bl < 10 %} #cc0c16
{% elif bl < 20 %} #e61e28
{% elif bl < 30 %} #e3464e
{% elif bl < 40 %} orange
{% elif bl < 50 %} #f0b93a
{% elif bl < 60 %} #f3f56c
{% elif bl < 70 %} #f2f536
{% elif bl < 80 %} #69f095
{% elif bl < 90 %} #2ee669
{% elif bl < 100 %} #05ad3b
{% elif bl == 100 %} #03872d
{% else %} grey
{% endif %}
primary: "Battery Level: {{ states('sensor.sm_f926u1_battery_level') }}%"
secondary: "Battery Temp: {{ states('sensor.sm_f926u1_battery_temperature') }}°"
tap_action:
action: more-info
fill_container: true
- type: conditional
card_mod:
style: |
ha-card {
border: 0 !important;
}
conditions:
- entity: sensor.sm_f926u1_battery_state
state: "discharging"
card:
type: custom:mushroom-template-card
card_mod:
style: |
ha-card {
border: 0 !important;
}
entity: sensor.sm_f926u1_battery_level
layout: vertical
icon: |2
{% set bl = states('sensor.sm_f926u1_battery_level') | int %}
{% if bl < 10 %} mdi:battery-outline
{% elif bl < 20 %} mdi:battery-10
{% elif bl < 30 %} mdi:battery-20
{% elif bl < 40 %} mdi:battery-30
{% elif bl < 50 %} mdi:battery-40
{% elif bl < 60 %} mdi:battery-50
{% elif bl < 70 %} mdi:battery-60
{% elif bl < 80 %} mdi:battery-70
{% elif bl < 90 %} mdi:battery-80
{% elif bl < 100 %} mdi:battery-90
{% elif bl == 100 %} mdi:battery
{% else %} mdi:battery-unknown
{% endif %}
icon_color: |2-
{% set bl = states('sensor.sm_f926u1_battery_level') | int %}
{% if bl < 10 %} #cc0c16
{% elif bl < 20 %} #e61e28
{% elif bl < 30 %} #e3464e
{% elif bl < 40 %} orange
{% elif bl < 50 %} #f0b93a
{% elif bl < 60 %} #f3f56c
{% elif bl < 70 %} #f2f536
{% elif bl < 80 %} #69f095
{% elif bl < 90 %} #2ee669
{% elif bl < 100 %} #05ad3b
{% elif bl == 100 %} #03872d
{% else %} grey
{% endif %}
primary: "Battery Level: {{ states('sensor.sm_f926u1_battery_level') }}%"
secondary: "Battery Temp: {{ states('sensor.sm_f926u1_battery_temperature') }}°"
tap_action:
action: more-info
fill_container: true
styles:
card:
height: 66px;
- type: custom:mushroom-template-card
entity: sensor.john
card_mod:
style: |
ha-card {
border: 0 !important;
}
primary: >
{% if (state_attr('sensor.john', 'direction_of_travel') == 'stationary') and (state_attr('sensor.john','home_zone') == 'zone.home') %}
John is Home:
{% elif (state_attr('sensor.john', 'direction_of_travel') == 'stationary')%}
John is Here:
{% else %}
John is
{% endif %}
secondary: >
{% if (state_attr('sensor.john','direction_of_travel') == 'stationary') %}
{{ state_attr('sensor.john','street_number') }} {{
state_attr('sensor.john','street') }}, {{
state_attr('sensor.john','city') }}, {{
state_attr('sensor.john','postal_code') }}
{% else %}
Traveling...
{% endif %}
icon: >-
{% if (state_attr('sensor.john','direction_of_travel') == 'stationary') and (states('device_tracker.sm_f926u1') == 'home') %} mdi:home-account
{% elif (state_attr('sensor.john','direction_of_travel') == 'stationary') and (states('device_tracker.sm_f926u1') == 'not_home') %} mdi:domain
{% else %} mdi:car
{% endif %}
icon_color: >-
{% if (state_attr('sensor.john','direction_of_travel') == 'stationary') and (states('device_tracker.sm_f926u1') == 'home') %} green
{% elif (state_attr('sensor.john','direction_of_travel') == 'stationary') and (states('device_tracker.sm_f926u1') == 'not_home') %} blue
{% else %} cyan
{% endif %}
tap_action:
action: fire-dom-event
browser_mod:
title: John's Location
icon: mdi:car
service: browser_mod.popup
data:
size: normal
title: Where is John?
style: |-
--popup-min-width: 500px; --popup-max-width: 670px;
--popup-border-radius: 0 !important;
--popup-background-color: #B33B00;
--popup-border-width: 0 !important;
content:
type: map
default_zoom: 15
entities:
- device_tracker.sm_f926u1
aspect_ratio: 16:9
hours_to_show: 4
browser_id:
- this
- dashboard
multiline_secondary: true
hello DeltaNu1142,
Love your card.
Some (silly) questions, due to not having entire workframe in your code, also not node-red user
- Can you please share input select and how you made just left/just arrived states for person ?
- for arrival/departing sensors you use an automation ? because I see is the same sensor
- i see as a result that sensor is telling me i stay home from 11:13 PM, but I want to have 24h display, not AM/PM. what can do the trick ?
Thank you
I’d love to provide more information, but right now my device_trackers are broken. My input_selects for user status is statused by a Node-RED flow.
OK, I’m back on track. Here are some updated sensors. The arrival and departure sensors are the same, except for when they’re triggered. Note I’ve made some changes to the sensor names for consistency, and I’ve added the update card YAML as well.
Sensors:
- sensor:
- unique_id: distance_from_home_Person2
name: Distance from Home Person2
state: >
{{ distance('person.Person2','zone.home') | round(1) }}
- sensor:
- unique_id: distance_from_home_Person1
name: Distance from Home Person1
state: >
{{ distance('person.Person1','zone.home') | round(1) }}
- trigger:
- platform: state
entity_id: person.Person2
to: 'home'
sensor:
- unique_id: time_arrived_home_Person2
name: Time Arrived Home Person2
icon: "mdi-home-clock"
state: >
{% set last_changed = states.person.Person2.last_changed | as_local %}
{% if last_changed < today_at() - timedelta(days=1) %}
{{ last_changed.strftime('%A at %-I:%M %p') }}
{% elif last_changed < today_at() %}
{{ last_changed.strftime('yesterday %-I:%M %p') }}
{% else %}
{{ last_changed.strftime('at %-I:%M %p') }}
{% endif %}
- trigger:
- platform: state
entity_id: person.Person1
to: 'home'
sensor:
- unique_id: time_arrived_home_Person1
name: Time Arrived Home Person1
icon: "mdi-home-clock"
state: >
{% set last_changed = states.person.Person1.last_changed | as_local %}
{% if last_changed < today_at() - timedelta(days=1) %}
{{ last_changed.strftime('%A at %-I:%M %p') }}
{% elif last_changed < today_at() %}
{{ last_changed.strftime('yesterday %-I:%M %p') }}
{% else %}
{{ last_changed.strftime('at %-I:%M %p') }}
{% endif %}
- trigger:
- platform: state
entity_id: person.Person2
from: 'home'
sensor:
- unique_id: time_left_home_Person2
name: Time Left Home Person2
icon: "mdi-home-clock"
state: >
{% set last_changed = states.person.Person2.last_changed | as_local %}
{% if last_changed < today_at() - timedelta(days=1) %}
{{ last_changed.strftime('%-I:%M %p on %A') }}
{% elif last_changed < today_at() %}
{{ last_changed.strftime('%-I:%M %p yesterday') }}
{% else %}
{{ last_changed.strftime('%-I:%M %p') }}
{% endif %}
- trigger:
- platform: state
entity_id: person.Person1
from: 'home'
sensor:
- unique_id: time_left_home_Person1
name: Time Left Home Person1
icon: "mdi-home-clock"
state: >
{% set last_changed = states.person.Person1.last_changed | as_local %}
{% if last_changed < today_at() - timedelta(days=1) %}
{{ last_changed.strftime('%-I:%M %p on %A') }}
{% elif last_changed < today_at() %}
{{ last_changed.strftime('%-I:%M %p yesterday') }}
{% else %}
{{ last_changed.strftime('%-I:%M %p') }}
{% endif %}
Card:
type: custom:button-card
entity: sensor.status_person1
aspect_ratio: 1/1
name: person1
show_entity_picture: true
show_name: false
hold_action:
action: none
state:
- value: Home
styles:
custom_fields:
icon:
- border-color: '#36c570'
- value: Just Arrived
styles:
custom_fields:
icon:
- border-color: '#36c570'
- value: Zone1
styles:
card: null
custom_fields:
icon:
- border-color: '#4456e5'
- value: Zone2
styles:
card: null
custom_fields:
icon:
- border-color: '#4456e5'
- value: Zone3
styles:
card: null
custom_fields:
icon:
- border-color: '#4456e5'
- value: Just Left
styles:
card: null
custom_fields:
icon:
- border-color: '#e54456'
- value: default
styles:
card: null
custom_fields:
icon:
- border-color: '#e54456'
styles:
card:
- background-color: rgba(7, 103, 215, 0.24)
- border-radius: 5%
- padding: 5%
- color: gray
- font-size: 10px
- text-shadow: 0px 0px 0px black
- justify-self: end
- align-self: middle
grid:
- grid-template-areas: >-
"icon status" "n n" "homeclock waze" "batterydistance wifidrivetime" "sd
sd"
- grid-template-columns: 2fr 1fr
- grid-template-rows: 1fr min-content min-content min-content min-content
name:
- font-size: 15px
- align-self: middle
- justify-self: start
- padding-bottom: 10px
custom_fields:
icon:
- clip-path: circle()
- width: 80%
- pointer-events: none
- display: grid
- border: 5px solid
- border-color: gray
- border-radius: 500px
- margin: 0 +10% 0 0
- justify-self: end
- opacity: 1
status:
- align-self: start
- justify-self: end
- color: white
homeclock:
- padding: 0.5em 0px
- align-self: middle
- justify-self: start
- color: white
wifidrivetime:
- padding: 0.5em 0px
- align-self: left
- justify-self: end
- color: white
batterydistance:
- padding: 0.5em 0px
- align-self: middle
- justify-self: start
- color: white
waze:
- padding: 0.5em 0px
- align-self: left
- justify-self: end
- color: white
- '--text-color-sensor': >-
[[[ if (states["sensor.waze_travel_time_person1"].state > 60) return
"#EF4F1A"; ]]]
custom_fields:
icon: >
[[[ return entity === undefined ? null : `<img
src="${states[entity.entity_id].attributes.entity_picture}" width="100%">`;
]]]
status: |
[[[
if (states['person.person1'].state !='home') {
return `<ha-icon icon="mdi:home-export-outline"
style="width: 20px; height: 20px; color: '#888888';">
</ha-icon><span> ${states['sensor.status_person1'].state}</span>`;
}
if (states['person.person1'].state =='home') {
return `<ha-icon
icon="mdi:home"
style="width: 20px; height: 20px; color: #ffffff;">
</ha-icon><span> ${states['sensor.status_person1'].state}</span>`;
} else {
return `<ha-icon
icon="mdi:map-marker-radius"
style="width: 20px; height: 20px; color: #ffffff;">
</ha-icon><span> ${states['sensor.status_person1'].state}</span>`;
}
]]]
homeclock: |
[[[
if (states['person.person1'].state !='home') {
return `<ha-icon
icon="mdi:home-clock"
style="width: 20px; height: 20px; color: #ffffff;">
</ha-icon><span> Left ${states['sensor.time_left_home_person1'].state}</span>`;
}
if (states['person.person1'].state =='home') {
return `<ha-icon
icon="mdi:home-clock"
style="width: 20px; height: 20px; color: #ffffff;">
</ha-icon><span> Arrived ${states['sensor.time_arrived_home_person1'].state}</span>`;
} else {
return
}
]]]
waze: |
[[[
return ;
]]]
batterydistance: |
[[[
if (states['person.person1'].state != 'home' && states['sensor.distance_from_home_person1'].state <= 5) {
return `<ha-icon
icon="mdi:map-marker-distance"
style="width: 20px; height: 20px; color: #36c570;">
</ha-icon> <span>\<span style="color: #36c570;">${states['sensor.distance_from_home_person1'].state} mi</span></span>`;
}
if (states['person.person1'].state != 'home' && states['sensor.distance_from_home_person1'].state > 5) {
return `<ha-icon
icon="mdi:map-marker-distance"
style="width: 20px; height: 20px; color: white;">
</ha-icon> <span>\<span style="color: white;">${states['sensor.distance_from_home_person1'].state} mi</span></span>`;
}
if (states['sensor.person1s_iphone_battery_state'].state == 'charging') {
return `<ha-icon
icon="mdi:battery-charging"
style="width: 20px; height: 20px; color: #36c570;">
</ha-icon> <span><span style="color: #36c570;">${states['sensor.person1s_iphone_battery_level'].state}%</span></span>`;
} else {
return `<ha-icon
icon="mdi:battery"
style="width: 20px; height: 20px; color: white;">
</ha-icon> <span><span style="color: var(--text-color-sensor);">${states['sensor.person1s_iphone_battery_level'].state}%</span></span>`;
}
]]]
wifidrivetime: |
[[[
if (states['person.person1'].state != 'home' && states['sensor.waze_travel_time_person1'].state <= 5) {
return `<ha-icon
icon="mdi:car-clock"
style="width: 20px; height: 20px; color: #36c570;">
</ha-icon> <span>\<span style="color: #36c570;">${states['sensor.waze_travel_time_person1'].state} min</span></span>`;
}
if (states['person.person1'].state != 'home' && states['sensor.waze_travel_time_person1'].state > 5) {
return `<ha-icon
icon="mdi:car-clock"
style="width: 20px; height: 20px; color: white;">
</ha-icon> <span>\<span style="color: white;">${states['sensor.waze_travel_time_person1'].state} min</span></span>`;
}
if (states['person.person1'].state == 'home' && states['sensor.person1s_iphone_ssid'].state == 'Not Connected') {
return `<ha-icon
icon="mdi:wifi-off"
style="width: 20px; height: 20px; color: var(--text-wifi-color-sensor);">
</ha-icon> <span>\<span style="color: var(--text-wifi-color-sensor);">Disconnected</span></span>`;
} else {
return `<ha-icon
icon="mdi:wifi"
style="width: 20px; height: 20px; color: white;">
</ha-icon> <span><span style="color: var(--text-color-sensor);">${states['sensor.person1s_iphone_ssid'].state}</span></span>`;
}
]]]
Glad you are back on track.
How can I do that part without node-red?
- trigger:
- platform: state
entity_id: person.Person1
from: 'home'
sensor:
- unique_id: time_left_home_Person1
name: Time Left Home Person1
icon: "mdi-home-clock"
state: >
{% set last_changed = states.person.Person1.last_changed | as_local %}
{% if last_changed < today_at() - timedelta(days=1) %}
{{ last_changed.strftime('%-I:%M %p on %A') }}
{% elif last_changed < today_at() %}
{{ last_changed.strftime('%-I:%M %p yesterday') }}
{% else %}
{{ last_changed.strftime('%-I:%M %p') }}
{% endif %}
Which part, the Home/Away/Just Arrived/Just Left/Extended Away status-ing? Well, I admit I’m not much of a coder, which is why Node-RED was so appealing to me in the first place. Here’s the flow for your review. I’m sure it could be replicated in an automation, but you’d be better off asking a house plant how to do that:
[{"id":"558a8b2b9a9690f8","type":"group","z":"647eafda.c7cfa","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["ce09e65.8f84418","4d8f933f.aa124c","e76d582a.9a8f88","241457b2.2cc128","d5810a67.0f3498","c0187e63.5a9e1","6a5f8f00.23807","8bd1d643.a115e8","712d8721.d63168","c1544077.8f84a","4f5a58f6.75a848","ead2621a.497e1","af79d26f.7b667","4b97a8c9.4c2298","c9866881fd8d599e","3f7bf5cad74c8219"],"x":44,"y":19,"w":1242,"h":182},{"id":"ce09e65.8f84418","type":"switch","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Home?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"home","vt":"str"},{"t":"eq","v":"not_home","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":360,"y":120,"wires":[["4d8f933f.aa124c","6a5f8f00.23807","8bd1d643.a115e8"],["ead2621a.497e1","712d8721.d63168"]]},{"id":"4d8f933f.aa124c","type":"api-current-state","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Status?","server":"296c0678.b5f9ca","version":3,"outputs":2,"halt_if":"Just Left","halt_if_type":"str","halt_if_compare":"is_not","entity_id":"input_select.{{topic}}","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":500,"y":100,"wires":[["241457b2.2cc128"],["c1544077.8f84a"]]},{"id":"e76d582a.9a8f88","type":"api-call-service","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Just Left","server":"296c0678.b5f9ca","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":[],"data":"{\"entity_id\":\"input_select.{{topic}}\",\"option\":\"Just Left\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":140,"wires":[["6a5f8f00.23807"]]},{"id":"241457b2.2cc128","type":"api-call-service","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Just Arrived","server":"296c0678.b5f9ca","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":[],"data":"{\"entity_id\":\"input_select.{{topic}}\",\"option\":\"Just Arrived\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":80,"wires":[["712d8721.d63168","3f7bf5cad74c8219"]]},{"id":"d5810a67.0f3498","type":"api-call-service","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Away","server":"296c0678.b5f9ca","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":[],"data":"{\"entity_id\":\"input_select.{{topic}}\",\"option\":\"Away\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":910,"y":160,"wires":[["8bd1d643.a115e8"]]},{"id":"c0187e63.5a9e1","type":"api-call-service","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Extended Away","server":"296c0678.b5f9ca","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":[],"data":"{\"entity_id\":\"input_select.{{topic}}\",\"option\":\"Extended Away\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1180,"y":140,"wires":[[]]},{"id":"6a5f8f00.23807","type":"trigger","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"10min","op1":"","op2":"{\"payload\":{\"data\":{\"option\":\"\"}}}","op1type":"nul","op2type":"json","duration":"10","extend":false,"units":"min","reset":"home","bytopic":"topic","outputs":1,"x":810,"y":160,"wires":[["d5810a67.0f3498"]]},{"id":"8bd1d643.a115e8","type":"trigger","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"24hr","op1":"","op2":"{\"payload\":{\"data\":{\"option\":\"\"}}}","op1type":"nul","op2type":"json","duration":"24","extend":false,"units":"hr","reset":"home","bytopic":"topic","outputs":1,"x":1050,"y":140,"wires":[["c0187e63.5a9e1"]]},{"id":"712d8721.d63168","type":"trigger","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"10min","op1":"","op2":"{\"payload\":{\"data\":{\"option\":\"\"}}}","op1type":"nul","op2type":"json","duration":"10","extend":false,"units":"min","reset":"not_home","bytopic":"topic","outputs":1,"x":810,"y":100,"wires":[["c1544077.8f84a"]]},{"id":"c1544077.8f84a","type":"api-call-service","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Home","server":"296c0678.b5f9ca","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":[],"data":"{\"entity_id\":\"input_select.{{topic}}\",\"option\":\"Home\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":910,"y":100,"wires":[[]]},{"id":"4f5a58f6.75a848","type":"trigger-state","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Person","server":"296c0678.b5f9ca","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"^person\\..*$","entityidfiltertype":"regex","debugenabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"is_not","comparatorValueDatatype":"prevEntity","comparatorValue":"state"}],"inputs":1,"outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"str","enableInput":true,"x":120,"y":120,"wires":[["af79d26f.7b667"],[]]},{"id":"ead2621a.497e1","type":"api-current-state","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Status?","server":"296c0678.b5f9ca","version":3,"outputs":2,"halt_if":"Just Left,Away, Extended Away","halt_if_type":"str","halt_if_compare":"does_not_include","entity_id":"input_select.{{topic}}","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":500,"y":140,"wires":[["e76d582a.9a8f88"],[]]},{"id":"af79d26f.7b667","type":"change","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Change","rules":[{"t":"change","p":"topic","pt":"msg","from":"person.","fromt":"str","to":"","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"payload = \"home\" ? \"home\" : \"not_home\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":215,"y":120,"wires":[["4b97a8c9.4c2298"]],"l":false},{"id":"4b97a8c9.4c2298","type":"rbe","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"","func":"rbe","gap":"","start":"","inout":"out","property":"payload","x":265,"y":120,"wires":[["ce09e65.8f84418"]],"l":false},{"id":"c9866881fd8d599e","type":"comment","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Home Occupancy","info":"","x":1110,"y":80,"wires":[]},{"id":"3f7bf5cad74c8219","type":"link out","z":"647eafda.c7cfa","g":"558a8b2b9a9690f8","name":"Anyone Arrives Home","mode":"link","links":["aeb93daa0114a684"],"x":775,"y":60,"wires":[]},{"id":"296c0678.b5f9ca","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]
The Link node is only there because I use the “Just Arrived” state in other flows.
don’t understand.
You trigger something I suppose an automation when person1 leaves home, but how you define sensor time_left_home_person1 ? or you update it ?
I think you’re referring to the quoted YAML from this post, right?
This is a template sensor, and the trigger (when the state of Person1 changes from ‘home’ to something else) causes the entity to record the time of the state change.
That is a template sensor, not done in Node-RED at all. You can place this in your configuration.yaml file as described here.
done that. sensors looking good. now you update sensors via calling service homeassistant.update entity? because both arrived and left sensors show same thing.
or what is the purpose of:
- trigger:
- platform: state
entity_id: person.Person1
from: 'home'