I thought I'd report back with my code. The sensor is up and running. I don't like that I just had to present switches but I'm not skilled enough to use the "custom" field and make a control in Vera. (On/Off, Blue, Red, Green, Motion) So this will have to do for now. It's probably OK as I'm just going to use automation to actuate the switches.
/**
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2015 Sensnology AB
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
*
*Power= 010101101010010100000001
*Red= 010101101010010100000010
*Green= 010101101010010100001000
*Blue= 010101101010010100001110
*down = 010101101010010100000100
*up= 010101101010010100010110
Decimal: 5678338 (24Bit) Binary: 010101101010010100000010 Tri-State: not applicable PulseLength: 310 microseconds Protocol: 1
Raw data: 9624,192,1032,808,416,232,988,840,384,256,964,872,360,876,340,288,936,884,336,288,936,888,336,284,936,284,940,884,340,284,936,884,340,284,936,288,936,284,940,284,936,284,940,284,936,884,336,288,936,
*
*
*
*
*
*/
// Enable debug prints to serial monitor
#define MY_DEBUG
#define MY_RF24_PA_LEVEL RF24_PA_LOW
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
// Enable repeater functionality for this node
//#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#include <RCSwitch.h>
#define POWER_BUTTON 1
#define RED_BUTTON 2
#define GREEN_BUTTON 3
#define BLUE_BUTTON 4
#define NoMotion_BUTTON 5
#define MedMotion_BUTTON 6
#define FastMotion_BUTTON 7
unsigned long delay_time = 500;
bool state;
MyMessage msg_power(POWER_BUTTON,V_LIGHT);
MyMessage msg_red(RED_BUTTON,V_LIGHT);
MyMessage msg_green(GREEN_BUTTON,V_LIGHT);
MyMessage msg_blue(BLUE_BUTTON,V_LIGHT);
MyMessage msg_NoMotion(NoMotion_BUTTON,V_LIGHT);
MyMessage msg_MedMotion(MedMotion_BUTTON,V_LIGHT);
MyMessage msg_FastMotion(FastMotion_BUTTON,V_LIGHT);
RCSwitch mySwitch = RCSwitch();
void before() {
}
void setup() {
mySwitch.enableTransmit(8);
mySwitch.setPulseLength(298);
mySwitch.setRepeatTransmit(2);
}
void presentation()
{
// Send the sketch version information to the gateway and Controller
sendSketchInfo("Christmas Laser Control", "1.0");
present (POWER_BUTTON, S_LIGHT);
present (RED_BUTTON, S_LIGHT);
present (GREEN_BUTTON, S_LIGHT);
present (BLUE_BUTTON, S_LIGHT);
present (NoMotion_BUTTON, S_LIGHT);
present (MedMotion_BUTTON, S_LIGHT);
present (FastMotion_BUTTON, S_LIGHT);
}
void loop() {
// if (state) {
// Serial.println("State is true");
//send(msg.set(state?false:true), false); // Send new state and request ack back
// send(msg.setSensor(RED_CONTROLLER).set(0));
// state = false;
// }
}
void receive(const MyMessage &message) {
// We only expect one type of message from controller. But we better check anyway.
if (message.isAck()) {
Serial.println("This is an ack from gateway");
}
if (message.type==V_LIGHT) {
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
if (message.getBool()){
if (message.sensor == POWER_BUTTON) {
Serial.println ("Sending POWER data");
mySwitch.send("010101101010010100000001");
Serial.println ("Turn POWER_BUTTON off in Vera");
send(msg_power.setSensor(POWER_BUTTON).set(0), true);
}
else if (message.sensor == RED_BUTTON) {
Serial.println ("Sending RED data");
mySwitch.send("010101101010010100000010");
Serial.println ("Turn RED_BUTTON off in Vera");
send(msg_red.setSensor(RED_BUTTON).set(0), true);
}
else if (message.sensor == GREEN_BUTTON) {
Serial.println ("Sending GREEN data");
mySwitch.send("010101101010010100001000");
Serial.println ("Turn GREEN_BUTTON off in Vera");
send(msg_green.setSensor(GREEN_BUTTON).set(0), true);
}
else if (message.sensor == BLUE_BUTTON) {
Serial.println ("Sending BLUE data");
mySwitch.send("010101101010010100001110");
Serial.println ("Turn BLUE_BUTTON in Vera");
send(msg_blue.setSensor(BLUE_BUTTON).set(0), true);
}
else if (message.sensor == NoMotion_BUTTON) {
Serial.println ("Sending No Motion data");
mySwitch.send("010101101010010100000100");
delay(delay_time);
mySwitch.send("010101101010010100000100");
delay(delay_time);
mySwitch.send("010101101010010100000100");
Serial.println ("Turn No Motion in Vera");
send(msg_blue.setSensor(NoMotion_BUTTON).set(0), true);
}
else if (message.sensor == MedMotion_BUTTON) {
Serial.println ("Sending Medium Motion data");
mySwitch.send("010101101010010100000100");//down
delay(delay_time);
mySwitch.send("010101101010010100000100");//down
delay(delay_time);
mySwitch.send("010101101010010100010110");//up
Serial.println ("Turn Medium Motion in Vera");
send(msg_blue.setSensor(MedMotion_BUTTON).set(0), true);
}
else if (message.sensor == FastMotion_BUTTON) {
Serial.println ("Sending Fast Motion data");
mySwitch.send("010101101010010100010110");
delay(delay_time);
mySwitch.send("010101101010010100010110");
delay(delay_time);
mySwitch.send("010101101010010100010110");
Serial.println ("Turn Fast Motion in Vera");
send(msg_blue.setSensor(FastMotion_BUTTON).set(0), true);
}
}
// Store state in eeprom
// saveState(message.sensor, message.getBool());
}
}