Reverse engineering luftkonditioneringen IR Remote control protocol (2 / 4 steg)
Steg 2: Samla in Data
Vi går ut.
Obs 1: kommandot inspelning är en repetitiva och lite tråkig process, men nödvändigt.
NOTE2: Jag äger inte ett oscilloskop så det enda sättet för min att rita de inspelade värdena är att använda en plottning program (gnuplot) på rådata. Detta kan användbart att ha en visuell uppfattning om vad som händer, men det kräver vissa anpassning i raw-data och är enligt min mening inte nödvändigt alls. Därför har jag inte gjort någon graf.
Jag använde instruktioner från denna sida: http://alexba.in/blog/2013/01/06/setting-up-lirc-... att ansluta mottagaren på Pi och förbereda lirc.
Jag spelade sedan in kommandon med alternativet - raw och utdata till en fil. Målet är att ha en post för varje värde för ON och bort av kursen, men också för varje läge (AUTO, COOL, värme, torr), för varje gång och fläkt värde och, säger, för min och max temperatur (16-30 ° C i mitt fall). Den viktiga delen här är att göra en referens post och göra en inspelning för varje ändring av alternativ, att göra bara ett alternativ ändra varenda gång. När en post är gjort, tryck på CTRL + C för att avsluta kommandot och gör det igen med nästa kommando/fil
$ läsläge2 -d/dev/lirc0 -m > auto_21C_swing0_fan0
Det kan vara nödvändigt att få super behörighet för att köra detta kommando ("sudo läsläge2...") och lirc daemon kan blockera filen, så det kan vara nödvändigt att döda det först:
$ sudo /etc/init.d/lirc stopp
$ sudo läsläge2 -d/dev/lirc0 -m > filnamn
$ [...]
$ sudo /etc/init.d/lirc start
När man läser de genererade filerna, vad vi ser är alla nummer, organiserade i 6 kolumner. Dessa siffrorna anger varaktigheter i mikrosekunder. Kolumnerna arbetar i par, så
740 1495 920 1345 735 1335
betyder: "IR LED var ON för 740us, sedan OFF för 1495us, sedan ON för 920us, sedan OFF för 1345us, etc."
Exemple:
3523 1766 414 451 418 1312
423 448 419 452 418 452
428 443 417 453 418 457
418 452 418 452 416 454
419 452 417 453 417 1316
418 452 418 466 410 451
419 453 414 457 416 452
418 453 417 1316 418 1315
418 1320 426 443 419 451
419 1314 419 452 418 452
418 452 418 452 418 457
419 450 420 451 419 452
421 451 417 452 418 452
418 452 419 457 418 452
418 449 422 451 418 452
419 451 420 451 426 444
418 457 418 452 417 452
419 452 416 454 420 450
418 452 419 452 419 456
418 452 418 1323 411 1313
421 451 419 451 418 452
418 452 418 454 419 9997
3521 1764 417 452 419 1315
418 449 421 452 418 453
417 453 418 451 427 448
419 453 417 453 417 452
419 452 417 453 417 1317
417 451 419 456 419 451
420 458 411 452 418 452
416 455 418 1315 418 1315
418 1321 417 452 419 452
416 1318 418 452 418 451
419 451 419 452 418 457
418 452 418 452 420 448
422 451 419 457 412 452
417 452 419 457 418 1315
417 453 419 449 421 452
418 452 418 452 418 453
424 450 418 453 419 1314
418 452 418 452 418 1316
418 1315 417 453 418 465
410 452 419 452 416 453
418 452 418 452 418 452
418 453 417 1338 418 1316
415 1318 418 1315 419 1314
418 452 418 1315 419 449
421 1328 410 452 418 453
417 452 418 452 420 450
419 451 417 455 416 457
419 451 418 452 419 452
419 453 417 453 417 453
418 451 419 456 418 453
418 1315 418 1315 418 452
419 459 411 451 419 451
416 460 418 452 419 451
418 453 417 453 418 451
418 1315 419 1313 420 458
425 445 413 460 418 445
422 452 418 452 418 452
418 452 419 455 421 450
420 463 407 452 417 452
418 453 418 452 418 452
418 457 418 450 421 452
418 452 417 453 419 451
424 445 419 451 419 1321
417 453 417 454 416 452
418 452 419 452 418 452
418 452 418 468 408 452
417 1313 422 1314 418 452
420 451 418 452 418 452
419 456 418 453 416 454
418 1315 417 452 418 1315
418 452 418 1316 418 451
422
OK, det verkar vansinniga :)
Observera att filen börjar med en rad med ett enda värde: det är tid som förflutit mellan inspelning startdatum och ankomsten av den första IR-signalen. Denna linje bör ignoreras.
Naturligtvis, eftersom dessa åtgärder, med en så liten som mikrosekund tidsskala är alla tiderna annorlunda, vilket gör att upptäcka små skillnader mellan 2 kommandon omöjligt.
Det kan noteras att värden är alltid nära 400 eller 1300us, utom 3 (närmare 4400, 9900 och 1700). Så vad vi ska göra för att göra siffrorna jämförbara är "runda" nummer till närmast av dessa 2 "referens" (ett kalkylblad är praktiskt först).
Vad denna manipulation visar är att förutom de 3 singulära värdena på tid är alltid 400us, vilka ändringar är endast den OFF tid.
Låt oss göra hypotesen att den OFF tid koder 0 och 1, och låt oss anta att 400us är för 0 och 1300us för 1. Med detta antagande är det möjligt att ändra varje parar av kolonner till en enda bit.
Låt oss också göra ett påpekande: delen mellan 3 "singular timings" är alltid samma, i alla inspelningar. Det kan antas att:
-Det är en inledning, kanske identifiera fjärrkontrollen eller luftkonditioneringen, och det kommer aldrig att ändra
-de olika tiderna är lås och avgränsare mellan införandet och faktiska nyttolasten
Det går därför att ta del av meddelandet som ett invariant och inte studera den.
För att underlätta för att utnyttja data skrev jag ett litet c program att runda värdena och omvandla det till binära siffror. Hoppa över intro del för att underlätta läsa koden. Om du vill använda den här koden timing värdena är definierade i början av programmet, kommer du förmodligen behöva anpassas.
Efter sammanställningen (gcc -o avkoda decode.c) du kan använda den på alla datafiler:
$. / avkoda auto_21C_swing0_Fan0 auto_21C_swing0_Fan0.decoded
Exempel med läge auto target temperaturen 25 ° C:
$ mer auto_25.decode
01000000 00000100 00000111 00100000 00000000 10000000 01001100 00000001 11110101 00000000 00000000 01100000 00000110 00000000 00000000 00000001 00000000 01100000 00101010