Data bliver ikke skrevet til variabel efter en given tidsperiode?
Hej. Jeg har lavet en lille "bareduino" som måler temperatur og lys og som har et par sensore som måler våd/tør analogt. Denne sender data via en radio forbindelse som modtages på min server via seriel data.Det rå data input ser ud som følgende der kommer ind ca. hver 2. minut. (upræcist pga. manglende real time clock på arduino, da jeg gerne vil spare strøm på afsenderen).
Requesting temperature...DONE
Device 1 (index 0) = 21.56 Degrees C
VCC = 4.36 Volts
VCC = 14.53 %
Light = 1010
Wet1 = 18
Wet2 = 19
Og i python tror jeg at det ser sådan ud:
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 19.69 Degrees C\r\n', 'VCC = 4.34 Volts\r\n', 'VCC = 13.60 %\r\n', 'Light = 1009\r\n', 'Wet1 = 18\r\n', 'Wet2 = 19\r\n']
Mit script fejer ikke, men efter en given tid bliver alle variabler ikke skrevet og jeg ved ikke hvorfor:
Når scriptet kører uden problemer får jeg følgende:
Welcome to remote bareduino temprature! Waiting for data...
['\r\n']
['\r\n', 'Requesting temperature...DONE\r\n']
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 23.37 Degrees C\r\n']
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 23.37 Degrees C\r\n', 'VCC = 4.36 Volts\r\n']
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 23.37 Degrees C\r\n', 'VCC = 4.36 Volts\r\n', 'VCC = 14.53 %\r\n']
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 23.37 Degrees C\r\n', 'VCC = 4.36 Volts\r\n', 'VCC = 14.53 %\r\n', 'Light = 1011\r\n']
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 23.37 Degrees C\r\n', 'VCC = 4.36 Volts\r\n', 'VCC = 14.53 %\r\n', 'Light = 1011\r\n', 'Wet1 = 18\r\n']
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 23.37 Degrees C\r\n', 'VCC = 4.36 Volts\r\n', 'VCC = 14.53 %\r\n', 'Light = 1011\r\n', 'Wet1 = 18\r\n', 'Wet2 = 19\r\n']
print data
['\r\n', 'Requesting temperature...DONE\r\n', 'Device 1 (index 0) = 23.37 Degrees C\r\n', 'VCC = 4.36 Volts\r\n', 'VCC = 14.53 %\r\n', 'Light = 1011\r\n', 'Wet1 = 18\r\n', 'Wet2 = 19\r\n']
23.37 4.36 14.53
23.37 °
4.36 ⚡
� 14.53 %
light
wet1
wet2
~ $ cat /var/python/rx4.py
#!/usr/bin/python
# -*- coding: iso-8859-9 -*-
#
# rx4.py serial_port port_speed
#
import serial, sys
import re
import time
import datetime
import pymysql
#if (len(sys.argv) != 3):
# print "command line: rx.py serial_port port_speed"
# sys.exit()
port = '/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0'
speed = 9600
ser = serial.Serial(port,speed)
ser.setDTR()
# flushing seriel, hvis der evt. måtte være noget i bufferen
ser.flushInput()
#print commandline start
print 'Welcome to remote bareduino temprature! Waiting for data...'
#Denne while er for at loope hele scriptet uendeligt
while 1:
count = 0
data = []
#data opsamling, while bliver ved til den har fået 5 linjer
while (count < 8):
count += 1
x = ser.readline()
data.append(x) # data bliver tillagt listens ende med ny data (x)
print data
#søge efter indholdrt i data for at finde værdier
match = re.search(' = (.*?) Degrees C', data[2])
if match is not None:
temperatur = match.group(1)
match = re.search('VCC = (.*?) Volts', data[3])
if match is not None:
volts = match.group(1)
match = re.search('VCC = (.*?) \%', data[4])
if match is not None:
batt = match.group(1)
match = re.search('Light = (.*?)', data[5])
if match is not None:
light = match.group(1)
match = re.search('Wet1 = (.*?)', data[6])
if match is not None:
wet1 = match.group(1)
match = re.search('Wet2 =(.*?)', data[7])
if match is not None:
wet2 = match.group(1)
print 'print data'
print data
print (temperatur + " " + volts + " " + batt + " " + light + " " + wet1 + " " + wet2)
#log til db
conn = pymysql.connect(host='10.0.0.175', port=3306, user='python', passwd='testkode', db='test2')
cur = conn.cursor()
cur.execute("INSERT INTO 28b65eb2(celsius,voltproc,volt,light,wet1,wet2) VALUES (%s,%s,%s,%s,%s,%s)", (temperatur, batt, volts, light, wet1, wet2))
conn.commit()
cur.close
conn.close()
#print til terminal
print temperatur, u'\u00b0'
print volts, u'\u26A1'
print u"\U0001F50B", batt, u"\u0025"
print "light", light
print "wet1", wet1
print "wet2", wet2
temperatur = ""
batt = ""
volts = ""
data = []
ser.flushInput()
Desuden ved jeg ikke hvorfor mit script ikke skriver variablerne til "light, wet1 og wet2"