Confa bort QTCore?

Moderator: Telldus

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Post by micke.prag » Thu Jan 18, 2018 11:08 am

Daniel wrote:Om jag har förstått det rätt så är alltså tdtool det rekommenderade (supportade) verktyget för att styra sin Tellstick? Det rekommenderade sättet att confa det hela, är det att knacka sin tellstick.conf för hand?
Det stämmer. Förtillfället är det bara att knacka förhand som gäller i Linux. TelldusCenter kommer att komma det med när vissa saker är lösta.
Micke Prag
Software
Telldus Technologies

jonaz
Posts: 46
Joined: Thu Jan 18, 2018 11:08 am

Post by jonaz » Thu Jan 18, 2018 11:08 am

micke.prag wrote:
Daniel wrote:Om jag har förstått det rätt så är alltså tdtool det rekommenderade (supportade) verktyget för att styra sin Tellstick? Det rekommenderade sättet att confa det hela, är det att knacka sin tellstick.conf för hand?
Det stämmer. Förtillfället är det bara att knacka förhand som gäller i Linux. TelldusCenter kommer att komma det med när vissa saker är lösta.
massa grafiskt lullull har man ändå inte på servern så de känns inte som något ni behöver ha brottom med. tdtool funkar riktigt nice o jag gillar att kunna dimma!

skorpion
Posts: 74
Joined: Thu Jan 18, 2018 11:08 am

Post by skorpion » Thu Jan 18, 2018 11:08 am

micke.prag wrote:
Daniel wrote:Om jag har förstått det rätt så är alltså tdtool det rekommenderade (supportade) verktyget för att styra sin Tellstick? Det rekommenderade sättet att confa det hela, är det att knacka sin tellstick.conf för hand?
Det stämmer. Förtillfället är det bara att knacka förhand som gäller i Linux. TelldusCenter kommer att komma det med när vissa saker är lösta.
Hej
Låter bra :) men nu är jag inte direkt intresserad av TelldusCenter som ett GUI för att hantera mottagare, utan jag tänkte höra om det går att lägga till mottagare i tellstick.conf på något annat sätt än att manuellt ändra i filen?
Eller är det ngt som också kommer?
Går det att anropa telldus-core på något sätt?
Jag har sett att man ska kunna anropa tdAddDevice() på något sätt om man arbetar mot en dll i windows.
Är inte så jätteinsatt i detta, men försöker förstå vad det finns för möjligheter att lägga till mottagare på ett smidigt sätt.
Det jag är mest intresserad är hur man fixar detta genom PHP, men kan jag få till det i konsollen så är inte PHP långt borta.

MVH Niclas

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Post by micke.prag » Thu Jan 18, 2018 11:08 am

Micke Prag
Software
Telldus Technologies

skorpion
Posts: 74
Joined: Thu Jan 18, 2018 11:08 am

Post by skorpion » Thu Jan 18, 2018 11:08 am

Tackar för det otroligt snabba svaret :)

Jag har kollat en del på PHP-wrappern, men så som jag förstått det så stödjer den bara några av funktionerna. Tex
TELLDUS_TURNON | TELLDUS_TURNOFF | TELLDUS_BELL | TELLDUS_DIM

Jag kan inte se hur man lägger till mottagare via wrappern?

PS. Kompilering av wrappern till Debian fungerade rätt smärtfritt, men för OS X var det värre. Har du lyckats med det? DS

Tack på förhand!

/niclas

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Post by micke.prag » Thu Jan 18, 2018 11:08 am

Den wrappern är inget som Telldus stödjer officiellt ännu. Jag skrev den mer som "proof-of-concept".

Att wrappa fler funktioner bör inte vara några problem. Kom gärna med en patch.

Jag har tyvärr bara testat den på en Linux-dator.
Micke Prag
Software
Telldus Technologies

skorpion
Posts: 74
Joined: Thu Jan 18, 2018 11:08 am

Post by skorpion » Thu Jan 18, 2018 11:08 am

