#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; }