82 lines
2.4 KiB
C++
82 lines
2.4 KiB
C++
|
#include "DeviceIrTx.h"
|
||
|
|
||
|
void DeviceIrTx::deviceSetup() {
|
||
|
// pinMode(pin_irtx, OUTPUT); // this is done by begin()
|
||
|
irsend.begin();
|
||
|
}
|
||
|
|
||
|
bool DeviceIrTx::irTxHandler(String message) {
|
||
|
DynamicJsonBuffer json_inBuffer;
|
||
|
JsonObject& json_in = json_inBuffer.parseObject(message);
|
||
|
if (json_in.success()) {
|
||
|
unsigned long data = 0;
|
||
|
int nbits = 0;
|
||
|
if (json_in.containsKey("data")) {
|
||
|
data = json_in["data"];
|
||
|
}
|
||
|
if (json_in.containsKey("nbits")) {
|
||
|
nbits = json_in["nbits"];
|
||
|
}
|
||
|
if (json_in.containsKey("protocol")) {
|
||
|
String protocol = json_in["protocol"];
|
||
|
protocol.toUpperCase();
|
||
|
Serial.print("IR-Tx: sending ");
|
||
|
Serial.print(data);
|
||
|
Serial.print(" (");
|
||
|
Serial.print(nbits);
|
||
|
Serial.print(") via ");
|
||
|
Serial.print(protocol);
|
||
|
Serial.println(" Protocol");
|
||
|
for (int i = 0; i < 5; i++) {
|
||
|
if (protocol == "NEC") {
|
||
|
irsend.sendNEC(data, nbits);
|
||
|
} else if (protocol == "SONY") {
|
||
|
irsend.sendSony(data, nbits);
|
||
|
} else if (protocol == "RC5") {
|
||
|
irsend.sendRC5(data, nbits);
|
||
|
} else if (protocol == "RC6") {
|
||
|
irsend.sendRC6(data, nbits);
|
||
|
} else if (protocol == "DISH") {
|
||
|
irsend.sendDISH(data, nbits);
|
||
|
} else if (protocol == "SHARP") {
|
||
|
irsend.sendSharp(data, nbits);
|
||
|
} else if (protocol == "PANASONIC") {
|
||
|
irsend.sendPanasonic(data, nbits);
|
||
|
/* JVC needs a repeat parameter, will be implemented if necessary
|
||
|
} else if (protocol == "JVC") {
|
||
|
int repeat = 0;
|
||
|
irsend.sendJVC(data, nbits, repeat);
|
||
|
*/
|
||
|
/* Sanyo and Mitsubishi aren't implemented in the library
|
||
|
} else if (protocol == "SANYO") {
|
||
|
irsend.sendSanyo(data, nbits);
|
||
|
} else if (protocol == "MITSUBISHI") {
|
||
|
irsend.sendMitsubishi(data, nbits);
|
||
|
*/
|
||
|
} else if (protocol == "SAMSUNG") {
|
||
|
irsend.sendSAMSUNG(data, nbits);
|
||
|
} else if (protocol == "LG") {
|
||
|
irsend.sendLG(data, nbits);
|
||
|
} else if (protocol == "WHYNTER") {
|
||
|
irsend.sendLG(data, nbits);
|
||
|
} else {
|
||
|
Serial.println("IR protocol not implemented");
|
||
|
}
|
||
|
delay(40);
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
Serial.println("parsing of JSON failed");
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void DeviceIrTx::deviceRegister() {
|
||
|
irTxNode.subscribe("irtx", [this](String value) { return irTxHandler(value); });
|
||
|
Homie.registerNode(irTxNode);
|
||
|
}
|
||
|
|
||
|
void DeviceIrTx::deviceLoop() {
|
||
|
return;
|
||
|
}
|