Building an IR Blaster
-
@hek It doesn't look like you have to create a remote ui, as Vera is able to do that for you. If you look at the SQ-Blaster and iTach plugins, they only connect the blaster to the Vera, and don't have a ui. All they have to do is show up as an IR blaster on Vera, and then the remote UI is created by individual TV devices, created on Vera. (Devices, Add Device, IR Device)
I gave the SQ Blaster plugin a test run to see what it did.
Plugin uses urn:schemas-micasaverde-com:device:IrTransmitter:1 as the device_type.
Here are a few images demonstrating that:
Plugin itself does not require remote UI. (Shows no info because I did not connect an SQ Blaster.) The plugin has nothing to be setup besides the IP address of the SQ Blaster.
Remotes are created on Vera using built-in setup menu.


Vera contains hundreds of remote codes to create remotes for different IR devices. I created an example Sony TV. (Different button menus located on the left).

Button layouts and codes can also be changed based on individual needs. (I was not able to test this because of not having an actual IR blaster to use.)

I hope this clarifies what is needed to create an IR blaster device in Vera.
I wish I could create this code myself and post it, but I have absolutely no Luup knowledge (hopefully that will change soon)
Thanks for replying!
StevenThis will be a good one! One need only consider the cost of the alternatives.
great job of working this through!
-
Hi Steven ,
Standing by to see how you get on... i do have one use case for this type of IR send device, so pls keep us updated/ask for help as you need!
Greg (mgf909)
-
Hey Steven,
I was searching on mcv forum, and found this..Click Here!!! - thought it may contain some good info for you! -
Problems I found when investigating this earlier.
- The IR codes (from the xml-files) is too large to fit in one message. They need to be splitted into 2-3 parts. The Pronto-codes also needs to be converted into something usable by the Arduino library. If a checksum is calculated they could perhaps be stored on the Arduino-side in EEPROM after transmission and be "executed" by just sending checksum to trigger IR-transmission.
- Blaster is only one-way. We might want to receive remote commands back to vera also right? Learn-mode?
SQBlaster plugin code http://code.mios.com/trac/mios_sqblaster/browser/trunk
I would be really happy if someone could pursue this and provide a PR.
-
@gregl Thanks for the link! It helps to be able to create custom IR codes, should help with Hek's problem.
@hek Would it be possible to store the IR codes on the Arduino and have them transmitted locally? Using GREGL's custom device creation, the xml could transmit a two or three-digit code that is then matched to a larger code in the Arduino.
If the received message = 001, then transmit the code. Each number represents a different remote button.
Problem or learning codes can be solved using an IR reciever, like http://www.radioshack.com/product/index.jsp?productId=2049727. Codes can be printed to the Serial and then copied into the Arduino's code.
Thank you!
-
@gregl Thanks for the link! It helps to be able to create custom IR codes, should help with Hek's problem.
@hek Would it be possible to store the IR codes on the Arduino and have them transmitted locally? Using GREGL's custom device creation, the xml could transmit a two or three-digit code that is then matched to a larger code in the Arduino.
If the received message = 001, then transmit the code. Each number represents a different remote button.
Problem or learning codes can be solved using an IR reciever, like http://www.radioshack.com/product/index.jsp?productId=2049727. Codes can be printed to the Serial and then copied into the Arduino's code.
Thank you!
@steets250 said:
@hek Would it be possible to store the IR codes on the Arduino and have them transmitted locally? Using GREGL's custom device creation, the xml could transmit a two or three-digit code that is then matched to a larger code in the Arduino.
If the received message = 001, then transmit the code. Each number represents a different remote button.
That's it!
If there are a lot of long codes, you may have a problem with memory. Look into PROGMEM if you are not already familiar with it, and store all the codes in flash.
-
A quick code that I made that should be able to work with MySensors, I just need S_IR to be set up. Any news, @hek ??
#include <IRremote.h>
#include <Sensor.h>
#include <SPI.h>
#include <EEPROM.h>
#include <RF24.h>
#define ID 1Sensor gw;
int recvLED = 13;
int numberBtns = 34; //The number of entries in irRECIEVE.
IRsend irsend;const unsigned long irTRANSMIT[] = {
0xA3C8EDDB, //Power
0xA3C8EDDB, //Volume Up
//Insert other codes.
};void setup()
{
pinMode(recvLED, OUTPUT);
digitalWrite(recvLED, LOW);gw.begin();
gw.sendSketchInfo("IR Sender and Reciever", "1.0");
gw.sendSensorPresentation(ID, S_IR);
}void loop() {
unsigned long recv_value;
if (gw.messageAvailable()) {
message_s message = gw.getMessage();if (message.header.type==V_IR_SEND) {
recv_value = atoi(message.data);
irsend.sendSony(irTRANSMIT[recv_value], 1);
Serial.println(recv_value);
}
}
} -
@steets250 said:
A quick code that I made that should be able to work with MySensors, I just need S_IR to be set up. Any news, @hek ??
News? Me? :) Sorry..
Someone need to create/design a new "urn:schemas-arduino-cc:device:ArduinoIr:1"- device on the Vera side. As I said earlier I would be glad if someone else looked into this as I'm working on other parts right now. -
@hek I think I may have just found a solution!! (Or I might have done something useless).
I the L_Arduino.lua, you have IR = {20, "urn:schemas-arduino-cc:device:ArduinoIr:1", "D_ArduinoIr1.xml", "IR "},
I simply changed it to IR = {20, "urn:schemas-arduino-cc:device:ArduinoIr:1", "D_IrTransmitter1.xml", "IR "},
and I updated the plugin. Now see what happens when I present S_IR:

