Signalduino mit IR-Sender

Begonnen von dad401, 28 Dezember 2019, 16:09:10

Vorheriges Thema - Nächstes Thema

dad401

Mich würde interessieren, ob es Sinn macht, den Signalduino standardmäßig mit der Möglichkeit IR-Signale zu versenden zu erweitern.

Ich habe das ganze an den aktuellen Sourcen unter Verwendung der IRRemote-Library mal getestet. Problem ist eventuell, dass IRRemote beim Senden fest mit PIN 3 verknüpft ist - der gleiche Sende-PIN wie beim Sigduino (CC1101).

Ob man dies durch Umbiegen der Timer hinbekommen könnte, kann ggf. jemand mit mehr Wissen hierzu beurteilen. Ich habe einfach den PIN belassen und der Praxistest zeigt, dass es im Grunde nichts ausmacht ob jetzt ein RF oder IR Signal an PIN anliegt.

Auf die schnelle und simpel habe ich hierzu die commands.h erweitert:


#include <IRremote.h>
IRsend irsend; // SEND PIN 3
int irbits=0;
char *pEnd;
...
    #define  cmd_ir 'I'
...
      MSG_PRINT(cmd_ir); MSG_PRINT(FPSTR(TXT_BLANK));
...
    case cmd_ir:
      irbits = (IB_1[2] - 48) * 10 + (IB_1[3] - 48);
      MSG_PRINT("bits: ");
      MSG_PRINT(irbits);
      MSG_PRINT(" data: ");
      MSG_PRINT(strtoul(&IB_1[4], &pEnd, 16));

      switch (IB_1[1])
      {
        case 'N':
          MSG_PRINTLN(" protocol: NEC");
          irsend.sendNEC(strtoul(&IB_1[4], &pEnd, 16), irbits);
          break;
        case '5':
          MSG_PRINTLN(" protocol: RC5");
          irsend.sendRC5(strtoul(&IB_1[4], &pEnd, 16), irbits);
          break;
        case '6':
          MSG_PRINTLN(" protocol: RC6");
          irsend.sendRC6(strtoul(&IB_1[4], &pEnd, 16), irbits);
          break;
        case 'M':
          MSG_PRINTLN(" protocol: SAMSUNG");
          irsend.sendSAMSUNG(strtoul(&IB_1[4], &pEnd, 16), irbits);
          break;
        case 'L':
          MSG_PRINTLN(" protocol: LG");
          irsend.sendLG(strtoul(&IB_1[4], &pEnd, 16), irbits);
          break;
        case 'D':
          MSG_PRINTLN(" protocol: Denon");
          irsend.sendDenon(strtoul(&IB_1[4], &pEnd, 16), irbits);
          break;
        case 'S':
          MSG_PRINTLN(" protocol: Sony");
          irsend.sendSony(strtoul(&IB_1[4], &pEnd, 16), irbits);
          break;
         default:
          MSG_PRINTLN(" use: I<prot><bits><data>");
          break;
      }   
    break;


Alle IR-Protokolle von IRRemote sind nicht eingebaut - einige würden aufwändigere Parameterübergaben benötigen. Ebenso fehlt die Abfrage von falschen Eingaben. POC eben (Proof of Concept).

Meinen Dyon-TV kann ich nun mit "set sigduino raw IN324FB4AB5" einschalten.

Ganz simpel gehalten: IPxxyyyyyyyyyy
I => IR senden
P => Protokoll, z.B. N für NEC
xx => bits
yyyyy... => Sendecode in Hex (aktuell maximal 10 Zeichen, da IB_1 im Sigduino mit 14 Zeichen definiert ist, was ich belassen habe)

Für meine Anwendungszwecke reicht dies aus.

Anregungen / Anmerkungen sind gerne erwünscht...


--
aktuelles FHEM auf einem RPI3 mit
HM-MOD-RPI-PCB, CUL868, nanoCUL (868MHz), Signalduino (433MHz), SignalESP (433 MHz) zur Nutzung folgender Systeme:
FS20/Homematic/IT-Steckdosen/OW/Sonstiges