/** * Calibrate Power / consumption PWM by another meter with StromLog * Version 0.01 * 16.04.2024 P. Rebesky * author Creator P.Rebesky * Copyright (©): 2024-2028 by Peter Rebesky * This code can use in private cases only. Every business or companies using of this codes or codes parts is required an approval of us (me) * Every private using can exchange some parts of code or modify some code-lines. This code is allowed change for private use only. * This software is basicly owned by Peter Rebesky and any comercial using is forbidden without approval of us (me). **/ #ifndef CALIBRATE_CLIENT_H_ #define CALIBRATE_CLIENT_H_ #define countConsumption 0 #define minConsumption 1 #define maxConsumption 2 #define CaliLength 55 #include "global.h" #include "configPWR.h" extern bool getConsumptionMeter(String meterIP); extern int decodeValue(); extern void turnAllOff(); extern int calculatePower(); extern controlRelais relais; bool _calibrationON=false; int _actualConsumptionCheck=0; int _timerOfCalibration=0; int _powerBefore=0; int _scanValues[3]; int _caliPointer=0; int _scanCurve[CaliLength][3]; const char HTTP_JS_CALIBRATION[] PROGMEM =""; bool getControllConsumption(){ bool ret=false; if(getConsumptionMeter(cPWR.getTargetMeter())){ _actualConsumptionCheck = decodeValue(); ret=true; } else _actualConsumptionCheck= -1; return ret; } int calculateCalibration(){ int calc=0; if(_scanValues[countConsumption]>1){ calc= (_scanValues[maxConsumption] - _scanValues[minConsumption]) / _scanValues[countConsumption]; } return calc; } void saveScanConsumption(int valueA, int valueB, int valuePWM){ _scanCurve[_caliPointer][0]=valuePWM; _scanCurve[_caliPointer][1]=valueA; _scanCurve[_caliPointer][2]=valueB; _caliPointer++; if(_caliPointer >= CaliLength) _caliPointer=0; } String readScanConsumption(){ String ret=HTTP_ANSWERJSON; _caliPointer=0; ret += "{"; //"V1":[1713897790,0], for(int i=0;i"; ret+= time; ret+=" seconds.


Scanning Leistung

"; ret += "Scan count: "; ret+=0; ret+="
"; ret += "PWM Leistung: "; ret+=relais.PWM_Power; ret+=" W
"; ret += "Zähler Leistung: "; ret+=_actualConsumptionCheck; ret+=" W
"; ret += "

Eingestellte Leistung: "; ret+=cPWR.getMaxConsumption(); ret+=" W
"; ret += "Gemessene Leistung: .... W

"; // ret += "

"; ret += "

"; ret += "
"; ret += "

"; ret += ""; ret += FPSTR(HTTP_JS_CALIBRATION); return ret; } bool stopCalibration(){ if(_calibrationON)turnAllOff(); // secure, when off then dont turnOff again _calibrationON=false; _timerOfCalibration=0; // digitalWrite(SecureRELAIS,OFF); // relais will switch off by controller.h after off-time delay(1000); getControllConsumption(); return _calibrationON; } void startCalibration(int scanTime){ if(!_calibrationON){ _calibrationON=true; relais.PWMvalue=255; analogWrite(PWM_OUT, relais.PWMvalue); relais.PWM_Power=0; _scanValues[countConsumption]=0; _scanValues[minConsumption]=0; _scanValues[maxConsumption]=0; #ifdef ScanCurve _timerOfCalibration=54 * scanTime; #else _timerOfCalibration=10 * scanTime; #endif _actualConsumptionCheck=0; digitalWrite(SecureRELAIS,ON); _caliPointer=0; } else stopCalibration(); } String calibrationWeb(){ return calibrationWebSite(_timerOfCalibration); } void setPWMoutput(){ if(relais.PWMvalue < 0) relais.PWMvalue=0; if(relais.PWMvalue > 255) relais.PWMvalue=255; analogWrite(PWM_OUT, relais.PWMvalue); relais.PWM_Power=calculatePower(); } void handleCalibrationScan(int consumption, int scanTime){ if(_timerOfCalibration > 0 && _calibrationON==true){ if(!getControllConsumption()) stopCalibration(); // if no data received then break else { _timerOfCalibration -= scanTime; _powerBefore=relais.PWM_Power; saveScanConsumption(_actualConsumptionCheck,_powerBefore,255-relais.PWMvalue); _scanValues[countConsumption]=255-relais.PWMvalue; delay(100); relais.PWMvalue -= 5; setPWMoutput(); } } else { stopCalibration(); } } void handleCalibration(int consumption, int scanTime){ if(_timerOfCalibration > 0 && _calibrationON==true){ if(!getControllConsumption()) stopCalibration(); // if no data received then break else { _powerBefore=relais.PWM_Power; _timerOfCalibration -= scanTime; delay(100); if(relais.PWMvalue==255){ _scanValues[minConsumption] += _actualConsumptionCheck; relais.PWMvalue=0; } else { _scanValues[maxConsumption] += _actualConsumptionCheck; relais.PWMvalue=255; _scanValues[countConsumption]++; } setPWMoutput(); } } else { stopCalibration(); } } void handleCalibrationEntry(int consumption, int scanTime){ #ifdef ScanCurve handleCalibrationScan(consumption, scanTime); #else handleCalibration(consumption, scanTime); #endif } #endif //*** CALIBRATE_CLIENT_H_