Page 4 of 6

Posted: Thu Jan 18, 2018 11:08 am
by micke.prag
Vi ska absolut ta och titta på det

Posted: Thu Jan 18, 2018 11:08 am
by schmelck
Hei, vil bare si at jeg er også interessert i å få disse billige clas ohlson bryterne (http://www.clasohlson.se/Product/Produc ... d=41669431) til å fungere :)

Posted: Thu Jan 18, 2018 11:08 am
by tom_rosenback
krambriw wrote:Med en LWMR-210 lyckades jag dock ej trots att jag körde samma koder och att den styrs perfekt från fjärren. Den "lär nog in" signalen med högre noggranhet :cry:
Det är 3 koder för CO uttagen, ON, OFF och LEARN, kanske därför du inte fick det att fungera? elr?

Posted: Thu Jan 18, 2018 11:08 am
by eirikh
+1 for this :)

Også interessert!

Posted: Thu Jan 18, 2018 11:08 am
by to2
Hei! Jeg fikk min Tellstick til jul og har fra før 5 stk. Everflourish Mottakere (EMW100R) i huset og er veldig interessert i å få Tellstick til å "kontrollere" disse :)

Posted: Thu Jan 18, 2018 11:08 am
by Mårten
micke.prag wrote:Eftersom det ännu inte finns en version 2 av TellStick har vi inte heller bestämt hur vi ska göra med användare som har version 1 av TellStick men som vill uppgradera.
Vi kommer att ta ställning till detta när den nya finns till försäljning.
Nu finns ju version 2 ute, blir jag tvungen att köpa en ny Tellstick eller har ni nåt inbytesprogram? Det enda jag vill göra är att sätta absolutnivå på en Nexa-dimmer, vilket ironiskt nog är exakt det enda som inte går att göra med v1 men med v2. Det hade dessutom sparat mig ett par dagars felsökning om mjukvaran hade kollat versionnumret och upplyst om att stickan var för gammal.

F.ö, är checksummeberäkningen för everflourish/GAO ovan fortfarande okänd? Gäller i så fall fortfarande att den som knäcker checksumman får en v2-sticka?

Posted: Thu Jan 18, 2018 11:08 am
by micke.prag
Ohh. ja. Till den som knäcker protokollet finns lite trevliga saker för.

Posted: Thu Jan 18, 2018 11:08 am
by Mårten
Hmm, den där checksumman verkar inte trivial. Har nu provat CRC-4 med alla möjliga polynom och initialvärden. Har även testat att XOR:a crc:n med en konstant, utan framgång.

Det skumma är att det borde vara en rätt enkel algoritm eftersom processorn i mottagarkretsen gissningsvis är rätt klen. Men checksumman är inte xor:ad eller ihopadderad och nästa steg på komplexitetsskalan är väl crc.

Frågan är om man skulle dissekera en mottagare och kolla vad det är för processor dom använder. Det kan ju tänkas finnas färdiga lösningar för den processorn. Någon som känner för att ta isär sin mottagare?

Posted: Thu Jan 18, 2018 11:08 am
by Mårten
Hej! Tänkte bidra med siffrorna i text, så slipper andra sitta och knappa in alla ettor och nollor, ifall någon vill göra ett försök att knäcka checksumman. Tredje byten, mest signifikant nibble är checksumman.

Code: Select all

{
   {0x38, 0xcc, 0x9f},
   {0x38, 0xcd, 0x6f},
   {0x38, 0xce, 0x3f},
   {0x38, 0xcf, 0xaf},
   
   {0x17, 0xac, 0x4f},
   {0x17, 0xad, 0xbf},
   {0x17, 0xae, 0xef},
   {0x17, 0xaf, 0x7f},

   {0x8c, 0xec, 0xef},
   {0x8c, 0xed, 0x1f},
   {0x8c, 0xee, 0x4f},
   {0x8c, 0xef, 0xdf},

   {0x2a, 0x1c, 0xff},
   {0x2a, 0x1d, 0x0f},
   {0x2a, 0x1e, 0x5f},
   {0x2a, 0x1f, 0x1f},

   {0x0f, 0x0d, 0xc0},
   {0xff, 0x0d, 0xe0},
   {0xff, 0xff, 0xd0},

   {0x00, 0x04, 0x20},
   {0x00, 0x08, 0xb0},
   {0x00, 0x0c, 0xc0},
};
[/code]

Brute force please

Posted: Thu Jan 18, 2018 11:08 am
by Snakehand
Jeg har virkelig behov for å kontrolere Everflurish sine brytere. Disse er omtrent de eneste som er merket at de tåler mer enn 1000W. Pr idag bruker jeg velleman K8055 + noen kretser for å interface med fjernstyringen. Kjøpte nyss en tellstick for å rydde i kabelsaleten.

Men jeg klarte selvsagt ikke å kontrolere ovenen med tellsticken. Men HVOR VANSKELIG kan det være å prøve alle 16 mulige checksums ??? Eventuelt bare lære mottageren opp på hus ID med kjente koder / checksums ?

Kan jeg få klare instrukser på hvordan jeg kan prøve dette med raw format ? Og hvordan sender jeg sender raw format fra Linux burken ?

