### # Copyright (c) 2011, henne # All rights reserved. # # ### from threading import Event, Thread import subprocess import supybot.utils as utils from supybot.commands import * import supybot.plugins as plugins import supybot.ircutils as ircutils import supybot.callbacks as callbacks import supybot.ircmsgs as ircmsgs import ampel import random import time class Lampel(callbacks.Plugin): # state = 00 threaded = True discoan = False def __init__(self, irc): self.__parent = super(Lampel, self) self.__parent.__init__(irc) # def __del__(self, irc): # ampel.connection.close() def start(self, irc, msg, args): irc.reply("Lampel kann nun gesteuert werden (noch nicht.....)") # ampel.connection.open(self.registryValue('host'), self.registryValue('port')) # ampel.connection.write("io get port 2\n") # buf = ampel.connection.read_until("\n", 1) # self.state = buf[-2] # irc.reply(self.state) start = wrap(start) def rot(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 04\n") ampel.connection.close() rot = wrap(rot) red = wrap(rot) def gelb(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 02\n") ampel.connection.close() gelb = wrap(gelb) yellow = wrap(gelb) def gruen(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 01\n") ampel.connection.close() gruen = wrap(gruen) green = wrap(gruen) def rotgelbgruen(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 07\n") ampel.connection.close() rotgelbgruen = wrap(rotgelbgruen) allcolors = wrap(rotgelbgruen) allefarben = wrap(rotgelbgruen) alle = wrap(rotgelbgruen) def rotgelb(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 06\n") ampel.connection.close() rotgelb = wrap(rotgelb) gelbrot = wrap(rotgelb) redyellow = wrap(rotgelb) yellowred = wrap(rotgelb) def rotgruen(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 05\n") ampel.connection.close() rotgruen = wrap(rotgruen) redgreen = wrap(rotgruen) gruenrot = wrap(rotgruen) greenred = wrap(rotgruen) def gelbgruen(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 03\n") ampel.connection.close() gelbgruen = wrap(gelbgruen) yellowgreen = wrap(gelbgruen) gruengelb = wrap(gelbgruen) greenyellow = wrap(gelbgruen) def aus(self, irc, msg, args): if self.discoan: self.discoTimer.cancel() self.discoan = False ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 00\n") ampel.connection.close() aus = wrap(aus) off = wrap(aus) def hilfe(self, irc, msg, args): irc.reply("Help for the Lampelcontrol") irc.reply("rot: Nur rot an (oder red)") irc.reply("gelb: Nur gelb an (oder yellow)") irc.reply("gruen: Nur gruen an (oder gruen)") irc.reply("rotgelb: Rot und Gelb an (oder gelbrot, redyellow, yellowred)") irc.reply("rotgruen: Rot und Gruen an (oder gruenrot, greenred, redgreen)") irc.reply("gelbgruen: Gelb und Gruen an (oder gruengelb, greenyellow, yellowgreen)") irc.reply("rotgelbgruen: alle an (oder alle, allefarben, allcolors)") irc.reply("aus: alle aus (oder off)") irc.reply("hilfe: Hilft dir...") hilfe = wrap(hilfe) def ampelaus(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) for i in range(1, 5): ampel.connection.write("io set port 2 00\n") time.sleep(1) ampel.connection.write("io set port 2 02\n") time.sleep(1) ampel.connection.close() def moo(self, irc, msg, args): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 00\n") time.sleep(1) ampel.connection.write("io set port 2 01\n") time.sleep(1) ampel.connection.write("io set port 2 02\n") time.sleep(1) ampel.connection.write("io set port 2 04\n") time.sleep(1) ampel.connection.write("io set port 2 00\n") ampel.connection.close() moo = wrap(moo) def disco(self, irc, msg, args): if not self.discoan: #irc.reply("And the Party begins") self.discoTimer = meinTimer(2, self.discof, 0, [irc]) self.discoTimer.daemon = True self.discoan = True self.discoTimer.start() else: #irc.reply("The Party is over") self.discoTimer.cancel() self.discoan = False self.aus(); disco = wrap(disco) def discof(self, irc): ampel.connection.open(self.registryValue('host'), self.registryValue('port')) ampel.connection.write("io set port 2 0" + str(random.randint(0, 7)) + "\n") # ampel.connection.write("io set port 2 01\n") ampel.connection.close() # def getState(self, irc, msg, args): # ampel.connection.write("io get port 2\n") # buf = ampel.connection.read_until("\n", 1) # self.state = buf[-2] # irc.reply(buf) # getstate = wrap(getState) class meinTimer(Thread): def __init__(self, interval, function, iterations=0, args=[], kwargs={}): Thread.__init__(self) self.interval = interval self.function = function self.iterations = iterations self.args = args self.kwargs = kwargs self.finished = Event() def run(self): count = 0 while not self.finished.isSet() and (self.iterations <= 0 or count < self.iterations): self.finished.wait(self.interval) if not self.finished.isSet(): self.function(*self.args, **self.kwargs) count += 1 def cancel(self): self.finished.set() # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: