Börja programmera

Moderator: Telldus

widar
Posts: 2
Joined: Fri Mar 17, 2023 9:45 am

Börja programmera

Post by widar »

Hej!

Jag har precis börjat pilla med linux för första gången och jag är inte riktigt hemma på hur allt funkar. Har ubuntu server 11.04 på min serverburk och jag tänkte att den skulle få hosta bland annat ett tellstickprogram som jag tänkte skriva själv. Jag har följt http://developer.telldus.se/wiki/TellSt ... tionUbuntu och lyckats installera det så att jag kan köra telldusd och styra mina devices med tdtool. Nu kommer vi till min själva fråga. Jag har googlat rätt mycket, men inte hittat nånting som faktiskt svarar på den, så därför ställer jag den här. Hur gör jag egentligen när jag ska börja programmera? Jag har hittat introduktionen (http://developer.telldus.se/doxygen/) till hur det funkar och även api:en till telldus-core (http://developer.telldus.se/doxygen/gro ... nc-members). Jag har inte hittat några instruktioner för hur jag faktiskt får det att börja fungera. Nu är ju inte jag överdrivet hemma på C, heller men jag känner ju att jag skulle vilja använda #include för att inkludera något bibliotek som gör telldus-core-funktionerna tillgängliga för mig. Har dock inte hittat någon information om detta heller. Nu kanske det här är självklart för folk som vet mycket om det här, men jag skulle verkligen behöva det förklarat för mig.

Sidenote: När jag kör tdtool --on 1, så får jag denna utskrift: Turning off device 1, Ljusslang - An error occurred while communicating with TellStick. Dock så fungerar kommandot och brytaren stängs av. Har inte kunnat hitta någon info om varför det händer, så är det någon som vet?

Tack!
stefan.persson
Posts: 353
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by stefan.persson »

Hej!

Se först till att dev-paketet till libtellduscore också är installerat och att telldusd körs. Sedan är grunden att include:a telldus-core.h .

Ett minimalt program i cpp skulle kunna se ut så här:
(main.cpp)

Code: Select all

#include <unistd.h>
#include <stdio.h>
#include <telldus-core.h>

int main(void){
        tdInit();
        int intNumberOfDevices = tdGetNumberOfDevices();
        int lastId = 0;
        for (int i = 0; i < intNumberOfDevices; i++) {
                int id = tdGetDeviceId( i );
                char *name = tdGetName( id );
                printf("%d\t%s\n", id, name);
                tdReleaseString(name);
                lastId = id;
        }

        if(lastId > 0){
                tdTurnOn(lastId);
        }

        tdClose();
}
Det listar dina devices, och tänder den sista listade.

Kompilera med t.ex.
g++ main.cpp -ltelldus-core -o <PROGRAMNAMN> (eller gör en Makefile)

Exempelprogram för att lyssna på händelser finns här: http://developer.telldus.se/browser/tru ... s/main.cpp

Hoppas det här kan få in dig på rätt spår!

Angående sidenote, vilken version av mjukvaran kör du (tdtool --version), och vilken batch har du på din TellStick?
Stefan Persson
Software
Telldus Technologies
draget-nob
Posts: 4
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by draget-nob »

Jag har också problem med att tdtool inte kommunicerar med tellsticken.
Min tellstick är Batch 13 och jag kör senaste mjukvaran.
Operativsystemet är ubundu 11.04.

Någon som vet vad detta kan bero på?
Brighthead
Posts: 4
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by Brighthead »

Jag har en batch 14 med senaste Telldus-mjukvaran och kör Ubuntu Server 11.04. Jag får precis samma felmeddelande trots att själva kommandot utförs utan problem. Kan det vara något relaterat till Ubuntu 11.04?
stefan.persson
Posts: 353
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by stefan.persson »

Har någon av er möjlighet att testa er TellStick i en annan dator och se om ni får samma felmeddelande där? Har det alltid varit så här, eller något som har kommit med 2.1.0-mjukvaran (eller betan dessförinnan, om ni testat den)?
Stefan Persson
Software
Telldus Technologies
Brighthead
Posts: 4
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by Brighthead »

Jag kan testa på ett par andra burkar ikväll.
Har inte något att jämföra med då detta är min första Tellstick och installation. (jag vet, jag ligger hopplöst efter)
/j
Nicke2k
Posts: 9
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by Nicke2k »

stefan.persson wrote:Hej!

Se först till att dev-paketet till libtellduscore också är installerat och att telldusd körs. Sedan är grunden att include:a telldus-core.h .

Ett minimalt program i cpp skulle kunna se ut så här:
(main.cpp)

Code: Select all

#include <unistd.h>
#include <stdio.h>
#include <telldus-core.h>

int main(void){
        tdInit();
        int intNumberOfDevices = tdGetNumberOfDevices();
        int lastId = 0;
        for (int i = 0; i < intNumberOfDevices; i++) {
                int id = tdGetDeviceId( i );
                char *name = tdGetName( id );
                printf("%d\t%s\n", id, name);
                tdReleaseString(name);
                lastId = id;
        }

        if(lastId > 0){
                tdTurnOn(lastId);
        }

        tdClose();
}
Det listar dina devices, och tänder den sista listade.

