iSpindel – Server Raspberry Pi

Die iSpindel kann ihre Dtaen, wie Temperatur, Neigungswinkel und berechnete Dichte an verschiende Dienste im Netz senden. Aber sie kann auch die Daten über TCP an einen lokalen Server senden. Wer also nicht möchte, dass seine Daten irgendwo ins Netz gesendet werden, kann hier recht einfach einen Server dafür auf einem RaspberryPi aufsetzen. Wichtig ist, dass beide sich im gleichen Netz befinden.

Damit dies funktioniert muss im Setup Menu der iSpindel der Service Type auf TCP gesetzt werden und dazu auch eine IP Adresse und Port angegeben werden, auf dem der Server lauscht. Das Messgerät verbindet sich dann alle angegebenen Sekunden mit dem Server und versucht seine Daten als JSON Daten zu verschicken.

#!/usr/bin/python3
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
from datetime import datetime
import _thread
import time
import json
import time
import os
import sys

#-------------variablen------------------
filepath   = "/home/pi/Diskstation/Andre/projekte/"
srv_port   = 9501
delim      = ","
nline      = "\r\n"
rcv_buffer = 256
#-------------variablen------------------
 
def recv_handler(clientsock, addr) :
  inpstr = ""
  spindle_name = ""
  spindle_id = 0
  angle = 0.0
  temperature = 0.0
  battery = 0.0
  gravity = 0.0
  user_token = ""
  interval = 0
  rssi = 0
  inpstr = ""
  
  while 1:
    data = clientsock.recv(rcv_buffer)
    inpstr += str(data.rstrip().decode("utf-8"))
    if not data: break    

   
  clientsock.close()
  
  if inpstr[0] == "{":
    if inpstr.find("}") != -1:
      jinput = json.loads(inpstr)
      spindle_name = jinput["name"]
      spindle_id   = jinput["ID"]
      angle        = jinput["angle"]
      temperature  = jinput["temperature"]
      battery      = jinput["battery"]
      try:
        gravity = jinput['gravity']
        interval = jinput['interval']
        rssi = jinput['RSSI']
      except:
        print("old fw")
      try:
        user_token = jinput['token']
      except:
        user_token = '*'        
      try:
        with open(filepath+str(spindle_name)+".csv", 'a') as csv_file:
          cdt = datetime.now()
          outstr  = cdt.strftime("D:%x,C:%X") + delim
          outstr += "A:"+str(angle)       + delim
          outstr += "G:"+str(gravity)     + delim
          outstr += "T:"+str(temperature) + delim
          outstr += "B:"+str(battery)     + delim
          outstr += "I:"+str(interval)    + delim
          outstr += nline
          csv_file.writelines(outstr)
          print(outstr)
          print(repr(addr) + " CSV data written")
      except IOError:
        print(repr(addr) + " CSV Error: ")
    
def main() :
  net_addr = ("0.0.0.0", srv_port)
  serversock = socket(AF_INET, SOCK_STREAM)
  serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
  serversock.bind(net_addr)
  serversock.listen(5)
  while 1:
    print("waiting for connection on port: " + str(srv_port))
    clientsock, addr = serversock.accept()
    print("connected: " + str(addr))
    _thread.start_new_thread(recv_handler, (clientsock, addr))

main()

Der Server ist in Python3 geschrieben und der Interpreter ist bei einer Python Installation standardmäßig mit dabei. Das Skript muss dann lediglich gestartet werden. Es schreibt die Daten in eine CSV Datei hinein, die mit zB Tabellenkalkulationen bearbeitet werden kann.

<br>D:04/10/21,C:08:45:17,A:7.568016,G:7.568016,T:24.5,B:4.129301,I:15,<br>

Im Internet findet man auch noch viele anderer Server Programme, aber ich wollte meines so klein und einfach, wie möglich halten.

Links:
https://zwieselbrau.wordpress.com/2020/04/28/ispindel-elektronische-vergaerungsmessung/
https://itzwieseltal.wordpress.com/2019/12/09/raspberry-pi-4-als-server/
https://github.com/sky4walk/iSpindelClone/raw/master/software/server/iSpindelServerDateWriter.py

Schreib was dazu!

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.