Sonoff Basic – Realizziamo un sensore PIR

Con questi appunti vi faccio vedere come ho realizzato un sensore PIR utilizzando un Sonoff Basic ed un economico modulo rilevatore di movimento a infrarossi regolabile HC-SR501 IR.

Andiamo per punti.

  1. Si tratta di un Sonoff Basic che ho modificato aggiungendo 4 pin per la programmazione, un pin per il GPIO14 ed uno per l’accesso alla tensione di 5V. (Vedi foto)
  2. Ho riprogrammato il Sonoff sostituendo il firmware originale con Tasmota. Ho usato il comodissimo software gratuito Tasmotizer (lo trovi cercando su Google Tasmotizer github)
  3. Ho collegato il sensore (vedi foto)
  4. Ho programmato a dovere Tasmota.

Tempo di esecuzione lavori. Poco!

Credo che solo il punto 4 richieda qualche spiegazione.

Dopo avere intallato il firmware Tasmota sul Sonoff Basic, occorre riavviarlo. Al primo avvio, Tasmota funziona come un Access Point Wifi, quindi usando un pc portatile oppure lo smartphone ci dobbiamo collegare alla rete wifi creata dal Sonoff e, con Chrome (o altro browser), visitare la pagina web all’indirizzo 192.168.4.1

Nelle foto seguenti ecco come ho impostato i pin del Sonoff per fare funzionare il PIR.

Segnalo che nella finestra console sarà possibile usare il comando
SWITCHMODE 0 oppure un’impostazione tra 0 e 7
per adeguare il comportamento dello switch alle proprie esigenze. Per le spiegazioni sul comando vi rimando alla ricerca su Google.

Ultima nota:

Nella mia prima realizzazione, ogni volta che il PIR si attiva, il Sonoff invia un comando http ad un altro nodo, realizzato con Shelly1, per accendere le luci del parcheggio. Per realizzare questo bisogna andare nell’interfaccia console e dare i seguenti comandi:

Switchmode 13
PulseTime1 160 
Rule1 ON Switch1#State=1 DO websend [192.168.1.32] /relay/0?turn=on&timer=120 ENDON
Rule1 + ON Switch1#State=1 DO Power 1 ENDON 
Rule1 ON

Dove l’indirizzo IP che vedete, che deve essere chiuso tra le parentesi quadre, è quello del mio Shelly1. Il valore 120 è il tempo di accensione espresso in secondi. Per eliminare il timer si può cancellare il comando da & in poi, ENDON escluso.

PulseTime1 160 significa che il relè locale rimarrà nello stato ON per 160-100 = 60 secondi.
Se non interessa usare la temporizzazione programmata da console ma quella settata sulla schedina del PIR tramite potenziometri, allora si può omettere il comando PulseTime, impostare Switchmode 1 ed aggiungere Rule1 + ON Switch1#State=0 DO Power 0 ENDON

OPENHAB

Visto che interfaccerò il PIR a Openhab, allora aggiungo anche questa parte di regola.

Switchmode 1

Rule1 + ON Switch1#State=1 DO publish stat/tasmota_PIR1_parcheggio/state on ENDON

Rule1 + ON Switch1#State=0 DO publish stat/tasmota_PIR1_parcheggio/state off ENDON

Rule1 + ON Switch1#State=1 DO ledpower1 on ENDON ON Switch1#State=0 DO ledpower1 off ENDON

Infine, e questo è un appunto che lascio qui per me, la mia regola finale è:

Rule1 ON Switch1#State=1 DO Power 1 ENDON ON Switch1#State=1 DO publish stat/tasmota_PIR1_parcheggio/state on ENDON ON Switch1#State=0 DO publish stat/tasmota_PIR1_parcheggio/state off ENDON ON Switch1#State=1 DO ledpower1 on ENDON ON Switch1#State=0 DO ledpower1 off ENDON

Per quanto riguarda la configurazione di Openhab, nel file mqtt.things aggiungo:

Thing topic tasmota_PIR1_parcheggio "PIR 1 - Parcheggio" {
        Channels:
        Type switch : power     "Power"         [ stateTopic="stat/tasmota_PIR1_parcheggio/state", on="on", off="off"]
        }

nel file default.item aggiungo:

Contact PIR1parcheggio  "PIR 1 Parcheggio" <motion> (Esterno) {channel="mqtt:topic:mosquitto:tasmota_PIR1_parcheggio:power"}

A seguire inserisco una regola affinché le luci si accendano solo di notte per 2 minuti. Per fare questo uso i binding Astro e http. Uso anche il binding telegram perchè mi piace ricevere i messaggi:

rule "Accensione luci parcheggio con PIR"
when
Item PIR1parcheggio changed from CLOSED to OPEN
then

if(sole.state == OFF ){
// se non usi il binding per telegram elimina questa riga
sendTelegram("bot1", "PIR Parcheggio - Luci Accese")

// togli il commendo dal comando che vuoi usare
// se usi il comando http ricorda di usare l'ip corretto

// sendCommand(parcheggio, ON)
sendHttpGetRequest("http://192.168.1.32/relay/0?turn=on&amp;timer=120")
} else {
sendTelegram("bot1", "PIR Parcheggio")
}
end

Con questa regola mando il comando di accensione solo quanto un item chiamato sole ha lo stato OFF.
La regola che mette l’item sole a OFF è questa:

rule "Elevation"
when
    Item Elevation changed 
then
if ((Elevation.state as DecimalType) < -4) {
	sole.setState(OFF)
} else {
	sole.setState(ON)
}
end

Se decidi di usare la regola qui sopra allora ricorda di aggiungere questo item nel file default.item:

Switch sole <sole>

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

wp-puzzle.com logo

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.