Kompilera med t.ex.
g++ main.cpp -ltelldus-core -o <PROGRAMNAMN> (eller gör en Makefile)

Exempelprogram för att lyssna på händelser finns här: http://developer.telldus.se/browser/tru ... s/main.cpp

Hoppas det här kan få in dig på rätt spår!

Angående sidenote, vilken version av mjukvaran kör du (tdtool --version), och vilken batch har du på din TellStick?
Jag har testat det där exemplet på att lyssna men jag får ingen reaktion alls. Vad ska hända liksom? Jag trycker på en Nexa-fjärr (självlärande) och jag ser hur tellsticken blinkar. Läsa med PHP går okey men så länge ingen kan hjälpa mig med att hantera informationen som jag får ut så testar jag era exempel.. men utan lycka då. :) Jag använder tdtool för att skicka kommandon via PHP och det funkar bra. Den lilla koden som visar devices och sätter på sista funkar.

Det är samma med pythonexemplet:
python callbacks.py
Waiting for events...
och sen inget när man trycker.
stefan.persson
Posts: 353
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by stefan.persson »

Om du medan exempelprogrammet är igång kör tdtool --on <deviceid>, så ska exempelprogrammet visa "ON event from device <deviceid>" om allt fungerar. Exempelprogrammet lyssnar efter statusförändringar hos konfigurerade enheter, och när du kör tdtool så förändras statusen.

För att exempelprogrammet ska reagera på en fjärrkontrollskod så krävs en TellStick Duo. Det som ska lyssnas på ska vara inlagd som en enhet i TelldusCenter (eller konfigurerad i inställningsfilen). Programmet bevakar bara förändringar för de enheter som du har konfigurerade.
Stefan Persson
Software
Telldus Technologies
Nicke2k
Posts: 9
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by Nicke2k »

stefan.persson wrote:Om du medan exempelprogrammet är igång kör tdtool --on <deviceid>, så ska exempelprogrammet visa "ON event from device <deviceid>" om allt fungerar. Exempelprogrammet lyssnar efter statusförändringar hos konfigurerade enheter, och när du kör tdtool så förändras statusen.

För att exempelprogrammet ska reagera på en fjärrkontrollskod så krävs en TellStick Duo. Det som ska lyssnas på ska vara inlagd som en enhet i TelldusCenter (eller konfigurerad i inställningsfilen). Programmet bevakar bara förändringar för de enheter som du har konfigurerade.
Jasså. Då är jag med.
Jag kör Linux och har en Duo... det är väldigt svårt att få någon klarhet i hur jag kan lyssna på vad Tellsticken tar emot.
Att läsa /tmp/TelldusEvents går ju helt ok men det känns inte helt rätt.
Hur lägger man till en fjärrkontroll i .conf-filen?

Det ultimata vore ju om man kunde fånga upp inkommande koder via tex PHP för att sedan göra egen hantering av datan.
stefan.persson
Posts: 353
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by stefan.persson »

Det är alltså en vanlig enhet som du lägger till i konfigurationsfilen, och "house" ställer du in efter fjärrkontrollskoden. Detta är lättast att göra i TelldusCenter, där det finns en funktion för att "scanna" fjärrkontroller. Eller kan du inte köra GUI-applikationer? I så fall är det svårare att scanna fjärrkontrollen, men man kan få reda på den genom att lyssna efter "raw" events.

Det är inte konstigt att du har svårt att få klarhet i lyssnandet, du är nämligen en av de första som håller på med TellStick Duo eftersom den är helt ny, så det finns inte så mycket att titta på som andra har gjort ännu, :-)

Ja, /tmp/TelldusEvents ska man inte lyssna på, för den implementationen kan brytas när som helst så att säga.
Stefan Persson
Software
Telldus Technologies
Nicke2k
Posts: 9
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by Nicke2k »

stefan.persson wrote:Det är alltså en vanlig enhet som du lägger till i konfigurationsfilen, och "house" ställer du in efter fjärrkontrollskoden. Detta är lättast att göra i TelldusCenter, där det finns en funktion för att "scanna" fjärrkontroller. Eller kan du inte köra GUI-applikationer? I så fall är det svårare att scanna fjärrkontrollen, men man kan få reda på den genom att lyssna efter "raw" events.

Det är inte konstigt att du har svårt att få klarhet i lyssnandet, du är nämligen en av de första som håller på med TellStick Duo eftersom den är helt ny, så det finns inte så mycket att titta på som andra har gjort ännu, :-)

Ja, /tmp/TelldusEvents ska man inte lyssna på, för den implementationen kan brytas när som helst så att säga.
Jag har kört en vanlig Tellstick i Linux under många år. Jag har skrivit mina egna script i PHP för att hantera händelserna i mitt hus. Det har funkat kanon.
Med Duo så tänkte jag mig att jag skulle kunna fånga upp inkommande koder på något enkelt sätt via PHP för att sedan hantera vad som ska hända i mina PHP-script. Det är där jag sitter fast idag. Hur tar jag mig vidare? Är det bara att glömma att lyssna och hantera via PHP? Jag har sällan tillgång till GUI men det är inte omöjligt. Det skulle ju räcka med ett litet program som läser info och passar den vidare till ett PHP-script tex.. Behöver alltså få fram information om hur jag lyssnar på raw events i Linux.. för vidare hantering då.

