Page 1 of 2

Styr din tellstick med python

Posted: Fri Mar 17, 2023 9:45 am
by bonega
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

Posted: Fri Mar 17, 2023 9:45 am
by krambriw
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

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.")

Posted: Fri Mar 17, 2023 9:45 am
by krambriw
termios funkar inte under windows va?

Kanske måste använda "from msvcrt import getch"

Posted: Fri Mar 17, 2023 9:45 am
by bonega
Det finns ingen termios för windows, tror som du säger att det är getch som gäller.

Kan hända att jag skriver något eventghost plugin också.
Jag har antagligen inte samma setup som er andra dock.
Annars så kommer jag säkerligen att skriva plugins för XBMC.

Posted: Fri Mar 17, 2023 9:45 am
by krambriw
Hej, eftersom detta är Linux avdelningen kanske det skulle vara en ide att öppna en tråd för detta (python stöd för tellstick) också under Windows. Att skapa ditt enkla exempel i python så att det kör under Windows vore väldigt intressant tycker jag

mvh Walter

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
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.

Posted: Fri Mar 17, 2023 9:45 am
by bonega
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:

Code: Select all


try:
    import termios
except Importerror:
    #setup  fd for windows here
else:
    #termios..... linux here.

 
typ

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
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.

Posted: Fri Mar 17, 2023 9:45 am
by ThorH
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 :)

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
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

Posted: Fri Mar 17, 2023 9:45 am
by ThorH
Tack, det där ska jag nog kunna få styr på :)

Posted: Fri Mar 17, 2023 9:45 am
by M
Bonega: Du råkar inte ha gjort ett plugin till XBMC?

Re: Styr din tellstick med python

Posted: Fri Mar 17, 2023 9:45 am
by linen
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...

Re: Styr din tellstick med python

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
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.

Re: Styr din tellstick med python

Posted: Fri Mar 17, 2023 9:45 am
by linen
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 :)

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