Hvis ikke returnere jeg tellstick på gubbdagiset, jeg har en fungerende løsning idag, og hadde ikke forventet at dette skulle bli et slikt problem:-(

Hvordan løse problemet ....

Posted: Thu Jan 18, 2018 11:08 am
by Snakehand
Dette problemet kan lett løses uten å kunne cheksummen. Jeg skal prøve å lage et lite program son kan styre disse bryterne fra kommandolinjen:

eccmd xxxx bbbb 0-15

Hvor xxxx er hous code i hex
bbbb er checksum i binær
og 1-15 er nivå i desimal.

Trikset er at bbbb kan inneholde wildcards. Programmet prøver da alle mulige kombinasjoer av bits. Da kan man lett finne checksummen selv:

Feks prøv
0??? - virker ikke ( første bit = 1 )
10?? - virker ( andre bit = 0 )
100? - virker ( tredje bit = 0 )
1000 - virker ikke (fjerde bit = 1)

1001 vil da virke i alle tilfeller, og man bruker kun denne checksummen i sine script.

Posted: Thu Jan 18, 2018 11:08 am
by micke.prag
Här är ett litet testprogram ni kan använda för att generera GAO-koder.
Jag har tyvärr inte haft möjlighet att testa det ännu dock:

Code: Select all

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char **argv )
{
	const char ssss = 85;
	const char sssl = 84; // 0
	const char slss = 69; // 1

	const char c0 = sssl;
	const char c1 = slss;

	char txStr[100] = {
		'R', 5, 'T',
		114,60,1,1,
		105,
		ssss,ssss,
		c0,c0,c1,c1,c1,c0,c0,c0,c1,c1,c0,c0,c1,c1, //Huskod
		c0,c0, //Knapp
		c1,c0,c0,c1, //Checksum?
// 		c1,c1,c1,c1, //On
// 		c0,c0,c0,c0, //Off
		c1,c0,c1,c0, //learn
		ssss,
		'+'};

	printf("%s", txStr);
	exit(0);
}
Det är bara att pipa programmet till tdtool för att testa:

Code: Select all

./gao | tdtool --raw -

Posted: Thu Jan 18, 2018 11:08 am
by Snakehand
micke.prag wrote:Här är ett litet testprogram ni kan använda för att generera GAO-koder.
Jag har tyvärr inte haft möjlighet att testa det ännu dock:

Code: Select all

SNIP!
Det är bara att pipa programmet till tdtool för att testa:

Code: Select all

./gao | tdtool --raw -
Tusen takk. Dette fungerer som bare f*. Tusen takk, da er jeg vel berget. Jeg skal forbedre det littegran, og poster gjerne resultatet. :D :wave:

Working solution

Posted: Thu Jan 18, 2018 11:08 am
by Snakehand
Her er programmet efcmd som lar meg styre Everflourish brytere fra kommandolinje, samt "knekke" checksum koden:

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

void transmit( unsigned int device, unsigned int check, unsigned int val )
{
   const char ssss = 85;
   const char sssl = 84; // 0
   const char slss = 69; // 1

   const char bits[2] = {sssl,slss};
   int i;

   char txStr[100];


   char preamble[] = {'R', 5, 'T', 114,60,1,1,105,ssss,ssss};
   memcpy(txStr, preamble, sizeof(preamble));
   size_t pos = sizeof(preamble);

   for(i=15;i>=0;i--) txStr[pos++]=bits[(device>>i)&0x01];
   for(i=3;i>=0;i--) txStr[pos++]=bits[(check>>i)&0x01];
   for(i=3;i>=0;i--) txStr[pos++]=bits[(val>>i)&0x01];

   txStr[pos++] = ssss;
   txStr[pos++] = '+';
   txStr[pos++] = 0;

   FILE* fpipe = popen("tdtool --raw -", "w");

   if (fpipe==NULL) {
       printf("Problem with pipe.\n");
   } else {
       /* printf("%s", txStr); */
       fprintf(fpipe, "%s", txStr);
       fclose(fpipe);
   }
}


int main( int argc, char **argv )
{
    unsigned int device = 0;
    unsigned int check = 0;
    unsigned int mask = 0;
    unsigned int invmask;
    unsigned int val=0;
    int i;
    int pause = 0;

    if (argc<4) {
        printf("Usage: %s device(hex) checksum(hex/binary) value(decimal)\n", argv[0]);
        printf("  device id is 4 hex digits\n");
        printf("  checksum is either 1 hex digit, or 4 binary digits, where ?\
 acts as a wildcard\n  allowing multiple combinations to be tried at 1 second intevals.\n");
        printf("  value is 0-15, where 0=off, 15=on and 10=learn\n");
        exit(0);
    }

    sscanf(argv[1],"%x",&device);
    sscanf(argv[3],"%i",&val);

    if (strlen(argv[2])<4) {
        sscanf(argv[2],"%x",&check);
        check = check & 0x0f;
        invmask = 0x0f;
    } else {
        for (i=0; i<4;i++) {
            if (argv[2][i]=='1') {
                check |= 1 << (3-i);
            } else if (argv[2][i]=='?') {
                mask |= 1 << (3-i);
            }
        }
        invmask = mask^0x0f;
    }

    for (i=0;i<16;i++) {
        if ((i&invmask)==check) {
            printf("Sending: %04x %x %i\n",device, i, val);
            if (pause) sleep(1);
            transmit(device,i,val);
            pause = 1; /* Pause before next transmit */
        } 
    }
    
    exit(0);
}

sleep(1) kallet må muligens fjernes, siden programmet ikke kan sende 8 koder før 'learn' funksjonen stopper.

Posted: Thu Jan 18, 2018 11:08 am
by jochenbirch
Kommer ni släppa en ny version på Telldus center när ni har löst detta?
Jag köpte en Tellstick igår och naturligtvis köpte jag dessa mottagare som det inte är stöd för...