And, when I create an IR device:
.MySensors doesn't crash like before, and all I had to do was change D_ArduinoIr1.xml to D_IrTransmitter.xml.
My next problem is that I can't get the Arduino to serial printout the IR message that it is receiving. I have this program set up (simplified version that I posted before):
#include <Sensor.h>
#include <SPI.h>
#include <EEPROM.h>
#include <RF24.h>
#define ID 2Sensor gw;
void setup()
{
gw.begin();
gw.sendSketchInfo("IR Transmitter", "1.0");
gw.sendSensorPresentation(ID, S_IR);
}void loop() {
if (gw.messageAvailable()) {
message_s message = gw.getMessage();
Serial.print(message.data);
}
}Seeing that I am not familiar as to how messages are sent from Vera to Arduino, I am not sure if there is something that I am missing.
Thanks for your help!
P.S. If you do not have time to further look into this, is there anyone else that would be able to help me with this? I saw that you mentioned that you are working on other things currently.
-
@steets250 said:
recv_value = atoi(message.data);
atoi means asci to int
so i presume if you are getting something back its just a number?
I had same issue, again in heater sketch.
http://forum.micasaverde.com/index.php/topic,24588.msg170887.html#msg170887try:
Serial.print(message.data);And see why you get... if its the data you expected then you should be able to use it directly???
-
@hek I think I may have just found a solution!! (Or I might have done something useless).
I the L_Arduino.lua, you have IR = {20, "urn:schemas-arduino-cc:device:ArduinoIr:1", "D_ArduinoIr1.xml", "IR "},
I simply changed it to IR = {20, "urn:schemas-arduino-cc:device:ArduinoIr:1", "D_IrTransmitter1.xml", "IR "},
and I updated the plugin. Now see what happens when I present S_IR:

