43 #define CHILD_ID_LIGHT 1 
   45 #define EPROM_LIGHT_STATE 1 
   46 #define EPROM_DIMMER_LEVEL 2 
   51 #define SN "Dimmable Light" 
   54 int16_t LastLightState=LIGHT_OFF;
 
   55 int16_t LastDimValue=100;
 
   57 MyMessage lightMsg(CHILD_ID_LIGHT, V_LIGHT);
 
   58 MyMessage dimmerMsg(CHILD_ID_LIGHT, V_DIMMER);
 
   63     int LightState=
loadState(EPROM_LIGHT_STATE);
 
   65         LastLightState=LightState;
 
   66         int DimValue=
loadState(EPROM_DIMMER_LEVEL);
 
   67         if ((DimValue>0)&&(DimValue<=100)) {
 
   69             LastDimValue=DimValue;
 
   74     SetCurrentState2Hardware();
 
   76     Serial.println( 
"Node ready to receive messages..." );
 
   84     present(CHILD_ID_LIGHT, S_DIMMER );
 
   93     if (message.
getType() == V_LIGHT) {
 
   94         Serial.println( 
"V_LIGHT command received..." );
 
   96         int lstate= atoi( message.
data );
 
   97         if ((lstate<0)||(lstate>1)) {
 
   98             Serial.println( 
"V_LIGHT data invalid (should be 0/1)" );
 
  101         LastLightState=lstate;
 
  102         saveState(EPROM_LIGHT_STATE, LastLightState);
 
  104         if ((LastLightState==LIGHT_ON)&&(LastDimValue==0)) {
 
  109             saveState(EPROM_DIMMER_LEVEL, LastDimValue);
 
  115     } 
else if (message.
getType() == V_DIMMER) {
 
  116         Serial.println( 
"V_DIMMER command received..." );
 
  117         int dimvalue= atoi( message.
data );
 
  118         if ((dimvalue<0)||(dimvalue>100)) {
 
  119             Serial.println( 
"V_DIMMER data invalid (should be 0..100)" );
 
  123             LastLightState=LIGHT_OFF;
 
  125             LastLightState=LIGHT_ON;
 
  126             LastDimValue=dimvalue;
 
  127             saveState(EPROM_DIMMER_LEVEL, LastDimValue);
 
  130         Serial.println( 
"Invalid command received..." );
 
  135     SetCurrentState2Hardware();
 
  138 void SetCurrentState2Hardware()
 
  140     if (LastLightState==LIGHT_OFF) {
 
  141         Serial.println( 
"Light state: OFF" );
 
  143         Serial.print( 
"Light state: ON, Level: " );
 
  144         Serial.println( LastDimValue );
 
  148     SendCurrentState2Controller();
 
  151 void SendCurrentState2Controller()
 
  153     if ((LastLightState==LIGHT_OFF)||(LastDimValue==0)) {
 
  154         send(dimmerMsg.
set((int16_t)0));
 
  156         send(dimmerMsg.
set(LastDimValue));