Picomotion

Angelegt Samstag 20 Mai 2023


Ein frei programmierbarer PIR Bewegungsmelder mit MQTT Interface, WLAN, telnet, TFTP für 10.- €



Die Hardware



Raspberry Pi Pico W mit PIR Bewegungsmelder


Eigenschaften


Der PIR Sensor hat 3 Anschlüsse und ist wie folgt mit dem Pico verbunden:


PIR  . . . . . PICO
VCC ---------- VSYS
OUT ---------- GP6
GND ---------- GND



Die Software


OPTIONEN des Pico W

WebMite MMBasic Version 5.07.08b2
OPTION AUTORUN 3
OPTION LIBRARY_FLASH_SIZE  14000
OPTION COLOURCODE ON
OPTION KEYBOARD GR
OPTION HEARTBEAT OFF
OPTION DISPLAY 50, 100
OPTION WIFI FritzBox, *********************
OPTION TELNET CONSOLE ON


Das Programm: motion.bas


' Sensor Garten (A)
OPTION EXPLICIT
DIM sensor As String = "Garten"
DIM mqttbroker As String = "192.168.178.54"
DIM ntpserver As String = "192.168.178.1"
DIM timezone As Integer = 2
SetPin gp6, din, PULLDOWN ' PIR sensor

On ERROR SKIP 3
WEB ntp timezone,ntpserver$
If MM.Errno Then WEB NTP timezone,ntpserver$
If MM.Errno Then Print "connection error" : CPU RESTART

Open "logfile.bas" For append As #1
  If Lof(#1) < 5 Then
    Print #1,  "New Logfile: "+Date$+" "+Time$
  EndIf
  If Lof(#1) > 20000 Then
    Close #1
    Rename "logfile.bas" As "logfile-old.bas"
    Open "logfile.bas" For append As #1
    Print #1, "New Logfile: "+Date$+" "+Time$
  EndIf
  Print #1, sensor$+": "+Date$+" "+Time$
Close #1

Sub ThereIsMotion()
  ' connect to MQTT broker (mosquitto) on a raspberry pi 4
  On ERROR SKIP 3
  WEB MQTT CONNECT mqttbroker$,1883,"anon","anon"
  WEB MQTT PUBLISH "motion",Chr$(34)+Date$+", "+Time$+", "+sensor$+Chr$(34)
  WEB MQTT CLOSE
  Print Date$,Time$,sensor$
End Sub

Do ' main loop
  WatchDog 60000 ' restart cpu if this line is not passed within 60 seconds.
  DoConnect ' see library
  If Pin(gp6) = 1 Then ' PIR sensor has detected a motion
    ThereIsMotion
  EndIf
  forcedreboot("02:00:05")
  Pause 1500 ' slow down
Loop


Hinweis: Das onboard Logfile ist nur dazu da, die Einschaltvorgänge zu protokollieren, nicht die Bewegungen. Diese werden zum MQTT Server gesendet.
Als NTP Server verwende ich meine FritzBox. Als MTTQ broker einen Raspberry Pi 4.


Die Library


Die Library ist ein WebMite Feature, welches die Programmierung eigener BASIC-Befehle gestattet und automatisch geladen wird. Diese "Autostart" Eigenschaft kann dafür genutzt werden den Pico sicher mit einem WLAN zu verbinden. Zusätzlich muss dem Pico über die OPTION WIFI "SSID","PASSWORT" mitgeteilt werden, mt welchem WLAN er sich verbinden soll. Dies muss nur einmal geschehen und wird bei folgenden Starts automatisch durchgeführt.


' library

Function st(t$) As integer
  st = Val(Mid$(t$,1,2))
End Function

Function mi(t$) As integer
  mi = Val(Mid$(t$,4,2))
End Function

Function se(t$) As integer
  se = Val(Mid$(t$,7,2))
End Function

Sub forcedreboot t$
  If st(t$) = st(Time$) And mi(t$) = mi(Time$) And Abs(se(Time$) - se(t$)) < 3 Then
    CPU restart
  EndIf
End Sub

Sub Connect
  Do While MM.Info(TCPIP STATUS) <> 3
    If Timer > 6000 Then CPU restart
  Loop
  Print "IP: ";MM.Info(ip address)
End Sub

Sub  DoConnect
 If MM.Info(TCPIP STATUS) <> 3 Then
    Connect
 EndIf
End Sub

DoConnect



Die Flashbelegung


> flash list
 Slot 1 in use: "'#A:/library.bas"  <- Quellcode der Library
 Slot 2 available
 Slot 3 in use: "'Sensor Garten (A)"  
 Slot 4 in use: Library <- aktive Library



Der MQTT CLient (IoT MQTT panel) auf meinem Android Handy



Das klappt via wireguard vpn von beliebigen Standorten ;)


Installation eines MQTT-Brokers auf einem Raspberry Pi 4


sudo apt update && sudo apt upgrade
sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable mosquitto.service
sudo nano /etc/mosquitto/mosquitto.conf

   diese zwei Zeilen  an das Ende anfügen:

   listener 1883
   allow_anonymous true

   save&exit with 'ctrl x' and 'y'

sudo systemctl restart mosquitto.service


Nicht vergessen den Firewall Port 1883 zu öffnen, falls eine Firewall auf dem MQTT Server läuft!


Das Handbuch zur Firmware und dem MMBASIC: https://geoffg.net/webmite.html
Bezug Hardware: Raspberry Pi Pico W , PIR Sensor


Viel Spaß!