HomeMatic CCU2 bei ELV bestellen

Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erkennen

User stellen ihre Haussteuerung vor

Werbung


Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erkennen

Beitragvon dtp » 17.04.2018, 17:11

Hallo,

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. Im Moment befindet sich das Ganze zwar noch in einer Betaphase, funktioniert aber schon so zuverlässig, dass ich euch das Projekt nicht vorenthalten möchte. Vielleicht findet sich ja noch der eine oder andere mit entsprechenden Optimierungsideen, insbesondere, wenn es um die Bewegungsdetektion geht.

Kern des Projekts bildet - wie gesagt - ein kleiner Raspberry Pi Zero WH, den man schon für unter 15,- € bekommt.

RaspiZeroCam_01.jpg

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. 8) )

RaspiZeroCam_02.jpg

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.

RaspiZeroCam_03.jpg

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
Zuletzt geändert von dtp am 23.04.2018, 13:12, insgesamt 5-mal geändert.
dtp
 
Beiträge: 4667
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

Installation der nötigen Software

Beitragvon dtp » 17.04.2018, 22:03

Die Installation der Software ist im Grunde genommen ziemlich einfach und wurde hier schon beschrieben. Der Vollständigkeit halber möchte ich das aber noch mal kurz wiederholen.

Vorbereitung des Raspberry Pi Zero

Zunächst sollte man sich Raspbian Stretch Lite herunterladen. Wählt man die zip-Datei, dann diese entpacken und das entpackte Verzeichnis 1 zu 1 auf eine µSD-Karte kopieren. 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.

Was die weiteren Einstellungen das Raspi (insb. Unterstützung der Deutschen Sprache und des Deutschen Tastaturlayouts) per raspi-config angeht, so kann man das hier und hier ganz gut nachlesen.

Zur Unterstützung des Kamera-Moduls muss schließlich noch die Kamera in raspi-config aktiviert werden.

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

Dann fügt man z.B. für die statische WLAN-Adresse "192.168.0.22" des Raspi und im Falle der Server-Adresse "192.168.0.1" des WLAN-Routers die folgenden Zeilen am Ende von "dhcpcd.conf" hinzu:

Code: Alles auswählen
interface wlan0
static ip_address=192.168.0.22/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1


Vermeiden eines Abbruchs der WLAN-Verbindung

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

Hinweis: Da dieses Paket bei Stretch Lite nicht enthalten ist, muss es auch nicht mit obigem Befehl entfernt werden. Vielleicht hilft die Info aber ja trotzdem mal jemandem weiter. 8)

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 Stretch Lite installieren zu können, muss zunächst git installiert werden:

Code: Alles auswählen
sudo apt-get install git

Anschließend kann mit der Befehlsfolge:

Code: Alles auswählen
sudo git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface
sudo ./install.sh

das eigentliche Interface installiert werden. Danach erfolgt dann automatisch die Abfrage sämtlicher Parameter.

RPI_Cam_Web_Interface_01.png
RPI_Cam_Web_Interface_01.png (20.33 KiB) 71-mal betrachtet

Standardmäßig ist als Cam subfolder "html" eingestellt. Ich habe auf dieses Unterverzeichnis verzichtet, da auch schon mal anderer Raspi so konfiguriert ist. Zudem verwende ich den Webport 8181 statt 80. Auch das ist eher dem anderen Raspi geschuldet, weil dort bereits der Port 80 belegt war.

Nach Abschluss der Konfiguration kann das Interface dann gestartet werden.

RPI_Cam_Web_Interface_02.png
RPI_Cam_Web_Interface_02.png (8.78 KiB) 71-mal betrachtet

Die nachträgliche Konfiguration des RPI_Cam_Web_Interface kann übrigens jederzeit mit dem Befehl

Code: Alles auswählen
./RPi_Cam_Web_Interface_Installer.sh install

ausgeführt werden. Im dann erscheinenden Fenster des Installers erfolgt unter Punkt x3 die weitere Konfiguration und unter Punkt x4 der Start des Interfaces.

Das Interface lässt sich übrigens später jederzeit durch Aufruf von

Code: Alles auswählen
./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.168.0.22:8181".

