Lång tid att skicka kommandon

Moderator: Telldus

zyberzero
Posts: 56
Joined: Fri Mar 17, 2023 9:45 am
Location: Göteborg

Lång tid att skicka kommandon

Post by zyberzero »

Tjena!

Jag köpte mig en tellstick + dimmer ifrån Kjell idag. Jag har fått de att kommunicera med varandra, men dokumentationen var en aning halvkass + jag kunde inte uppdatera WIKIn där jag kände att jag kunde bidra (ställa in självlärande enheter ifrån Linux).

Hursomhelst, jag har nu börjat knacka ihop ett program, mycket enkelt:

Code: Select all

#include <iostream>
#include "../telldus-core/driver/libtelldus-core/telldus-core.h"

using namespace std;


int main()
{
    int i =0;
    while(true) {

     i=i%256;

     cout << i << endl;
     tdDim(1, i);
     i=i+15;
    }
    return 0;
}
Jag tyckte det tog lång tid innan något hände så jag testade att köra:

Code: Select all

zyber@jake:~$ time tdtool -v 255 -d 1
Dimming device: 1 Test to 255 - Success

real	0m1.594s
user	0m0.000s
sys	0m0.020s
Ska det verkligen ta 1.5 SEK att skicka ett dimmningskommando? Jag hade tänkt använda min tellstick till min HTPC (till en början XBMC under linux, senare MythTV) för att mjukt tända och släcka ljuset vid filmvisning (automagiskt förstås!).

Det blir ju inte jättesnyggt direkt, jag hade åtminstånde hoppats på kanske 0.2 sek / kommando.

Min utvecklingsmaskin är inte särskilt långsam; Intel Core 2 Duo @ 2.53 GHz (P8700), 4GB RAM, Linux x64 (Ubuntu 9.10) så det är knappast den som är slö på att räkna.
Jag slökikade genom källkoden för att leta efter någon typ av wait eller pause-funktion men kammade noll.

Ska det verkligen vara så? (tänk Sverker Olofssons hysteriska stil...)

Tack på förhand!


OfT: Naturligtvis tänkte jag släpa ett eventuellt plugin fritt så även andra får ta del av detta :)
micke.prag
Site Admin
Posts: 2243
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Post by micke.prag »

Vilken version kör du?

Redigering på wikin är tyvärr avstängt p.g.a. spamskäl. Vi undersöker alternativ till att öppna det igen.

Vissa Nexa/Proove mottagare dimmar alltid mjukt till vald nivå och behöver då inte "loopas" till rätt nivå.
Micke Prag
Software
Telldus Technologies
zyberzero
Posts: 56
Joined: Fri Mar 17, 2023 9:45 am
Location: Göteborg

Post by zyberzero »

Jag kör emot era debianpaket - vilket betyder att tdtool är version 2.0.1.
Tyvärr gör inte den här proove-enheten det, utan den dimmar bara från 0->godtyckligt värde mjukt.

Min tellstick är ifrån batch 8.
Jaxån
Posts: 199
Joined: Fri Mar 17, 2023 9:45 am

Post by Jaxån »

micke.prag wrote:Vilken version kör du?

Redigering på wikin är tyvärr avstängt p.g.a. spamskäl. Vi undersöker alternativ till att öppna det igen.
Inloggning via OpenID kanske. Då slipper ni hantera lösenord.
erikr
Posts: 12
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm

Post by erikr »

Jag upptäckte samma sak i windows när jag skulle göra en lite mer uppdaterad .Net wrapper. Vad är det som gör att det måste ta nära två sekunder (i mitt fall) att sända kommandot?

Jag antar att det finns en förklaring och att man antagligen får anpassa sig till detta, men jag kan inte sova innan jag förstår varför anropen tar så lång tid? :o
Jaxån
Posts: 199
Joined: Fri Mar 17, 2023 9:45 am

Post by Jaxån »

erikr wrote:Jag antar att det finns en förklaring och att man antagligen får anpassa sig till detta, men jag kan inte sova innan jag förstår varför anropen tar så lång tid? :o
Läs källkoden. Du förstår hur det fungerar, och du somnar ganska fort :)
erikr
Posts: 12
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm

Post by erikr »

Hehe.. mm.. jag tänkte kanske slippa gogga igenom hela koden. Vet ju inte riktigt vart jag ska titta, men jag kanske får göra ett försök. Har du något tips vart i koden man borde titta?[/quote]
erikr
Posts: 12
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm

