Daten- u. Befehlsübertragung zwischen 2 Raspberry

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo liebe Forengemeinschaft,

    ich habe mich hier vorab im Forum schon umgesehen und auch Ähnliches zu meinem Anliegen gefunden. Leider reichen meine Kenntnisse aber immer noch nicht aus, um diese für mich "anzupassen", sodass ich hiermit zu Nachfolgendem um eure Hilfe bitten möchte:

    Auf einem Raspberry ist zwecks "Gartenüberwachung" eine einfache USB-Webcam angeschlossen. Zur Bewegungserkennung, sowie zur Speicherung von Bildern / Videos auf einen USB-Stick dient das Programm "Motion". Das funktioniert einwandfrei. Zudem besizt "Motion" eine Ereignissauswertung, welche ich ebenfalls nutze, indem ich per Funk eine Funksteckdose (Lampe) schalte. Doch genau das funktioniert aufgrund der Sendeleistung und der Blechgarage nun nicht zufriedenstellend bis gar nicht.
    Da die Garage einen Elektroanschluss besitzt, und ich hier schon erfolgreich Powerlines ausprobiert habe, frage ich mich, ob man damit und 2 Raspis nicht größere Entferungen überbrücken könnte. Konkret sollte auf dem 1. Raspi "Motion" bleiben, welcher dann die Ereignisauswertung in Form eines Funkbefehls (z.B. sudo send 11011 1 1) oder einen Befehl zum Schalten eines GPIOs (gpio write) an den 2. Raspi per Netzwerk schickt. Wie erwähnt, weiß ich absolut nicht, wie ich man diese Ereignisauswertung/Befehl von einem Pi auf einen anderen übertragen kann, denn 2 Raspi bedeuten ja auch 2 Netzwerkadressen.

    Danke vorab

    Meisengeier

    Einmal editiert, zuletzt von Meisengeier (24. April 2016 um 11:44)

  • Daten- u. Befehlsübertragung zwischen 2 Raspberry? Schau mal ob du hier fündig wirst!

  • [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> welcher dann die Ereignisauswertung in Form eines Funk[/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]befehls (z.B. sudo send 11011 1 1) oder einen[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> Befehl zum Schalten eines GPIOs (gpio write) an den 2. Raspi per Netzwerk schickt.[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Ja was jetzt ? "sudo send" oder GPIO schalten ??[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Beides ist moeglich, und nicht besonders schwierig.[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Die beiden PIs muessen ins gleiche Netz und der PI der schalten soll, bekommt am besten eine fixe IP,[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]damit der andere ihn findet.[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Hier gibt's ein Beispiel zum Schalten von GPIOs ueber das Netz[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Und hier ist das Gegenstueck dazu GPIO-Zustand lesen und ueber das Netz verschicken[/font]

    Das Gegenstueck muss natuerlich noch an Motion angepasst werden, aber das duerfte
    nicht so aufwendig sein.

    Wenn schon zwei PIs rumliegen, kann man das sofort probieren :thumbs1:

  • Du könntest auch statt eines UDP Clienten dir eine kleine Webseite auf dem zweiten Pi aufsetzen, dann vom ersten via URL deine Kommandos ausführen. Dann kannst du auch extern mit irgendeinem W-LAN fähigen Gerät deine Lampe ein und ausschalten bzw. dir den Zustand anzeigen lassen.

    W-Lan ist in deiner Garage nicht verfügbar, richtig? Sonst würde ich dir den ESP8266 ans Herz legen.

    Gruß

  • Hallo Tell, Hallo Fillo,

    vielen Dank für eure Antworten.

    Fillo, Wlan gibt es in meiner Garage nicht. Erwähnen sollte ich vielleicht noch, dass die Kamera mit dessen Raspi räumlich von der Garage getrennt ist und ein Wlan damit auch nicht infrage kommt. Dennoch werde ich mir deinen Tip zu dem ESP8266 gut aufheben.

    Tell, Motion (und mir) ist es vom Prinzip her erst mal egal, ob "send" oder "gpio write", soll heißen, es ist zweitrangig, ob der "Empfänger-Raspi" einen Sendebefehl für eine Funksteckdose ausgibt oder ein Relais an einen GPIO angeschlossen wird. Ist am Ende eine Preisfrage.
    Ich habe mir die Server/Client/Scripte angesehen und hätte mir natürlich vorgestellt, dass man anstatt GPIOs zu überwachen, auch eine Befehlszeile von einem Raspi zum anderen (im selben Netzwerk, ich habe nur eins) schicken kann. Aber gut, dann eben so. Ich wollte die Scripte eben auf den beiden Pi installieren, bin mir aber aufgrund der (englischen) Beschreibung nicht mehr sicher, wer hier Server und Client ist. Für mich ist der Client eigentlich der Empfänger, oder nicht?

    Gruß

    Meisengeier

  • Hallo Meisengeier,

    der Server kommt dorthin wo der Ausgang schalten soll.

    Also:
    * Server-Pi ans Netz
    * IP-Adresse aufschreiben
    * pin = xx im Script so aendern dass es zum Ausgang passt
    * Script starten

    -> Dann mal mit netcat probieren ob der Ausgang schaltet
    (braucht Linux oder einen Raspberry, funktioniert eventuell auch auf einem Mac)

    Naechster Schritt:
    * Client-Pi ans Netz
    * Script anpassen an zwei Stellen
    - pin = xx definiert den Eingang
    - ip = xxx.xxx.xxx.xxx ist die Adresse vom Server-Pi

    -> Script starten und Eingang bewegen

    Stufe 2
    ---------
    Wenn das laeuft, den UDP-Client zerlegen, und so zusammensetzen dass
    er das Argument von der Kommandozeile nimmt und schickt.

    -> Wenn's laeuft, mal mit Motion ansteuern

    Stufe 3
    ---------
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> eine Befehlszeile von einem Raspi zum anderen (im selben Netzwerk, ich habe nur eins) schicken kann.[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Statt on und off die Befehlszeile schicken und mit subprocess.call auf dem Server ausfuehren[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"](Ja, da muss man etwas mehr gruebeln, deshalb erst Stufe 3)[/font]
    Automatisch zusammengefügt:
    Noch eine Idee: es gibt ja schon eine Kommandozeilen-Version !

    Der netcat-Befehl ist die Kommandozeilenversion...

    Einmal editiert, zuletzt von Tell (24. April 2016 um 19:51)

  • Wieso eigentlich unbedingt UDP ? Das würde ich als schlechte Idee ansehen, da UDP zwar weniger Traffic macht aber nicht garantiert/erkannt wird ob das Datenpaket überhaupt beim Ziel ankommt...

    Weiter schreibst du das du Powerline verwenden willst, also D-LAN. Das funktioniert nur wenn das Stromnetz in der selben Phase ist - zumindest war das mal so...

    Ich hatte dir aber schon mal einen Link genannt in dem Beispiele aufgeführt waren - das erwähnst du hier leider gar nicht? :-/ Zur Erinnerung: 2 Raspberry Pi über LAN verbinden zu übertragung der seriellen Schnittstelle

    Desweiteren kann man auch über Netzwerk auf GPIO's eines anderen Pi's zugreifen, siehe dazu FAQ => Nützliche Links / Linksammlung => GPIO ohne root-Rechte oder über Netzwerk
    Oder http://wiki.roxxs.org/index.php/Python/pigpio_network


    Wer Server und wer Client ist, kann vernachlässigt werden.
    Den Pi in der Garage, nennen wir ihn mal passenderweise "Motion-PI", ist derjenige der einem anderen Pi etwas mitteilen möchte. Der andere Pi ist dann also der Empfänger-Pi, derjenige der dann eine Aktion durchführen soll sofern ich das richtig verstanden habe.
    Also könnte man sagen dass der Motion-Pi der Server und Empfänger-Pi der Client sein könnte.

    Man könnte das aber auch andersherum auslegen: Der Empfänger ist der Server und der Sender der Client .... Das ist im Prinzip Auslegungssache.
    Deshalb würde ich wie gesagt lieber von Sender und Empfänger sprechen, oder von Befehlsgeber und Befehlsempfänger, Master und Slave, Aktion und Reaktion ...

  • Hallo Tell, hallo meigrafd,

    danke Tell, jetzt ist mir erst einmal klar, dass der Server der Empfänger ist, der schalten soll; in meinem Fall der Pi in der Garage, der die Lampe schaltet und der Client ist demnach der Sender der Ereignisse, also der Motion-Raspi. Ich dachte bisher tatsächlich es wäre andersherum! (das hätte dann ja nie funktioniert) Heute nicht mehr, aber morgen probiere ich das aus. Ich nehme an "netcat" ist ein Paket?

    Lieber meigrafd, die Variante mit den Powerlines habe ich als Alternative zum Funk (nicht mal 20 meter Reichweite bei mir!) aufgegriffen, weil man damit 200 Meter kommen soll. Ich weiß das mit den Phasen, hatte bis jetzt aber keine Probleme. Wäre aber nicht schlimm, es gibt dafür Phasenkoppler und ich bin Elektriker.
    Deinen Link und deine Schaltungssammlung habe ich hier nicht erwähnt, weil ich glaube, dass diese ohnehin jedes Mitglied hier im Forum kennt. Zudem habe ich dir mitgeteilt, dass ich sie ohne tiefergehende Infos (von dir) nicht nachnutzen kann und ich hatte dich auch so verstanden, dass ich für mein Anliegen ein neues Thema eröffnen sollte, was ich ja nun getan habe. Ich bitte um Entschuldigung, falls ich etwas falsch gedeutet oder gemacht habe.

    Unterm Strich muss ich nochmal sagen, dass ich nicht auf eurem Niveau stehe, soll heißen, ich bräuchte schon eine fast fertige Anleitung; bei reinen Lösungsansätzen kann ich (weil ichs nicht verstehe) "einpacken", ist einfach so.
    Vielleicht kennt ihr auch einen (zulassungsfreien, kostengünstigen) 433,92 Mhz Sender, der wenigstens 100 Meter im Freifeld kommt.

    Gruß und vielen Dank nochmal

    Meisengeier

  • Wenn du DLAN nutzen kannst dann wäre das denk ich die beste und störungsfreiste Wahl. Beide Pi's befänden sich dann im selben Netzwerk und du kannst problemlos dem Empfänger-Pi sagen er solle dies oder jenes machen sobald der Motion-Pi etwas auslöst..

    Erneut, siehe dazu GPIO ohne root-Rechte oder über Netzwerk

    Installier pigpio auf beiden Pi's. Auf dem Empfänger-Pi lässt du zusätzlich pigpiod (daemon) laufen. Auf dem Motion-Pi nutzt du dann besagtes pigpio_network Script.

    Wenn du Fragen hast dann frag bitte gezielt.


  • Wenn du DLAN nutzen kannst dann wäre das denk ich die beste und störungsfreiste Wahl. Beide Pi's befänden sich dann im selben Netzwerk und du kannst problemlos dem Empfänger-Pi sagen er solle dies oder jenes machen sobald der Motion-Pi etwas auslöst..

    Erneut, siehe dazu GPIO ohne root-Rechte oder über Netzwerk

    Installier pigpio auf beiden Pi's. Auf dem Empfänger-Pi lässt du zusätzlich pigpiod (daemon) laufen. Auf dem Motion-Pi nutzt du dann besagtes pigpio_network Script.

    Wenn du Fragen hast dann frag bitte gezielt.

    Hallo meigrafd,

    habe pigpio auf beiden Raspis installiert. Aber wo finde ich nun das pigpio_network Script und wie bringt man das Ganze zum Laufen?

    Gruß Meisengeier


  • In Beitrag#6

    Hallo meigrafd,

    ich bitte um Entschuldigung, hatte das Script aus http://wiki.roxxs.org/index.php/Python/pigpio_network übersehen.

    So, jetzt zum derzeitigen Stand:

    Auf beiden Raspis pigpio installiert.
    Auf dem Motion-Pi das Script unter /home/pi/PiSend.py installiert, die IP Adresse auf den Empfänger-Pi eingegeben, mit chmod Rechte vergeben, und unter "sudo nano /etc/rc.local" "/home/pi/PiSend.py &" den automatischen Start eingestellt.
    Auf dem Empänger-Pi unter "sudo nano /etc/rc.local" pigpiod &" automatischen Start des Deamon eingestellt.
    Beide Raspis heruntergefahren, neu gestartet.
    Probe: Funktioniert nicht!

    Was habe ich falschgemacht?
    Hast du das Script selbst schon mal ausprobiert?

    Gruß

    Meisengeier

    Meisengeier

  • Was denkst du denn soll passieren? Das pigpio_network Script basiert darauf dass ein Taster gedrückt wird - also ein GPIO getriggert wird. Solange das am Motion-Pi nicht passter wird auch nichts am Empfänger-Pi passieren...
    Du musst also schon irgend etwas anpassen - am besten dein bereits bestehende Motion Script


  • Was denkst du denn soll passieren? Das pigpio_network Script basiert darauf dass ein Taster gedrückt wird - also ein GPIO getriggert wird. Solange das am Motion-Pi nicht passter wird auch nichts am Empfänger-Pi passieren...
    Du musst also schon irgend etwas anpassen - am besten dein bereits bestehende Motion Script

    Hallo meigrafd,

    eine LED, sowie einen Taster angeschlossen (und diesen auch gedrückt), hatte ich natürlich. Es tut sich, wie bereits geschildert: NICHTS. Solange dieses Programm nicht "läuft", machts keinen Sinn Motion "anzupassen". Als bisher einziges Resultat wären lediglich auf der "Empfängerseite" folgende Fehlermeldungen (Aufruf mittels "sudo /etc/rc.local) zu nennen: "init Initialise: Can`t lock /var/run/pigpio.pid, Can´t initialise pigpio library". In der Datei "pigpio.pid" steht wiederum nur eine Zahl: 24214, was immer das bedeuten soll. Fehlt vielleicht noch eine Datei? Darüber hinaus werden auf dem Raspi noch weitere Dateien mit der Endung "pid" angelegt, in diesen ebenfalls nur 1 Zahl steht.

    Gruß Meisengeier

  • Ich hab das wie folgt getestet:

    Zunächst habe ich WebIOPi auf meinem RaspberryPi installiert der bei EDIS.at steht, um den Status der GPIO's in nachezu Echtzeit und vor allem Bequem aus-/ab-zulesen... Weil ich da schlecht ne LED oder so anschließen kann..
    Au fem selben Pi habe ich ebenfalls pigpiod installiert und ganz normal gestartet: sudo pigpiod
    Auf meinem Pi hier lokal, also bei mir Zuhause, hab ich das Python Module pigpio installiert und ein kleines Textscript genutzt - das selbe wie es => hier <= unter Socket steht.

    Im Detail zur pigpiod Installation:

    Code
    sudo -i
    cd /usr/src
    wget https://github.com/joan2937/pigpio/archive/master.zip
    unzip master.zip && rm master.zip
    cd pigpio-master
    make -j4 && make install

    ...das muss man auf beiden Pi's durchführen. Damit wäre sowohl pigpiod als auch das pigpio Python Module installiert.

    Dann führe ich sudo pigpiod auf meinem Internet-Pi aus.

    Dann besagtes Script lokal anpassen:
    [code=php]
    import pigpio

    pi = pigpio.pi("raspberrypi.roxxs.org", 8888) #accesses the local Pi's gpios

    pi.set_mode(4, pigpio.OUTPUT)
    pi.write(4, 1) # set Pi's gpio 4 high

    pi.stop()
    [/php]

    Bevor ich jetzt das Script ausführe logge ich mich auf meinen besagten Internet-Pi aufs WebIOPi Interface ein: http://raspberrypi.roxxs.org:8000/app/gpio-header
    Benutzername: webiopi
    Password: raspberry
    Da ich das schon laufen hatte siehst du das GPIO#4 bereits auf OUT steht. Klickst du auf den Pin also Pin#7 in das Quadrat wird dieser Pin auf HIGH gestellt und das Quadrat wird orange.
    Setz den Pin auf LOW also Schwarzes Quadrat und führe dann obiges Script aus, dann müsste der Pin auf Magische Weise Orange werden ;)

    Du kannst das auch umdrehen, indem du manuell via WebIOPi den GPIO auf HIGH stellst und dann mithilfe des Python Scripts ausließt:
    [code=php]
    import pigpio

    pi = pigpio.pi("raspberrypi.roxxs.org", 8888) #accesses the local Pi's gpios

    pi.set_mode(4, pigpio.OUTPUT)
    #pi.write(4, 0) # set Pi's gpio 4 high

    print pi.read(4)

    pi.stop()
    [/php]...müsste dann eine 1 ausgeben. Setzt du den GPIO manuell auf LOW müsste das Script eine 0 ausgeben.


    PS: pid steht für Process ID. Jedes Programm was läuft hat eine eindeutige PID. In den Dateien werden diese hinterlegt. Die PID's kannst du dir auch mit ps aux anzeigen sowie alle derzeitigen Programme die laufen...

  • Hallo meigrafd,

    jetzt habe ich 1. Erfolgserlebnisse!!!
    Habe mich, wie von dir beschrieben, auf deine Seite (Webiopi) eingeloggt: Die 7 wechselt beim Anklicken den High/Low Zustand, ebenso wenn ich auf meinem Pi das Python-Script ausführe.
    Dabei hatte ich zunächst folgende Fehlermeldungen:

    root@raspberrypi:/home/pi# ./PiSend.py
    Exception in thread Thread-1 (most likely raised during interpreter shutdown):
    Traceback (most recent call last):
    File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 937, in run
    File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 848, in _pigpio_command
    <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'send'
    root@raspberrypi:/home/pi# ./PiSend.py
    root@raspberrypi:/home/pi# ./PiSend.py
    root@raspberrypi:/home/pi# exit
    exit
    pi@raspberrypi ~ $ sudo su
    root@raspberrypi:/home/pi# ./PiSend.py
    root@raspberrypi:/home/pi#


    welche dann, wie du auch sehen kannst, weg waren. Vielleicht weiß du ja, was sie bedeuten (von Process-ID hatte ich ja bisher auch noch nie was gehört).

    Natürlich habe ich immer noch nicht verstanden, wie und was hier eigentlich vor sich geht (EDIS.at). Ist das sowas wie eine eigene feste IP, von jedermann und überall erreichbar, der die Adresse kennt (sowas wie NoIP, nur mit eigenem Raspi)? Hört sich auf jeden Fall äußerst interssant an!
    Ich denke, mein nächster Schritt wäre, anstelle deines Internet-Raspis auf meinen 2. umzustellen. Reicht es, wenn ich anstatt "raspiroxx..." die IP Adresse meines Empfänger-Raspis nehme?

    Aber für heute ist´s genug.

    Hab erst einmal vielen, vielen Dank für deine Unterstützung.

    Gruß Meisengeier

  • Hallo meigrafd,

    nur mal kurz zwischendurch: Die Weiterleitung auf meinen Empfänger-Raspi funktioniert nun auch!!! Super! Keine Fehlermeldungen. Werde das Ganze jetzt weiter "ausloten". Das mit dem EDIS interessiert mich natürlich dennoch.

    Gruß Meisengeier

  • .

    Hallo meigrafd,

    nur mal kurz zwischendurch: Die Weiterleitung auf meinen Empfänger-Raspi funktioniert nun auch!!! Super! Keine Fehlermeldungen. Werde das Ganze jetzt weiter "ausloten". Das mit dem EDIS interessiert mich natürlich dennoch.

    Gruß Meisengeier

    Hallo meigrafd,

    habe heute (gemäß meinem eigentlichen Anliegen) noch Motion mit eingebunden. Was soll ich sagen? Funktioniert einwandfrei, genau wie ich es mir gewünscht hatte! Hat mir also echt was gebracht. Ich kann mich nur noch einmal bei dir bedanken. :danke_ATDE:
    Leider weiß ich nicht, wie ich deinen Beitrag hier im Forum positiv bewerten kann. Wäre nett, wenn du mir das bitte mitteilen könntest.

    Gruß Meisengeier

  • ...wieso quotest du jedesmal den vollständigen Beitrag? Merkst du nicht dass das die Seite unnötig aufbläht und unübersichtlich macht? :-/

    Unten rechts steht "Gefällt mir!" und über das Profil eines jeden Forum-Mitglieds kann man ebenfalls eine Bewertung abgeben.

    EDIS.at ist in meinem Beitrag verlinkt

  • Hallo meigrafd,

    nee, habe ich nicht bemerkt. Kommt eben daher, weil ich mit diesem Forum nicht vertraut oder anders ausgedrückt, hier zu selten "unterwegs" bin.
    Deshalb u.a. auch meine Frage, wie bzw. wo ich mich für deine Unterstützung bedanken kann.
    Damit wäre dieses Thema für mich erledigt, werde es dann auf erledigt setzen. (Hoffentlich klappt das)

    Gruß Meisengeier

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!