Seite 1 von 1

Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 14:06
von Südschwede
Hallo,

ich bin der Südschwede und habe leider keinerlei Programmiererfahrung was sehr schade ist sonst würde ich hier bei Euch nicht nachfragen.
Das gute ist ich bin lernbereit um mir in Zukunft selber weiterhelfen zu können.
Ich habe hier ein Heimprojekt wo eine große Satellitenantenne mit einem Eigenbau Positioner gesteuert wird um die Satellitenpositionen von 47.5°West bis 76.5°Ost anzufahren.
Der Positioner arbeitet mit einem AT89S52 Mikrocontroller wo mit passender Schnittstelle (USBASP, USB-UART) auch die Firmware aktualisiert werden kann. Ebenfalls können auch sämtliche Einstellungen ausgelesen und zurückgeschrieben werden.
Da der Positioner nicht in meiner unmittelbaren Arbeitsumgebung steht (ca.30m entfernt) habe ich mir eine Fernsteuerung mittels RaspberryPi + pi-remote (Lirc) über LAN gebastelt welche per Fernbedienungscodes das Webinterface von jedem beliebigen PC, Tablet oder Handy gesteuert werden kann, funktioniert sehr gut.
Als absolutes Gimmick möchte ich nun als Rückmeldung im Webinterface noch die Satellitenposition, den Wert vom Azimuth und der Elevation anzeigen lassen, hierfür benötige ich aber eure Hilfe.
Mit diesem Ablauf bekomme ich per serieller Schnittstelle (USB-UART) RaspberryPi + cutecom verbunden mit dem Positioner und angefragt per LAN vom HeimPC mit SSH-Console aus folgende Antwort wenn ich den HEX-Befehl "F0" sende, folgenden String zur Anzeige "U ---- Sat: 019 ---- 40.5W SES 6 D - C.Circ - Vert Az: 1276 El: 1210"
Wie kann ich den Ablauf so in Python umsetzen das mir die Werte vom Positioner per /dev/ttyUSB0 vom RaspberryPi gelesen und im Webinterface oder in einer Datei abgelegt/dargestellt werden können?

Bild

Bild

Könnte hier eventuell jemand helfen, bzw. einige Tips geben wie ich da rangehen könnte?

MfG
Südschwede

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 14:45
von Südschwede
Bilder hochladen per [img]http://bild_url[/img] funktioniert hier leider nicht :wink:
Hier noch mal per URL da oben die Zeit zum bearbeiten abgelaufen ist :roll:

Bild

Bild

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 15:28
von __deets__
Wie ist denn diese Kontrolloberflaeche entstanden? Denn da soll doch das Resultat der Abfrage via UART rein, oder?

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 15:56
von Südschwede
__deets__ hat geschrieben: Samstag 22. Oktober 2022, 15:28 Wie ist denn diese Kontrolloberflaeche entstanden? Denn da soll doch das Resultat der Abfrage via UART rein, oder?
Die Abstände kann ich noch verkleinern so dass noch eine Zeile für die anzuzeigenden Parameter habe.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 16:02
von __deets__
Darum ging es mir nicht. Sondern um die verwandte Technik, damit da einschaetzen kann, wie die Abfrage eingebaut werden kann, und die Daten fliessen muessen.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 16:46
von Südschwede
Das pi-remote https://github.com/bweston6/pi-remote läuft auf einem RaspberryPi welcher den Positioner per IR-Lirc steuert.
Gleichzeitig ist der Positioner noch per USB-UART /dev/ttyUSB0 mit dem Raspberry verbunden um die Seriellen Daten steuern und auswerten zu können was ich aktuell mit cutecom mache.
Das müsste ja der Python Script ersetzen, er müsste ein HEX F0 senden und dann das empfangene auswerten/weiterleiten.
Zugriff ist per LAN. Pi-remote ist ein Python3 Tool welches per systemd service beim Start des Raspberry gestartet wird und im Hintergrund läuft.
Die Weboberfläche ist ein Templates index.html. Das Tool kannst Du auf der github Seite als *.zip herunterladen um genauen Einblick zu erhalten, ich kann mich da leider vermutlich nicht gut ausdrücken wenn es um das Erklären geht :wink:

