Logging fra Serieport (rs232) til MySql

Logging fra Serieport (rs232) til MySql

Innleggav Razputin » man 07.01.2008 17:42

Noen som har erfaring med dette?
har strukturerte data som kommer inn på serieporten, type:
"mottager,avsender,data0,data1,data2,data3\n"

Dette vil jeg ha inn i en sqlbase med tilsvarende felter.

All hjelp mottas med stor takk!

Raz.
medlem i 204 måneder
 

Re: Logging fra Serieport (rs232) til MySql

Innleggav TheHand » tir 08.01.2008 15:03

Jeg ville brukt et python til det. Python har bindinger til serieport og til de fleste databasesystemer.
Kode: Merk alt
import serial,sqlite  #laster inn bindinger for serie og database, her sqlite
db=sqlite.connect("eksempeldatabase") #Kobler til
cursor=db.cursor()
ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)
while True:
            line = ser.readline()

            cursor.execute("INSERT into table VALUES(?,?,?,?,?), line.split(","))

Burde ikke være stort vanskeligere enn det der. (Utestet kode)
medlem i 238 måneder
 

Re: Logging fra Serieport (rs232) til MySql

Innleggav Razputin » tir 08.01.2008 15:11

Tusen takk!

Skal teste i kveld :-D

R.
medlem i 204 måneder
 

Re: Logging fra Serieport (rs232) til MySql

Innleggav TheHand » ons 09.01.2008 21:51

så ikke at det var mysql du skulle ha det inn i før nå, så du får sjekke med python-bindingene for mysql. Men det burde fungere etter samme prinsipp
medlem i 238 måneder
 

Re: Logging fra Serieport (rs232) til MySql

Innleggav Razputin » søn 27.01.2008 16:51

Hei og takk!

Her er det ferdige scriptet som ble knotet fram :-)


Kode: Merk alt
#############################################################################
# Butler script
# Copyleft Rasmus Hildonen 2008
#
#############################################################################

# Inkludes
import serial, MySQLdb, time

# Sette opp serieport
ser=serial.Serial('/dev/ttyS0', 2400, timeout=1)

# Koble til database
db = MySQLdb.connect(host="localhost", user="xxx", passwd="xxx",db="xxx")

# Lage en cursor
cursor = db.cursor()

# Loopen
while True:
   # Lese inn data i basen
   line = ser.readline() # Lese data fra serieport
   data = line.split(",") # Splitte opp data
   if data[0] == '0' : # Sjekke om det er data til server
      print data[0]+" "+data[1]+" "+data[2]+" "+data[3]+" "+data[4]+" "+data[5]+" "+data[6] # debug
      cursor.execute("""INSERT INTO logg (mottager,avsender,temperatur,s1,s2,s3,s4) VALUES ("%s","%s","%s","%s","%s","%s","%s")""" % (data[0],data[1],data[2],data[3],data[4],data[5],data[6])) # Legge inn data i basen
   
   # Hente kommandoer og sende til moduler
   cursor.execute("""SELECT * FROM oppgaver WHERE sendt LIKE 0""") # Velge oppgaver som ikke er sendt
   while(1):
      row = cursor.fetchone ()
      if row == None:
         break
      print "%s, %s" % (row[2], row[3]) # debug
      kommando =  row[2] + row[3]
      ser.write(kommando) # sende kommando
      cursor.execute("""UPDATE oppgaver SET sendt = 1 WHERE id LIKE %s""" % (row[0]))

# Lukke pent etter seg
ser.close




Raz.
medlem i 204 måneder
 

Re: Logging fra Serieport (rs232) til MySql

Innleggav karsteinopstad » tor 22.01.2009 0:31

hvor finner jeg modulen serial ?
medlem i 188 måneder
 

Re: Logging fra Serieport (rs232) til MySql

Innleggav Razputin » tor 22.01.2009 12:37

apt-get install python-serial

hvis du har Debian e.l.
medlem i 204 måneder
 


Returner til Perl



Hvem er i Forumene

Registrerte brukere: Google [Bot]