Python : batch up a number of readings and send in json

Refresh

November 2018

Views

43 time

2

I'm a little confused by JSON and Python objects, I've read up a lot on python dictionaries but still no look. I have a Raspberry Pi with a sensor to read pressure. I want to batch up a number of readings and send to MQTT server. I want the output of the data to look like:

{'pressure': 2, 'time': 1529923890.237}
{'pressure': 5, 'time': 1529923890.247}
{'pressure': 9, 'time': 1529923890.258}
{'pressure': 2, 'time': 1529923890.268}
{'pressure': 6, 'time': 1529923890.278}
{'pressure': 2, 'time': 1529923890.288}

The example code i have is :

import json
import time
from decimal import Decimal

count = 0
read_pressures = {}
while (count < 100):
    current_time=time.time()
    data = dict(pressure=2,time=current_time)
    time.sleep(0.01)
    count = count + 1
    print( data) #
    read_pressures = data
print ("printing all values")
print(read_pressures)

All I get is the last value. Is it best practice to put all items into a dictionary and then convert to json or should i just put straight into a string in json format?

3 answers

3

Два вопроса, с вашим кодом.

read_pressures = {}

создает словарь, но у вас есть список элементов, поэтому список подойдет вашей цели лучше

read_pressures = []

Еще одна проблема связана с

read_pressures = data

Вы просто переназначить значение read_pressuresкаждый раз, но вам необходимо собрать datadicts вместо этого, так

read_pressures.append(data)

даст вам желаемый результат.

1

Это действительно зависит от того, как вы нужны ваши данные для отправки. Вы также перезапись read_pressuresс каждым проходом цикла.

import json
import time
from decimal import Decimal

count = 0
read_pressures = []
while (count < 100):
    current_time=time.time()
    data = dict(pressure=2,time=current_time)
    time.sleep(0.01)
    count = count + 1
    print(data) #
    read_pressures.append(data)
print ("printing all values")
print(read_pressures)
0

Я улучшить свой код:

import pprint
import time
from datetime import datetime

read_pressures = list()
for _ in range(100):
    current_time = datetime.now().strftime('%Y-%m-%dT%H:%M:%S')
    data = dict(pressure=2, time=current_time)
    time.sleep(0.01)
    read_pressures.append(data)

pprint.pprint(read_pressures)