Installationsprozess

  • Ich durfte gerade DoorPi komplett neu aufsetzen, drum war ich auf der Suche nach dem Installationsartikel. Der war leider nicht mehr verfügbar. Allerdings ist die momentane setup.py aus dem github Rep auch nicht mehr funktionstüchtig. Von d.h. hier mal ein paar Notizen dazu:


    Installation von DoorPi

    Zunächst besorgt euch das aktuelle Image von Raspian Buster Lite (https://www.raspberrypi.org/downloads/raspbian/) und packt es mit z.B. Etcher auf eure SD-Karte. Hier dann noch eine Datei "ssh" (ohne Endung) anlegen, falls ihr die Konfiguration im "Headless"-Betrieb vornehmen wollt. Mit Putty (o. anderem SSH-Client) einloggen und mit raspi-config die wichtigsten Einstellungen vornehmen. Dann kommt die eigtl. DoorPi-Installation.


    Euer System auf den aktuellen Stand bringen:

    Code
    1. sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

    Dann brauchen wir git zum clonen des Reps (hier Master branch)

    Code
    1. sudo apt-get install git
    2. git clone https://github.com/motom001/DoorPi.git -b master /tmp/DoorPi

    Für die Installation brauchen wir noch pip. Die Installation innerhalb von setup.py scheitert allerdings. Also holen wir uns eine aktuelle Version von get-pip.py und installieren es damit.

    Code
    1. curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    2. python get-pip.py

    In das DoorPi Verzeichnis wechseln:

    Code
    1. cd /tmp/DoorPi

    Jetzt müssen wir die setup.py modifizieren (Zeile 52) (entweder über SCP oder per nano/vi/etc.):

    Code
    1. from pip.req import parse_requirements

    ersetzen durch:

    Code
    1. try: # for pip >= 10
    2. from pip._internal.req import parse_requirements
    3. except ImportError: # for pip <= 9.0.3
    4. from pip.req import parse_requirements

    Damit sollte jetzt der Aufruf von setup.py funktionieren.

    Code
    1. sudo python setup.py install

    Jetzt sollte der Start von doorpi eigtl. bereits ebenfalls funktionieren:

    Code
    1. sudo doorpi_cli --trace

    Raus kommt ihr da mit [Strg]+[C]. Leider wird das python-daemon - Modul bei der Installation auch nicht mehr korrekt installiert, sodass ein Start als Service noch nicht möglich ist. Das korrigieren wir schnell:

    Code
    1. sudo pip install python-daemon


    Es fehlt noch Linphone damit auch das telefonieren klappt. PIP haben wir ja schon installiert, also:

    Code
    1. sudo pip install linphone4raspberry


    Jetzt bietet es sich noch - je nach Lokalisation des Projektes - an das Webinterface offline verfügbar zu machen:

    Code
    1. git clone https://github.com/motom001/DoorPiWeb.git /usr/local/etc/DoorPiWeb


    Abschließend starten wir DoorPi als Service und stellen sicher, dass das auch beim Systemstart passiert:

    Code
    1. sudo systemctl enable doorpi.service
    2. sudo systemctl start doorpi.service

    Das sollte jetzt eigtl. funktionieren. Ansonsten mal schauen, wass "journalctl -xe" euch noch zeigt.



    RTSP Server

    Das ist jetzt die Stelle, wo die meisten zu unterschiedlichen Paketen greifen. u.A. gibt es neben v4l2rtspserver (https://github.com/mpromonet/v4l2rtspserver.git) noch MotionEye, VLC, RPI-Webcam-Interface, gstreamer, ffmpeg und mjpeg-streamer als Möglichkeiten einen Video-Stream von der Kamera zu bekommen (falls ihr überhaupt das Raspberry Camera Modul nutzt). Unterschiede bestehen im Funktionsumfang, der Kompression des Streams und vor allem hinsichtlich der Performance. Generell ist der PI aber mit einem h264-Hardware-Encoder ausgestattet.


    Los geht's: Kamera-Treiber laden

    Code
    1. sudo modprobe -v bcm2835-v4l2

    v4l2rtspserver muss leider einmal selbst gebuildet werden, also brauchen wir cmake:

    Code
    1. sudo apt-get install cmake

    Weiter geht's mit dem Clonen des Reps und dem anschließenden build. Abschließend wird es noch installiert.

    Code
    1. git clone https://github.com/mpromonet/v4l2rtspserver.git /tmp/v4l2rtspserver
    2. cd /tmp/v4l2rtspserver
    3. cmake .
    4. make
    5. sudo make install

    v4l2rtspserver sollte sich selbst als Service registrieren ("sudo service --status-all" listet euch zur Kontrolle sowohl DoorPi als auch v4l2rtspserver-Services), muss allerdings noch aktiviert werden:

    Code
    1. sudo systemctl enable v4l2rtspserver

    Ansonsten kann man auch hierbei noch die Parameter verändern in "lib/systemd/system/v4l2rtspserver.service" unter ExecStart steht mit welchen Parametern der Server gestartet wird. Die PiCamera unterstützt folgende Auflösungen: https://picamera.readthedocs.io/en/release-1.12/fov.html, sodas z.B. folgendes gehen würde:

    Code
    1. ExecStart=/usr/local/bin/v4l2rtspserver -H 1944-W 2592 -F 15 /dev/video0

    Der Stream ist dann unter folgender Adresse erreichbar:

    Code
    1. rtsp://{IPAddressOfYourPI}:8554/unicast





    Evtl. formulier ich den Beitrag nochmal um, falls mir unterwegs noch mehr Stolpersteine begegnen ...

  • Lexikon ist noch nicht migriert in die neue Version - deshalb danke für Deine Hilfe.


    Ansatz für die Installation ist auch beim Test mit Travis (automatische Erstellung als Code-Test) zu finden:

    https://travis-ci.org/motom001/DoorPi


    z.B.: https://travis-ci.org/motom001/DoorPi/jobs/520705666

    als RAW-Log: https://api.travis-ci.org/v3/job/520705666/log.txt


    genutzt werden die Installscripte von hier:

    https://github.com/motom001/DoorPi/tree/master/.travis

  • dtp :
    Klasse Projekt! Respekt!
    Ganz so aufwendig möchte ich meine Haustürüberwachung nicht umsetzen.
    Kurze Umschreibung: auf meinem Iobroker ist die Haustürklingel schon smart vorhanden, jetzt soll über den GPIO-Fernzugriff das Kamerabild an die Fritz-Box angezeigt werden. Für eine Gegensprechanlage fehlt mir noch Lautsprecher und Micro, USB-Soundkarte für den PI ist vorhanden. Wer hat Tipp bezüglich der Audio Komponenten?

    In Deiner Anleitung würde ich noch hinzufügen das der erste Start von DoorPi mit

    Code
    1. sudo doorpi_cli --trace

    ausgeführt wird. Soweit bin ich jetzt und wie auch von Dir beschrieben wird die Fehlermeldung angezeigt, jedoch komme ich nicht auf das Webinterface da ein User mit PW abgefragt wird.
    Schlagt mich, aber wie lautet dieser? Pi und mein PW ist es nicht. Habe schon so ziemlich alles ausprobiert, komme an der Stelle nicht weiter.

  • Hallo,

    ich hänge mich mal da dran. Ich habe heute auf einem Testsystem ebenfalls mit Buster (PI4) ein neuen Doorpi aufgesetzt. Die Kommunikation mittels Telegram klappt. Jetzt komme ich zu dem eigentichen Problem: der Aufruf mailto aus Python wurde verändert.


    mailto: Bla@t-online.de, Betreff, Text_in_Mail, aktiv


    läßt die Fehlermeldung


    Traceback (most recent call last):

    File "/usr/local/lib/python2.7/dist-packages/doorpi/action/SingleActions/mailto.py", line 73, in fire_action_mail

    server.sendmail(smtp_from, smtp_tolist, msg.as_string())

    File "/usr/lib/python2.7/smtplib.py", line 748, in sendmail

    raise SMTPRecipientsRefused(senderrs)

    SMTPRecipientsRefused: {'Bla@t-online.de': (450, 'Requested mail action not taken: mailbox unavailable\nMail send limit exceeded.')}


    erscheinen. Die Syntax ist wohl: server.sendmail(smtp_from, smtp_tolist, msg.as_string()).


    Nur ich bekomme die Sysntax einfach nicht hin. Ich brauche mal eure Erfahrung. Ich habe die Befürchtung dass die Argumente von Doorpi nicht korrekt in Python übernommen werden, da ich unter Beteiligte in meinem Postfach immer meine Mailadresse stehen habe. Hat jemand schon ein ähnliches Problem gelöst?

    Vielleicht hast Du, dtp, eine Idee was falsch läuft?


    Gruß


    Chris

  • Wäre eigtl sinnvoller ein eigenes Topic dafür aufzumachen, weil ich denke, dass das mehr ein Problem deiner Parameter/Config ist. Ich hab es nicht ausprobiert aber mal in die entsprechende Action geschaut - https://github.com/motom001/Do…n/SingleActions/mailto.py. Wie sieht deine Config aus? Hast du den smtp-Server genauer definiert?


    https://docs.python.org/2/library/smtplib.html ist die Doc der verwendeten Bibliothek. Da siehst du, dass der Aufruf in DoorPi durchaus noch richtig ist:

    Python
    1. SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

    und der Fehler eher bei deinem SMTP-Server oder deiner entsprechenden DoorPi-Config liegt. Aus letzterer werden folgende Werte ausgelesen (falls ein dritte Wert in der Funktion steht ist dass der Standardwert):

    Python: mailto.py
    1. smtp_host = doorpi.DoorPi().config.get('SMTP', 'server', 'smtp.gmail.com')
    2. smtp_port = doorpi.DoorPi().config.get_int('SMTP', 'port', 465)
    3. smtp_user = doorpi.DoorPi().config.get('SMTP', 'username')
    4. smtp_password = doorpi.DoorPi().config.get('SMTP', 'password')
    5. smtp_from = doorpi.DoorPi().config.get('SMTP', 'from')
    6. smtp_use_tls = doorpi.DoorPi().config.get_boolean('SMTP', 'use_tls', False)
    7. smtp_use_ssl = doorpi.DoorPi().config.get_boolean('SMTP', 'use_ssl', True)
    8. smtp_need_login = doorpi.DoorPi().config.get_boolean('SMTP', 'need_login', True)

    In deiner DoorPi-Config sollte der SMTP-Server entsprechend definiert sein. (Hab es mal am Beispiel T-Online ausgefüllt, weil deine Mail daher stammte ...):

    Code
    1. [SMTP]
    2. server = securesmtp.t-online.de
    3. port = 995
    4. username = hansimaus
    5. password = Hansi12345
    6. from = hansi@t-online.de
    7. # Die zwei folgenden kannst du weglassen (Std.-Wert)
    8. use_ssl = True
    9. need_login = True
  • Hallo,

    danke für die Antwort.

    Ich habe einen Doorpi laufen, auf dem noch eine Nextcloud,etc läuft. Die Nextcloud mag sich aufgrund älterer libs nicht mehr updaten. Daher bin ich "gezwungen" upzudaten. Ausserdem gibt es Probleme mit dem mjpg-Streamer so das ich das RPi_Cam_Web_Interface nutze. Läuft einfach top. Snapshots, Streamen alles klappt so wie es soll.

    Meine funktionierende auf dem Altsystem config sieht so aus.

    ich bekomme jetzt im log Fehlermeldungen in der Zeile, also alle Zeilen, die mailto: beihalten.


    Code
    1. z.B. mailto:BLa@online.de,DoorPi-Tuer neu gestartet, neu gestartet,false


    Aber auch erst seit Buster. Es wird dann natürch keine Mail versandt. Jetzt ist die spannende Frage des Programmablaufes. Ich sende einen mailto Auftrag mit Parametern an Doorpi. Doorpi sendet es an sendmail und bekommt einen Error als Ergebnis zurück und trägt das in die log ein. Richtig? Dann könnte es sein, dass sendmail einen veränderten Aufruf hat.


    Und mit Python 2.xxx geht es auch schon zu Ende...


    Chris

  • Ok kannst du evtl. mal den Inhalt aus dem Log 1 zu 1 kopieren?


    Ich hab ja schon keine Ahnung von Python aber du scheinbar auch nicht :D

    Füge doch mal in der Zeile 41 in der mailto.py folgendes ein:

    Python: mailto.py
    1. server.set_debuglevel(1)

    Dann solltest du schonmal genauere Fehlermeldungen bekommen.


    Ansonsten einfach mal ne Python-Konsole öffnen und darin mal folgendes ausführen:

    Dabei dürfte dir dann auch eine Fehlermeldung entgegen kommen. Wie gesagt entspricht der Aufruf weiterhin dem in der Dokumentation...


    Dass DoorPi auf Python 2.7 stehen geblieben ist wurde ja mehrfach schon thematisiert. Du kannst dich ja an motom001 wenden, falls du die Portierung hinbekommst bzw soll die Grundstruktur ja geändert werden.

  • Hallo,

    ich habe heute den ganzen Tag mit dem "Fehler" verbracht. Nun, die Lösung ist ganz einfach. Vor allem: Es muss der Ausgangserver und ssl also port 465 sein.


    unter dem Rosa-Riesen

    [SMTP]

    server = securesmtp.t-online.de

    port = 465

    username = Bla@t-online.de

    password = DEIN_PASSWORT

    from = Bla@t-online.de

    need_login = True

    use_ssl = true


    unter 1+1

    [SMTP]

    server = smtp.1und1.de

    port = 465

    need_login = True

    use_ssl = true

    need_login = true

    username = Bla@online.de

    password = DEIN_PASSWORT

    from = BLa@online.de


    sollte immer klappen. Warum meine Produktivversion läuft, weiss ich nicht. Kommen auch nicht so viele Mails.


    Mir ist aber aufgefallen, dass ich nach dem Kalt-Start, bevor das Netzwerk hochgefahren ist, viele Fehlermeldungen bekomme aus dem Netzwerkbereich . Es liegt anscheinend an den PI4. Scheint schneller zu sein;). Ich werde jetzt in die Autostart für den DoorPi eine Zeitverzögerung von 1s einbauen.


    Und ja Du hast Recht, ich habe keine Ahnung von Python und wenig von Linux. Ich bin Steuerungtechniker und programmiere hauptsächlich Wago-Steuerungen mit Codesys. Neulich ist mir ein Wago-Controller mit Linux auf dem Schreibtisch gekommen. Da werde ich mit wohl einige Linux-Lehrgänge buchen müssen ;) Und von dem Rest habe ich zu wenig Ahnung um hier helfen zu können 8). Leider.

    Vielen Dank für deine Mühen

    Gruß


    Chris