rasolar/gui_log_haus.py

72 lines
2.6 KiB
Python

from tkinter import *
import numpy as np
import os, time,socket,sys,json
payloads=["wasser","gas","strom","strom_herd"]
def set_date():
datafields["date"].delete(0,END)
datafields["date"].insert(0,str(round(1000*time.time())))
def send_data():
local_time=round(1000*time.time())
json_out={"device":socket.gethostname(),"payload":{"wasser":{"time":0,"sensor":"zaehler","value":0,"i2c":0},"gas":{"time":0,"sensor":"zaehler","value":0,"i2c":0},"strom":{"time":0,"sensor":"zaehler","value":0,"i2c":0},"strom_herd":{"time":0,"sensor":"zaehler","value":0,"i2c":0}}}
try:
local_time=int(datafields["date"].get())
except:
local_time=round(1000*time.time())
for x in payloads:
try:
json_out["payload"][x]["value"]=int(datafields[x].get())
except:
del(json_out["payload"][x])
print("kein ",x)
else:
json_out["payload"][x]["time"]=local_time
if len(json_out["payload"])>0:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except:
print("{}: could not connect to database".format(time.time()))
else:
try:
s.connect(("banana", 24048))
except:
print("{}: could not connect to database".format(time.time()))
else:
s.sendall(json.dumps(json_out))
s.close()
print(json_out)
json_out={"device":socket.gethostname(),"payload":{"wasser":{"time":0,"sensor":"zaehler","value":0,"i2c":0},"gas":{"time":0,"sensor":"zaehler","value":0,"i2c":0},"strom":{"time":0,"sensor":"zaehler","value":0,"i2c":0},"strom_herd":{"time":0,"sensor":"zaehler","value":0,"i2c":0}}}
groot=Tk()
groot.wm_title("Hausverbrauch aufnehmen")
groot.config(background="#FFFFFF")
gframe=Frame(groot,width=400,height=300)
gframe.grid(row=0,column=0,padx=10,pady=3)
button_date=Button(gframe,text="Epoch",bg="#FF0000",width=15,command=set_date)
button_date.grid(row=0,column=0,padx=10,pady=3)
label_water=Label(gframe,text="Wasserzähler")
label_water.grid(row=1,column=0,padx=10,pady=3)
label_gas=Label(gframe,text="Gaszähler")
label_gas.grid(row=2,column=0,padx=10,pady=3)
label_electricity=Label(gframe,text="Stromzähler")
label_electricity.grid(row=3,column=0,padx=10,pady=3)
label_oven=Label(gframe,text="Stromzähler Herd")
label_oven.grid(row=4,column=0,padx=10,pady=3)
datafields={}
felder=["date","wasser","gas","strom","strom_herd"]
for x in range(len(felder)):
datafields[felder[x]]=Entry(gframe,width=18)
datafields[felder[x]].grid(row=x,column=1,padx=10,pady=3)
button_send=Button(gframe,text="Absenden",bg="#00FF00",width=15,command=send_data)
button_send.grid(row=5,column=1,padx=10,pady=3)
datafields["date"].insert(0,str(round(1000*time.time())))
groot.mainloop()