RPI_Cam_Web_Interface_03.png

Ein Tipp noch zum Abschluss: Gelegentlich kann es vorkommen, dass sich das RPi_Cam_Web_Interface nicht updaten lässt. Dann empfiehlt sich die Eingabe von

Code: Alles auswählen
cd RPi_Cam_Web_Interface
git reset --hard FETCH_HEAD

Im nächsten Abschnitt geht's dann um die Konfiguration und das Shell-Skript zum Senden der Push-Nachrichten.
Zuletzt geändert von dtp am 23.04.2018, 12:10, insgesamt 11-mal geändert.
dtp
 
Beiträge: 4667
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

Konfiguration

Beitragvon dtp » 17.04.2018, 22:04

Kamerainstellungen

Nach Aufruf des Web-Interfaces im Browser sollte zunächst die Kamerauflösung angepasst werden.

RPI_Cam_Web_Interface_03.png

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".

RPI_Cam_Web_Interface_05.png
RPI_Cam_Web_Interface_05.png (20.74 KiB) 34-mal betrachtet

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.

RPI_Cam_Web_Interface_04.png

Die Bedeutung der einzelnen Kommandos kann man unter "Command reference" nachlesen. Dabei lassen sich auch verschiedene Kommandos durch ein Simikolon getrennt 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.

RPI_Cam_Web_Interface_06a.png

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%f c%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. Ich bin da auch noch nicht ganz zufrieden mit den eingestellten Werten. Wenn ich z.B. nur die Klappe weit öffne, ohne dass etwas eingeworfen wird, gehen die Changes schon mal schnell auf über 300 hoch. Wird dagegen nur ein kleiner Gegenstand (z.B. Schlüssel) bei leicht geöffneter Klappe eingeschmissen, bleiben sie mitunter unter 200. Auch mit den "Delay Frames", "Change Frames" und "Still Frames" muss ich da noch einiges testen.

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.168.0.20 # IP-Adresse der CCU

# 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

if [ !$1 ] # Abfrage, ob Motion Detection Start ("$1 = 1") oder Stop ("$1 = 0") 
  then
  # HomeMatic CCU ISE_IDs
  HMiseid1=4203 # "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

  # Snapshot in Datei speichern
  cp /dev/shm/mjpeg/cam.jpg /var/www/media/Briefkasteninhalt.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

Der eigentliche Kern dieses Shell-Skripts sind die mit "curl" anfangenden Zeilen und der Befehl zum Speichern des Snapshots. Der Rest ist mehr oder weniger "nützliches Beiwerk". So schwer dürfte es aber nicht sein, das Skript auf das Wesentliche zu reduzieren. Ein weiteres Beispiel zum Senden von Snapshots per Telegram findet sich unter anderem auch hier.

Hinweis: Das Makro "motion_event.sh" wird bei jedem Start und Ende einer Bewegungserkennung aufgerufen. Will man es nur beim Start oder nur beim Ende ausgeführt haben, so kann man dies durch die Abfrage "$1 = 1" für den Start und "$1 = 0" für das Ende steuern. Da ich nur am Ende einer erkannten Bewegung ein Bild geschickt haben möchte, habe ich das obige Skript um die Abfrage

Code: Alles auswählen
if [ !$1 ] then ... fi

ergänzt.

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.168.0.22)
Code: Alles auswählen
sudo mkdir /home/pi/.ssh
sudo chmod -R 755 /home/pi/.ssh


CCU (IPv4: 192.168.0.20)
  1. Code: Alles auswählen
    mount -o remount,rw /
  2. Code: Alles auswählen
    ssh-keygen -b 2048 -t rsa
  3. Enter file in which to save the key (/root/.ssh/id_rsa): Return-Taste drücken
  4. Enter passphrase (empty for no passphrase): Return-Taste drücken
  5. Enter same passphrase again: Return-Taste drücken
  6. Code: Alles auswählen
    cat /root/.ssh/id_rsa.pub | ssh pi@192.168.0.22 'cat >>/home/pi/.ssh/authorized_keys'

