Уведомления

Группа в Telegram: @pythonsu

#1 Май 11, 2016 15:42:14

pterodaktil
Зарегистрирован: 2016-05-11
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Взаимодействие с китайской железкой по Serial

Есть железка на ком порту. Задача прочитать с нее данные, и распихать по БД. данные такого вида

18,10,0.00,0.01,500,26.18,32.20,586.39

Написал скрипт
Поскольку данные надо писать раз в 5 минут, вызывать я скрипт планирую по крону.
Но у него есть фатальный недостаток - а именно железка судя по всему делает reset при установлении соединения.
Внешне это проявляется в перезагрузке экрана и он секунд 30 отдает переменные pm25 и pm10 нулями.
Помогите побороть проблему.
#!/usr/bin/python
import os
import time
import serial
import MySQLdb
#подключаем к БД
db = MySQLdb.connect(host="127.0.0.1", 
                     port=3306,
                     user="user",
                      passwd="password",
                      db="air") 
cur = db.cursor()
ser = serial.Serial( '/dev/ttyUSB0', 9600, timeout=10 )
a = 1
#начинаем читать
while a == 1:
	
	s = ser.readline()
	sa = s.split(',')
	if len(sa) == 8:
		pm25 = float(sa[0])
		pm10 = float(sa[1])
		hcho = float(sa[2])
		voc = float(sa[3])
		co2 = float(sa[4])
		temp = float(sa[5])
		humidity = float(sa[6])
		summ = float(sa[7])
		unixtime = long(time.time())
#первые несколько  значений вылетают с нулями по пыли, так что их отбрасываем и ждем  нормальных данных с ненулевой пылью
		if pm25 != 0 and pm10 != 0:
			a = 10
			cur.execute( 
			'INSERT INTO data '
	    	'(unixtime, pm25, pm10, hcho, voc, co2, temp, humidity)'
	    	'VALUES'
	    	'(%s, %s, %s, %s, %s, %s, %s, %s)',
	    	(unixtime, pm25, pm10, hcho,  voc,  co2, temp, humidity))        
        	db.commit()
			
db.close()
print('end')

Отредактировано pterodaktil (Май 11, 2016 16:22:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version