diff --git a/blueprints/automation/entfeuchten_blueprint.yaml b/blueprints/automation/entfeuchten_blueprint.yaml index 15b1a93..d44f401 100644 --- a/blueprints/automation/entfeuchten_blueprint.yaml +++ b/blueprints/automation/entfeuchten_blueprint.yaml @@ -1 +1,136 @@ -Ymx1ZXByaW50OgogIG5hbWU6IFJhdW0gZW50ZmV1Y2h0ZW4gKEtsaW1hYW5sYWdlIERyeS1Nb2R1cykKICBkZXNjcmlwdGlvbjogPgogICAgU2NoYWx0ZXQgZWluZSBLbGltYWFubGFnZSBmw7xyIGVpbmUgZWluc3RlbGxiYXJlIFplaXQgaW4gZGVuIERyeS1Nb2R1cywKICAgIHdlbm4gZWluIEhlbGZlci1TY2hhbHRlciBha3RpdmllcnQgd2lyZC4gU3RhcnRldCBudXIgYmVpIGF1c3JlaWNoZW5kZXIKICAgIEx1ZnRmZXVjaHRpZ2tlaXQgdW5kIGdlc2NobG9zc2VuZW4gRmVuc3Rlcm4vVMO8cmVuLiBCcmljaHQgYWIsIHNvYmFsZAogICAgZWluIEZlbnN0ZXIgb2RlciBlaW5lIFTDvHIgZ2XDtmZmbmV0IHdpcmQsIHVuZCBzZXR6dCBkaWUgS2xpbWFhbmxhZ2UKICAgIGRhbmFjaCBhdWYgZGVuIHZvcmhlcmlnZW4gTW9kdXMgenVyw7xjay4KICBkb21haW46IGF1dG9tYXRpb24KICBpbnB1dDoKICAgIGRlaHVtaWRpZnlfc3dpdGNoOgogICAgICBuYW1lOiBFbnRmZXVjaHRlbi1TY2hhbHRlcgogICAgICBkZXNjcmlwdGlvbjogaW5wdXRfYm9vbGVhbiwgZGVyIGRpZSBFbnRmZXVjaHR1bmcgc3RhcnRldCAoei4gQi4gaW5wdXRfYm9vbGVhbi5zY2hsYWZ6aW1tZXJfZW50ZmV1Y2h0ZW4pCiAgICAgIHNlbGVjdG9yOgogICAgICAgIGVudGl0eToKICAgICAgICAgIGRvbWFpbjogaW5wdXRfYm9vbGVhbgoKICAgIGNsaW1hdGVfZW50aXR5OgogICAgICBuYW1lOiBLbGltYWFubGFnZQogICAgICBkZXNjcmlwdGlvbjogQ2xpbWF0ZS1FbnRpdMOkdCwgZGllIGluIGRlbiBEcnktTW9kdXMgZ2VzY2hhbHRldCB3aXJkCiAgICAgIHNlbGVjdG9yOgogICAgICAgIGVudGl0eToKICAgICAgICAgIGRvbWFpbjogY2xpbWF0ZQoKICAgIGh1bWlkaXR5X3NlbnNvcjoKICAgICAgbmFtZTogTHVmdGZldWNodGlna2VpdHNzZW5zb3IKICAgICAgZGVzY3JpcHRpb246IFNlbnNvciBtaXQgZGV2aWNlX2NsYXNzIGh1bWlkaXR5IChXZXJ0IGluICUpCiAgICAgIHNlbGVjdG9yOgogICAgICAgIGVudGl0eToKICAgICAgICAgIGRvbWFpbjogc2Vuc29yCiAgICAgICAgICBkZXZpY2VfY2xhc3M6IGh1bWlkaXR5CgogICAgaHVtaWRpdHlfdGhyZXNob2xkOgogICAgICBuYW1lOiBGZXVjaHRpZ2tlaXRzZ3Jlbnp3ZXJ0ICglKQogICAgICBkZXNjcmlwdGlvbjogRW50ZmV1Y2h0dW5nIHN0YXJ0ZXQgbnVyLCB3ZW5uIGRpZSBMdWZ0ZmV1Y2h0aWdrZWl0IGRpZXNlbiBXZXJ0IMO8YmVyc2NocmVpdGV0CiAgICAgIGRlZmF1bHQ6IDYwCiAgICAgIHNlbGVjdG9yOgogICAgICAgIG51bWJlcjoKICAgICAgICAgIG1pbjogMzAKICAgICAgICAgIG1heDogMTAwCiAgICAgICAgICBzdGVwOiAxCiAgICAgICAgICB1bml0X29mX21lYXN1cmVtZW50OiAiJSIKICAgICAgICAgIG1vZGU6IHNsaWRlcgoKICAgIGNvbnRhY3Rfc2Vuc29yczoKICAgICAgbmFtZTogRmVuc3Rlci0gdW5kIFTDvHJzZW5zb3JlbgogICAgICBkZXNjcmlwdGlvbjogQWxsZSBTZW5zb3JlbiBtw7xzc2VuIGdlc2NobG9zc2VuIHNlaW4gKG9mZiA9IGdlc2NobG9zc2VuKS4gQmVpIGdlw7ZmZm5ldGVtIFNlbnNvciB3aXJkIGFiZ2Vicm9jaGVuLgogICAgICBzZWxlY3RvcjoKICAgICAgICBlbnRpdHk6CiAgICAgICAgICBkb21haW46IGJpbmFyeV9zZW5zb3IKICAgICAgICAgIGRldmljZV9jbGFzczoKICAgICAgICAgICAgLSB3aW5kb3cKICAgICAgICAgICAgLSBkb29yCiAgICAgICAgICAgIC0gb3BlbmluZwogICAgICAgICAgbXVsdGlwbGU6IHRydWUKCiAgICBkdXJhdGlvbl9taW51dGVzOgogICAgICBuYW1lOiBMYXVmemVpdCAoTWludXRlbikKICAgICAgZGVzY3JpcHRpb246IFdpZSBsYW5nZSBkaWUgS2xpbWFhbmxhZ2UgaW0gRHJ5LU1vZHVzIGxhdWZlbiBzb2xsCiAgICAgIGRlZmF1bHQ6IDEwCiAgICAgIHNlbGVjdG9yOgogICAgICAgIG51bWJlcjoKICAgICAgICAgIG1pbjogMQogICAgICAgICAgbWF4OiA2MAogICAgICAgICAgc3RlcDogMQogICAgICAgICAgdW5pdF9vZl9tZWFzdXJlbWVudDogbWluCiAgICAgICAgICBtb2RlOiBzbGlkZXIKCnZhcmlhYmxlczoKICBkZWh1bWlkaWZ5X3N3aXRjaDogIWlucHV0IGRlaHVtaWRpZnlfc3dpdGNoCiAgY2xpbWF0ZV9lbnRpdHk6ICFpbnB1dCBjbGltYXRlX2VudGl0eQogIGh1bWlkaXR5X3NlbnNvcjogIWlucHV0IGh1bWlkaXR5X3NlbnNvcgogIGh1bWlkaXR5X3RocmVzaG9sZDogIWlucHV0IGh1bWlkaXR5X3RocmVzaG9sZAogIGNvbnRhY3Rfc2Vuc29yczogIWlucHV0IGNvbnRhY3Rfc2Vuc29ycwogIGR1cmF0aW9uX21pbnV0ZXM6ICFpbnB1dCBkdXJhdGlvbl9taW51dGVzCiAgcHJldmlvdXNfbW9kZTogInt7IHN0YXRlX2F0dHIoY2xpbWF0ZV9lbnRpdHksICdodmFjX21vZGUnKSB8IGRlZmF1bHQoc3RhdGVzKGNsaW1hdGVfZW50aXR5KSkgfX0iCgp0cmlnZ2VyOgogIC0gcGxhdGZvcm06IHN0YXRlCiAgICBlbnRpdHlfaWQ6ICFpbnB1dCBkZWh1bWlkaWZ5X3N3aXRjaAogICAgdG86ICJvbiIKCmNvbmRpdGlvbjoKICAtIGNvbmRpdGlvbjogdGVtcGxhdGUKICAgIHZhbHVlX3RlbXBsYXRlOiA+CiAgICAgIHt7IHN0YXRlcyhodW1pZGl0eV9zZW5zb3IpIHwgZmxvYXQoMCkgPiBodW1pZGl0eV90aHJlc2hvbGQgfCBmbG9hdCgwKSB9fQoKICAtIGNvbmRpdGlvbjogdGVtcGxhdGUKICAgIHZhbHVlX3RlbXBsYXRlOiA+CiAgICAgIHt7IGV4cGFuZChjb250YWN0X3NlbnNvcnMpCiAgICAgICAgIHwgc2VsZWN0YXR0cignc3RhdGUnLCAnZXEnLCAnb24nKQogICAgICAgICB8IGxpc3QKICAgICAgICAgfCBjb3VudCA9PSAwIH19CgphY3Rpb246CiAgLSBzZXJ2aWNlOiBjbGltYXRlLnNldF9odmFjX21vZGUKICAgIHRhcmdldDoKICAgICAgZW50aXR5X2lkOiAhaW5wdXQgY2xpbWF0ZV9lbnRpdHkKICAgIGRhdGE6CiAgICAgIGh2YWNfbW9kZTogZHJ5CgogIC0gd2FpdF9mb3JfdHJpZ2dlcjoKICAgICAgLSBwbGF0Zm9ybTogdGVtcGxhdGUKICAgICAgICB2YWx1ZV90ZW1wbGF0ZTogPgogICAgICAgICAge3sgZXhwYW5kKGNvbnRhY3Rfc2Vuc29ycykKICAgICAgICAgICAgIHwgc2VsZWN0YXR0cignc3RhdGUnLCAnZXEnLCAnb24nKQogICAgICAgICAgICAgfCBsaXN0CiAgICAgICAgICAgICB8IGNvdW50ID4gMCB9fQogICAgdGltZW91dDoKICAgICAgbWludXRlczogIWlucHV0IGR1cmF0aW9uX21pbnV0ZXMKICAgIGNvbnRpbnVlX29uX3RpbWVvdXQ6IHRydWUKCiAgLSBjaG9vc2U6CiAgICAgIC0gY29uZGl0aW9uczoKICAgICAgICAgIC0gY29uZGl0aW9uOiB0ZW1wbGF0ZQogICAgICAgICAgICB2YWx1ZV90ZW1wbGF0ZTogPgogICAgICAgICAgICAgIHt7IHByZXZpb3VzX21vZGUgaW4gWydvZmYnLCAnaGVhdCcsICdjb29sJywgJ2hlYXRfY29vbCcsICdhdXRvJywgJ2Zhbl9vbmx5J10gfX0KICAgICAgICBzZXF1ZW5jZToKICAgICAgICAgIC0gc2VydmljZTogY2xpbWF0ZS5zZXRfaHZhY19tb2RlCiAgICAgICAgICAgIHRhcmdldDoKICAgICAgICAgICAgICBlbnRpdHlfaWQ6ICFpbnB1dCBjbGltYXRlX2VudGl0eQogICAgICAgICAgICBkYXRhOgogICAgICAgICAgICAgIGh2YWNfbW9kZTogInt7IHByZXZpb3VzX21vZGUgfX0iCiAgICBkZWZhdWx0OgogICAgICAtIHNlcnZpY2U6IGNsaW1hdGUuc2V0X2h2YWNfbW9kZQogICAgICAgIHRhcmdldDoKICAgICAgICAgIGVudGl0eV9pZDogIWlucHV0IGNsaW1hdGVfZW50aXR5CiAgICAgICAgZGF0YToKICAgICAgICAgIGh2YWNfbW9kZTogIm9mZiIKCiAgLSBzZXJ2aWNlOiBpbnB1dF9ib29sZWFuLnR1cm5fb2ZmCiAgICB0YXJnZXQ6CiAgICAgIGVudGl0eV9pZDogIWlucHV0IGRlaHVtaWRpZnlfc3dpdGNoCgptb2RlOiBzaW5nbGUKbWF4X2V4Y2VlZGVkOiBzaWxlbnQK \ No newline at end of file +blueprint: + name: Raum entfeuchten (Klimaanlage Dry-Modus) + description: > + Schaltet eine Klimaanlage für eine einstellbare Zeit in den Dry-Modus, + wenn ein Helfer-Schalter aktiviert wird. Startet nur bei ausreichender + Luftfeuchtigkeit und geschlossenen Fenstern/Türen. Bricht ab, sobald + ein Fenster oder eine Tür geöffnet wird, und setzt die Klimaanlage + danach auf den vorherigen Modus zurück. + domain: automation + input: + dehumidify_switch: + name: Entfeuchten-Schalter + description: input_boolean, der die Entfeuchtung startet (z. B. input_boolean.schlafzimmer_entfeuchten) + selector: + entity: + domain: input_boolean + + climate_entity: + name: Klimaanlage + description: Climate-Entität, die in den Dry-Modus geschaltet wird + selector: + entity: + domain: climate + + humidity_sensor: + name: Luftfeuchtigkeitssensor + description: Sensor mit device_class humidity (Wert in %) + selector: + entity: + domain: sensor + device_class: humidity + + humidity_threshold: + name: Feuchtigkeitsgrenzwert (%) + description: Entfeuchtung startet nur, wenn die Luftfeuchtigkeit diesen Wert überschreitet + default: 60 + selector: + number: + min: 30 + max: 100 + step: 1 + unit_of_measurement: "%" + mode: slider + + contact_sensors: + name: Fenster- und Türsensoren + description: Alle Sensoren müssen geschlossen sein (off = geschlossen). Bei geöffnetem Sensor wird abgebrochen. + selector: + entity: + domain: binary_sensor + device_class: + - window + - door + - opening + multiple: true + + duration_minutes: + name: Laufzeit (Minuten) + description: Wie lange die Klimaanlage im Dry-Modus laufen soll + default: 10 + selector: + number: + min: 1 + max: 60 + step: 1 + unit_of_measurement: min + mode: slider + +variables: + dehumidify_switch: !input dehumidify_switch + climate_entity: !input climate_entity + humidity_sensor: !input humidity_sensor + humidity_threshold: !input humidity_threshold + contact_sensors: !input contact_sensors + duration_minutes: !input duration_minutes + previous_mode: "{{ state_attr(climate_entity, 'hvac_mode') | default(states(climate_entity)) }}" + +trigger: + - platform: state + entity_id: !input dehumidify_switch + to: "on" + +condition: + - condition: template + value_template: > + {{ states(humidity_sensor) | float(0) > humidity_threshold | float(0) }} + + - condition: template + value_template: > + {{ expand(contact_sensors) + | selectattr('state', 'eq', 'on') + | list + | count == 0 }} + +action: + - service: climate.set_hvac_mode + target: + entity_id: !input climate_entity + data: + hvac_mode: dry + + - wait_for_trigger: + - platform: template + value_template: > + {{ expand(contact_sensors) + | selectattr('state', 'eq', 'on') + | list + | count > 0 }} + timeout: + minutes: !input duration_minutes + continue_on_timeout: true + + - choose: + - conditions: + - condition: template + value_template: > + {{ previous_mode in ['off', 'heat', 'cool', 'heat_cool', 'auto', 'fan_only'] }} + sequence: + - service: climate.set_hvac_mode + target: + entity_id: !input climate_entity + data: + hvac_mode: "{{ previous_mode }}" + default: + - service: climate.set_hvac_mode + target: + entity_id: !input climate_entity + data: + hvac_mode: "off" + + - service: input_boolean.turn_off + target: + entity_id: !input dehumidify_switch + +mode: single +max_exceeded: silent