Hej igen

Nu har jag försökt satt mig in i koden för wrappern en del och det har gått framåt :)
Jag har dock fastnat på tdGetDeviceParameter();
De tillägg jag har gjort är dessa:
php_telldus.h

Code: Select all

PHP_FUNCTION(tdGetDeviceParameter);
telldus.c

Code: Select all

        PHP_FE(tdGetDeviceParameter, NULL)


PHP_FUNCTION(tdGetDeviceParameter)
{
        long id;
        char *param;
        char *name;
        char *value;

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &id, &name, &value) == FAILURE) {
                RETURN_NULL();
        }

        param = tdGetDeviceParameter( id, name, value);
        RETURN_STRING( param, 1 );
}
När jag sedan ska kalla på funktionen får jag problem. Jag vet inte vilka argument funktionen vill ha. Kör jag:

Code: Select all

cat telldus-core.h | grep tdGetDeviceParameter
får jag:

Code: Select all

        TELLSTICK_API char * WINAPI tdGetDeviceParameter(int intDeviceId, const char *strName, const char *defaultValue);
Vad jag förstår utav det där är att första argumentet ska vara en int, andra och tredje en char.
Kör jag däremot (testade med A och B bara):

Code: Select all

tdGetDeviceParameter(2,"A","B")
Så får jag:

Code: Select all

tdGetDeviceParameter() expects parameter 2 to be long, string given
Så då gick jag djupare i telldus-core för att se vad tdGetDeviceParameter egentligen gör och då hittade jag detta i telldus-core.cpp:

Code: Select all

char * WINAPI tdGetDeviceParameter(int intDeviceId, const char *strName, const char *defaultValue){
        std::string strReturn = "";
        try{
                Manager *manager = Manager::getInstance();
                strReturn = manager->getDeviceParameter(intDeviceId, strName);
                if (strReturn.empty()) {
                        strReturn = defaultValue;
                }
        }
        catch(exception e){
                handleException(e);
        }
        return wrapStdString(strReturn);
}
Och därifrån så sökte jag lite på allt som anropade "getDeviceParameter" i hela svn-trädet och hittade tex detta:

Code: Select all

((DeviceNexa*)dev)->setHouse(settings.getDeviceParameter(intDeviceId, "house"));                       ((DeviceNexa*)dev)->setUnit(settings.getDeviceParameter(intDeviceId, "unit"));
Från detta så tror jag att jag förstått vad tdGetDeviceParameter() vill ha för argument.
ID är för vilken mottagare man vill hämta information från
NAME är värdet jag ville hämta, tex UNIT eller HOUSE
DEFAULTVALUE är ett standardvärde som returneras om NAME inte hittas.
Har jag förstått rätt?

Tyvärr så får jag fortfarande samma (argument 2 ska vara long men är string) fel från PHP om jag nu istället anropar med:
tdGetDeviceParameter(2,"unit","error");

Så vart har jag gjort fel, jag kan inte hitta vart tdGetDeviceParameter() anger att den vill ha en LONG?!?!


Jag har inte kommit in på tdSet.....() än, men jag såg att tdAddDevice() inte tar emot något argument, kan det vara så att man först måste anropa tex tdSetName(), tdSetProtocol(), tdSetModel(), tdSetDeviceParameter() vilket sätter dessa parametrar i något sorts "minne" och sedan när man anropar tdAddDevice() så skrivs detta "minne" till tellstick.conf?
Eller är jag helt ute och cyklar?

Kan tillägga att jag inte är speciellt hemma på detta språk, vilket det nu än är ;)

MVH Niclas

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Post by micke.prag » Thu Jan 18, 2018 11:08 am

Börja med att läsa på hur php-extensions fungerar. Ditt felmeddelande kommer från php inte telldus-core.

Kolla upp vad följande kod gör:

Code: Select all

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &id, &name, &value) == FAILURE) { 
Micke Prag
Software
Telldus Technologies

Post Reply