badkuip schreef op zondag 19 december 2021 @ 21:46:
Kunnen jullie naar een stukje code van mij kijken?
Ik heb een automation (met triggers) die de mechanische ventilatie aanstuurt van de badkamer.
De grenswaarde wordt opgeslagen als een input boolean bij aanvang van het douchen en de ventilator slaat pas af wanneer de grenswaarde weer bereikt wordt.
Huidige trigger om af te slaan
YAML:
1
2
3
4
5
| trigger:
- platform: numeric_state
entity_id: sensor.badkamer_mv_luchtvochtigheid
below: input_number.badkamer_mv_luchtvochtigheid_grenswaarde
id: normale_snelheid |
Nu ben ik niet tevreden met deze trigger omdat de fan dan wel erg lang moet draaien, makkelijk 2 uur om weer op de grenswaarde te komen. Nu had ik gedacht dat de fan al wel mag afslaan wanneer de grenswaarde + 5% bereikt heeft. Stel dat de grenswaarde luchtvochtigheid dus 40% is, dan mag de trigger voor het afslaan van de fan, al afgaan wanneer 45% luchtvochtigheid bereikt heeft.
Nu ben ik nog niet zo bekend met templates gebruiken als een sensor, maar ik had het onderstaande stukje code in elkaar geklust:
YAML:
1
2
3
| - platform: template
value_template: '{{ states.sensor.badkamer_mv_luchtvochtigheid|float(0) }} < {{ states.input_number.badkamer_mv_luchtvochtigheid_grenswaarde|float(0) + 5}}'
id: testje |
Hopende dat je op deze manier on the fly 5% erbij op kan tellen...
Wat denken jullie ervan?
Deze door mijzelf bedachte code werkt dus niet. De fan slaat niet af bij grenswaarde + 5%.
Dat zou kunnen komen doordat ik er niet 5 bij op kan tellen in de trigger.
Misschien moet ik de automation zelf aanpassen zodat ik eerder in het proces er 5 bij optel.
Maar dat lukt me niet. Ik gebruik de voorbeelden van
hier en
hier
Heb het volgende al geprobeerd:
YAML:
1
2
3
4
5
6
7
8
9
10
| - service: input_number.set_value
target:
entity_id: input_number.badkamer_mv_luchtvochtigheid_grenswaarde
data:
value: {{ states('sensor.badkamer_mv_luchtvochtigheid') }}
- service: input_number.set_value
target:
entity_id: input_number.badkamer_mv_luchtvochtigheid_grenswaarde
data:
value: '{{ states.input_number.badkamer_mv_luchtvochtigheid_grenswaarde.state | int ) + 5 }}' |
In het eerste blokje schrijft ie de sensorwaarde weg in het input number en in het tweede blokje telt ie er 5 bij op
Het eerste blokje is bestaande code. Als ik dat alleen al copy paste in de HA Ontwikkelhulpmiddelen - services dan krijg ik deze foutmelding:
Kan service input_number.set_value niet aanroepen expected float for dictionary value @ data['value']. Got None
Ik kan de bestaande code dus niet gebruiken om te testen. Ik snap de foutmelding niet helemaal, wat doe ik fout?
Ik heb ook al dit geprobeerd:
YAML:
1
2
3
4
5
| - service: input_number.set_value
target:
entity_id: input_number.badkamer_mv_luchtvochtigheid_grenswaarde
data:
value: {{ states('sensor.badkamer_mv_luchtvochtigheid') | float + 5 }} |
Maar dan ook weer een melding over een dictionary value:
Kan service input_number.set_value niet aanroepen expected float for dictionary value @ data['value']. Got None
Of dit:
YAML:
1
2
3
4
5
| - service: input_number.set_value
target:
entity_id: input_number.badkamer_mv_luchtvochtigheid_grenswaarde
data:
value: {{ states('sensor.badkamer_mv_luchtvochtigheid.state) | float + 5 }} |
Hier ook weer een foutmelding over dat stomme woordenboek (dictionary)
Op internet staan de voorbeelden met een |int maar ik denk dat ik een float moet gebruiken omdat de waarde een getal is met een komma erin.
Wat zie ik over het hoofd?