]> git.giorgioravera.it Git - homeassistant.git/commitdiff
Updated netatmo package with door sensors
authorGiorgio Ravera <giorgio.ravera@gmail.com>
Mon, 23 Feb 2026 07:51:52 +0000 (08:51 +0100)
committerGiorgio Ravera <giorgio.ravera@gmail.com>
Mon, 23 Feb 2026 07:51:52 +0000 (08:51 +0100)
customizations/zigbee.yaml
packages/netatmo/netatmo_boost.yaml
packages/netatmo/netatmo_main.yaml
packages/netatmo/netatmo_maps.yaml
packages/netatmo/netatmo_on_off.yaml

index 77da572519e88cdeb1b670f3b0d3259262066e7d..c014bfcab32db3117d04300ca80e9fea6a80f53b 100644 (file)
@@ -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
index dae6b01f03e057cb633b0b90011be05628c3e9ad..cf6002274ec557462468cb96b1411403daf2f106 100644 (file)
@@ -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 }}"
index 53d4b14d89b2dc8861871ccc431ebdd1289371f1..fc122373d4c86c5b26124cf134070913a14454cd 100644 (file)
@@ -12,7 +12,7 @@ homeassistant:
     package.netatmo:
       customize: &customize
         package: 'netatmo'
-        version: 1.4.0
+        version: 1.5.0
 
     ######################################################################
     # Netatmo Package - Main - Entities
index 1f7acd495c60dbc6428395c8f9154cbf8567a411..8af4019fed797b32c59fa4e0cf6d37786ebfab4f 100644 (file)
@@ -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" }
index b35df873e4fa8c2000c6840e421332302d154a01..9102d6f1fac2e1eaccdb27195239090b8b71357a 100644 (file)
@@ -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 }}