And, when I create an IR device:
.MySensors doesn't crash like before, and all I had to do was change D_ArduinoIr1.xml to D_IrTransmitter.xml.
My next problem is that I can't get the Arduino to serial printout the IR message that it is receiving. I have this program set up (simplified version that I posted before):
#include <Sensor.h>
#include <SPI.h>
#include <EEPROM.h>
#include <RF24.h>
#define ID 2Sensor gw;
void setup()
{
gw.begin();
gw.sendSketchInfo("IR Transmitter", "1.0");
gw.sendSensorPresentation(ID, S_IR);
}void loop() {
if (gw.messageAvailable()) {
message_s message = gw.getMessage();
Serial.print(message.data);
}
}Seeing that I am not familiar as to how messages are sent from Vera to Arduino, I am not sure if there is something that I am missing.
Thanks for your help!
P.S. If you do not have time to further look into this, is there anyone else that would be able to help me with this? I saw that you mentioned that you are working on other things currently.
@steets250 said:
P.S. If you do not have time to further look into this, is there anyone else that would be able to help me with this? I saw that you mentioned that you are working on other things currently.
try to use a simple binary switch first
try to use a change of state:
if (gw.messageAvailable())to then trigger a get:
gw.getStatus(CHILD_ID, V_VAR1);vera side, send a new variable to V_VAR1 (variable 1) and then toggle the switch
once you grab the number in the arduino,, toggle the switch off and you are ready for the next command
-
@steets250 said:
P.S. If you do not have time to further look into this, is there anyone else that would be able to help me with this? I saw that you mentioned that you are working on other things currently.
try to use a simple binary switch first
try to use a change of state:
if (gw.messageAvailable())to then trigger a get:
gw.getStatus(CHILD_ID, V_VAR1);vera side, send a new variable to V_VAR1 (variable 1) and then toggle the switch
once you grab the number in the arduino,, toggle the switch off and you are ready for the next command
@BulldogLowell I have tested this with a binary switch. I was able to serial print the 1 and 0 as it turned on and off as well as print a variable...
Just remembered that there was a V_IR_SEND and V_IR_RECEIVE.I will check that out now and tell you what I see.
-
@BulldogLowell I have tested this with a binary switch. I was able to serial print the 1 and 0 as it turned on and off as well as print a variable...
Just remembered that there was a V_IR_SEND and V_IR_RECEIVE.I will check that out now and tell you what I see.
@BulldogLowell Ummm... How do I print gw.getStatus to Serial? :confused:
-
@BulldogLowell Ummm... How do I print gw.getStatus to Serial? :confused:
for an integer:
if (message.header.type==V_VAR1) { int yourNumber = atoi(message.data); Serial.println(yourNumber); }For a string:
if (message.header.type==V_VAR1) { String yourText = String(message.data); Serial.println(yourText); } -
for an integer:
if (message.header.type==V_VAR1) { int yourNumber = atoi(message.data); Serial.println(yourNumber); }For a string:
if (message.header.type==V_VAR1) { String yourText = String(message.data); Serial.println(yourText); }@BulldogLowell Got it. Thanks!
-
Nothing... It must have to do with the MySensors plugin not relaying the message back to the Arduino. This is probably because Hek was not done with the IR part of MySensors. As you have seen from previous posts, I changed the Lua file, but something else probably needed to be changed in order to send the IR code back to Vera. BTW - Code I used: (I used both RECEIVE and SEND because I didn't know which was from Vera to Arduino.)
void loop() {
message_s message = gw.getMessage();
if (message.header.type==V_IR_RECEIVE) {
String yourText1 = String(message.data);
Serial.println(yourText1);
if (message.header.type==V_IR_SEND) {
String yourText2 = String(message.data);
Serial.println(yourText2);
}
}
}Thanks everyone for the support with the IR project!! :smile: :clap: I think someone just needs to fiddle with the code some more.
-
@steets250 said:
someone
you? ;-)
Do you get anything back froom the plugin like "no implementation" or similar?
Any clues in the <verip>/cgi-bin/cmh/log.sh?Device=LuaUPnP log? -
Unfortunately, I don't know Luup, the only change that I made to the .lua file was to change a file name.
The log gives me this when I send out an IR code:
08 06/05/14 22:04:32.359 JobHandler_LuaUPnP::HandleActionRequest argument ProntoCode=0000 0068 0000 000D 0060 0018 0018 0018 0030 0018 0030 0018 0030 0018 0018 0018 0030 0018 0018 0018 0030 0018 0018 0018 0018 0018 0018 0018 0018 03EC <0x2d18b680>
02 06/05/14 22:04:32.359 Device_LuaUPnP::HandleActionRequest 55 none of the 1 implementations handled it <0x2d18b680>
01 06/05/14 22:04:32.809 ZZZ-A2 2 <0x2d18b680>
01 06/05/14 22:04:32.809 ZZZ-1 2 <0x2d18b680>
01 06/05/14 22:04:32.809 ZZZ-1b 0xb52db8 <0x2d18b680>
08 06/05/14 22:04:32.810 JobHandler_LuaUPnP::HandleActionRequest device: 55 service: urn:micasaverde-com:serviceId:IrTransmitter1 action: SendProntoCode <0x2d18b680>I want to see 0x2d18b680 come up on the serial, but I get nothing. I did also test to make sure that the Arduino was sending out serial messages.
If any one want to give it a try, replace the existing file with the one below (one one small change, nothing else is affected), and then use the code I posted previously. After the IR device is added to Vera, go to Devices, Add Device, IR Device, Ok, Select the IR Transmitter, and Choose Guided Setup. Then pick a random brand and try a code.
I will sign off for now. Let me know if you get anything!