-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
logic_chekr.jinja
235 lines (224 loc) · 9.99 KB
/
logic_chekr.jinja
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
{% macro true_any(entity_list) %}
{# This expects a list of entities. This means [] brackets
OR if your entities are pulled from a BluePrint entity selector,
that is already a list and you do not need the brackets.
The number of entities that evaluate as True using
`bool(value, default) function` is counted. (truthy values)
https://www.home-assistant.io/docs/configuration/templating/#numeric-functions-and-filters
Items that do not evaluate as bool will be defaulted to null/undefined.
If there are one or more that match,
True is returned, else False, defaults to False.
homeassistant:
min_version: 2023.11.0
REMEMBER!!
This always returns text, so cast to bool on the other end to be certain
of the result.
Use of the - character in the return template ensures no unwanted spacing
is pulled back with your answer.
SAMPLE USAGE:
{% from 'logic_chekr.jinja' import true_any %}
{{- true_any(['entity_1','entity_2']) | bool -}}
#### 🗿License Notice:
* I & my license require attribution as a link back to the original should
you use this code in your own creation.
* Here is a link to my license & the original github post
https://github.com/SirGoodenough/Logic-Chekr?tab=License-1-ov-file
expected to be followed & referenced
as attribution should you use this code elsewhere.
#}
{# First tests to make sure this is a list #}
{%- if entity_list is list -%}
{{- entity_list | map('states')
| map('bool', null) | select('eq', True)
| list | count > 0 -}}
{%- else -%}
False
{%- endif -%}
{% endmacro %}
{% macro false_any(entity_list) %}
{# This expects a list of entities. This means [] brackets
OR if your entities are pulled from a BluePrint entity selector,
that is already a list and you do not need the brackets.
The number of entities that evaluate as False using
`bool(value, default) function` is counted. (falsy values)
https://www.home-assistant.io/docs/configuration/templating/#numeric-functions-and-filters
Items that do not evaluate as bool will be defaulted to null/undefined.
If there are one or more that match,
True is returned, else False, defaults to False.
homeassistant:
min_version: 2023.11.0
REMEMBER!!
This always returns text, so cast to bool on the other end to be certain
of the result.
Use of the - character in the return template ensures no unwanted spacing
is pulled back with your answer.
SAMPLE USAGE:
{% from 'logic_chekr.jinja' import false_any %}
{{- false_any(['entity_1','entity_2']) | bool -}}
#### 🗿License Notice:
* I & my license require attribution as a link back to the original should
you use this code in your own creation.
* Here is a link to my license & the original github post
https://github.com/SirGoodenough/Logic-Chekr?tab=License-1-ov-file
expected to be followed & referenced
as attribution should you use this code elsewhere.
#}
{# First tests to make sure this is a list #}
{%- if entity_list is list -%}
{{- entity_list | map('states')
| map('bool', null) | select('eq', False)
| list | count > 0 -}}
{%- else -%}
False
{%- endif -%}
{% endmacro %}
{% macro true_one(entity_list) %}
{# This expects a list of entities. This means [] brackets
OR if your entities are pulled from a BluePrint entity selector,
that is already a list and you do not need the brackets.
The number of entities that evaluate as True using
`bool(value, default) function` is counted. (truthy values)
https://www.home-assistant.io/docs/configuration/templating/#numeric-functions-and-filters
Items that do not evaluate as bool will be defaulted to null/undefined.
If there is only one that matches,
True is returned, else False, defaults to False.
homeassistant:
min_version: 2023.11.0
REMEMBER!!
This always returns text, so cast to bool on the other end to be certain
of the result.
Use of the - character in the return template ensures no unwanted spacing
is pulled back with your answer.
SAMPLE USAGE:
{% from 'logic_chekr.jinja' import true_one %}
{{- true_one(['entity_1','entity_2]') | bool -}}
#### 🗿License Notice:
* I & my license require attribution as a link back to the original should
you use this code in your own creation.
* Here is a link to my license & the original github post
https://github.com/SirGoodenough/Logic-Chekr?tab=License-1-ov-file
expected to be followed & referenced
as attribution should you use this code elsewhere.
#}
{# First tests to make sure this is a list #}
{%- if entity_list is list -%}
{{- entity_list | map('states')
| map('bool', null) | select('eq', True)
| list | count == 1 -}}
{%- else -%}
False
{%- endif -%}
{% endmacro %}
{% macro true_all(entity_list) %}
{# This expects a list of entities. This means [] brackets
OR if your entities are pulled from a BluePrint entity selector,
that is already a list and you do not need the brackets.
The number of entities that evaluate as True using
`bool(value, default) function` is counted. (truthy values)
https://www.home-assistant.io/docs/configuration/templating/#numeric-functions-and-filters
Items that do not evaluate as bool will be defaulted to True.
The number of entities are counted.
If the 2 counts are the same, True is returned, else False,
defaults to False.
homeassistant:
min_version: 2023.11.0
REMEMBER!!
This always returns text, so cast to bool on the other end to be certain
of the result.
Use of the - character in the return template ensures no unwanted spacing
is pulled back with your answer.
SAMPLE USAGE:
{% from 'logic_chekr.jinja' import true_all %}
{{- true_all(['entity_1','entity_2']) | bool -}}
#### 🗿License Notice:
* I & my license require attribution as a link back to the original should
you use this code in your own creation.
* Here is a link to my license & the original github post
https://github.com/SirGoodenough/Logic-Chekr?tab=License-1-ov-file
expected to be followed & referenced
as attribution should you use this code elsewhere.
#}
{# First tests to make sure this is a list #}
{%- if entity_list is list -%}
{{- entity_list | map('states')
| map('bool', True) | select('eq', True)
| list | count == entity_list | count -}}
{%- else -%}
False
{%- endif -%}
{% endmacro %}
{% macro false_one(entity_list) %}
{# This expects a list of entities. This means [] brackets
OR if your entities are pulled from a BluePrint entity selector,
that is already a list and you do not need the brackets.
The number of entities that evaluate as False using
`bool(value, default) function` is counted. (falsy values)
https://www.home-assistant.io/docs/configuration/templating/#numeric-functions-and-filters
Items that do not evaluate as bool will be defaulted to null/undefined.
If there is only one that matches, True is returned,
else False, defaults to False.
homeassistant:
min_version: 2023.11.0
REMEMBER!!
This always returns text, so cast to bool on the other end to be certain
of the result.
Use of the - character in the return template ensures no unwanted spacing
is pulled back with your answer.
SAMPLE USAGE:
{% from 'logic_chekr.jinja' import false_one %}
{{- false_one(['entity_1','entity_2']) | bool -}}
#### 🗿License Notice:
* I & my license require attribution as a link back to the original should
you use this code in your own creation.
* Here is a link to my license & the original github post
https://github.com/SirGoodenough/Logic-Chekr?tab=License-1-ov-file
expected to be followed & referenced
as attribution should you use this code elsewhere.
#}
{# First tests to make sure this is a list #}
{%- if entity_list is list -%}
{{- entity_list | map('states')
| map('bool', null) | select('eq', False)
| list | count == 1 -}}
{%- else -%}
False
{%- endif -%}
{% endmacro %}
{% macro false_all(entity_list) %}
{# This expects a list of entities. This means [] brackets
OR if your entities are pulled from a BluePrint entity selector,
that is already a list and you do not need the brackets.
The number of entities that evaluate as False using
`bool(value, default) function` is counted. (falsy values)
https://www.home-assistant.io/docs/configuration/templating/#numeric-functions-and-filters
Items that do not evaluate as bool will be defaulted to False.
The number of entities are counted.
If the 2 counts are the same, True is returned, else False,
defaults to False.
homeassistant:
min_version: 2023.11.0
REMEMBER!!
This always returns text, so cast to bool on the other end to be certain
of the result.
Use of the - character in the return template ensures no unwanted spacing
is pulled back with your answer.
SAMPLE USAGE:
{% from 'logic_chekr.jinja' import false_all %}
{{- false_all(['entity_1','entity_2']) | bool -}}
#### 🗿License Notice:
* I & my license require attribution as a link back to the original should
you use this code in your own creation.
* Here is a link to my license & the original github post
https://github.com/SirGoodenough/Logic-Chekr?tab=License-1-ov-file
expected to be followed & referenced
as attribution should you use this code elsewhere.
#}
{# First tests to make sure this is a list #}
{%- if entity_list is list -%}
{{- entity_list | map('states')
| map('bool', False) | select('eq', False)
| list | count == entity_list | count -}}
{%- else -%}
False
{%- endif -%}
{% endmacro %}