Hallo,
ich möchte Telemetriedaten (ca 10 MB/Tag) von einem Arduino im Minutentakt zu meiner DS216+II schicken und sie dort als 1 File / Tag speichern.
Meine Idee war ein python script als TCP Server zu verwenden und den Arduino als TCP Client Daten hinschicken zu lassen. Das script kann sich dann ums Filehandling kümmern.
Das funktioniert auch testweise (einfach nur einen Counterwert zum Script schicken um zu sehen ob alles ankommt) prächtig, wenn ich das Script auf meinem PC laufen lasse.
Allerdings bin ich zu dumm es auf dem NAS laufen zu lassen.
Python habe ich lt. dieser Anleitung installiert: https://synoguide.com/2023/01/21/install-and-use-python-3-9-in-your-synology/
Kann mir da bitte Jemand unter die Arme greifen?
Vielleicht noch ein kleiner Nachtrag: Arduino und NAS befinden sich im selben Netzwerk bei mir zu Hause.
Das Script:
ich möchte Telemetriedaten (ca 10 MB/Tag) von einem Arduino im Minutentakt zu meiner DS216+II schicken und sie dort als 1 File / Tag speichern.
Meine Idee war ein python script als TCP Server zu verwenden und den Arduino als TCP Client Daten hinschicken zu lassen. Das script kann sich dann ums Filehandling kümmern.
Das funktioniert auch testweise (einfach nur einen Counterwert zum Script schicken um zu sehen ob alles ankommt) prächtig, wenn ich das Script auf meinem PC laufen lasse.
Allerdings bin ich zu dumm es auf dem NAS laufen zu lassen.
Python habe ich lt. dieser Anleitung installiert: https://synoguide.com/2023/01/21/install-and-use-python-3-9-in-your-synology/
- Ich kann vom Arduino aus den TCP Server (Port 5555) nicht erreichen.
- Ich kann von einem anderen PC aus den Port am NAS nicht anpingen (powershell: Test-NetConnection <address> -p <port_number>)
- Ändere ich im TCP Client (Arduino) den Port zu dem ich schicke of einen Port der im NAS definitiv verfügbar ist zB 5000 dann kann der TCP client eine Verbindung aufbauen
- Ich kann natürlich den Port nicht auf 5000 im receiving script am NAS ändern, denn dieser Port wird ja schon verwendet. Probiere ich es doch erhalte ich folgende Fehlermeldung:
OSError: [Errno 98] Address already in use
Kann mir da bitte Jemand unter die Arme greifen?
Vielleicht noch ein kleiner Nachtrag: Arduino und NAS befinden sich im selben Netzwerk bei mir zu Hause.
Das Script:
import socketserver
import socket
import sys
#import winsound
global old_number
old_number = 0
global first_time
first_time = True
class MyTCPHandler(socketserver.StreamRequestHandler):
def handle(self):
global old_number
global first_time
# self.rfile is a file-like object created by the handler;
# we can now use e.g. readline() instead of raw recv() calls
self.data = self.rfile.readline().strip()
#print("{} wrote:".format(self.client_address[0]))
print(self.data)
decoded_string = self.data.decode("utf-8")
split_string = decoded_string.split("=")
int_number = int(split_string[1])
print(int_number)
if (old_number+1 != int_number) and not(first_time):
print("error")
#duration = 1000 # milliseconds
#freq = 1000 # Hz
#winsound.Beep(freq, duration)
sys.exit()
old_number = int_number
first_time = False
if __name__ == "__main__":
#HOST, PORT = "localhost", 9999
host = socket.gethostname()
port = 5555
host="localhost"
print(host)
# Create the server, binding to localhost on port 5555
with socketserver.TCPServer((host, port), MyTCPHandler) as server:
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
Zuletzt bearbeitet: