You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.8 KiB
67 lines
1.8 KiB
#!/bin/python3
|
|
|
|
import paho.mqtt.client as mqtt
|
|
import json, csv
|
|
import datetime
|
|
|
|
|
|
broker_hostname ="www.weltenpendler.at"
|
|
port = 1883
|
|
username = 'ms54'
|
|
password = '5SFHTpoZ'
|
|
|
|
topic = "flying-socket/status/energy"
|
|
filename = '/data/flying-socket'
|
|
|
|
def on_connect(client, userdata, flags, return_code):
|
|
if return_code == 0:
|
|
print("connected")
|
|
client.subscribe(topic)
|
|
else:
|
|
print("could not connect, return code:", return_code)
|
|
|
|
|
|
def writeCSV(jsondata, id, ts):
|
|
s = jsondata[f's{id}']
|
|
data = {
|
|
'datetime': ts,
|
|
'aenergy_minute_ts': s['aenergy']['minute_ts'],
|
|
'aenergy_by_minute_0': s['aenergy']['by_minute'][0],
|
|
'aenergy_by_minute_1': s['aenergy']['by_minute'][1],
|
|
'aenergy_by_minute_2': s['aenergy']['by_minute'][2],
|
|
'aenergy_total': s['aenergy']['total'],
|
|
'pf': s['pf'],
|
|
'current': s['current'],
|
|
'voltage': s['voltage'],
|
|
'apower': s['apower'],
|
|
'temperature': s['temperature']['tC'],
|
|
}
|
|
|
|
with open(f'{filename}-s{id}.csv', 'a') as file:
|
|
writer = csv.DictWriter(file, fieldnames=data.keys())
|
|
if file.tell() == 0: writer.writeheader()
|
|
writer.writerow(data)
|
|
|
|
def on_message(client, userdata, message):
|
|
message = str(message.payload.decode("utf-8"))
|
|
jsondata = json.loads(message)
|
|
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
with open(filename+'.log', 'a') as f:
|
|
print(message, file=f)
|
|
|
|
writeCSV(jsondata, 0, now)
|
|
writeCSV(jsondata, 1, now)
|
|
|
|
|
|
|
|
|
|
client = mqtt.Client("AutomaticDataExtractor")
|
|
client.connect(broker_hostname)
|
|
client.username_pw_set(username=username, password=password)
|
|
client.on_connect=on_connect
|
|
client.on_message=on_message
|
|
print('starting ...')
|
|
|
|
client.loop_forever()
|
|
|
|
|