Ps: den F0 Hexbefehl müsste man eventuell bei jedem Tastendruck im Webinterface senden können um einen Startbefehl zu haben damit man den Antwortstring auswerten kann.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 17:31
von Südschwede
Auf dieser Seite https://www.pythonpool.com/python-serial-read/ gibt es schon mal einige Beispiele.
Könnte man da eventuell schon etwas verwenden?

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 17:55
von Sirius3
Ja, das ist der erste Schritt: per pyserial versuchen, die gewünschten Information abzufragen.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 18:57
von __deets__
Ein weiterer Schritt: Bau eine neue Route “position” ein in Server.py , mit der du erstmal eine fest kodierte Zeile zurückgibst. Und die muss in der Webseite per jQuery und einem Intervall abgefragt & in ein HTML Element gepackt werden.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 19:27
von Südschwede
Habe mir erst mal pyserial installiert.
Kann ich hier schon mal ein paar Testbefehle absetzen um die Kommunikation zu testen?
Bild

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 19:36
von Sirius3
Ja, kannst Du.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 19:40
von Südschwede
Haben wir da mal ein Beispiel zu testen?

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 19:47
von Südschwede
Habe mal einiges abgesetzt, aber keine Ahnung ob das ok ist :?:

Code: Alles auswählen

>>> ser = serial.Serial('/dev/ttyUSB0')  # open serial port
>>> ser.write(b'F0')     # write a string
2
>>> ser.write(b'F0')     # write a string
2
>>> ser.write(b'0xF0')     # write a string
4
>>> 

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 20:27
von __deets__
Da fehlt das new line oder sogar carriage return new line.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 21:22
von Südschwede
Hm :(

Code: Alles auswählen

>>> ser.write(b'\xF0\r\n')
3
>>> ser.write(b'\xF0\r')
2
>>> ser.write(b'\xF0\n')
2
>>> ser.write(b'\xF0')
1
>>> 

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 21:24
von Sirius3
Du solltest irgendwann auch mal etwas von der Schnittstelle lesen.

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 21:27
von Südschwede
Man sollte doch nicht aufgeben :D

Code: Alles auswählen

>>> ser.write(b'\xF0')
1
>>> answer = ser.readall()
>>> print(str(answer))
b'U ---- Sat: 019 ----  40.5W SES 6         D - C.Circ  - Vert  Az: 1276  El: 1210 '
>>> 

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Samstag 22. Oktober 2022, 22:35
von Südschwede
Und Schluss für Heute :D

Code: Alles auswählen

>>> import serial
>>> ser = serial.Serial('/dev/ttyUSB0', 230400, timeout=1)
>>> print('\nStatus -> ',ser)

Status ->  Serial<id=0x766b2c58, open=True>(port='/dev/ttyUSB0', baudrate=230400, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
>>> ser.write(b'\xF0')
1
>>> answer = ser.readall()
>>> print(str(answer))
b'U ---- Sat: 019 ----  40.5W SES 6         D - C.Circ  - Vert  Az: 1276  El: 1210 '
>>> ser.close()
>>> 

Re: Serielle Daten in Datei oder in Webseite schreiben?

Verfasst: Dienstag 25. Oktober 2022, 18:49
von Südschwede
Hallo,

hiermit bekomme ich das was ich möchte schon mal korrekt ausgelesen,

Code: Alles auswählen

import serial
ser = serial.Serial('/dev/ttyUSB0', 230400, timeout=1)
ser.write(b'\xF0')
answer = ser.readall()
print(answer)
ser.close()
Antwort

Code: Alles auswählen

Positioner im Betrieb (4 Blöcke a 20 Stellen, mit | markiert)
b'U ---- Sat: 019 ----  40.5W SES 6         D - C.Circ  - Vert  Az: 1276  El: 1210 '
b'U| ---- Sat: 019 ---- | 40.5W SES 6        | D - C.Circ  - Vert | Az: 1276  El: 1210 |'
b'U ---- Sat: 019 ----  40.5W SES 6         D - C.Circ  - Vert  Az: 1276  El: 1210 '

Positioner im Standby (4 Blöcke a 20 Stellen, mit | markiert)
b'U                                                                                '
b'U|                    |                    |                    |                    |'
b'U                                                                                '
Das Print wirft mir nun alle Daten von meinem 20x4 Display aus was am Positioner angezeigt wird, alles in einer Zeile zu 4 Blöcken (mal mit | markiert)
Einmal mit Werten/Daten im Betrieb und einmal im Standby.

Nun hänge ich fest und weiß nicht wie man den String in die Einzelwerte zerlegt und weiterverarbeitet oder eventuell erst mal zum lernen in eine Datei schreibt, hier bräuchte ich mal Hilfe von jemanden.