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

#!/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()