Styr din tellstick med python
Moderator: Telldus
Styr din tellstick med python
Här kommer ett litet pythonscript för att styra tellsticken.
import sys, termios, time
class Tellstick:
def __init__(self, device):
self.fd = open(device, 'w')
self.reciver = {}
new = termios.tcgetattr(self.fd)
cflag = termios.B4800 | termios.CS8 | termios.CLOCAL | termios.CREAD
iflag = termios.IGNPAR
oflag = 0
termios.tcflush(self.fd, termios.TCIFLUSH)
new[0] = iflag
new[1] = oflag
new[2] = cflag
termios.tcsetattr(self.fd, termios.TCSANOW, new)
def power(self, name, power):
bitmask = 0x0001
codes = self.reciver[name]
txcode = codes[0]
txcode |= codes[1] << 4
txcode |= 0x6 << 8
txcode |= power << 11
txstr = 'S'
for bit in range(12):
if bitmask & txcode == 0:
txstr += ' ` `'
else:
txstr += ' `` '
bitmask = bitmask << 1
txstr += ' }+'
self.fd.write(txstr)
self.fd.flush()
def addReciver(self, name, housecode, channelcode):
self.reciver[name] = [housecode,channelcode]
def quit(self):
self.fd.close()
tellstick = Tellstick('/dev/tellstick')
tellstick.addReciver('test', 0, 0)
toggle= True
for i in range(6):
tellstick.power('test', toggle)
toggle=not toggle
time.sleep(0.9)
tellstick.quit()
EDIT: Ser att tabuleringen gick åt skogen..
Någon som vet hur man ordnar det?
Python litar på tabbar för logiken, så koden fungerar ej utan
import sys, termios, time
class Tellstick:
def __init__(self, device):
self.fd = open(device, 'w')
self.reciver = {}
new = termios.tcgetattr(self.fd)
cflag = termios.B4800 | termios.CS8 | termios.CLOCAL | termios.CREAD
iflag = termios.IGNPAR
oflag = 0
termios.tcflush(self.fd, termios.TCIFLUSH)
new[0] = iflag
new[1] = oflag
new[2] = cflag
termios.tcsetattr(self.fd, termios.TCSANOW, new)
def power(self, name, power):
bitmask = 0x0001
codes = self.reciver[name]
txcode = codes[0]
txcode |= codes[1] << 4
txcode |= 0x6 << 8
txcode |= power << 11
txstr = 'S'
for bit in range(12):
if bitmask & txcode == 0:
txstr += ' ` `'
else:
txstr += ' `` '
bitmask = bitmask << 1
txstr += ' }+'
self.fd.write(txstr)
self.fd.flush()
def addReciver(self, name, housecode, channelcode):
self.reciver[name] = [housecode,channelcode]
def quit(self):
self.fd.close()
tellstick = Tellstick('/dev/tellstick')
tellstick.addReciver('test', 0, 0)
toggle= True
for i in range(6):
tellstick.power('test', toggle)
toggle=not toggle
time.sleep(0.9)
tellstick.quit()
EDIT: Ser att tabuleringen gick åt skogen..
Någon som vet hur man ordnar det?
Python litar på tabbar för logiken, så koden fungerar ej utan
Hej Bonega,
Detta med tabuleringen är nog inget problem för den som är van vid python
Det jag osökt tänkte på är att du tydligen inte utnyttjar Telldus dll-fil
Om Micke P läser detta kanske han kunde sno ihop en ny plug-in till EventGhost så att vi äntligen kan få en plug-in utan den irriterande buggen vi har i den nuvarande versionen
mvh Walter
PS Använd funktionen "Code" så ser det ut som nedan
Detta med tabuleringen är nog inget problem för den som är van vid python
Det jag osökt tänkte på är att du tydligen inte utnyttjar Telldus dll-fil
Om Micke P läser detta kanske han kunde sno ihop en ny plug-in till EventGhost så att vi äntligen kan få en plug-in utan den irriterande buggen vi har i den nuvarande versionen
mvh Walter
PS Använd funktionen "Code" så ser det ut som nedan
Code: Select all
class TellStick(eg.PluginClass):
def __init__(self):
self.AddAction(TurnOn)
self.AddAction(Dim)
self.AddAction(TurnOff)
self.AddAction(Bell)
def __start__(self):
self.dll = None
try:
self.dll = windll.LoadLibrary("TellUsbD101.dll")
except:
raise eg.Exception("TellUsbD101.dll not found.")
-
- Site Admin
- Posts: 2243
- Joined: Fri Mar 17, 2023 9:45 am
- Location: Lund
- Contact:
I version 2 av vår programvara kommer det hända lite roligare saker.
Samma API som på Windows portas till både Linux och Mac OS X. Detta gör också att det går att göra en riktig python-plugin som är enkel att använda och blir likadan på alla plattformar.
För övrigt så kan jag inte få felet längre i Eventghost. Jag hoppas det beror på att jag har löst problemet men behöver testa på fler datorer.
Samma API som på Windows portas till både Linux och Mac OS X. Detta gör också att det går att göra en riktig python-plugin som är enkel att använda och blir likadan på alla plattformar.
För övrigt så kan jag inte få felet längre i Eventghost. Jag hoppas det beror på att jag har löst problemet men behöver testa på fler datorer.
Micke Prag
Software
Telldus Technologies
Software
Telldus Technologies
Finns det några speciella fördelar med erat API? Föredrar att använda ren python istället för att länka in C.
angående plattformsoberoende:
typ
angående plattformsoberoende:
Code: Select all
try:
import termios
except Importerror:
#setup fd for windows here
else:
#termios..... linux here.
-
- Site Admin
- Posts: 2243
- Joined: Fri Mar 17, 2023 9:45 am
- Location: Lund
- Contact:
Fördelar för programmeraren:
* Du får implementationen av alla protokoll och behöver inte tänka på när nya protokoll eller andra enheter implementeras.
Fördelar för användaren:
* Enheter som konfigureras behöver bara konfigureras en gång. Man slipper lägga in samma enheter flera gånger i olika program. Att t.ex. ändra en enhetskod görs bara på ett ställe och påverkar överallt där den används.
* Du får implementationen av alla protokoll och behöver inte tänka på när nya protokoll eller andra enheter implementeras.
Fördelar för användaren:
* Enheter som konfigureras behöver bara konfigureras en gång. Man slipper lägga in samma enheter flera gånger i olika program. Att t.ex. ändra en enhetskod görs bara på ett ställe och påverkar överallt där den används.
Micke Prag
Software
Telldus Technologies
Software
Telldus Technologies
Jag håller på med ett projekt att styra en tellstick med python i linux men jag är rätt så nybörjare.
Från krambriws inlägg får jag intrycket att jag kan använda telldus dll-fill för att göra processen enklare. Finns det nån dokumentation på vad som finns tillgängligt? Nu har jag bara en osnygg lösning där python exekverar rfcmd. Jag har letat runt på telldus.se men hittar inget.
Lite hjälp kanske? Tack
Från krambriws inlägg får jag intrycket att jag kan använda telldus dll-fill för att göra processen enklare. Finns det nån dokumentation på vad som finns tillgängligt? Nu har jag bara en osnygg lösning där python exekverar rfcmd. Jag har letat runt på telldus.se men hittar inget.
Lite hjälp kanske? Tack
-
- Site Admin
- Posts: 2243
- Joined: Fri Mar 17, 2023 9:45 am
- Location: Lund
- Contact:
Vi har tyvärr ingen dokumentation för 1.x serien utan bara till 2.0 som ännu bara finns som alpha.
Kolla gärna källkoden till EventGhost istället: http://eventghost.svn.sourceforge.net/v ... iew=markup
Kolla gärna källkoden till EventGhost istället: http://eventghost.svn.sourceforge.net/v ... iew=markup
Micke Prag
Software
Telldus Technologies
Software
Telldus Technologies
Re: Styr din tellstick med python
Jag ser fördelen med bongeas lösning - minimalt med tjafs, men jag ser också fördelen med att inkludera telldus dll:erna också.
Min fråga till er som kan lite mer om det här: om jag vill använda dll:er, kan jag använda windows dll:er till Linux till exempel? Jag kör en Qnap-nas med ARM-processor, måste jag då lyckas kompilera specifikt mot den, eller är det så flexibelt att jag kan använda en annan dll?
Ett av mina mål är att man lätt ska kunna deploya om på olika plattformar, med minimalt konfigurerande. Bongeas variant använder ju bara saker som redan finns i Python, vilket är ett klart plus. Å andra sidan använder han termios som inte finns på windows vilket är ett klart minus...
Min fråga till er som kan lite mer om det här: om jag vill använda dll:er, kan jag använda windows dll:er till Linux till exempel? Jag kör en Qnap-nas med ARM-processor, måste jag då lyckas kompilera specifikt mot den, eller är det så flexibelt att jag kan använda en annan dll?
Ett av mina mål är att man lätt ska kunna deploya om på olika plattformar, med minimalt konfigurerande. Bongeas variant använder ju bara saker som redan finns i Python, vilket är ett klart plus. Å andra sidan använder han termios som inte finns på windows vilket är ett klart minus...
-
- Site Admin
- Posts: 2243
- Joined: Fri Mar 17, 2023 9:45 am
- Location: Lund
- Contact:
Re: Styr din tellstick med python
Linux kan inte använda en Windows-dll rakt av. Framför allt inte på en annan processor-arkitektur. Du måste kompilera om för var arkitektur.
Vår Linux-mjukvara ska dock vara anpassad även för en embedded miljö. Åtminstone har vi den ambitionen.
Vår Linux-mjukvara ska dock vara anpassad även för en embedded miljö. Åtminstone har vi den ambitionen.
Micke Prag
Software
Telldus Technologies
Software
Telldus Technologies
Re: Styr din tellstick med python
En fundering, stöder din kod self learning devices? Ser på shift-operationerna att det verkar vara housecode på 4 bitar och channelcode på 4 bitar = totalt 8 bitar. Self-learning har väl 24-bitars adresser?
För övrigt för att se formatteringen som fallit bort i bonegas kod, gör "Visa källkod" på webbsidan. Där ligger den kvar
För övrigt för att se formatteringen som fallit bort i bonegas kod, gör "Visa källkod" på webbsidan. Där ligger den kvar
bonega wrote:Här kommer ett litet pythonscript för att styra tellsticken.
import sys, termios, time
class Tellstick:
def __init__(self, device):
self.fd = open(device, 'w')
self.reciver = {}
new = termios.tcgetattr(self.fd)
cflag = termios.B4800 | termios.CS8 | termios.CLOCAL | termios.CREAD
iflag = termios.IGNPAR
oflag = 0
termios.tcflush(self.fd, termios.TCIFLUSH)
new[0] = iflag
new[1] = oflag
new[2] = cflag
termios.tcsetattr(self.fd, termios.TCSANOW, new)
def power(self, name, power):
bitmask = 0x0001
codes = self.reciver[name]
txcode = codes[0]
txcode |= codes[1] << 4
txcode |= 0x6 << 8
txcode |= power << 11
txstr = 'S'
for bit in range(12):
if bitmask & txcode == 0:
txstr += ' ` `'
else:
txstr += ' `` '
bitmask = bitmask << 1
txstr += ' }+'
self.fd.write(txstr)
self.fd.flush()
def addReciver(self, name, housecode, channelcode):
self.reciver[name] = [housecode,channelcode]
def quit(self):
self.fd.close()
tellstick = Tellstick('/dev/tellstick')
tellstick.addReciver('test', 0, 0)
toggle= True
for i in range(6):
tellstick.power('test', toggle)
toggle=not toggle
time.sleep(0.9)
tellstick.quit()
EDIT: Ser att tabuleringen gick åt skogen..
Någon som vet hur man ordnar det?
Python litar på tabbar för logiken, så koden fungerar ej utan