Achtung: nach einem FW-Update der CCU gehen die rsa-Dateien im root-Verzeichnis der CCU in der Regel verloren (dies ist bei der Raspberrymatic nicht der Fall). Daher empfiehlt sich, das von uwe111 erzeugte WebUI-Addon ssh-keygen auf der CCU zu installieren. Damit sind die Dateien dann sicher.

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" im Verzeichnis "/dev/shm/mjpeg" des Raspi Zero 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.168.0.22"; ! 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 > /dev/shm/mjpeg/user_annotate.txt'");


Hier nun ein Beispiel für ein WebUI-Programm samt zweier Skripte, die jeweils beim Öffnen der Briefkasten-Klappe (Post-Einwurf) und der -Tür (Post-Entnahme) aufgerufen werden. Als Trigger dienen virtuelle Tasten (VT), weil die eigentliche Auslösung durch den DoorPi erfolgt, der bekanntlich selbst keine HM-Komponente ist. Ich möchte an dieser Stelle jedoch nicht zu sehr ins Detail gehen, da das den Rahmen dieser Projektbeschreibung sprengen würde. Der geneigte Leser sei auf meine Signatur und das darin verlinkte DoorPi-Projekt verwiesen. 8)

EG Briefkasten PRG Post.png

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, 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.168.0.22";

! #####################################################################
! ##### 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("Gasverbrauch aktueller Tag"); svObject.Internal(false); svObject.Visible(true);
  svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); 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).ToString(0);

! +++++ Erzeugen der Nachricht und Einwürfe in Datei auf LBoxPiZero schreiben +++++
message = "<font color=orange>Briefkasten leeren!</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 > /dev/shm/mjpeg/user_annotate.txt'");
}
if(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 > /dev/shm/mjpeg/user_annotate.txt'");
}

! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();

WebUI-Skript für das Leeren des Briefkastens

Code: Alles auswählen
! Meldung Briefkasten geleert
! Version 3.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 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.168.0.22";

! #####################################################################
! ##### 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 > /dev/shm/mjpeg/user_annotate.txt'");

! +++++ Erzeugen der Nachricht +++++
message = "Briefkasten geleert.";

! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();


Empfang der Push-Nachrichten

Die per Pushover gesendeten und auf dem iPhone empfangenen Nachrichten sehen dann so aus:

Pushover_Briefkasteninhalt.png

Wie man sieht, werden zur Zeit mitunter noch zwei Bilder hintereinander gesendet. Da muss ich wohl noch mit den Einstellungen für die Frames und die Changes spielen. Aber im Prinzip funktioniert das Ganze schon ganz gut.

Ich halte Euch auf dem Laufenden. Aber ebenso wäre ich natürlich auch für Tipps von eurer Seite dankbar.

Bis dann,

Thorsten
Zuletzt geändert von dtp am 26.04.2018, 11:33, insgesamt 32-mal geändert.
dtp
 
Beiträge: 4667
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erke

Beitragvon stan23 » 18.04.2018, 08:49

Hübsch! Wird da auch gleich der Adressat per OCR ausgelesen und dann entsprechend deine Frau oder du benachrichtigt? :)
Viele Grüße
Marco

RaspberryMatic 2.29.18.20170731
~60 Geräte (HM, HmIP, HMW, HBW)
stan23
 
Beiträge: 122
Registriert: 13.12.2016, 22:14
Wohnort: Altmühltal


Re: Posteinwürfe mit Raspberry Pi Zero WH und IR-Kamera erke

Beitragvon my2005 » 22.04.2018, 23:26

Sehr cooles Projekt.

Mit dem kleinen PI inkl. Cam kann man noch viele weitere interessante Projekte machen.
my2005
 
Beiträge: 41
Registriert: 15.11.2016, 16:59


Zurück zu Projektvorstellungen

Wer ist online?

Mitglieder in diesem Forum: Google Feedfetcher und 7 Gäste







© homematic-forum.de & Lizenzgebern. Alle Rechte vorbehalten. Alle Bilder & Texte auf dieser Seite sind Eigentum
der jeweiligen Besitzer und dürfen ohne deren Einwilligung weder kopiert noch sonstwie weiter verwendet werden.