Howto - Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erkennen
Moderator: Co-Administratoren
-
- Beiträge: 10679
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 329 Mal
- Danksagung erhalten: 503 Mal
Howto - Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erkennen
angeregt durch diesen Thread möchte ich euch gerne ein kleines Projekt vorstellen, mit dem ich Briefkasteneinwürfe über einen Raspberry Pi Zero WH samt Infrarot-Kamera detektiere und mir dann eine Push-Nachricht samt Bild über Pushover und/oder Telegram zusenden lasse.
Kern des Projekts bildet - wie gesagt - ein kleiner Raspberry Pi Zero WH, den man schon für unter 15,- € bekommt.
An dem Raspi ist eine 5MPixel-Kamera inkl. zweier IR-Sendedioden per Flachbandkabel angeschlossen. Geschützt ist der Raspi durch ein kleines Kunststoffgehäuse, das es für kleines Geld mit sehr nützlichem Zubehör gibt. Inklusive Micro-USB-Kabel zur Energieversorgung und 16GB-µSD-Karte kostet das gesamte Setup so gerade mal knappe 60,- €.
Meinen Briefkasten hatte ich ja schon im Rahmen des DoorPi-Projekts vorgestellt. Beide Projekte sind jedoch nahezu unabhängig voneinander. Auch die CCU und die HomeMatic werden eher nicht benötigt. Trotzdem nutze ich ein paar wenige Informationen der HomeMatic und des DoorPi auch hier. Aber dazu später mehr.
Da unser Briefkasten zweigeteilt ist, habe ich den Raspi Zero in das obere Servicefach eingebaut, wo sich auch schon der Raspi 3 für den DoorPi befindet (keine Sorge; für dieses Projekt wird alles, was blau markiert ist, nicht benötigt. )
Versorgt werden beide Raspis über ein 24-V-Netzteil (2,5 A) von Mean Well, das im Verteilerschrank im HWR sitzt. Ich hatte es zunächst mit einem 5-V-Netzteil (3 A) versucht, aber da gab es dann leider ein paar Störungen auf die Kamera des Raspi Zero, so dass deren Bild zum Flackern neigte. Eine galvanische Trennung über einen DC-Buck-Converter brachte dann zwar kurzzeitig Besserung, nur leider war damit dann die Spannung für den Raspi Zero zu gering, so dass sich dessen Kameramodul immer wieder ausschaltete. Also wechselte ich zum 24-V-Netzteil und schloss beide Raspis an den 5-Volt-Ausgang des DC-Buck-Converters. Nun ist alles gut.
Übrigens kann ich jederzeit die Masseverbindung zwischen 24-V-Netzteil und DC-Buck-Converter über einen 1-Kanal-Funk-Schaltaktor, HM-LC-Sw1-Ba-PCB, unterbrechen, um die Raspis ferngesteuert neu zu starten. Das ist insbesondere deshalb nötig, weil beide Raspis nur per WLAN zu erreichen sind.
Das untere Fach des Briefkasten dient zum Einwerfen der Post.
Hier habe ich die Kamera derart mit Schrauben auf einem kleinen Kunststoffsockel montiert, dass sie auf den Boden des Faches gerichtet ist. Mit dem Fisheye-Objektiv wird ungefähr der grau markierte Bereich (ca. 220°) abgedeckt. Die beiden IR-LEDs strahlen den Briefkasten im Dunkeln sehr gut aus. Um Reflexionen am Boden des Briefkastenfaches zu reduzieren, habe ich dort zwei Papieretiketten aufgeklebt. Mit Hilfe eines Multitools wurde ein kleiner Schlitz zwischen den beiden Briefkastenfächern für das Flachbandkabel gesägt.
Das war's auch schon von der Hardware-Seite. Im nächsten Beitrag geht's dann mit der Software weiter.
Bis dann,
Thorsten
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 10679
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 329 Mal
- Danksagung erhalten: 503 Mal
Installation der nötigen Software
Hinweis: Ich hatte irgendwann Probleme nach Updates von Raspbian Jessie Lite bzw. Stretch Lite und des RPi_Cam_Web_Interfaces, weil die aktuelle GLIBC nicht mehr gefunden werden konnte. Daher habe ich auf Raspbian Buster Lite gewechselt. Damit läuft alles sauber und problemlos.
Vorbereitung des Raspberry Pi Zero
Zunächst sollte man sich Raspbian Buster Lite herunterladen. Wählt man die zip-Datei, dann diese entpacken und das Image z.B. mit dem Win32DiskImager auf eine µSD-Karte installieren. Danach die Karte in den Raspi stecken und ihn mit Strom versorgen. Hat man sich das oben von mir erwähnte Gehäuse zugelegt, dann verfügt man bereits über den erforderlichen HDMI-Adpater, um sich den Output am Bildschirm anschauen zu können. Zudem sollte man den Raspi noch mit einer Tastatur und ggf. mit einer Maus per USB verbinden. Auch hier ist in der Regel ein Adapter von USB auf Micro-USB erforderlich.
Nach dem ersten Booten des Raspis loggt man sich erstmalig mit dem User "pi" und dem Passwort "raspberry" (Achtung: die Tastatur dürfte noch auf Englisch stehen, so dass das Y auf der Z-Taste liegt) ein. Anschließend ruft man die Konfiguration mit
Code: Alles auswählen
sudo raspi-config
- Change User Password -> Zur Änderung des Standardpassworts "raspberry" für den User pi.
- Network Options -> Zum Einstellen des Hostnamens (z.B. bei mir "LBoxPi"), der SSID des eigenen Routers und des WLAN-Passworts, falls gewünscht.
- Localisation Options -> Zum Ändern des WiFi-Lands (z.B. DE), der Zeitzone (z.B. Europa, Berlin) und des Keyboard-Layouts (alle drei de_DE-Optionen aus- und en abwählen; danach de_DE.UTF-8 und die verwendet Tastatur mit den Standardeinstellungen für Deutsch übernhemen).
- Interfacing Options -> Zur Aktivierung insbesondere des Kamera-Moduls und der Secure Shell (SSH).
Vergeben einer statischen IP-Adresse für die WLAN-Verbindung
Ich würde grundsätzlich empfehlen, statische IP-Adressen für Geräte zu vergeben, die innerhalb des WLANs von anderen Geräten häufig angesprochen werden müssen. Dies ist auch bei DHCP-Betrieb möglich, wobei dann eine IP-Adresse außerhalb des DHCP-Bereichs gewählt werden sollte.
Die Einrichtung ist z.B. hier (Variante 2 wählen) sehr gut beschrieben.
Zur statischen IPv4-Konfiguration öffnet man die Datei "/etc/dhcpcd.conf" mit dem Befehl
Code: Alles auswählen
sudo nano /etc/dhcpcd.conf
Code: Alles auswählen
interface wlan0
static ip_address=192.xxx.xxx.xxx/24
static routers=192.xxx.xxx.1
static domain_name_servers=192.xxx.xxx.1
Ich hatte häufiger das Problem, dass mein Raspi irgendwann nicht mehr per WLAN erreichbar war. Der Grund dafür waren die Energiespareinstellungen für das WLAN-Modul. Mit folgendem Befehl lässt sich das Problem sehr einfach vermeiden:
Code: Alles auswählen
sudo apt-get remove ifplugd
RPi_Cam_Web_Interface
Aus meiner Sicht ist das RPI_Cam_Web_Interface ein extrem flexibles Tool zur Steuerung von Kameras und zur Bewegungserkennung per Raspi. Um das RPI_Cam_Web_Interface unter Raspbian Buster Lite installieren zu können, muss zunächst git installiert werden:
Code: Alles auswählen
sudo apt-get install git
Code: Alles auswählen
sudo git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface
sudo ./install.sh
Standardmäßig ist als Cam subfolder "html" eingestellt. Ich habe auf dieses Unterverzeichnis verzichtet, da auch schon mein anderer Raspi so konfiguriert ist. Wer es bei "html" belässt, muss dies auch entsprechend für das Verzeichnis der Datei motion_event.sh berücksichtigen (dazu später mehr). Zudem verwende ich den Webport 8181 statt 80. Auch das ist eher dem anderen Raspi geschuldet, weil dort bereits der Port 80 belegt war.
Raspbian Buster findet nach dem erstmaligen Aufruf nicht alle Pakete.
Daher ist nach dem Drücken auf den OK-Button vermutlich erst mal ein
Code: Alles auswählen
sudo apt-get update
Code: Alles auswählen
sudo ./install.sh
Das Interface lässt sich übrigens später jederzeit durch Aufruf von
Code: Alles auswählen
sudo ./install.sh
im Verzeichnis "/RPi_Cam_Web_Interface" öffnen.
Der eigentliche Aufruf des Web-Interfaces sowie dessen Konfiguration und die der Bewegungserkennung erfolgt durch Eingabe der IP-Adresse des Raspi in einem Browser-Fenster. Wurde ein Port vergeben, der nicht dem Standard-Port 80 entspricht, muss auch dieser angegeben werden, also z.B. "http://192.xxx.xxx.xxx:8181".
Im nächsten Abschnitt geht's dann um die Konfiguration und das Shell-Skript zum Senden der Push-Nachrichten.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 10679
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 329 Mal
- Danksagung erhalten: 503 Mal
Konfiguration
Nach Aufruf des Web-Interfaces im Browser sollte zunächst die Kamerauflösung angepasst werden.
Für die Fisheye-Kamera habe ich die Auflösung 533 x 300 (entspricht 16:9) gewählt. Es macht aus meiner Sicht keinen großen Sinn, die Auflösung deutlich höher zu wählen, weil man dadurch nur die Übertragung der Bilder verlangsamt, ohne ein Mehr an Informationen zu erhalten (die Bilder sind dafür nicht scharf genug).
Unter "Annotation" kann man sich einen Einblendtext konfigurieren. Mit "%D.%M.%Y %h:%m:%s" lasse ich mir z.B. Datum und Uhrzeit anzeigen. Gerade die Sekunden sind oftmals sehr hilfreich, um die Synchronizität mit anderen Auslösern überprüfen zu können und um im Videobild leichter erkennen zu können, dass die Kamera funktioniert.
Mit %a kann man sich noch einen beliebigen Text einblenden lassen, der in der Datei "dev/shm/mjpeg/user_annotate.txt" enthalten ist. Wie man diese Datei z.B. über die CCU beschreiben kann, werde ich später noch beschreiben. Nur soviel; ich lasse mir da die Anzahl der Briefkasteneinwürfe, die bei mir per DoorPi und CCU gezählt werden, sowie die Leerung des Briefkastens einblenden. Über "Annotation size", "Custom text color" und "Custom background color" kann man sich noch die Schriftgröße sowie die Text- und die Hintergrundfarbe einstellen. Bei "Custom text color" und "Custom background color" nicht vergessen, das Auswahlmenü auf "Enabled" zu setzen; und immer, wenn vorhanden, mit "OK" zu bestätigen.
Da für das vorliegende Projekt keine Videoaufzeichnung des Briefkastens erforderlich ist, wir aber gerne ein Standbild per Telegram oder Pushover bei einer detektierten Bewegung erhalten möchten, setzen wir im Hauptbildschirm unter "Camera Settings" den "Motion detect mode" auf "Monitor".
Sollte das Bild in einer ungünstigen Position angezeigt werden, so kann man es unter "Rotation" sehr einfach drehen.
Bewegungserkennung
Damit nun die Bewegungserkennung bei jedem Start des Raspi Zero automatisch neu gestartet wird , trägt man im Scheduler nach Klick auf den Button "Edit schedule settings" in der Period "AllDay" unter "Period Start" "md 1" ein.
Die Bedeutung der einzelnen Befehle kann man unter "Command reference" nachlesen. Dabei lassen sich auch verschiedene Befehle durch getrennt durch jeweils ein Simikolon verknüpfen.
EDIT: Tests haben ergeben, dass der Befehl "im" in "Motion Start" nicht für das Triggern des Shellskripts notwendig ist. Da direkt in "motion_event.sh" ein Snapshot erzeugt wird, kann man "im" komplett weglassen.
Schließlich werden die Einstellungen mit Klick auf den Button "Save Settings" gespeichert. Mit Klick auf "< Back" in der schwarzen Statutsleiste kommt man wieder zurück zum Hauptbildschirm.
Danach können unter "Motion Settings" die Einstellungen für die eigentliche Bewegungserkennung vorgenommen werden. Jedes Mal, wenn nun eine Bewegung erkannt wird, wird automatisch das Shell-Skript "motion_event.sh" im Verzeichnis "/var/www/macros" ausgeführt.
Hinweis: Wer es bei der Konfiguration unter "xCam" bei "html" belassen hat, der muss die Datei "motion_event.sh" im Verzeichnis "/var/www/html/macros" ablegen.
Um den Einfluss der Bewegung besser erkennen zu können, empfiehlt sich, zumindest temporär in die Zeile "Annotation" unter "Camera Settings" den Zusatz "f%fc%c" hinzuzufügen. %f zeigt dann die Frames an, die jeweils um eins hochgezählt werden, wenn die mit %c angezeigten Changes den unter "Threshold" angegeben Wert erreicht haben. Da muss man etwas spielen, um die für sich optimalen Werte zu finden. Bei mir haben sich bisher die folgenden Werte als recht praktikabel erwiesen:
Threshold: 300
Delay Frames to detect: 10
Change Frames to start: 20
Still Frames to stop: 200
Wenn nun die mit %f angezeigte Anzahl der "Change Frames" erreicht wurde, kommt es zur Auslösung der Datei "motion_event.sh". In dieser habe ich mir das Senden eines Snapshots per Telegram oder Pushover (je nachdem, was ich für das zPNP auf der CCU eingestellt habe) konfiguriert.
"/var/www/macros/motion_event.sh"
Code: Alles auswählen
#!/bin/bash
CCU_IP=192.xxx.xxx.xxx # IP-Adresse der CCU
LBoxPiZero_IP=192.xxx.xxx.xxx # IP-Adresse des LBoxPiZero
# Telegram Keys
TgHMinfo=xxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Telegram Bot Token "HomeMatic Info" Benutzer 1
TgChatId1=-xxxxxxxx # Telegram Chat-ID Benutzer 1
TgChatId2= # Telegram Chat-ID Benutzer 2
# Pushover Keys
PoHMinfo=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Token "HomeMatic Info"
PoUser1=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx # API-Key Benutzer 1
PoUser2= # API-Key Benutzer 2
# HomeMatic CCU ISE_IDs
HMiseid1=xxxx # "CCU SV Push Dienst" 0(aus) 1(alle) 2(Pushover) 3(Telegram)
# CCU-Systemvariable "CCU SV Push Dienst" auslesen
service=$(curl -s -k "http://${CCU_IP}:8181/rega.exe?x=dom.GetObject(${HMiseid1}).Value()")
service=${service##*<x>}
service=${service%%</x>*}
# echo $service
if [ $1 -eq 0 ] # Abfrage, ob Ende der Bewegungserkennung
then
# Snapshot in Datei speichern
wget -O /var/www/media/Briefkasteninhalt.jpg http://${LBoxPiZero_IP}:8181/cam.jpg
# Push-Nachricht senden
if [ $service -eq 3 -o $service -eq 1 ] # Telegram
then
if [ -n "$TgChatId1" ] # Benutzer 1
then
curl -s -k "https://api.telegram.org/bot${TgHMinfo}/sendPhoto" -F chat_id=$TgChatId1 -F disable_notification=1 -F photo="@/var/www/media/Briefkasteninhalt.jpg"
fi
if [ -n "$TgChatId2" ] # Benutzer 2
then
curl -s -k "https://api.telegram.org/bot${TgHMinfo}/sendPhoto" -F chat_id=$TgChatId2 -F disable_notification=1 -F photo="@/var/www/media/Briefkasteninhalt.jpg"
fi
elif [ $service -eq 2 -o $service -eq 1 ] # Pushover
then
if [ -n "$PoUser1" ] # Benutzer 1
then
curl -s -k -F token=$PoHMinfo -F user=$PoUser1 -F message="Briefkasteninhalt" -F attachment="@/var/www/media/Briefkasteninhalt.jpg" -F priority=-1 -F sound=none -F html=1 "https://api.pushover.net/1/messages.json"
fi
if [ -n "$PoUser2" ] # Benutzer 2
then
curl -s -k -F token=$PoHMinfo -F user=$PoUser2 -F message="Briefkasteninhalt" -F attachment="@/var/www/media/Briefkasteninhalt.jpg" -F priority=-1 -F sound=none -F html=1 "https://api.pushover.net/1/messages.json"
fi
fi
fi
exit 0
Das Makro "motion_event.sh" wird normalerweise bei jedem Start und bei jedem Ende einer erkannten Bewegung aufgerufen. Für die Meldung der Briefkasteneinwürfe ist das jedoch eher ungünstig. Da ist es aus meiner Sicht besser, wenn das Skript nur nach Beendigung der Bewegung ausgeführt wird. Dies erreicht man durch die folgende Abfrage im obigen Shell-Skript:
Code: Alles auswählen
if [ $1 -eq 0 ] then ... fi
Code: Alles auswählen
sudo chmod -R 755 /var/www/macros/motion_event.sh
Erzeugen von Bemerkungen (Annotations) mittels CCU
Um von der CCU aus Dateien auf dem Raspi Zero schreiben und verändern zu können, sind zunächst folgende Schritte auf dem Raspi Zero und der CCU per PuTTY, Termius oder einem anderen Terminal-Programm auszuführen:
Raspi Zero (IPv4: 192.xxx.xxx.xxx)
Code: Alles auswählen
sudo mkdir /home/pi/.ssh
sudo chmod -R 777 /home/pi/.ssh
CCU (IPv4: 192.xxx.xxx.xxx)
- Bemerkung: nicht für CCU3 erforderlich
Code: Alles auswählen
mount -o remount,rw /
-
Code: Alles auswählen
ssh-keygen -b 2048 -t rsa
- Enter file in which to save the key (/root/.ssh/id_rsa): Return-Taste drücken
- Enter passphrase (empty for no passphrase): Return-Taste drücken
- Enter same passphrase again: Return-Taste drücken
-
Code: Alles auswählen
ssh-copy-id 'pi@192.xxx.xxx.xxx'
Raspi Zero (IPv4: 192.xxx.xxx.xxx)
Wichtig: Die Schreibrechte des Ordners ".ssh" müssen abschließend auf den Eigentümer beschränkt sein (755 oder 700). Ansonsten wird immer wieder eine Authentifizierung verlangt und das automatische Einwählen der CCU auf dem Raspi schlägt fehl.
Code: Alles auswählen
sudo chmod -R 755 /home/pi/.ssh
Code: Alles auswählen
sudo nano /home/pi/RPi_Cam_Web_Interface/user_annotate.txt
Code: Alles auswählen
sudo chmod 666 /home/pi/RPi_Cam_Web_Interface/user_annotate.txt
Code: Alles auswählen
sudo nano /etc/raspimjpeg
Code: Alles auswählen
user_annotate /dev/shm/mjpeg/user_annotate.txt
Code: Alles auswählen
user_annotate /home/pi/RPi_Cam_Web_Interface/user_annotate.txt
Code: Alles auswählen
sudo reboot
Mit dem nachfolgenden Skript-Schnipsel der CCU lassen sich nun bei jedem Aufruf die Einwürfe um eins hoch zählen und in die Datei "user_annotate.txt" schreiben.
Code: Alles auswählen
string svMailCount = "EG Briefkasten SV Einwürfe"; ! Systemvariablen-Name (Typ Zahl) für die Anzahl der Einwürfe
string login = "pi@192.xxx.xxx.xxx"; ! Einwahldaten des LBoxPiZero
integer inserts; ! Anzahl der Einwürfe
inserts = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svMailCount)).Value();
inserts = inserts + 1;
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svMailCount)).State(inserts);
(dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("echo -n "#inserts#" Einwurf | ssh "#login#" 'cat > /home/pi/RPi_Cam_Web_Interface/user_annotate.txt");
WebUI-Skript zum Zählen der Briefkasteneinwürfe
Code: Alles auswählen
! Briefkasten-Einwürfe um Eins erhöhen und Meldung Briefkasten leeren
! Version 3.0.5, Autor: dtp
! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svMailCount = "EG Briefkasten SV Einwürfe"; ! Anzahl der Einwürfe, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional
! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch
! Einwahldaten des LBoxPiZero
string login = "pi@192.xxx.xxx.xxx";
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
! +++++ Variablendeklaration +++++
string message;
integer inserts;
object svObject; object svObjectList;
! +++++ Systemvariablen erzeugen bzw. falls vorhanden, auslesen +++++
if(!svMailCount){svMailCount = "EG Briefkasten SV Einwürfe";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svMailCount);
if(!svObject){
svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
svObject.Name(svMailCount); svObject.DPInfo("Anzahl der Briefkasteneinwürfe"); svObject.Internal(false); svObject.Visible(true);
svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit(""); svObject.ValueMin(0); svObject.ValueMax(65000); dom.RTUpdate(true);
}
! +++++ Setzen der Priorität für die Push-Nachricht +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("0");
! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("intermission");}
! +++++ Anzahl Einwürfe hochzählen +++++
inserts = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svMailCount)).Value().ToInteger();
inserts = inserts + 1;
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svMailCount)).State(inserts);
! +++++ Erzeugen der Nachricht und Einwürfe in Datei auf LBoxPiZero schreiben +++++
message = "<font color=royalblue>Briefkasten leeren!\n</font> ";
if(inserts == 1){
message = message#"1 Einwurf.";
(dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("echo -n "#inserts#" Einwurf | ssh "#login#" 'cat > /home/pi/RPi_Cam_Web_Interface/user_annotate.txt'");
}
elseif(inserts > 1){
message = message#inserts#" Einwürfe.";
(dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("echo -n "#inserts#" Einwuerfe | ssh "#login#" 'cat > /home/pi/RPi_Cam_Web_Interface/user_annotate.txt'");
}
! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Code: Alles auswählen
! Meldung Briefkasten geleert
! Version 3.0.3, Autor: dtp
! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional
! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch
! Einwahldaten des LBoxPiZero
string login = "pi@192.xxx.xxx.xxx";
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
! +++++ Variablendeklaration +++++
string message;
! +++++ Setzen der Priorität für die Push-Nachricht +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("-2");
! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("gamelan");}
! ++++ Anzeigetext für Kamera LBoxPiZero auf "geleert" setzen +++++
(dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("echo -n geleert | ssh "#login#" 'cat > /home/pi/RPi_Cam_Web_Interface/user_annotate.txt'");
! +++++ Erzeugen der Nachricht +++++
message = "<font color=yellowgreen>Briefkasten geleert.</font>";
! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Code: Alles auswählen
! Meldung Briefkasten leeren
! Version 1.0, Autor: dtp
! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svMailCount = "EG Briefkasten SV Einwürfe"; ! Anzahl der Einwürfe, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional
! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
! +++++ Variablendeklaration +++++
string message;
integer inserts;
object svObject; object svObjectList;
! +++++ Systemvariablen erzeugen bzw. falls vorhanden, auslesen +++++
if(!svMailCount){svMailCount = "EG Briefkasten SV Einwürfe";}
svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svMailCount);
if(!svObject){
svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID());
svObject.Name(svMailCount); svObject.DPInfo("Anzahl der Briefkasteneinwürfe"); svObject.Internal(false); svObject.Visible(true);
svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.ValueUnit(""); svObject.ValueMin(0); svObject.ValueMax(65000); dom.RTUpdate(true);
}
! +++++ Setzen der Priorität für die Push-Nachricht +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("0");
! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("intermission");}
! +++++ Anzahl Einwürfe +++++
inserts = (dom.GetObject(ID_SYSTEM_VARIABLES).Get(svMailCount)).Value().ToInteger();
! +++++ Erzeugen der Nachricht und Einwürfe in Datei auf LBoxPiZero schreiben +++++
message = "<font color=royalblue>Briefkasten leeren!\n</font> ";
if(inserts == 1){message = message#"1 Einwurf.";}
elseif(inserts > 1){message = message#inserts#" Einwürfe.";}
! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Die per Pushover gesendeten und auf dem iPhone empfangenen Nachrichten sehen dann so aus:
Mit Telegram geht es aber genau so. Hier mal ein Screenshot der Telegram App unter Windows 10:
Update des RPi_Cam_Web_Interfaces
Zum Updaten des RPi_Cam_Web_Interfaces zunächst einfach die folgenden Schritte durchführen und die dann erscheinenden Fenster jeweils mit OK bestätigten.
Code: Alles auswählen
cd /RPi_Cam_Web_Interface
sudo ./update.sh
Im Anschluss daran muss die Datei "user_annotate.txt" im Verzeichnis "/dev/shm/mjpeg" mit
Code: Alles auswählen
sudo nano /etc/raspimjpeg
Code: Alles auswählen
user_annotate /dev/shm/mjpeg/user_annotate.txt
Code: Alles auswählen
user_annotate /home/pi/RPi_Cam_Web_Interface/user_annotate.txt
Code: Alles auswählen
sudo reboot
Bis dann,
Thorsten
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
- stan23
- Beiträge: 2051
- Registriert: 13.12.2016, 21:14
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Altmühltal
- Hat sich bedankt: 594 Mal
- Danksagung erhalten: 342 Mal
- Kontaktdaten:
Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erke
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
-
- Beiträge: 10679
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 329 Mal
- Danksagung erhalten: 503 Mal
Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erke
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erke
Mit dem kleinen PI inkl. Cam kann man noch viele weitere interessante Projekte machen.
-
- Beiträge: 10679
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 329 Mal
- Danksagung erhalten: 503 Mal
Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erke
Bis dann,
Thorsten
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 229
- Registriert: 13.06.2016, 19:02
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 2 Mal
Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erkennen
Bin dieses Jahr noch zu nix gekommen. DoorPI Prototyp fährt hier auf dem Schreibtisch rum und verstaubt.
Gruß,
Oli
-
- Beiträge: 10679
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 329 Mal
- Danksagung erhalten: 503 Mal
Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erkennen
Danke Oli,
aber sag das lieber meiner Frau. Die hält mich für komplett bekloppt.
Gruß,
Thorsten
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 507
- Registriert: 26.10.2016, 16:08
- System: CCU
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 15 Mal
Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erkennen
ich nutze dein Programm jetzt auch für die Briefkasteneinwürfe. Danke dafür schon mal
Nur halt nicht mit Kamera, sondern nur einfach mit TFK's.
Funktioniert einwandfrei (Daumen hoch), habe nur 2 Sachen als kleinen Hinweis für dich....
Code: Alles auswählen
svObject.Name(svMailCount); svObject.DPInfo("Gasverbrauch aktueller Tag");
Und...
Code: Alles auswählen
message = "<font color=royalblue>Briefkasten leeren!\n</font> ";
Code: Alles auswählen
message = "<font color=yellowgreen>Briefkasten geleert.</font>";
Ich habe für royalblue = #4169e1 und für yellowgreen = #9acd32 genommen.
Mach weiter so und lass dir nix von deiner Frau einreden
Gruß Tino.