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));