diff --git a/ESP32/StadlerHomeKitUpgrade/DEV_LED.h b/ESP32/StadlerHomeKitUpgrade/DEV_LED.h new file mode 100644 index 0000000..ebea3ab --- /dev/null +++ b/ESP32/StadlerHomeKitUpgrade/DEV_LED.h @@ -0,0 +1,92 @@ +extern int RedHomeKit; +extern int GreenHomeKit; +extern int BlueHomeKit; + + +struct DEV_RgbLED : Service::LightBulb { // RGB LED (Command Cathode) + + SpanCharacteristic *power; // reference to the On Characteristic + SpanCharacteristic *H; // reference to the Hue Characteristic + SpanCharacteristic *S; // reference to the Saturation Characteristic + SpanCharacteristic *V; // reference to the Brightness Characteristic + + DEV_RgbLED() : Service::LightBulb(){ // constructor() method + + power=new Characteristic::On(); + H=new Characteristic::Hue(100); // instantiate the Hue Characteristic with an initial value of 0 out of 360 + S=new Characteristic::Saturation(100); // instantiate the Saturation Characteristic with an initial value of 0% + V=new Characteristic::Brightness(100); // instantiate the Brightness Characteristic with an initial value of 100% + V->setRange(5,100,1); // sets the range of the Brightness to be from a min of 5%, to a max of 100%, in steps of 1% + + char cBuf[128]; + Serial.print(cBuf); + + } // end constructor + + boolean update(){ // update() method + + boolean p; + float v, h, s, r, g, b; + + h=H->getVal(); // get and store all current values. Note the use of the template to properly read the values + s=S->getVal(); + v=V->getVal(); // though H and S are defined as FLOAT in HAP, V (which is brightness) is defined as INT, but will be re-cast appropriately + p=power->getVal(); + + char cBuf[128]; + LOG1(cBuf); + + if(power->updated()){ + p=power->getNewVal(); + sprintf(cBuf,"Power=%s->%s, ",power->getVal()?"true":"false",p?"true":"false"); + } else { + sprintf(cBuf,"Power=%s, ",p?"true":"false"); + } + LOG1(cBuf); + + if(H->updated()){ + h=H->getNewVal(); + sprintf(cBuf,"H=%.0f->%.0f, ",H->getVal(),h); + } else { + sprintf(cBuf,"H=%.0f, ",h); + } + LOG1(cBuf); + + if(S->updated()){ + s=S->getNewVal(); + sprintf(cBuf,"S=%.0f->%.0f, ",S->getVal(),s); + } else { + sprintf(cBuf,"S=%.0f, ",s); + } + LOG1(cBuf); + + if(V->updated()){ + v=V->getNewVal(); + sprintf(cBuf,"V=%.0f->%.0f ",V->getVal(),v); + } else { + sprintf(cBuf,"V=%.0f ",v); + } + LOG1(cBuf); + + LedPin::HSVtoRGB(h,s/100.0,v/100.0,&r,&g,&b); // since HomeKit provides S and V in percent, scale down by 100 + + int R, G, B; + + // if (trurOnFlag == 1){ + // p = 1; + // } + + R=p*r*100; // since LedPin uses percent, scale back up by 100, and multiple by status fo power (either 0 or 1) + G=p*g*100; + B=p*b*100; + + RedHomeKit = R; + GreenHomeKit = G; + BlueHomeKit = B; + + sprintf(cBuf,"RGB=(%d,%d,%d)\n",R,G,B); + LOG1(cBuf); + + return(true); // return true + } +}; \ No newline at end of file diff --git a/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino b/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino index 64cdd80..e2030ae 100644 --- a/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino +++ b/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino @@ -5,6 +5,9 @@ #include "DHT.h" #include #include +#include "HomeSpan.h" +#include "DEV_LED.h" + #define Version "0.3.3" @@ -67,6 +70,11 @@ BH1750 lightMeter; //MAIN VALUES VARIABLES +// homekit +int RedHomeKit = 0; +int GreenHomeKit = 0; +int BlueHomeKit = 0; + int8_t resetVal = 0; int8_t fanSpeedVal = 1; int8_t hygrostatVal = 55; @@ -171,7 +179,7 @@ uint32_t Wheel(byte pos) { } void setup() { - Serial.begin(9600); + Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); } @@ -215,9 +223,31 @@ void setup() { } else { dimmVal = 24; } -} +// ##### HOME SPAN + homeSpan.setPairingCode("11122333"); + homeSpan.setQRID("111-22-333"); +// konfiguracja WIFI przez port szerefowy "W