Ich plage mich gerade ein wenig für mein Projekt mit Python. Es macht Spaß, aber ich komme nicht so richtig weiter.
Ich möchte zwei Werte welche ich von 2 Button in der GUI aufrufe ein Licht über XKNX schalten. Über die Python (input) Eingabeaufforderung kann ich das "Licht" bereits schalten.
Über die GUI geht es "nur" in dem ich den Button drücke. Der Wert wird aber leider erst gesendet wenn ich die GUI schließe. Leider komme ich nicht drauf .... das das Licht bereits beim Drücken des Button schaltet.
Anbei mein "zusammengebastelter" Code.
Code: Alles auswählen
import asyncio
import logging
from xknx import XKNX
from xknx.devices import Switch
from xknx.io import ConnectionConfig, ConnectionType
from tkinter import *
# Die folgende Funktion soll ausgeführt werden, wenn
# der Benutzer den Button anklickt
def button_action_ein():
global a_1
a_1 = (1)
print(a_1)
# anweisungs_label.config(text="Ich wurde geändert!")
def button_action_aus():
global a_1
a_1 = (0)
print(a_1)
# Ein Fenster erstellen
fenster = Tk()
# Den Fenstertitle erstellen
fenster.title("kleine KNX Visu")
# Die Größe des Fenster fix einstellen
fenster.geometry('350x145')
# Label und Buttons erstellen.
change_button = Button(fenster, text="Küchenlicht EIN", command=button_action_ein)
change_button.pack()
change_button = Button(fenster, text="Küchenlicht AUS", command=button_action_aus)
change_button.pack()
fenster.mainloop()
logging.basicConfig(level=logging.INFO)
logging.getLogger("xknx.log").level = logging.DEBUG
logging.getLogger("xknx.knx").level = logging.DEBUG
async def main():
connection_config = ConnectionConfig(
connection_type=ConnectionType.TUNNELING,
gateway_ip="10.0.0.126", )
#a_1 = int(input("Licht ein:"))
print (a_1)
if a_1 == 1:
print("Licht EIN!")
xknx = XKNX(connection_config=connection_config)
await xknx.start()
Switch(xknx, name="TestOutlet", group_address="0/0/10")
await xknx.devices["TestOutlet"].set_on()
await xknx.stop()
else:
print("Licht AUS!")
xknx = XKNX(connection_config=connection_config)
await xknx.start()
Switch(xknx, name="TestOutlet", group_address="0/0/10")
await xknx.devices["TestOutlet"].set_off()
await xknx.stop()
asyncio.run(main())
Danke
Harald