Post by erikr »

Tjahapp, en liten titt i DeviceNexa.cpp och libtelldus-core/win/Device.cpp gav ju att hastigheten tycks vara 4800 baud och en typisk dimsträng är typ runt 60 tecken, dvs 480 bit. Det ger ju en tid på ca 100 millisekunder för att sända kodsträngen, men man får väl lägga på lite för overhead av olika slag, men det känns inte som hela förklaringen.. Mitt hopp är att någon som har bättre insikt kan belysa saken lite mer?
Jaxån
Posts: 199
Joined: Fri Mar 17, 2023 9:45 am

Post by Jaxån »

erikr wrote:Hehe.. mm.. jag tänkte kanske slippa gogga igenom hela koden. Vet ju inte riktigt vart jag ska titta, men jag kanske får göra ett försök. Har du något tips vart i koden man borde titta?
Tyärr. Jag somnar för snabbt ;)

Det är troligen inte något som man gör på en kafferast, eller två.
I vart fall så har jag inte gjort någon mer noggran genomläsning av koden. Mestadels för att de mer håriga sakerna man kan göra med C++ ger mig nässelutslag (tror jag), så jag brukar hålla mig borta från sådan kod. Men jag skall nog titta igenom det vid tillfälle.
Jaxån
Posts: 199
Joined: Fri Mar 17, 2023 9:45 am

Post by Jaxån »

erikr wrote:Tjahapp, en liten titt i DeviceNexa.cpp och libtelldus-core/win/Device.cpp gav ju att hastigheten tycks vara 4800 baud och en typisk dimsträng är typ runt 60 tecken, dvs 480 bit. Det ger ju en tid på ca 100 millisekunder för att sända kodsträngen, men man får väl lägga på lite för overhead av olika slag, men det känns inte som hela förklaringen.. Mitt hopp är att någon som har bättre insikt kan belysa saken lite mer?
Jag har för mig, om inte minnet sviker mig, att man inte kan skicka ut kommandona för snabbt. Vilket gör att det är inlagt en fördröjning i programmet.
zyberzero
Posts: 56
Joined: Fri Mar 17, 2023 9:45 am
Location: Göteborg

Post by zyberzero »

Jo, jag kan gå med på att det är viktigt med en fördröjning, men en fördröjning som är 15-20x längre tid än vad själva tiden för att skicka ett kommando tar? Jag ska försöka ge mig på att modifiera pauserutinen en skvätt. Jag återkommer med resultat!
micke.prag
Site Admin
Posts: 2243
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Post by micke.prag »

Om det är pausen på rad 38 ni är på jakt efter här:
http://developer.telldus.se/browser/tru ... pp?rev=192

Så finns den inte längre kvar:
http://developer.telldus.se/browser/bra ... Device.cpp

TellStick svarar när den har sänt klart och då returnerar Device::send(). Dock finns det en fallback på ~5 sekunder om det inte kommer något svar.

I trunk pågår för tillfället ett arbete med att ha en process igång konstant som har en koppling till TellStick hela tiden. Om detta kan snabba på det hela får vi se.
Micke Prag
Software
Telldus Technologies
zyberzero
Posts: 56
Joined: Fri Mar 17, 2023 9:45 am
Location: Göteborg

Post by zyberzero »

Nej, det är inte den jag jagar - jag sitter och kikar i källkoden för 2.0.1. Men frågan är varför det blir 1.5 sekunder? det är ju varken fallbacktiden och som erikr konstaterade bör ju tiden mer ligga på 0.1 sekunder. om baudraten är 4800 (vilket den uppenbarligen är) så på 1.5 sek bör man ju hinna skicka 7200 bitar och jag har svårt att tro att det krävs 0.9 kB för att dimma en lampa.
micke.prag
Site Admin
Posts: 2243
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Post by micke.prag »

Att skicka själva paketet tar ca 0,5s om jag inte missminner mig.
Micke Prag
Software
Telldus Technologies
zyberzero
Posts: 56
Joined: Fri Mar 17, 2023 9:45 am
Location: Göteborg

Post by zyberzero »

Då är fortfarande frågan var den sista sekunden är till för? Jag hittar inget i källkoden (grep -r sleep * ) som ska ge en sekunds paus. Jag har nu f.ö. tagit bort debianpaketet och kompilerat allt ifrån 2.0.1...
Post Reply