///////////////////// // Domoticz Classe ///////////////////// #include "Domoticz.h" #include #include #define NO_THERMISTANCE true void handleRoot(void); int getValueFromParam(); void setPwm(int pwm); Ticker flipper; Domoticz domo("192.168.1.3", "81", "Livebox-37cc", "8A6060920A8A86896F770F2C47"); IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 0, 0); IPAddress DNS(192, 168, 1, 1); // https://learn.adafruit.com/thermistor/using-a-thermistor #ifndef NO_THERMISTANCE // which analog pin to connect #define THERMISTORPIN A0 // resistance at 25 degrees C #define THERMISTORNOMINAL 11200 // temp. for nominal resistance (almost always 25 C) #define TEMPERATURENOMINAL 20 // how many samples to take and average, more takes longer // but is more 'smooth' #define NUMSAMPLES 5 // The beta coefficient of the thermistor (usually 3000-4000) #define BCOEFFICIENT 3950 // the value of the 'other' resistor #define SERIESRESISTOR 6700 #define DOMOTICZ_DEVICE_ID 1154 uint16_t samples[NUMSAMPLES]; #endif // DIMMER ESP8266WebServer server(80); void ICACHE_RAM_ATTR handleInterrupt(); // Dimmer #include // #define LEDn 15 #define outputPin 13 #define zerocross 12 // for boards with CHANGEBLE input pins #define pas 5 dimmerLamp dimmer(outputPin, zerocross); //initialase port for dimmer for ESP8266, ESP32, Arduino due boards //dimmerLamp dimmer(outputPin); //initialase port for dimmer for MEGA, Leonardo, UNO, Arduino M0, Arduino Zero int outVal = 0; String webpage = R"=(

ON

PWM plus

PWM minus

PWM stop

PWM exact

@@pwmCount@@

)="; bool led; int pwm; int pwmCount; void ledON(){ led=1; digitalWrite(LEDn, led); handleRoot(); } void ledOFF(){ led=0; digitalWrite(LEDn, led); handleRoot(); } //pwm functions - if pwm is set to 1/-1 it will in-/decrease pwmCounter in loop() void exact(){ int value_to_set = getValueFromParam(); pwm=value_to_set; pwmCount = pwm; if (pwmCount>100) pwmCount = 100; if (pwmCount < 0) { pwmCount = 0; ledOFF(); } else { ledON(); } Serial.println(pwmCount); dimmer.setPower(pwmCount); handleRoot(); } void plus(){ int value_to_set = getValueFromParam(); pwm=value_to_set; setPwm(pwm); handleRoot(); } void minus(){ int value_to_set = getValueFromParam(); pwm=-value_to_set; setPwm(pwm); handleRoot(); } void stopPWM(){ pwm=-pwmCount; setPwm(pwm); ledOFF(); handleRoot(); } void setPwm(int pwm) { pwmCount += pwm; if (pwmCount>100) pwmCount = 100; if (pwmCount < 0) { pwmCount = 0; ledOFF(); } else { ledON(); } Serial.println(pwmCount); dimmer.setPower(pwmCount); } //---------------------------------------------------------------------------------- void handleRoot(void){ String page = webpage; page.replace("@@pwmCount@@", String(pwmCount)); //Serial.println(page); server.send(200, "text/html", page); } int getValueFromParam() { String message = "Number of args received:"; message += server.args(); for (int i = 0; i < server.args(); i++) { message = message + ("Arg nº" + String(i) + " –> "); message = message + (server.argName(i) + ": "); message = message + (server.arg(i) + "\n"); if (server.argName(i) == "value") { return String(server.arg(i)).toInt(); } } Serial.println(message); return pas; } void setup() { Serial.begin(115200); //delay(200); String macId = domo.generateKey(); IPAddress ip = domo.getIP(macId); // Conversion d'objet en pointeur domo.initWifiStatic(ip, gateway, subnet, DNS); //Server________________________________ server.begin(); server.on("/", handleRoot); server.on("/LEDon", ledON); server.on("/LEDoff", ledOFF); server.on("/minus", minus); server.on("/plus", plus); server.on("/exact", exact); server.on("/stop", stopPWM); //initialize variables__________________ pwm = 0; pwmCount= 0; led = 0; Serial.print("Module IP: "); Serial.println(WiFi.softAPIP()); // Dimmer Serial.println("Dimmer Program is starting..."); delay(1000); dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE) Serial.println("Set value"); dimmer.setPower(pwmCount); // setPower(0-100%); // send temperature every 30s // flipper.attach(30, flip); } #ifndef NO_THERMISTANCE void flip() { uint8_t i; float average; // take N samples in a row, with a slight delay for (i=0; i< NUMSAMPLES; i++) { samples[i] = analogRead(THERMISTORPIN); delay(10); } // average all the samples out average = 0; for (i=0; i< NUMSAMPLES; i++) { average += samples[i]; } average /= NUMSAMPLES; Serial.print("Average analog reading "); Serial.println(average); // convert the value to resistance average = 1023 / average - 1; average = SERIESRESISTOR / average; Serial.print("Thermistor resistance "); Serial.println(average); float steinhart; steinhart = average / THERMISTORNOMINAL; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= 273.15; // convert to C Serial.print("Temperature "); Serial.print(steinhart * 1.25); Serial.println(" *C"); printInfo(steinhart * 1.25); } #endif long temps = 0; void loop() { server.handleClient(); #ifndef NO_THERMISTANCE if (millis() > temps + 30000) { flip(); temps = millis(); } #endif // sleep(300); // delay(5000); } //void sleep(int sleepTime) //{ // Serial.print("Go to sleep "); // Serial.println(sleepTime); // delay(20); // // ESP.deepSleep(sleepTime * 1000000L); // // //sleepWifi(); // delay(200); //} #ifndef NO_THERMISTANCE void printInfo(double temperature) { // Domoticz format /json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT;BAR;BAR_FOR boolean connected = domo.connect(); if (connected) { Serial.println("Dans set temperature"); String svalue = String(temperature) ; Serial.println(svalue); domo.executeJson("/json.htm?type=command¶m=udevice&idx=1154", svalue, "0"); domo._client.stop(); delay(200); } Serial.print("Time = "); Serial.println(millis()); delay(200); } #endif