Форум сайта python.su
Добрый день
Нужна помощь, признаюсь сразу только две недель как установил Питон и начал изучать вообще программирование. Ситуация такая есть приборы управление системами отопления ZONT, хочется получать с приборов данные в “красивом” виде, с фоновым рисунком помещения, котлов и т.д.
Получаю данные в json через API (для меня пока это просто буквы латинского алфавита)
вот до чего дошел я сейчас (понимаю что в json можно получать параметры по запроса, но для меня пока это сложно), сделал по простому (как мне сказали - пытаюсь изобрести велосипед), но главное это работает)))
import requests
import time
#import os
#from bs4 import BeautifulSoup
def f():
url = 'https://zont-online.ru/api/devices'
data = {'load_io': True}
headers = {'X-ZONT-Client': ‘main@mail’}
result = requests.post(url, json=data, auth'demo', ‘demo’), headers=headers).text
string=result.replace('“', ”“)
#print(string)
index = string.find(”20522:{curr_temp")
temp = float(string)
index1 = string.find(“20524:{curr_temp”)
temp1 = float(string)
index2 = string.find(“20525:{curr_temp”)
temp2 = float(string)
print ('температура с гидрострелки:', temp2)
print ('температура обратки:', temp)
print ('температура котельной:', temp1)
print ('разница подачи и обратки', round(temp2-temp,1))
while True:
time.sleep(1)
f()
далее подключил tkinter (только вчера узнал об этом модуле)
from tkinter import *
import requests
room = Tk()
#room = ‘#ffffff’
room.title('МФТ')
room.geometry('400x400')
room.resizable(width=False, height=False)
url = 'https://zont-online.ru/api/devices'
data = {'load_io': True}
headers = {'X-ZONT-Client': ‘main@mail’}
result = requests.post(url, json=data, auth'demo', ‘demo’), headers=headers).text
string=result.replace('“', ”“)
#print(string)
index = string.find(”20522:{curr_temp")
temp = string
title = Label(room, text=temp, font=“Arial 50”, fg='#CC0000')
title.pack()
room.mainloop()
вот теперь вопрос: Как сделать чтобы данные (температура обновлялась в окне)
данных планирую выводить все что получаю
З.Ы. если не сложно, можно без подколов и намеков, подсказать возможно это сделать и как именно
Офлайн
[code python]между этимитегами вставлять код[/code]
azat1989
вот теперь вопрос: Как сделать чтобы данные (температура обновлялась в окне)
import tkinter as tk def f(): print('Hello') root.after(1000, f) root = tk.Tk() f() root.mainloop()
Офлайн
xam1816
root.after(1000, f)
from tkinter import * import requests import json root = Tk() root.geometry('500x500') root.resizable(width=False, height=False) c = Canvas(root, width=500, height=500) c.pack() url = 'https://zont-online.ru/api/devices' data = {'load_io': True} headers = {'X-ZONT-Client': 'your@email'} result = requests.post(url, json=data, auth=('demo', 'demo'), headers=headers).json() data = result['devices'][7] t1 = data['io']['z3k-state']['4263']['curr_temp'] t2 = data['io']['z3k-state']['4267']['curr_temp'] t3 = data['io']['z3k-state']['4269']['curr_temp'] c.create_text(150, 100, text=t1, font=('Arial','50'), fill = 'red') c.create_text(150, 150, text=t2, font=('Arial','50'), fill = 'blue') c.create_text(150, 200, text=t3, font=('Arial','50'), fill = 'green') root.mainloop()
Офлайн
from tkinter import * import requests import json def temperature_update(): t1, t2, t3 = get_temperature() display_temperature(t1, t2, t3) root.after(1000, temperature_update) def get_temperature(): url = 'https://zont-online.ru/api/devices' data = {'load_io': True} headers = {'X-ZONT-Client': 'your@email'} result = requests.post(url, json=data, auth=('demo', 'demo'), headers=headers).json() data = result['devices'][7] t1 = data['io']['z3k-state']['4263']['curr_temp'] t2 = data['io']['z3k-state']['4267']['curr_temp'] t3 = data['io']['z3k-state']['4269']['curr_temp'] return t1, t2, t3 def display_temperature(t1, t2, t3): c.create_text(150, 100, text=t1, font=('Arial', '50'), fill='red') c.create_text(150, 150, text=t2, font=('Arial', '50'), fill='blue') c.create_text(150, 200, text=t3, font=('Arial', '50'), fill='green') root = Tk() root.geometry('500x500') root.resizable(width=False, height=False) c = Canvas(root, width=500, height=500) c.pack() temperature_update() root.mainloop()
Офлайн
Спасибо большое
только температура (число) накладывается поверх предыдущей
Офлайн
azat1989
только температура (число) накладывается поверх предыдущей
from tkinter import * import requests def temperature_update(): t1, t2, t3 = get_temperature() print(t1, t2, t3) display_temperature(t1, t2, t3) root.after(60000, temperature_update) def get_temperature(): try: url = 'https://zont-online.ru/api/devices' data = {'load_io': True} headers = {'X-ZONT-Client': 'your@email'} result = requests.post(url, json=data, auth=('demo', 'demo'), headers=headers).json() data = result['devices'][7] t1 = data['io']['z3k-state']['4263']['curr_temp'] t2 = data['io']['z3k-state']['4267']['curr_temp'] t3 = data['io']['z3k-state']['4269']['curr_temp'] return t1, t2, t3 except Exception as e: print(e) return None, None, None def display_temperature(t1, t2, t3): c.itemconfigure(sensor1_value_text, text=t1) c.itemconfigure(sensor2_value_text, text=t2) c.itemconfigure(sensor3_value_text, text=t3) root = Tk() root.geometry('500x500') root.resizable(width=False, height=False) c = Canvas(root, width=500, height=500) sensor1_value_text = c.create_text(150, 100, text='###', font=('Arial', '50'), fill='red') sensor2_value_text = c.create_text(150, 150, text='###', font=('Arial', '50'), fill='blue') sensor3_value_text = c.create_text(150, 200, text='###', font=('Arial', '50'), fill='green') c.pack() temperature_update() root.mainloop()
Офлайн
xam1816
fill='red'
Офлайн