Con il progetto di seguito quando il postino inserirà una lettera (quella di carta non l’e-mail) nella cassetta postale verrà inviata una notifica!!!
Hardware necessario
1 x NodeMCU
1 x sensore VL53L0X, misura la distanza di un oggetto in modo molto accurato in base al tempo di volo di un laser (time-of-flight)
TASMOTA
Per utilizzare il sensore VL53L0X dobbiamo compilare il firmware Tasmota e includere i driver del sensore aggiungendo al file my_user_config.h
la riga #define USE_VL53L0X
Per compilare il firmware tasmota utilizzate la guida ufficiale qui:
https://tasmota.github.io/docs/Compile-your-build/
Per chi non riesce nella compilazione metto a disposizione il firmware già compilato in release 10.1.0 qui: Download Firmware
caricate il file sul NodeMcu
COLLEGAMENTI
1 2 3 4 5 |
VL53L0X -> NodeMcu 5V - VCC GND - GND SCL - GPIO4 SDA - GPIO5 |
CONFIGURAZIONE
HOME-ASSISTANT
Configuriamo il sensore mqtt su home-assistant:
1 2 3 4 5 6 7 8 9 10 11 |
sensor: - platform: mqtt name: "MailBox sensor" state_topic: tele/nodemcu_irrigazione/SENSOR value_template: "{{ value_json['VL53L0X'].Distance }}" expire_after: 7300 # questo può essere commentato unit_of_measurement: "mm" availability_topic: "tele/nodemcu_irrigazione/LWT" payload_available: "Online" payload_not_available: "Mailbox sensor Offline" icon: mdi:signal-distance-variant |
Ora creiamo un sensore di tipo TEMPLATE:
Questo perchè l’automazione che andreamo a creare si baserà sullo stato del sensore template, cosi non dobbiamo preoccuparci del valore della distanza in millimetri. (modificate poi i valori dei millimetri in base alla vostra cassetta postale).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
template: - sensor: - name: "Mail Box" state: > {% if is_state('sensor.mailbox_sensor', "None") or is_state("sensor.mailbox_sensor", "unavailable" ) %} Errore! {% elif states("sensor.mailbox_sensor")|int <= 280 %} Posta Presente {% elif states("sensor.mailbox_sensor")|int > 280 %} Vuota {% endif %} icon: > {% if is_state('sensor.mailbox_sensor', "None") or is_state("sensor.mailbox_sensor", "unavailable" ) %} mdi:alert {% elif states("sensor.mailbox_sensor")|int <= 280 %} mdi:email-outline {% elif states("sensor.mailbox_sensor")|int > 280 %} mdi:email-off-outline {% endif %} |
AUTOMAZIONE per la NOTIFICA semplice:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
automation: - id: '[MBOX] Notifica mailbox' alias: "[MBOX] Notifica mailbox" trigger: - entity_id: sensor.mail_box platform: state to: 'Posta Presente' action: - service: notify.telegram_peppe data: title: <b>Posta</b> message: | Posta Presente |
Per i più esigenti, ho creato una automazione che invia la notifica audio sui google home e su telegram in base a degli orari per non disturbare la notte, so che nessuno consegna di notte, ma un mal funzionamento del sensore o una falsa lettura potrebbe innescare la notifica mentre state dormendo, e non è piacevole.
Prima di tutto creiamo due input date_time
cosi da poter agevolmente modificare gli orari di intervento dalla GUI di Home-assistant:
1 2 3 4 5 6 7 8 9 10 11 |
input_datetime: # Orari per notifica posta time_posta_on: name: Orario Posta on has_date: false has_time: true time_posta_off: name: Orario Posta off has_date: false has_time: true |
Poi di seguito l’automazione:
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 |
- id: '[MBOX] Notifica mailbox' alias: "[MBOX] Notifica mailbox" # triggero tutti i cambio stato del sensore sensor.mail_box trigger: - entity_id: sensor.mail_box platform: state to: action: - choose: # se l'orario è maggiore di input_datetime.time_posta_on ed è minore di input_datetime.time_posta_off e la posta è presente # mando la notifica audio sui google home e la notifica su telegram al gruppo family. - conditions: - condition: template value_template: "{{ states('sensor.time') >= (states.input_datetime.time_posta_on.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}" - condition: template value_template: "{{ states('sensor.time') < (states.input_datetime.time_posta_off.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}" - condition: state entity_id: sensor.mail_box state: "Posta Presente" # controllo se lo stato del sensore è dato da un valore valido e non da un errore - condition: numeric_state entity_id: sensor.mailbox_sensor above: 1 sequence: - service: media_player.volume_set data_template: entity_id: media_player.sala volume_level: 0.5 - service: media_player.volume_set data_template: entity_id: media_player.corridoio volume_level: 0.5 - service: tts.google_say entity_id: media_player.gruppo_casa data_template: message: "Posta Presente" - service: notify.telegram_peppe data: title: <b>Posta</b> message: | Posta Presente si audio - delay: "00:00:06" - service: media_player.volume_set data_template: entity_id: media_player.gruppo_family volume_level: 0.4 # se l'orario è minore di input_datetime.time_posta_on o maggiore di input_datetime.time_posta_off e la posta è presente, mando solo la notifica su telegram al gruppo famiglia # per non scocciare di notte!!! - conditions: - condition: or conditions: - condition: template value_template: "{{ states('sensor.time') < (states.input_datetime.time_posta_on.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}" - condition: template value_template: "{{ states('sensor.time') >= (states.input_datetime.time_posta_off.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}" - condition: state entity_id: sensor.mail_box state: "Posta Presente" # controllo se lo stato del sensore è dato da un valore valido e non da un errore - condition: numeric_state entity_id: sensor.mailbox_sensor above: 1 sequence: - service: notify.telegram_family data: title: <b>Posta</b> message: | Posta Presente no audio # se il sensore sensor.mail_box va in Errore, mando la notifica su telegram solo a peppe - conditions: - condition: state entity_id: sensor.mail_box state: 'Errore!' sequence: - service: notify.telegram_peppe data: title: <b>Posta</b> message: | Errore sensore |
Di seguito un esempio di come ho creato la card nel lovelace di Home Assistant:
NOTE: Ho inserto il sensore in una scatolina, se gli mettete davanti una copertura in plastica trasparente, questa deve essere attaccata al sensore altrimenti vi misurerà la distanza della copertura in plastica io ho alzato il sensore con due distanziatori come si vede dalle immagini in fondo.
NOTE: Avevo già un nodeMCU nelle vicinanze della cassetta postale utilizzato per l’irrigazione l’articolo qui, e alimentato con la rete elettrica, quindi ho sfruttato quello ma per chi utilizzerà la batteria, vi segnalo un articolo in inglese con un po di materiale aggiuntivo.
Alimentazione a batteria guida qui:
http://users.telenet.be/goosst/posts/postbox/
Materiale per alimentazione a batteria:
1 x Weemos mini D1
1 x MT3608 regolatore di tensione
Batterie, che possono essere 2 stilo AA o una LiFePo4 in formato 18650 oppure 21700
per come utilizzare il deep sleep vi rimando alla guida ufficiale su github
https://tasmota.github.io/docs/DeepSleep/
per il collegamento del pin xshut del sensore leggere la guida sempre su github
https://tasmota.github.io/docs/VL53L0x/#configuration-for-multiple-vl53l0x-sensors-in-parallel
Galleria immagini del progetto:
Scrivi un commento
Devi accedere, per commentare.