Не удается разобрать показания датчика в таблице postgres - ошибка типа - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть Arduino, который выводит несколько показаний датчика с этим кодом:

Serial.print(PostDataTrue) + Serial.print(F(",")) + Serial.print(sensorValue) + Serial.print(F(",")) + Serial.print(hum) + Serial.print(F(",")) + Serial.println(temp);

В последовательном мониторе он выглядит следующим образом:

00:04:33.301 -> TRUE,516,25.40,25.30
00:04:34.268 -> TRUE,523,25.40,25.20
00:04:35.287 -> TRUE,522,25.40,25.20

Я пытаюсь вставить эти данные в таблицу postgres. Я впервые проверил это - успешно! - с использованием только TRUE / FALSE чтения строки, и я получил для этого скрипт ниже Python.

Однако теперь, когда я ввел числа в микс, я продолжаю получать эту ошибку:

reallymemorable:sensor-db-mediator reallymemorable$ python3 sensor_reader.py 
2020-02-21 00:00:15 TRUE 472 25.50 25.10

Traceback (most recent call last):
  File "sensor_reader.py", line 95, in <module>
    insert_data(date_time, sensor1, float(sensor2), float(sensor3), float(sensor4))
  File "sensor_reader.py", line 57, in insert_data
    cur.execute('''INSERT INTO lightbool
TypeError: not all arguments converted during string formatting

Я понимаю, о чем говорит ошибка, но не вижу, где я не могу выполнить необходимое преобразование.

Кто-нибудь видит, где я совершаю ошибку?

Мой Python код здесь:

import serial
import psycopg2
import datetime
import time

# Initiate the serial connection to the Arduino device.
try:
    ser = serial.Serial('/dev/cu.usbmodem14101', 115200, timeout=1)
    # Brief pause to establish connection to port.
    time.sleep(3)
except Exception as e:
    print(e)
    exit(1)

def create_table():
    '''Create table in database.'''
    try:
        conn = psycopg2.connect('''
                                connection_string_here
                                ''')
        cur = conn.cursor()
        # Create table for database.
        cur.execute('''CREATE TABLE IF NOT EXISTS lightbool (
            id serial PRIMARY KEY,
            date_time TIMESTAMP NOT NULL,
            sensor1 TEXT NOT NULL,
            sensor2 REAL NOT NULL,
            sensor3 REAL NOT NULL,
            sensor4 REAL NOT NULL
            )''')
    except Exception as e:
        print(e)
        return
    conn.commit()
    conn.close()

create_table()

def insert_data(dt, s1, s2, s3, s4):
    '''Insert data into the database.'''
    conn = psycopg2.connect('''
                            connection_string_here
                            ''')
    cur = conn.cursor()
    cur.execute('''INSERT INTO lightbool
                (date_time, sensor1, sensor2, sensor3, sensor4)
                VALUES (%s, %s, %s, %s)''', (dt, s1, s2, s3, s4))
    conn.commit()
    conn.close()

def read_sensors():
    '''Read the sensors connected to Arduino device.'''
    global sensor1, sensor2, sensor3, sensor4
    # When the Arduino receives the character 'z' it will read the sensor data.
    ser.write(b'z')
    try:
        data = ser.readline().decode('utf-8')
        data = data.split(",")
        sensor1 = data[0]
        sensor2 = data[1]
        sensor3 = data[2]
        sensor4 = data[3]
        print("{} {} {} {}".format(sensor1, sensor2, sensor3, sensor4))
        return (sensor1, float(sensor2), float(sensor3), float(sensor4))
    except Exception as e:
        print(e)
        return

while True:
    # Get the current date and time from the datetime module.
    time_now = datetime.datetime.today()
    date_time = datetime.datetime.strftime(time_now, "%Y-%m-%d %H:%M:%S")
    data = ser.readline().decode('utf-8')
    data = data.split(",")
    sensor1 = data[0]
    sensor2 = data[1]
    sensor3 = data[2]
    sensor4 = data[3]
    print(date_time, sensor1, sensor2, sensor3, sensor4)
    # Save data in a Postgresql database.
    insert_data(date_time, sensor1, float(sensor2), float(sensor3), float(sensor4))
    # Pause a few seconds.
    time.sleep(1)

ser.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...