Moin,
für meine Haussteuerung möchte ich ein kleines PlugIn schreiben.
Momentan bin ich noch in der "was geht so" Phase.
Nachdem ich meinen Controler mit Ethernetchip zum Laufen gebracht habe (erstmal nur mit LEDs zum Testen),
bin ich jetzt dabei mal zu sehen mit was man den Controler so alles ansteuern kann.
Mit der Ansteuerung über Android habe ich schon eine kleine Gartenbewässerung für die Ferien realisiert.
Das Steuern der Rasensprenger vom Strand aus hat prima geklappt.
http://bascom-forum.de/showthr…3760&viewfull=1#post23760
http://bascom-forum.de/showthr…2889&viewfull=1#post32889
http://youtu.be/IY1C03eHWbg
Jetzt bin ich dabei, die Steuerung mit einem Python-PlugIn auf meiner SOLO² zu testen.
Erste Erfolge haben sich schon abgezeichnet......
Ich habe ein Tutorial-PlugIn schon um die Abfrage der Zifferntasten und das Senden und Enpfangen von UDP-Paketen ergänzt.
python.py
###-> Import Libarys <-#########################################################
from Screens.Screen import Screen
from Components.MenuList import MenuList
from Components.ActionMap import ActionMap
from Components.ActionMap import NumberActionMap
from Screens.MessageBox import MessageBox
from Plugins.Plugin import PluginDescriptor
from math import pow
import socket
###-> Global Variables <-#######################################################
ChValue = 0
###-> MyMenue Screen <-##########################################################
class MyMenu(Screen):
#-> Frame
skin = """
<screen position="100,150" size="460,400" title="HomeControl PlugIn V1.00" >
<widget name="myMenu" position="10,10" size="420,380" scrollbarMode="showOnDemand" />
</screen>"""
#-> Init Screen, Number- and Key-Actions
def __init__(self, session, args = 0):
self.session = session
#ListBox + Actions
list = []
list.append((_("LED ON"), "one"))
list.append((_("LED OFF"), "two"))
list.append((_("Exit"), "exit"))
Screen.__init__(self, session)
self["myMenu"] = MenuList(list)
self["myActionMap"] = ActionMap(["SetupActions"],
{
"ok": self.go,
"cancel": self.cancel
}, -1)
#KeyActions
self["actions"] = NumberActionMap(["WizardActions", "InputActions"],
{
"1": self.keyNumberGlobal,
"2": self.keyNumberGlobal,
"3": self.keyNumberGlobal,
"4": self.keyNumberGlobal,
"5": self.keyNumberGlobal,
"6": self.keyNumberGlobal,
"7": self.keyNumberGlobal,
"8": self.keyNumberGlobal
}, -1)
#-> ActionHandler ListBoxActions
def go(self):
global ChValue
returnValue = self["myMenu"].l.getCurrentSelection()[1]
print "\n[MyMenu] returnValue: " + returnValue + "\n"
if returnValue is not None:
if returnValue is "one":
ChValue = 255
self.SendUDP(ChValue)
elif returnValue is "two":
ChValue = 0
self.SendUDP(ChValue)
else:
print "\n[MyMenu] cancel\n"
self.close(None)
#-> ActionHandler KeyActions
def keyNumberGlobal(self, number):
global ChValue
if number is not None:
ChValue = ChValue ^ int(pow(2,number-1))
#self.SendUDP('{:02x}'.format(int(pow(2,number-1))))
self.SendUDP(ChValue)
#-> Send UDP-Frame
def SendUDP(self, ChValue):
UDP_IP = "192.168.1.200"
UDP_PORT = 33334
PayloadData = "5b010114010100017c" + '{:02x}'.format(ChValue) + "5d"
PayloadData = PayloadData.decode('hex')
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.connect((UDP_IP, UDP_PORT))
s.send(PayloadData)
ReceivedData = s.recv(1024)
#self.MsgBox(ReceivedData[9].encode("hex"))
s.close()
#-> MegBox
def MsgBox(self, TXT):
self.session.open(MessageBox,_(TXT), MessageBox.TYPE_INFO)
#-> CloseFrame
def cancel(self):
print "\n[MyMenu] cancel\n"
self.close(None)
###-> MainProgram <-############################################################
def main(session, **kwargs):
print "\n[MyMenu] start\n"
session.open(MyMenu)
###-> Create PlugInMenue entry <-################################################
def Plugins(**kwargs):
return PluginDescriptor(
name="HomeControl",
description="HomeControl MainMenue",
where = PluginDescriptor.WHERE_PLUGINMENU,
icon="ihad_tut.png",
fnc=main)
Alles anzeigen
Momentan versuche ich aus dem ersten Fernster heraus ein zweites zu öffnen.
Leider nur mit mäßigem Erfolg, grün wird nicht meine Lieblingsfabe, soviel steht fest.
Ich komme eigentlich aus der Pascal / Delphi-Welt, auf mit VBA komme ich gut zurecht.
Ich meine schon verstanden zu haben, dass das neue Fenster in einer eigenen class definiert werden muss,
in dieser müssen dann sowohl das Skin als auch die Actions implementiert werden.
Ich lebe momentan vom sehen und verstehen....
Hat jemand die Lust und die Zeit mir bei einigen "Unwegbarkeiten" unter die Arme zu greifen?
Fürs Erste wäre mir sehr geholfen wenn mir jemand in mein programm ein zweites Fenster einbauen könnte bzw.
mich an die Hand nimmt.
Dieses könnte z.B. über einen weiteren Listeintrag angezeigt werden.
Im neuen Fenster sollte sich dann ein zurück Button befinden.
Das würde mir für das Syntxverständnis sehr weiterhelfen.
Wie wäre der Unterschied ob das erste Fenster weiterhin auf Actions reagiert bzw. das neue Fenster erst wieder geschlossen werden muss.
Bei VBA nennt sich das Modal bzw. PopUp.
Wäre scön wenn sich jemand erbarmt.
Gruß
Pf@nne