Seite 1 von 1

hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 13:48
von christofj
Hallo zusammen,

ich möchte den Hostnamen von einem Raspberry PI3 über dessen serielle Schnittstelle auslesen. So recht weiß ich nicht wie ich das anstellen kann.
Bei dem unten stehenden Code kann ich via GthTerm sehen das der Befehl auf dem PI ausgeführt wird.
Wie kann ich den Hostnamen in meinem Skript einlesen? Aktuell bekomme ich nichts zurück.

Code: Alles auswählen

import serial
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0)
ser.write(b'sudo cat /etc/hostname \n')
hostname = ser.read(20)
print(hostname)
Kann mir bitte jemand auf die Sprünge helfen?
Danke

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 13:59
von __blackjack__
@christofj: Da brauchst Du ``sudo`` zu? Und in `/etc/hostname` muss kein Zeilenendezeichen hinter dem Namen stehen, also würde ich da noch ein ``echo`` absetzen, und beim lesen auf dem PC eine Zeile lesen und nicht 20 Bytes.

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 14:17
von christofj
Ok 'sudo' brauche ich nicht dafür.
'\n' oder '\r' rauche ich damit der Befehl abgesetzt wird. Ohne habe ich nur die Kommandoeingabe aber ausgeführt wird es noch nicht.
echo liefert mir doch nur den angegebenen Pfad zurück. Am PC wird aber nichts eingelesen, auch mit ser.readline() nicht.

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 14:37
von __deets__
Wozu willst du das denn machen? Es gibt ggf. bessere Wege, an den hostnamen zu kommen, indem du einfach den avahi daemon auf deinem PI startest, und dann per avahi-discover auf deinem PC schaust, was es da so alles an services gibt.

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 15:12
von sls
@__deets__: kann man den hostname auf dem Pi nicht einfach mit dem socket-Modul auslesen?

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 15:15
von christofj
Ich habe mehrere PIs. Die PIs bekommen eine laufende Nummer, die als Hostname gesetzt werden. Wenn ein neuer PI dazu kommt will ich als kurzen Funktionstest den PI einschalten und den Namen einlesen. Den Namen speichere ich dann in einer DB. Das Auslesen will ich per GUI grafisch darstellen. Der Nutzer klickt dann einfach auf Auslesen und bekommt den Namen angezeigt. Beim speichern wird der Name in die DB geschrieben.

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 15:17
von __blackjack__
@christofj: ``echo`` ohne alles gibt nur ein Zeilenendezeichen aus, weil wie schon gesagt in der `/etc/hostname` so etwas nicht drin sein muss, Dein `cat` also kein Zeilenendezeichen ausgibt, womit es sein kann, dass das ganze in irgendeinem zeilengepufferten Zwischenspeicher hängen bleiben könnte. Wobei ich mich frage warum Du nicht einfach ``hostname`` ausführst statt ``cat``.

@sls: Das wäre dann aber auch komplizierter als ``hostname`` aufzurufen.

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 15:24
von __deets__
sls hat geschrieben: Dienstag 2. April 2019, 15:12 @__deets__: kann man den hostname auf dem Pi nicht einfach mit dem socket-Modul auslesen?
Dazu musst du ja erstmal auf den PI drauf. Und da beisst sich die Katze in den Schwanz.

Wir benutzen das compute module & zusammen mit avahi-autoip und avahi-daemon koennen wird auf die per USB etablierte ethernet/IPv4 Verbindung zugreifen, indem wir mit avahi-discover fragen, wer sich denn so alles angemeldet hat. Dadurch sparen wir uns eben genau, vorher den PI per serieller Verbindung abzufragen.

Re: hostname vom PI via serial auslesen

Verfasst: Dienstag 2. April 2019, 15:50
von christofj
@__blackjack__: Danke für den Hinweis damit bekomme ich schon mal nur den Hostnamen
Nun habe ich mal das gebaut:

Code: Alles auswählen

ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0)
ser.write(b'hostname\r')
count = 1
host = []
#hostname = ser.readline()
while True:
    for hostname in ser.read():
        print(str(count) +': '+chr(hostname))
        count = count + 1
	#host.append(chr(hostname))
#print(hostname)
ser.close()
Wenn ich die readline Zeile verwende habe ich nichts in der hostname Variable.
Wenn ich die while nutze und ein paar mal laufen lasse habe ich immer eine verschiedene Anzahl von Zeichen.