Edit: Jag känner till allt om fjärren eftersom att jag har lyssnar på TelldusEvents...
arctech
selflearning
2887766
1
0
turnon
stefan.persson
Posts: 353
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by stefan.persson »

Förmodligen är det enklaste för din del att ha en lyssnande process i ett annat språk, t.ex. python, som sedan kan anropa ett PHP-script. Ett callback-exempel för python finns här: http://developer.telldus.com/browser/tr ... on/sensors

GUI:t behövs ju bara för att på enklast möjliga vis lyssna av fjärrkontrollskoden, så att du vet hur du ska konfigurera dina enheter. En enda gång.

Ahh, du får fjärrkontrollskoden direkt där, ok, bra.
Stefan Persson
Software
Telldus Technologies
stefan.persson
Posts: 353
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by stefan.persson »

OK, raw events i python: http://developer.telldus.com/browser/tr ... llbacks.py

Edit: Där är även exempel på icke-raw events, och det är sådana du ska använda när du har konfigurerat dina enheter som du vill ha dem.
Stefan Persson
Software
Telldus Technologies
Nicke2k
Posts: 9
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by Nicke2k »

stefan.persson wrote:OK, raw events i python: http://developer.telldus.com/browser/tr ... llbacks.py

Edit: Där är även exempel på icke-raw events, och det är sådana du ska använda när du har konfigurerat dina enheter som du vill ha dem.
Great! Hur ser syntaxen ut för en fjärr i telldus.conf?

Ett tryck på min fjärr ger mig:

Code: Select all

class:command;protocol:arctech;model:selflearning;house:2887766;unit:1;group:0;method:turnon;
class:command;protocol:sartano;model:codeswitch;code:1111011001;method:turnoff;
class:command;protocol:everflourish;model:selflearning;house:261;unit:2;method:turnoff;
class:command;protocol:arctech;model:selflearning;house:2887766;unit:1;group:0;method:turnon;
class:command;protocol:sartano;model:codeswitch;code:1111011001;method:turnoff;
class:command;protocol:everflourish;model:selflearning;house:261;unit:2;method:turnoff;
class:command;protocol:arctech;model:selflearning;house:2887766;unit:1;group:0;method:turnon;
class:command;protocol:sartano;model:codeswitch;code:1111011001;method:turnoff;
class:command;protocol:everflourish;model:selflearning;house:261;unit:2;method:turnoff;
class:command;protocol:arctech;model:selflearning;house:2887766;unit:1;group:0;method:turnon;
class:command;protocol:sartano;model:codeswitch;code:1111011001;method:turnoff;
class:command;protocol:everflourish;model:selflearning;house:261;unit:2;method:turnoff;
class:command;protocol:arctech;model:selflearning;house:2887766;unit:1;group:0;method:turnon;
class:command;protocol:sartano;model:codeswitch;code:1111011001;method:turnoff;
class:command;protocol:everflourish;model:selflearning;house:261;unit:2;method:turnoff;
Den skickar samma kod 5 gånger. Jag behöver ju bara lyssna på arctech och enbart ge data en gång. Python-scriptet funkade fint. Missade helt att det fanns en rad man skulle aktivera för raw. Jag har dock aldrig jobbat i det språket..

Kan du lite snabbt berätta vad sensorscallback.py och sensorspoll.py gör?

Edit:
Körde TelldusCenter och fick ut det. :)

Code: Select all

device {
  id = 12
  name = "Nexafjärr"
  controller = 0
  protocol = "arctech"
  model = "selflearning-switch:nexa"
  parameters {
    # devices = ""
    house = "2887766"
    unit = "1"
    code = "0000000000"
    system = "1"
    # units = ""
    fade = "false"
  }
}
Börjar väl så smått få kläm på det nu.

Det vore förstås GULD om man kunde använda sig av PHP och snacka direkt istället för att gå omvägen via Python.
Såg att det fanns någon "extension" till php men den verkar inte vara uppdaterad på några år?
stefan.persson
Posts: 353
Joined: Fri Mar 17, 2023 9:45 am

Re: Börja programmera

Post by stefan.persson »

Bra att det börjar lossna för dig nu!

I callbackfunction (inte raw) finns ett exempel på en implementation med en timer för att slippa att varje fjärrkontrollstryck ger 5 events. De flesta sändare skickar flera signaler för att minska sannolikheten att signalen blir störd.

Sensorscallback och sensorspoll är exempel för att lyssna på t.ex. en termometer. I Sensorcallback registrerar man en lyssnare som får meddelande när en temperatur tas emot. I Sensorspoll frågar man istället alla sensorer om senast mottagna värde.

Den PHP-extension som finns är inte anpassad för TellStick Duo ännu. Det går dock utmärkt för vem som helst som har lust att bygga vidare på den.
Stefan Persson
Software
Telldus Technologies
Post Reply