From: Giorgio Ravera Date: Mon, 23 Feb 2026 07:51:52 +0000 (+0100) Subject: Updated netatmo package with door sensors X-Git-Url: http://git.giorgioravera.it/?a=commitdiff_plain;h=f4408df12a423d0dcc0ed6d2a72965b2f79111c6;p=homeassistant.git Updated netatmo package with door sensors --- diff --git a/customizations/zigbee.yaml b/customizations/zigbee.yaml index 77da5725..c014bfca 100644 --- a/customizations/zigbee.yaml +++ b/customizations/zigbee.yaml @@ -12,16 +12,28 @@ sensor.porta_casa_linkquality: sensor.porta_casa_voltage: friendly_name: 'Tensione' -# Spare Door Sensor -binary_sensor.spare_door_contact: - friendly_name: 'Spare Door' -sensor.spare_door_battery: +# Bedroom French Door Sensor +binary_sensor.portafinestra_sala_contact: + friendly_name: 'Portafinestra Sala' +sensor.portafinestra_sala_battery: friendly_name: 'Batteria' -sensor.spare_door_device_temperature: +sensor.portafinestra_sala_device_temperature: friendly_name: 'Temperatura' -sensor.spare_door_linkquality: +sensor.portafinestra_sala_linkquality: friendly_name: 'Link' -sensor.spare_door_voltage: +sensor.portafinestra_sala_voltage: + friendly_name: 'Tensione' + +# Bedroom French Door Sensor +binary_sensor.portafinestra_camera_contact: + friendly_name: 'Portafinestra Camera' +sensor.portafinestra_camera_battery: + friendly_name: 'Batteria' +sensor.portafinestra_camera_device_temperature: + friendly_name: 'Temperatura' +sensor.portafinestra_camera_linkquality: + friendly_name: 'Link' +sensor.portafinestra_camera_voltage: friendly_name: 'Tensione' # Front Balcony Temperature Sensor diff --git a/packages/netatmo/netatmo_boost.yaml b/packages/netatmo/netatmo_boost.yaml index dae6b01f..cf600227 100644 --- a/packages/netatmo/netatmo_boost.yaml +++ b/packages/netatmo/netatmo_boost.yaml @@ -37,7 +37,7 @@ automation: id: termosifoni_attivazione_boost mode: parallel - trigger: + triggers: - trigger: state entity_id: - input_boolean.boost_valvola_zona_giorno @@ -50,25 +50,31 @@ automation: to: "on" variables: - climate_entity: > + climate_id: > {{ (state_attr('sensor.netatmo_valve_map', 'boost_boolean_to_climate') | default('{}') | from_json).get(trigger.entity_id) }} - action: + conditions: + - condition: template + value_template: "{{ climate_id is not none }}" + - condition: template + value_template: "{{ states(climate_id) not in ['unknown','unavailable','none',''] }}" + + actions: #- action: climate.set_preset_mode # data_template: # entity_id: "{{ entity_id }}" # preset_mode: boost - action: climate.set_temperature data_template: - entity_id: "{{ climate_entity }}" + entity_id: "{{ climate_id }}" temperature: 30 - delay: "00:05:00" - action: climate.turn_on data_template: - entity_id: "{{ climate_entity }}" + entity_id: "{{ climate_id }}" - action: input_boolean.turn_off data_template: entity_id: "{{ trigger.entity_id }}" @@ -80,7 +86,7 @@ automation: id: termosifoni_disattivazione_boost mode: parallel - trigger: + triggers: - trigger: state entity_id: - input_boolean.boost_valvola_zona_giorno @@ -96,13 +102,19 @@ automation: event: start variables: - climate_entity: > + climate_id: > {{ (state_attr('sensor.netatmo_valve_map', 'boost_boolean_to_climate') | default('{}') | from_json).get(trigger.entity_id) }} - action: + conditions: + - condition: template + value_template: "{{ climate_id is not none }}" + - condition: template + value_template: "{{ states(climate_id) not in ['unknown','unavailable','none',''] }}" + + actions: # home assistant start - choose: - conditions: "{{ trigger.platform == 'homeassistant' }}" @@ -120,7 +132,7 @@ automation: default: - action: climate.turn_on data_template: - entity_id: "{{ climate_entity }}" + entity_id: "{{ climate_id }}" - action: input_boolean.turn_off data_template: entity_id: "{{ trigger.entity_id }}" diff --git a/packages/netatmo/netatmo_main.yaml b/packages/netatmo/netatmo_main.yaml index 53d4b14d..fc122373 100644 --- a/packages/netatmo/netatmo_main.yaml +++ b/packages/netatmo/netatmo_main.yaml @@ -12,7 +12,7 @@ homeassistant: package.netatmo: customize: &customize package: 'netatmo' - version: 1.4.0 + version: 1.5.0 ###################################################################### # Netatmo Package - Main - Entities diff --git a/packages/netatmo/netatmo_maps.yaml b/packages/netatmo/netatmo_maps.yaml index 1f7acd49..8af4019f 100644 --- a/packages/netatmo/netatmo_maps.yaml +++ b/packages/netatmo/netatmo_maps.yaml @@ -8,37 +8,41 @@ template: state: "ok" attributes: boolean_to_climate: > - {"input_boolean.valvola_zona_giorno":"climate.zona_giorno", + { "input_boolean.valvola_zona_giorno":"climate.zona_giorno", "input_boolean.valvola_cucina":"climate.cucina", "input_boolean.valvola_sala":"climate.sala", "input_boolean.valvola_studio":"climate.studio", "input_boolean.valvola_bagno_piccolo":"climate.bagno_piccolo", "input_boolean.valvola_bagno_grande":"climate.bagno_grande", - "input_boolean.valvola_camera":"climate.camera"} + "input_boolean.valvola_camera":"climate.camera" } boolean_to_timer: > - {"input_boolean.valvola_zona_giorno":"timer.valvola_zona_giorno", + { "input_boolean.valvola_zona_giorno":"timer.valvola_zona_giorno", "input_boolean.valvola_cucina":"timer.valvola_cucina", "input_boolean.valvola_sala":"timer.valvola_sala", "input_boolean.valvola_studio":"timer.valvola_studio", "input_boolean.valvola_bagno_piccolo":"timer.valvola_bagno_piccolo", "input_boolean.valvola_bagno_grande":"timer.valvola_bagno_grande", - "input_boolean.valvola_camera":"timer.valvola_camera"} + "input_boolean.valvola_camera":"timer.valvola_camera" } timer_to_boolean: > - {"timer.valvola_zona_giorno":"input_boolean.valvola_zona_giorno", + { "timer.valvola_zona_giorno":"input_boolean.valvola_zona_giorno", "timer.valvola_cucina":"input_boolean.valvola_cucina", "timer.valvola_sala":"input_boolean.valvola_sala", "timer.valvola_studio":"input_boolean.valvola_studio", "timer.valvola_bagno_piccolo":"input_boolean.valvola_bagno_piccolo", "timer.valvola_bagno_grande":"input_boolean.valvola_bagno_grande", - "timer.valvola_camera":"input_boolean.valvola_camera"} + "timer.valvola_camera":"input_boolean.valvola_camera" } boost_boolean_to_climate: > - {"input_boolean.boost_valvola_zona_giorno":"climate.zona_giorno", + { "input_boolean.boost_valvola_zona_giorno":"climate.zona_giorno", "input_boolean.boost_valvola_cucina":"climate.cucina", "input_boolean.boost_valvola_sala":"climate.sala", "input_boolean.boost_valvola_studio":"climate.studio", "input_boolean.boost_valvola_bagno_piccolo":"climate.bagno_piccolo", "input_boolean.boost_valvola_bagno_grande":"climate.bagno_grande", - "input_boolean.boost_valvola_camera":"climate.camera"} + "input_boolean.boost_valvola_camera":"climate.camera" } + + sensors_to_climate: > + { "binary_sensor.portafinestra_sala":"input_boolean.valvola_sala", + "binary_sensor.portafinestra_camera_contact":"input_boolean.valvola_camera" } diff --git a/packages/netatmo/netatmo_on_off.yaml b/packages/netatmo/netatmo_on_off.yaml index b35df873..9102d6f1 100644 --- a/packages/netatmo/netatmo_on_off.yaml +++ b/packages/netatmo/netatmo_on_off.yaml @@ -94,7 +94,7 @@ automation: - alias: "Termosifoni: Accensione" id: termosifoni_accensione - trigger: + triggers: - trigger: state entity_id: - input_boolean.valvola_zona_giorno @@ -106,16 +106,28 @@ automation: - input_boolean.valvola_camera to: "on" - action: + variables: + climate_id: "{{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_climate') | from_json)[trigger.entity_id] }}" + timer_id: "{{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_timer') | from_json)[trigger.entity_id] }}" + + conditions: + - condition: template + value_template: "{{ climate_id is not none }}" + - condition: template + value_template: "{{ states(climate_id) not in ['unknown','unavailable','none',''] }}" + - condition: template + value_template: "{{ timer_id is not none }}" + + actions: - action: climate.turn_on data: entity_id: > - {{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_climate') | from_json)[trigger.entity_id] }} + {{ climate_id }} - action: timer.cancel data: entity_id: > - {{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_timer') | from_json)[trigger.entity_id] }} + {{ timer_id }} ###################################################################### @@ -136,16 +148,28 @@ automation: - input_boolean.valvola_camera to: "off" + variables: + climate_id: "{{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_climate') | from_json)[trigger.entity_id] }}" + timer_id: "{{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_timer') | from_json)[trigger.entity_id] }}" + + conditions: + - condition: template + value_template: "{{ climate_id is not none }}" + - condition: template + value_template: "{{ states(climate_id) not in ['unknown','unavailable','none',''] }}" + - condition: template + value_template: "{{ timer_id is not none }}" + actions: - action: climate.turn_off data: entity_id: > - {{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_climate') | from_json)[trigger.entity_id] }} + {{ climate_id }} - action: timer.start data: entity_id: > - {{ (state_attr('sensor.netatmo_valve_map', 'boolean_to_timer') | from_json)[trigger.entity_id] }} + {{ timer_id }} duration: "{{ states('input_number.netatmo_manual_temperature') | int * 60 }}" ###################################################################### @@ -168,11 +192,21 @@ automation: - timer.valvola_bagno_grande - timer.valvola_camera + variables: + mappa_sensori: "{{ state_attr('sensor.netatmo_valve_map','timer_to_boolean') | from_json }}" + climate_input_boolean: "{{ mappa_sensori.get(trigger.entity_id) }}" + + conditions: + - condition: template + value_template: "{{ climate_input_boolean is not none }}" + - condition: template + value_template: "{{ states(climate_input_boolean) not in ['unknown','unavailable','none',''] }}" + actions: - action: input_boolean.turn_on data: entity_id: > - {{ (state_attr('sensor.netatmo_valve_map', 'timer_to_boolean') | from_json)[trigger.event.data.entity_id] }} + {{ climate_input_boolean }} - action: script.notify_all data: @@ -184,3 +218,63 @@ automation: | replace('_', ' ') }} si è riacceso destination: all + + ###################################################################### + # Automation triggered after window open to switch off the valve + ###################################################################### + - alias: "Termosifoni: Spegnimento con Finestra Aperta" + id: termosifoni_spegnimento_con_finestra_aperta + mode: parallel + + triggers: + - trigger: state + entity_id: + - binary_sensor.portafinestra_sala_contact + - binary_sensor.portafinestra_camera_contact + to: 'on' + + variables: + mappa_sensori: "{{ state_attr('sensor.netatmo_valve_map','sensors_to_climate') | from_json }}" + climate_input_boolean: "{{ mappa_sensori.get(trigger.entity_id) }}" + + conditions: + - condition: template + value_template: "{{ climate_input_boolean is not none }}" + - condition: template + value_template: "{{ states(climate_input_boolean) not in ['unknown','unavailable','none',''] }}" + + actions: + - action: input_boolean.turn_off + data: + entity_id: > + {{ climate_input_boolean }} + + ###################################################################### + # Automation triggered after window close to switch on the valve + ###################################################################### + - alias: "Termosifoni: Riaccensione con Finestra Chiusa" + id: termosifoni_riaccensione_con_finestra_chiusa + mode: parallel + + triggers: + - trigger: state + entity_id: + - binary_sensor.portafinestra_sala_contact + - binary_sensor.portafinestra_camera_contact + to: 'off' + + variables: + mappa_sensori: "{{ state_attr('sensor.netatmo_valve_map','sensors_to_climate') | from_json }}" + climate_input_boolean: "{{ mappa_sensori.get(trigger.entity_id) }}" + + conditions: + - condition: template + value_template: "{{ climate_input_boolean is not none }}" + - condition: template + value_template: "{{ states(climate_input_boolean) not in ['unknown','unavailable','none',''] }}" + + actions: + - action: input_boolean.turn_on + data: + entity_id: > + {{ climate_input_boolean }}