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 valore compreso tra 0 e 15, che servirà per adeguare il comportamento 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, con il quale userò alcuni automatismi da implementare con le rules, allora userò solo due comandi:

Switchmode 1
PulseTime1 160 

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

Thing topic PIR1-parcheggio "PIR 1 - Parcheggio" @ "parcheggio" {
        Channels:
        Type switch : power     "Power"         [ stateTopic="stat/tasmota-PIR1-parcheggio/POWER" , commandTopic="cmnd/tasmota-PIR1-parcheggio/POWER" ]
		Type datetime : timestamp "Timestamp"              [ stateTopic="tele/tasmota-PIR1-parcheggio/STATE", transformationPattern="JSONPATH:$.Time"]
        Type number : rssi      "WiFi Signal Strength"   [ stateTopic="tele/tasmota-PIR1-parcheggio/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
        Type switch  : reachable "Reachable"              [ stateTopic="tele/tasmota-PIR1-parcheggio/LWT" ]
		Type string : WifiDowntime  [stateTopic="tele/tasmota-PIR1-parcheggio/STATE", transformationPattern="JSONPATH:$.Wifi.Downtime"]
        Type number : LoadAvg       [stateTopic="tele/tasmota-PIR1-parcheggio/STATE", transformationPattern="JSONPATH:$.LoadAvg"]
        Type string : Uptime        [stateTopic="tele/tasmota-PIR1-parcheggio/STATE", transformationPattern="JSONPATH:$.Uptime"]
        }

nel file default.item aggiungo:

Group Esterno              "Esterno"   <garden>   (Home)
Group eqPIR1parcheggio	"PIR parcheggio"	(Home)

Switch parcheggioPIR1  "PIR 1 Parcheggio" <motion> (Esterno, eqPIR1parcheggio, Grafico_PIR) {channel="mqtt:topic:mosquitto:PIR1-parcheggio:power"}
Number parcheggioPIR1_RSSI "PIR1 RSSI [%d %%]" <qualityofservice> (Esterno,eqPIR1parcheggio) {channel="mqtt:topic:mosquitto:PIR1-parcheggio:rssi" }
DateTime parcheggioPIR1_Time "PIR1 Time [%1$td/%1$tm - %1$tH:%1$tM:%1$tS]" <time> (Esterno, eqPIR1parcheggio)   {channel="mqtt:topic:mosquitto:PIR1-parcheggio:timestamp" }
String parcheggioPIR1_Reachable "Modulo in rete" <status> (Esterno, eqPIR1parcheggio) {channel="mqtt:topic:mosquitto:PIR1-parcheggio:reachable" }
String parcheggioPIR1_WifiDowntime "WifiDowntime" <time> (Esterno, eqPIR1parcheggio)   {channel="mqtt:topic:mosquitto:PIR1-parcheggio:WifiDowntime" }
Number parcheggioPIR1_LoadAvg "LoadAvg"  <pie> (Esterno, eqPIR1parcheggio)   {channel="mqtt:topic:mosquitto:PIR1-parcheggio:LoadAvg" }
String parcheggioPIR1_Uptime "Uptime" <time> (Esterno, eqPIR1parcheggio)   {channel="mqtt:topic:mosquitto:PIR1-parcheggio:Uptime"}

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 parcheggioPIR1 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&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.