mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-07 20:16:55 +03:00
V14.1 backport to rolling (#2058)
* Migrate parameters to v14.1 branch (#2023) * Migrated parameters * - * . * . * . * . * . * Remove unneeded checkboxes for true/false * Remove ";" * Correct MaintTopic * Added missing parameters to UI: FlipImageSize, InitialMirror Removed checkbox in UI for ErrorMessage Added migration of pboolean parameters: enable them if they where disabled, set them to their default value, then enable them Switch SetRetainFlag internally to a boolean * . * CamImages -> RawImages * CamImages -> RawImages * catch error on unknown parameter * fix missing case insensitivity * fix typo * fixmissing rename * fix migration of ExtendedResolution * Delete ClassFlowMakeImage.cpp * Delete ClassFlowMakeImage.h --------- Co-authored-by: CaCO3 <caco@ruinelli.ch> Co-authored-by: jomjol <30766535+jomjol@users.noreply.github.com> * Update Changelog.md --------- Co-authored-by: CaCO3 <caco@ruinelli.ch> Co-authored-by: jomjol <30766535+jomjol@users.noreply.github.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
**Rolling**
|
**Rolling**
|
||||||
@@ -24,6 +25,13 @@
|
|||||||
- n.a.
|
- n.a.
|
||||||
|
|
||||||
|
|
||||||
|
## [14.1.0] - 2023-02-21
|
||||||
|
|
||||||
|
This release only migrates some parameters, see https://github.com/jomjol/AI-on-the-edge-device/pull/2023.
|
||||||
|
|
||||||
|
It does not change any functionality of the device!
|
||||||
|
|
||||||
|
If you want to revert from a future release to an older one, this is the first release using the new parameter naming. If you want to go to an older release than this `v14.1.0`, you have to update the `config.ini` manually to the old namings!
|
||||||
|
|
||||||
## [14.0.3] -2023-02-05
|
## [14.0.3] -2023-02-05
|
||||||
|
|
||||||
@@ -830,6 +838,7 @@ External Illumination
|
|||||||
- Initial Version
|
- Initial Version
|
||||||
|
|
||||||
|
|
||||||
|
[14.1.0]: https://github.com/jomjol/AI-on-the-edge-device/compare/v14.0.3...v14.1.0
|
||||||
[14.0.0]: https://github.com/jomjol/AI-on-the-edge-device/compare/v13.0.8...v14.0.2
|
[14.0.0]: https://github.com/jomjol/AI-on-the-edge-device/compare/v13.0.8...v14.0.2
|
||||||
[13.0.8]: https://github.com/jomjol/AI-on-the-edge-device/compare/v12.0.1...v13.0.8
|
[13.0.8]: https://github.com/jomjol/AI-on-the-edge-device/compare/v12.0.1...v13.0.8
|
||||||
[13.0.7]: https://github.com/jomjol/AI-on-the-edge-device/compare/v12.0.1...v13.0.7
|
[13.0.7]: https://github.com/jomjol/AI-on-the-edge-device/compare/v12.0.1...v13.0.7
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "ClassFlowAlignment.h"
|
#include "ClassFlowAlignment.h"
|
||||||
#include "ClassFlowMakeImage.h"
|
#include "ClassFlowTakeImage.h"
|
||||||
#include "ClassFlow.h"
|
#include "ClassFlow.h"
|
||||||
#include "server_tflite.h"
|
#include "server_tflite.h"
|
||||||
|
|
||||||
@@ -46,9 +46,9 @@ ClassFlowAlignment::ClassFlowAlignment(std::vector<ClassFlow*>* lfc)
|
|||||||
|
|
||||||
for (int i = 0; i < ListFlowControll->size(); ++i)
|
for (int i = 0; i < ListFlowControll->size(); ++i)
|
||||||
{
|
{
|
||||||
if (((*ListFlowControll)[i])->name().compare("ClassFlowMakeImage") == 0)
|
if (((*ListFlowControll)[i])->name().compare("ClassFlowTakeImage") == 0)
|
||||||
{
|
{
|
||||||
ImageBasis = ((ClassFlowMakeImage*) (*ListFlowControll)[i])->rawImage;
|
ImageBasis = ((ClassFlowTakeImage*) (*ListFlowControll)[i])->rawImage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ bool ClassFlowAlignment::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
if (!this->GetNextParagraph(pfile, aktparamgraph))
|
if (!this->GetNextParagraph(pfile, aktparamgraph))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (aktparamgraph.compare("[Alignment]") != 0) //Paragraph does not fit MakeImage
|
if (aktparamgraph.compare("[Alignment]") != 0) //Paragraph does not fit Alignment
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNTy
|
|||||||
CNNType = AutoDetect;
|
CNNType = AutoDetect;
|
||||||
CNNType = _cnntype;
|
CNNType = _cnntype;
|
||||||
flowpostalignment = _flowalign;
|
flowpostalignment = _flowalign;
|
||||||
logfileRetentionInDays = 5;
|
imagesRetention = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -324,9 +324,9 @@ bool ClassFlowCNNGeneral::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
{
|
{
|
||||||
splitted = ZerlegeZeile(aktparamgraph);
|
splitted = ZerlegeZeile(aktparamgraph);
|
||||||
if ((toUpper(splitted[0]) == "LOGIMAGELOCATION") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "ROIIMAGESLOCATION") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
this->LogImageLocation = "/sdcard" + splitted[1];
|
this->imagesLocation = "/sdcard" + splitted[1];
|
||||||
this->isLogImage = true;
|
this->isLogImage = true;
|
||||||
}
|
}
|
||||||
if ((toUpper(splitted[0]) == "LOGIMAGESELECT") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "LOGIMAGESELECT") && (splitted.size() > 1))
|
||||||
@@ -335,9 +335,9 @@ bool ClassFlowCNNGeneral::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
isLogImageSelect = true;
|
isLogImageSelect = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "LOGFILERETENTIONINDAYS") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "ROIIMAGESRETENTION") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
this->logfileRetentionInDays = std::stoi(splitted[1]);
|
this->imagesRetention = std::stoi(splitted[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "MODEL") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "MODEL") && (splitted.size() > 1))
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ std::string ClassFlowControll::doSingleStep(std::string _stepname, std::string _
|
|||||||
|
|
||||||
ESP_LOGD(TAG, "Step %s start", _stepname.c_str());
|
ESP_LOGD(TAG, "Step %s start", _stepname.c_str());
|
||||||
|
|
||||||
if ((_stepname.compare("[MakeImage]") == 0) || (_stepname.compare(";[MakeImage]") == 0)){
|
if ((_stepname.compare("[TakeImage]") == 0) || (_stepname.compare(";[TakeImage]") == 0)){
|
||||||
_classname = "ClassFlowMakeImage";
|
_classname = "ClassFlowTakeImage";
|
||||||
}
|
}
|
||||||
if ((_stepname.compare("[Alignment]") == 0) || (_stepname.compare(";[Alignment]") == 0)){
|
if ((_stepname.compare("[Alignment]") == 0) || (_stepname.compare(";[Alignment]") == 0)){
|
||||||
_classname = "ClassFlowAlignment";
|
_classname = "ClassFlowAlignment";
|
||||||
@@ -67,7 +67,7 @@ std::string ClassFlowControll::doSingleStep(std::string _stepname, std::string _
|
|||||||
|
|
||||||
for (int i = 0; i < FlowControll.size(); ++i)
|
for (int i = 0; i < FlowControll.size(); ++i)
|
||||||
if (FlowControll[i]->name().compare(_classname) == 0){
|
if (FlowControll[i]->name().compare(_classname) == 0){
|
||||||
if (!(FlowControll[i]->name().compare("ClassFlowMakeImage") == 0)) // if it is a MakeImage, the image does not need to be included, this happens automatically with the html query.
|
if (!(FlowControll[i]->name().compare("ClassFlowTakeImage") == 0)) // if it is a TakeImage, the image does not need to be included, this happens automatically with the html query.
|
||||||
FlowControll[i]->doFlow("");
|
FlowControll[i]->doFlow("");
|
||||||
result = FlowControll[i]->getHTMLSingleStep(_host);
|
result = FlowControll[i]->getHTMLSingleStep(_host);
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@ std::string ClassFlowControll::doSingleStep(std::string _stepname, std::string _
|
|||||||
|
|
||||||
std::string ClassFlowControll::TranslateAktstatus(std::string _input)
|
std::string ClassFlowControll::TranslateAktstatus(std::string _input)
|
||||||
{
|
{
|
||||||
if (_input.compare("ClassFlowMakeImage") == 0)
|
if (_input.compare("ClassFlowTakeImage") == 0)
|
||||||
return ("Take Image");
|
return ("Take Image");
|
||||||
if (_input.compare("ClassFlowAlignment") == 0)
|
if (_input.compare("ClassFlowAlignment") == 0)
|
||||||
return ("Aligning");
|
return ("Aligning");
|
||||||
@@ -176,7 +176,7 @@ bool ClassFlowControll::StartMQTTService() {
|
|||||||
/* Start the MQTT service */
|
/* Start the MQTT service */
|
||||||
for (int i = 0; i < FlowControll.size(); ++i) {
|
for (int i = 0; i < FlowControll.size(); ++i) {
|
||||||
if (FlowControll[i]->name().compare("ClassFlowMQTT") == 0) {
|
if (FlowControll[i]->name().compare("ClassFlowMQTT") == 0) {
|
||||||
return ((ClassFlowMQTT*) (FlowControll[i]))->Start(AutoIntervall);
|
return ((ClassFlowMQTT*) (FlowControll[i]))->Start(AutoInterval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -188,7 +188,7 @@ void ClassFlowControll::SetInitialParameter(void)
|
|||||||
{
|
{
|
||||||
AutoStart = false;
|
AutoStart = false;
|
||||||
SetupModeActive = false;
|
SetupModeActive = false;
|
||||||
AutoIntervall = 10; // Minutes
|
AutoInterval = 10; // Minutes
|
||||||
flowdigit = NULL;
|
flowdigit = NULL;
|
||||||
flowanalog = NULL;
|
flowanalog = NULL;
|
||||||
flowpostprocessing = NULL;
|
flowpostprocessing = NULL;
|
||||||
@@ -198,9 +198,9 @@ void ClassFlowControll::SetInitialParameter(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ClassFlowControll::isAutoStart(long &_intervall)
|
bool ClassFlowControll::isAutoStart(long &_interval)
|
||||||
{
|
{
|
||||||
_intervall = AutoIntervall * 60 * 1000; // AutoInterval: minutes -> ms
|
_interval = AutoInterval * 60 * 1000; // AutoInterval: minutes -> ms
|
||||||
return AutoStart;
|
return AutoStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,10 +211,10 @@ ClassFlow* ClassFlowControll::CreateClassFlow(std::string _type)
|
|||||||
|
|
||||||
_type = trim(_type);
|
_type = trim(_type);
|
||||||
|
|
||||||
if (toUpper(_type).compare("[MAKEIMAGE]") == 0)
|
if (toUpper(_type).compare("[TAKEIMAGE]") == 0)
|
||||||
{
|
{
|
||||||
cfc = new ClassFlowMakeImage(&FlowControll);
|
cfc = new ClassFlowTakeImage(&FlowControll);
|
||||||
flowmakeimage = (ClassFlowMakeImage*) cfc;
|
flowtakeimage = (ClassFlowTakeImage*) cfc;
|
||||||
}
|
}
|
||||||
if (toUpper(_type).compare("[ALIGNMENT]") == 0)
|
if (toUpper(_type).compare("[ALIGNMENT]") == 0)
|
||||||
{
|
{
|
||||||
@@ -330,13 +330,13 @@ void ClassFlowControll::setActStatus(std::string _aktstatus)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ClassFlowControll::doFlowMakeImageOnly(string time)
|
void ClassFlowControll::doFlowTakeImageOnly(string time)
|
||||||
{
|
{
|
||||||
std::string zw_time;
|
std::string zw_time;
|
||||||
|
|
||||||
for (int i = 0; i < FlowControll.size(); ++i)
|
for (int i = 0; i < FlowControll.size(); ++i)
|
||||||
{
|
{
|
||||||
if (FlowControll[i]->name() == "ClassFlowMakeImage") {
|
if (FlowControll[i]->name() == "ClassFlowTakeImage") {
|
||||||
zw_time = getCurrentTimeString("%H:%M:%S");
|
zw_time = getCurrentTimeString("%H:%M:%S");
|
||||||
std::string flowStatus = TranslateAktstatus(FlowControll[i]->name());
|
std::string flowStatus = TranslateAktstatus(FlowControll[i]->name());
|
||||||
aktstatus = flowStatus + " (" + zw_time + ")";
|
aktstatus = flowStatus + " (" + zw_time + ")";
|
||||||
@@ -535,7 +535,7 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
|
|
||||||
|
|
||||||
if ((toUpper(aktparamgraph).compare("[AUTOTIMER]") != 0) && (toUpper(aktparamgraph).compare("[DEBUG]") != 0) &&
|
if ((toUpper(aktparamgraph).compare("[AUTOTIMER]") != 0) && (toUpper(aktparamgraph).compare("[DEBUG]") != 0) &&
|
||||||
(toUpper(aktparamgraph).compare("[SYSTEM]") != 0 && (toUpper(aktparamgraph).compare("[DATALOGGING]") != 0))) // Paragraph passt nicht zu MakeImage
|
(toUpper(aktparamgraph).compare("[SYSTEM]") != 0 && (toUpper(aktparamgraph).compare("[DATALOGGING]") != 0))) // Paragraph passt nicht zu Debug oder DataLogging
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
@@ -549,9 +549,9 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "INTERVALL") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "INTERVAL") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
AutoIntervall = std::stof(splitted[1]);
|
AutoInterval = std::stof(splitted[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "DATALOGACTIVE") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "DATALOGACTIVE") && (splitted.size() > 1))
|
||||||
@@ -565,12 +565,12 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "DATALOGRETENTIONINDAYS") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "DATAFILESRETENTION") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
LogFile.SetDataLogRetention(std::stoi(splitted[1]));
|
LogFile.SetDataLogRetention(std::stoi(splitted[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "LOGFILE") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "LOGLEVEL") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
/* matches esp_log_level_t */
|
/* matches esp_log_level_t */
|
||||||
if ((toUpper(splitted[1]) == "TRUE") || (toUpper(splitted[1]) == "2"))
|
if ((toUpper(splitted[1]) == "TRUE") || (toUpper(splitted[1]) == "2"))
|
||||||
@@ -590,20 +590,20 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
LogFile.setLogLevel(ESP_LOG_DEBUG);
|
LogFile.setLogLevel(ESP_LOG_DEBUG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((toUpper(splitted[0]) == "LOGFILERETENTIONINDAYS") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "LOGFILESRETENTION") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
LogFile.SetLogFileRetention(std::stoi(splitted[1]));
|
LogFile.SetLogFileRetention(std::stoi(splitted[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TimeServer and TimeZone got already read from the config, see setupTime () */
|
/* TimeServer and TimeZone got already read from the config, see setupTime () */
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "RSSITHREASHOLD") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "RSSITHRESHOLD") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
if (ChangeRSSIThreashold(WLAN_CONFIG_FILE, atoi(splitted[1].c_str())))
|
if (ChangeRSSIThreshold(WLAN_CONFIG_FILE, atoi(splitted[1].c_str())))
|
||||||
{
|
{
|
||||||
// reboot necessary so that the new wlan.ini is also used !!!
|
// reboot necessary so that the new wlan.ini is also used !!!
|
||||||
fclose(pfile);
|
fclose(pfile);
|
||||||
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Rebooting to activate new RSSITHREASHOLD ...");
|
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Rebooting to activate new RSSITHRESHOLD ...");
|
||||||
esp_restart();
|
esp_restart();
|
||||||
hard_restart();
|
hard_restart();
|
||||||
doReboot();
|
doReboot();
|
||||||
@@ -668,7 +668,7 @@ int ClassFlowControll::CleanTempFolder() {
|
|||||||
|
|
||||||
esp_err_t ClassFlowControll::SendRawJPG(httpd_req_t *req)
|
esp_err_t ClassFlowControll::SendRawJPG(httpd_req_t *req)
|
||||||
{
|
{
|
||||||
return flowmakeimage != NULL ? flowmakeimage->SendRawJPG(req) : ESP_FAIL;
|
return flowtakeimage != NULL ? flowtakeimage->SendRawJPG(req) : ESP_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "ClassFlow.h"
|
#include "ClassFlow.h"
|
||||||
#include "ClassFlowMakeImage.h"
|
#include "ClassFlowTakeImage.h"
|
||||||
#include "ClassFlowAlignment.h"
|
#include "ClassFlowAlignment.h"
|
||||||
#include "ClassFlowCNNGeneral.h"
|
#include "ClassFlowCNNGeneral.h"
|
||||||
#include "ClassFlowPostProcessing.h"
|
#include "ClassFlowPostProcessing.h"
|
||||||
@@ -30,11 +30,11 @@ protected:
|
|||||||
ClassFlowCNNGeneral* flowanalog;
|
ClassFlowCNNGeneral* flowanalog;
|
||||||
ClassFlowCNNGeneral* flowdigit;
|
ClassFlowCNNGeneral* flowdigit;
|
||||||
// ClassFlowDigit* flowdigit;
|
// ClassFlowDigit* flowdigit;
|
||||||
ClassFlowMakeImage* flowmakeimage;
|
ClassFlowTakeImage* flowtakeimage;
|
||||||
ClassFlow* CreateClassFlow(std::string _type);
|
ClassFlow* CreateClassFlow(std::string _type);
|
||||||
|
|
||||||
bool AutoStart;
|
bool AutoStart;
|
||||||
float AutoIntervall;
|
float AutoInterval;
|
||||||
bool SetupModeActive;
|
bool SetupModeActive;
|
||||||
void SetInitialParameter(void);
|
void SetInitialParameter(void);
|
||||||
std::string aktstatus;
|
std::string aktstatus;
|
||||||
@@ -43,7 +43,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
void InitFlow(std::string config);
|
void InitFlow(std::string config);
|
||||||
bool doFlow(string time);
|
bool doFlow(string time);
|
||||||
void doFlowMakeImageOnly(string time);
|
void doFlowTakeImageOnly(string time);
|
||||||
bool getStatusSetupModus(){return SetupModeActive;};
|
bool getStatusSetupModus(){return SetupModeActive;};
|
||||||
string getReadout(bool _rawvalue, bool _noerror);
|
string getReadout(bool _rawvalue, bool _noerror);
|
||||||
string getReadoutAll(int _type);
|
string getReadoutAll(int _type);
|
||||||
@@ -69,7 +69,7 @@ public:
|
|||||||
|
|
||||||
std::string doSingleStep(std::string _stepname, std::string _host);
|
std::string doSingleStep(std::string _stepname, std::string _host);
|
||||||
|
|
||||||
bool isAutoStart(long &_intervall);
|
bool isAutoStart(long &_interval);
|
||||||
|
|
||||||
std::string* getActStatus();
|
std::string* getActStatus();
|
||||||
void setActStatus(std::string _aktstatus);
|
void setActStatus(std::string _aktstatus);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ ClassFlowImage::ClassFlowImage(const char* logTag)
|
|||||||
this->logTag = logTag;
|
this->logTag = logTag;
|
||||||
isLogImage = false;
|
isLogImage = false;
|
||||||
disabled = false;
|
disabled = false;
|
||||||
this->logfileRetentionInDays = 5;
|
this->imagesRetention = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, const char* logTag) : ClassFlow(lfc)
|
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, const char* logTag) : ClassFlow(lfc)
|
||||||
@@ -32,7 +32,7 @@ ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, const char* logTag
|
|||||||
this->logTag = logTag;
|
this->logTag = logTag;
|
||||||
isLogImage = false;
|
isLogImage = false;
|
||||||
disabled = false;
|
disabled = false;
|
||||||
this->logfileRetentionInDays = 5;
|
this->imagesRetention = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, ClassFlow *_prev, const char* logTag) : ClassFlow(lfc, _prev)
|
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, ClassFlow *_prev, const char* logTag) : ClassFlow(lfc, _prev)
|
||||||
@@ -40,7 +40,7 @@ ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, ClassFlow *_prev,
|
|||||||
this->logTag = logTag;
|
this->logTag = logTag;
|
||||||
isLogImage = false;
|
isLogImage = false;
|
||||||
disabled = false;
|
disabled = false;
|
||||||
this->logfileRetentionInDays = 5;
|
this->imagesRetention = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ string ClassFlowImage::CreateLogFolder(string time) {
|
|||||||
if (!isLogImage)
|
if (!isLogImage)
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
string logPath = LogImageLocation + "/" + time.LOGFILE_TIME_FORMAT_DATE_EXTR + "/" + time.LOGFILE_TIME_FORMAT_HOUR_EXTR;
|
string logPath = imagesLocation + "/" + time.LOGFILE_TIME_FORMAT_DATE_EXTR + "/" + time.LOGFILE_TIME_FORMAT_HOUR_EXTR;
|
||||||
isLogImage = mkdir_r(logPath.c_str(), S_IRWXU) == 0;
|
isLogImage = mkdir_r(logPath.c_str(), S_IRWXU) == 0;
|
||||||
if (!isLogImage) {
|
if (!isLogImage) {
|
||||||
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Can't create log folder for analog images. Path " + logPath);
|
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Can't create log folder for analog images. Path " + logPath);
|
||||||
@@ -95,7 +95,7 @@ void ClassFlowImage::RemoveOldLogs()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
ESP_LOGD(TAG, "remove old images");
|
ESP_LOGD(TAG, "remove old images");
|
||||||
if (logfileRetentionInDays == 0) {
|
if (imagesRetention == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,17 +104,17 @@ void ClassFlowImage::RemoveOldLogs()
|
|||||||
char cmpfilename[30];
|
char cmpfilename[30];
|
||||||
|
|
||||||
time(&rawtime);
|
time(&rawtime);
|
||||||
rawtime = addDays(rawtime, -logfileRetentionInDays + 1);
|
rawtime = addDays(rawtime, -1 * imagesRetention + 1);
|
||||||
timeinfo = localtime(&rawtime);
|
timeinfo = localtime(&rawtime);
|
||||||
//ESP_LOGD(TAG, "ImagefileRetentionInDays: %d", logfileRetentionInDays);
|
//ESP_LOGD(TAG, "ImagefileRetentionInDays: %d", imagesRetention);
|
||||||
|
|
||||||
strftime(cmpfilename, 30, LOGFILE_TIME_FORMAT, timeinfo);
|
strftime(cmpfilename, 30, LOGFILE_TIME_FORMAT, timeinfo);
|
||||||
//ESP_LOGD(TAG, "file name to compare: %s", cmpfilename);
|
//ESP_LOGD(TAG, "file name to compare: %s", cmpfilename);
|
||||||
string folderName = string(cmpfilename).LOGFILE_TIME_FORMAT_DATE_EXTR;
|
string folderName = string(cmpfilename).LOGFILE_TIME_FORMAT_DATE_EXTR;
|
||||||
|
|
||||||
DIR *dir = opendir(LogImageLocation.c_str());
|
DIR *dir = opendir(imagesLocation.c_str());
|
||||||
if (!dir) {
|
if (!dir) {
|
||||||
ESP_LOGE(TAG, "Failed to stat dir: %s", LogImageLocation.c_str());
|
ESP_LOGE(TAG, "Failed to stat dir: %s", imagesLocation.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ void ClassFlowImage::RemoveOldLogs()
|
|||||||
int deleted = 0;
|
int deleted = 0;
|
||||||
int notDeleted = 0;
|
int notDeleted = 0;
|
||||||
while ((entry = readdir(dir)) != NULL) {
|
while ((entry = readdir(dir)) != NULL) {
|
||||||
string folderPath = LogImageLocation + "/" + entry->d_name;
|
string folderPath = imagesLocation + "/" + entry->d_name;
|
||||||
if (entry->d_type == DT_DIR) {
|
if (entry->d_type == DT_DIR) {
|
||||||
//ESP_LOGD(TAG, "Compare %s to %s", entry->d_name, folderName.c_str());
|
//ESP_LOGD(TAG, "Compare %s to %s", entry->d_name, folderName.c_str());
|
||||||
if ((strlen(entry->d_name) == folderName.length()) && (strcmp(entry->d_name, folderName.c_str()) < 0)) {
|
if ((strlen(entry->d_name) == folderName.length()) && (strcmp(entry->d_name, folderName.c_str()) < 0)) {
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ using namespace std;
|
|||||||
class ClassFlowImage : public ClassFlow
|
class ClassFlowImage : public ClassFlow
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
string LogImageLocation;
|
string imagesLocation;
|
||||||
bool isLogImage;
|
bool isLogImage;
|
||||||
unsigned short logfileRetentionInDays;
|
unsigned short imagesRetention;
|
||||||
const char* logTag;
|
const char* logTag;
|
||||||
|
|
||||||
string CreateLogFolder(string time);
|
string CreateLogFolder(string time);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ void ClassFlowMQTT::SetInitialParameter(void)
|
|||||||
flowpostprocessing = NULL;
|
flowpostprocessing = NULL;
|
||||||
user = "";
|
user = "";
|
||||||
password = "";
|
password = "";
|
||||||
SetRetainFlag = 0;
|
SetRetainFlag = false;
|
||||||
previousElement = NULL;
|
previousElement = NULL;
|
||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
disabled = false;
|
disabled = false;
|
||||||
@@ -95,7 +95,7 @@ bool ClassFlowMQTT::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
if (!this->GetNextParagraph(pfile, aktparamgraph))
|
if (!this->GetNextParagraph(pfile, aktparamgraph))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (toUpper(aktparamgraph).compare("[MQTT]") != 0) // Paragraph does not fit MakeImage
|
if (toUpper(aktparamgraph).compare("[MQTT]") != 0) // Paragraph does not fit MQTT
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
@@ -113,10 +113,10 @@ bool ClassFlowMQTT::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
{
|
{
|
||||||
this->uri = splitted[1];
|
this->uri = splitted[1];
|
||||||
}
|
}
|
||||||
if ((toUpper(splitted[0]) == "SETRETAINFLAG") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "RETAINMESSAGES") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
if (toUpper(splitted[1]) == "TRUE") {
|
if (toUpper(splitted[1]) == "TRUE") {
|
||||||
SetRetainFlag = 1;
|
SetRetainFlag = true;
|
||||||
setMqtt_Server_Retain(SetRetainFlag);
|
setMqtt_Server_Retain(SetRetainFlag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -184,9 +184,9 @@ string ClassFlowMQTT::GetMQTTMainTopic()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ClassFlowMQTT::Start(float AutoIntervall)
|
bool ClassFlowMQTT::Start(float AutoInterval)
|
||||||
{
|
{
|
||||||
roundInterval = AutoIntervall; // Minutes
|
roundInterval = AutoInterval; // Minutes
|
||||||
keepAlive = roundInterval * 60 * 2.5; // Seconds, make sure it is greater thatn 2 rounds!
|
keepAlive = roundInterval * 60 * 2.5; // Seconds, make sure it is greater thatn 2 rounds!
|
||||||
|
|
||||||
std::stringstream stream;
|
std::stringstream stream;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ protected:
|
|||||||
std::string OldValue;
|
std::string OldValue;
|
||||||
ClassFlowPostProcessing* flowpostprocessing;
|
ClassFlowPostProcessing* flowpostprocessing;
|
||||||
std::string user, password;
|
std::string user, password;
|
||||||
int SetRetainFlag;
|
bool SetRetainFlag;
|
||||||
int keepAlive; // Seconds
|
int keepAlive; // Seconds
|
||||||
float roundInterval; // Minutes
|
float roundInterval; // Minutes
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ public:
|
|||||||
ClassFlowMQTT(std::vector<ClassFlow*>* lfc, ClassFlow *_prev);
|
ClassFlowMQTT(std::vector<ClassFlow*>* lfc, ClassFlow *_prev);
|
||||||
|
|
||||||
string GetMQTTMainTopic();
|
string GetMQTTMainTopic();
|
||||||
bool Start(float AutoIntervall);
|
bool Start(float AutoInterval);
|
||||||
|
|
||||||
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
||||||
bool doFlow(string time);
|
bool doFlow(string time);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "ClassFlowPostProcessing.h"
|
#include "ClassFlowPostProcessing.h"
|
||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
#include "ClassFlowMakeImage.h"
|
#include "ClassFlowTakeImage.h"
|
||||||
#include "ClassLogFile.h"
|
#include "ClassLogFile.h"
|
||||||
|
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
@@ -285,7 +285,7 @@ ClassFlowPostProcessing::ClassFlowPostProcessing(std::vector<ClassFlow*>* lfc, C
|
|||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
FilePreValue = FormatFileName("/sdcard/config/prevalue.ini");
|
FilePreValue = FormatFileName("/sdcard/config/prevalue.ini");
|
||||||
ListFlowControll = lfc;
|
ListFlowControll = lfc;
|
||||||
flowMakeImage = NULL;
|
flowTakeImage = NULL;
|
||||||
UpdatePreValueINI = false;
|
UpdatePreValueINI = false;
|
||||||
IgnoreLeadingNaN = false;
|
IgnoreLeadingNaN = false;
|
||||||
flowAnalog = _analog;
|
flowAnalog = _analog;
|
||||||
@@ -293,9 +293,9 @@ ClassFlowPostProcessing::ClassFlowPostProcessing(std::vector<ClassFlow*>* lfc, C
|
|||||||
|
|
||||||
for (int i = 0; i < ListFlowControll->size(); ++i)
|
for (int i = 0; i < ListFlowControll->size(); ++i)
|
||||||
{
|
{
|
||||||
if (((*ListFlowControll)[i])->name().compare("ClassFlowMakeImage") == 0)
|
if (((*ListFlowControll)[i])->name().compare("ClassFlowTakeImage") == 0)
|
||||||
{
|
{
|
||||||
flowMakeImage = (ClassFlowMakeImage*) (*ListFlowControll)[i];
|
flowTakeImage = (ClassFlowTakeImage*) (*ListFlowControll)[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -503,7 +503,7 @@ bool ClassFlowPostProcessing::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
if (aktparamgraph.compare("[PostProcessing]") != 0) // Paragraph does not fit MakeImage
|
if (aktparamgraph.compare("[PostProcessing]") != 0) // Paragraph does not fit PostProcessing
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
InitNUMBERS();
|
InitNUMBERS();
|
||||||
@@ -715,7 +715,7 @@ bool ClassFlowPostProcessing::doFlow(string zwtime)
|
|||||||
|
|
||||||
// Update decimal point, as the decimal places can also change when changing from CNNType Auto --> xyz:
|
// Update decimal point, as the decimal places can also change when changing from CNNType Auto --> xyz:
|
||||||
|
|
||||||
imagetime = flowMakeImage->getTimeImageTaken();
|
imagetime = flowTakeImage->getTimeImageTaken();
|
||||||
if (imagetime == 0)
|
if (imagetime == 0)
|
||||||
time(&imagetime);
|
time(&imagetime);
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#define CLASSFFLOWPOSTPROCESSING_H
|
#define CLASSFFLOWPOSTPROCESSING_H
|
||||||
|
|
||||||
#include "ClassFlow.h"
|
#include "ClassFlow.h"
|
||||||
#include "ClassFlowMakeImage.h"
|
#include "ClassFlowTakeImage.h"
|
||||||
#include "ClassFlowCNNGeneral.h"
|
#include "ClassFlowCNNGeneral.h"
|
||||||
#include "ClassFlowDefineTypes.h"
|
#include "ClassFlowDefineTypes.h"
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ protected:
|
|||||||
|
|
||||||
string FilePreValue;
|
string FilePreValue;
|
||||||
|
|
||||||
ClassFlowMakeImage *flowMakeImage;
|
ClassFlowTakeImage *flowTakeImage;
|
||||||
|
|
||||||
bool LoadPreValue(void);
|
bool LoadPreValue(void);
|
||||||
string ShiftDecimal(string in, int _decShift);
|
string ShiftDecimal(string in, int _decShift);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "ClassFlowMakeImage.h"
|
#include "ClassFlowTakeImage.h"
|
||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
#include "ClassLogFile.h"
|
#include "ClassLogFile.h"
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
static const char* TAG = "flow_make_image";
|
static const char* TAG = "flow_make_image";
|
||||||
|
|
||||||
esp_err_t ClassFlowMakeImage::camera_capture(){
|
esp_err_t ClassFlowTakeImage::camera_capture(){
|
||||||
string nm = namerawimage;
|
string nm = namerawimage;
|
||||||
Camera.CaptureToFile(nm);
|
Camera.CaptureToFile(nm);
|
||||||
time(&TimeImageTaken);
|
time(&TimeImageTaken);
|
||||||
@@ -26,7 +26,7 @@ esp_err_t ClassFlowMakeImage::camera_capture(){
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassFlowMakeImage::takePictureWithFlash(int flash_duration)
|
void ClassFlowTakeImage::takePictureWithFlash(int flash_duration)
|
||||||
{
|
{
|
||||||
// in case the image is flipped, it must be reset here //
|
// in case the image is flipped, it must be reset here //
|
||||||
rawImage->width = image_width;
|
rawImage->width = image_width;
|
||||||
@@ -40,7 +40,7 @@ void ClassFlowMakeImage::takePictureWithFlash(int flash_duration)
|
|||||||
if (SaveAllFiles) rawImage->SaveToFile(namerawimage);
|
if (SaveAllFiles) rawImage->SaveToFile(namerawimage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassFlowMakeImage::SetInitialParameter(void)
|
void ClassFlowTakeImage::SetInitialParameter(void)
|
||||||
{
|
{
|
||||||
waitbeforepicture = 5;
|
waitbeforepicture = 5;
|
||||||
isImageSize = false;
|
isImageSize = false;
|
||||||
@@ -56,15 +56,15 @@ void ClassFlowMakeImage::SetInitialParameter(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ClassFlowMakeImage::ClassFlowMakeImage(std::vector<ClassFlow*>* lfc) : ClassFlowImage(lfc, TAG)
|
ClassFlowTakeImage::ClassFlowTakeImage(std::vector<ClassFlow*>* lfc) : ClassFlowImage(lfc, TAG)
|
||||||
{
|
{
|
||||||
LogImageLocation = "/log/source";
|
imagesLocation = "/log/source";
|
||||||
logfileRetentionInDays = 5;
|
imagesRetention = 5;
|
||||||
SetInitialParameter();
|
SetInitialParameter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ClassFlowMakeImage::ReadParameter(FILE* pfile, string& aktparamgraph)
|
bool ClassFlowTakeImage::ReadParameter(FILE* pfile, string& aktparamgraph)
|
||||||
{
|
{
|
||||||
std::vector<string> splitted;
|
std::vector<string> splitted;
|
||||||
|
|
||||||
@@ -77,21 +77,21 @@ bool ClassFlowMakeImage::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
if (!this->GetNextParagraph(pfile, aktparamgraph))
|
if (!this->GetNextParagraph(pfile, aktparamgraph))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (aktparamgraph.compare("[MakeImage]") != 0) // Paragraph does not fit MakeImage
|
if (aktparamgraph.compare("[TakeImage]") != 0) // Paragraph does not fit TakeImage
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
{
|
{
|
||||||
splitted = ZerlegeZeile(aktparamgraph);
|
splitted = ZerlegeZeile(aktparamgraph);
|
||||||
if ((splitted[0] == "LogImageLocation") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "RAWIMAGESLOCATION") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
LogImageLocation = "/sdcard" + splitted[1];
|
imagesLocation = "/sdcard" + splitted[1];
|
||||||
isLogImage = true;
|
isLogImage = true;
|
||||||
}
|
}
|
||||||
if ((splitted[0] == "ImageQuality") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "IMAGEQUALITY") && (splitted.size() > 1))
|
||||||
ImageQuality = std::stod(splitted[1]);
|
ImageQuality = std::stod(splitted[1]);
|
||||||
|
|
||||||
if ((splitted[0] == "ImageSize") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "IMAGESIZE") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
ImageSize = Camera.TextToFramesize(splitted[1].c_str());
|
ImageSize = Camera.TextToFramesize(splitted[1].c_str());
|
||||||
isImageSize = true;
|
isImageSize = true;
|
||||||
@@ -108,9 +108,9 @@ bool ClassFlowMakeImage::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
waitbeforepicture = stoi(splitted[1]);
|
waitbeforepicture = stoi(splitted[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "LOGFILERETENTIONINDAYS") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "RAWIMAGESRETENTION") && (splitted.size() > 1))
|
||||||
{
|
{
|
||||||
this->logfileRetentionInDays = std::stoi(splitted[1]);
|
this->imagesRetention = std::stoi(splitted[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((toUpper(splitted[0]) == "BRIGHTNESS") && (splitted.size() > 1))
|
if ((toUpper(splitted[0]) == "BRIGHTNESS") && (splitted.size() > 1))
|
||||||
@@ -173,7 +173,7 @@ bool ClassFlowMakeImage::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string ClassFlowMakeImage::getHTMLSingleStep(string host)
|
string ClassFlowTakeImage::getHTMLSingleStep(string host)
|
||||||
{
|
{
|
||||||
string result;
|
string result;
|
||||||
result = "Raw Image: <br>\n<img src=\"" + host + "/img_tmp/raw.jpg\">\n";
|
result = "Raw Image: <br>\n<img src=\"" + host + "/img_tmp/raw.jpg\">\n";
|
||||||
@@ -181,14 +181,14 @@ string ClassFlowMakeImage::getHTMLSingleStep(string host)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ClassFlowMakeImage::doFlow(string zwtime)
|
bool ClassFlowTakeImage::doFlow(string zwtime)
|
||||||
{
|
{
|
||||||
string logPath = CreateLogFolder(zwtime);
|
string logPath = CreateLogFolder(zwtime);
|
||||||
|
|
||||||
int flash_duration = (int) (waitbeforepicture * 1000);
|
int flash_duration = (int) (waitbeforepicture * 1000);
|
||||||
|
|
||||||
#ifdef DEBUG_DETAIL_ON
|
#ifdef DEBUG_DETAIL_ON
|
||||||
LogFile.WriteHeapInfo("ClassFlowMakeImage::doFlow - Before takePictureWithFlash");
|
LogFile.WriteHeapInfo("ClassFlowTakeImage::doFlow - Before takePictureWithFlash");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ bool ClassFlowMakeImage::doFlow(string zwtime)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_DETAIL_ON
|
#ifdef DEBUG_DETAIL_ON
|
||||||
LogFile.WriteHeapInfo("ClassFlowMakeImage::doFlow - After takePictureWithFlash");
|
LogFile.WriteHeapInfo("ClassFlowTakeImage::doFlow - After takePictureWithFlash");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LogImage(logPath, "raw", NULL, NULL, zwtime, rawImage);
|
LogImage(logPath, "raw", NULL, NULL, zwtime, rawImage);
|
||||||
@@ -212,14 +212,14 @@ bool ClassFlowMakeImage::doFlow(string zwtime)
|
|||||||
RemoveOldLogs();
|
RemoveOldLogs();
|
||||||
|
|
||||||
#ifdef DEBUG_DETAIL_ON
|
#ifdef DEBUG_DETAIL_ON
|
||||||
LogFile.WriteHeapInfo("ClassFlowMakeImage::doFlow - After RemoveOldLogs");
|
LogFile.WriteHeapInfo("ClassFlowTakeImage::doFlow - After RemoveOldLogs");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
esp_err_t ClassFlowMakeImage::SendRawJPG(httpd_req_t *req)
|
esp_err_t ClassFlowTakeImage::SendRawJPG(httpd_req_t *req)
|
||||||
{
|
{
|
||||||
int flash_duration = (int) (waitbeforepicture * 1000);
|
int flash_duration = (int) (waitbeforepicture * 1000);
|
||||||
time(&TimeImageTaken);
|
time(&TimeImageTaken);
|
||||||
@@ -229,7 +229,7 @@ esp_err_t ClassFlowMakeImage::SendRawJPG(httpd_req_t *req)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ImageData* ClassFlowMakeImage::SendRawImage()
|
ImageData* ClassFlowTakeImage::SendRawImage()
|
||||||
{
|
{
|
||||||
CImageBasis *zw = new CImageBasis(rawImage);
|
CImageBasis *zw = new CImageBasis(rawImage);
|
||||||
ImageData *id;
|
ImageData *id;
|
||||||
@@ -243,12 +243,12 @@ ImageData* ClassFlowMakeImage::SendRawImage()
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
time_t ClassFlowMakeImage::getTimeImageTaken()
|
time_t ClassFlowTakeImage::getTimeImageTaken()
|
||||||
{
|
{
|
||||||
return TimeImageTaken;
|
return TimeImageTaken;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowMakeImage::~ClassFlowMakeImage(void)
|
ClassFlowTakeImage::~ClassFlowTakeImage(void)
|
||||||
{
|
{
|
||||||
delete rawImage;
|
delete rawImage;
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef CLASSFFLOWMAKEIMAGE_H
|
#ifndef CLASSFFLOWTAKEIMAGE_H
|
||||||
#define CLASSFFLOWMAKEIMAGE_H
|
#define CLASSFFLOWTAKEIMAGE_H
|
||||||
|
|
||||||
#include "ClassFlowImage.h"
|
#include "ClassFlowImage.h"
|
||||||
#include "ClassControllCamera.h"
|
#include "ClassControllCamera.h"
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ClassFlowMakeImage :
|
class ClassFlowTakeImage :
|
||||||
public ClassFlowImage
|
public ClassFlowImage
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
@@ -37,19 +37,19 @@ protected:
|
|||||||
public:
|
public:
|
||||||
CImageBasis *rawImage;
|
CImageBasis *rawImage;
|
||||||
|
|
||||||
ClassFlowMakeImage(std::vector<ClassFlow*>* lfc);
|
ClassFlowTakeImage(std::vector<ClassFlow*>* lfc);
|
||||||
|
|
||||||
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
||||||
bool doFlow(string time);
|
bool doFlow(string time);
|
||||||
string getHTMLSingleStep(string host);
|
string getHTMLSingleStep(string host);
|
||||||
time_t getTimeImageTaken();
|
time_t getTimeImageTaken();
|
||||||
string name(){return "ClassFlowMakeImage";};
|
string name(){return "ClassFlowTakeImage";};
|
||||||
|
|
||||||
ImageData* SendRawImage();
|
ImageData* SendRawImage();
|
||||||
esp_err_t SendRawJPG(httpd_req_t *req);
|
esp_err_t SendRawJPG(httpd_req_t *req);
|
||||||
|
|
||||||
~ClassFlowMakeImage(void);
|
~ClassFlowTakeImage(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif //CLASSFFLOWMAKEIMAGE_H
|
#endif //CLASSFFLOWTAKEIMAGE_H
|
||||||
@@ -25,11 +25,12 @@ bool mqtt_connected = false;
|
|||||||
|
|
||||||
esp_mqtt_client_handle_t client = NULL;
|
esp_mqtt_client_handle_t client = NULL;
|
||||||
std::string uri, client_id, lwt_topic, lwt_connected, lwt_disconnected, user, password, maintopic;
|
std::string uri, client_id, lwt_topic, lwt_connected, lwt_disconnected, user, password, maintopic;
|
||||||
int keepalive, SetRetainFlag;
|
int keepalive;
|
||||||
void (*callbackOnConnected)(std::string, int) = NULL;
|
bool SetRetainFlag;
|
||||||
|
void (*callbackOnConnected)(std::string, bool) = NULL;
|
||||||
|
|
||||||
|
|
||||||
bool MQTTPublish(std::string _key, std::string _content, int retained_flag)
|
bool MQTTPublish(std::string _key, std::string _content, bool retained_flag)
|
||||||
{
|
{
|
||||||
if (!mqtt_enabled) { // MQTT sevice not started / configured (MQTT_Init not called before)
|
if (!mqtt_enabled) { // MQTT sevice not started / configured (MQTT_Init not called before)
|
||||||
return false;
|
return false;
|
||||||
@@ -153,7 +154,7 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_
|
|||||||
|
|
||||||
bool MQTT_Configure(std::string _mqttURI, std::string _clientid, std::string _user, std::string _password,
|
bool MQTT_Configure(std::string _mqttURI, std::string _clientid, std::string _user, std::string _password,
|
||||||
std::string _maintopic, std::string _lwt, std::string _lwt_connected, std::string _lwt_disconnected,
|
std::string _maintopic, std::string _lwt, std::string _lwt_connected, std::string _lwt_disconnected,
|
||||||
int _keepalive, int _SetRetainFlag, void *_callbackOnConnected) {
|
int _keepalive, bool _SetRetainFlag, void *_callbackOnConnected) {
|
||||||
if ((_mqttURI.length() == 0) || (_maintopic.length() == 0) || (_clientid.length() == 0))
|
if ((_mqttURI.length() == 0) || (_maintopic.length() == 0) || (_clientid.length() == 0))
|
||||||
{
|
{
|
||||||
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Init aborted! Config error (URI, MainTopic or ClientID missing)");
|
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Init aborted! Config error (URI, MainTopic or ClientID missing)");
|
||||||
@@ -168,7 +169,7 @@ bool MQTT_Configure(std::string _mqttURI, std::string _clientid, std::string _us
|
|||||||
keepalive = _keepalive;
|
keepalive = _keepalive;
|
||||||
SetRetainFlag = _SetRetainFlag;
|
SetRetainFlag = _SetRetainFlag;
|
||||||
maintopic = _maintopic;
|
maintopic = _maintopic;
|
||||||
callbackOnConnected = ( void (*)(std::string, int) )(_callbackOnConnected);
|
callbackOnConnected = ( void (*)(std::string, bool) )(_callbackOnConnected);
|
||||||
|
|
||||||
if (_user.length() && _password.length()){
|
if (_user.length() && _password.length()){
|
||||||
user = _user;
|
user = _user;
|
||||||
|
|||||||
@@ -11,11 +11,11 @@
|
|||||||
|
|
||||||
bool MQTT_Configure(std::string _mqttURI, std::string _clientid, std::string _user, std::string _password,
|
bool MQTT_Configure(std::string _mqttURI, std::string _clientid, std::string _user, std::string _password,
|
||||||
std::string _maintopic, std::string _lwt, std::string _lwt_connected, std::string _lwt_disconnected,
|
std::string _maintopic, std::string _lwt, std::string _lwt_connected, std::string _lwt_disconnected,
|
||||||
int _keepalive, int SetRetainFlag, void *callbackOnConnected);
|
int _keepalive, bool SetRetainFlag, void *callbackOnConnected);
|
||||||
int MQTT_Init();
|
int MQTT_Init();
|
||||||
void MQTTdestroy_client(bool _disable);
|
void MQTTdestroy_client(bool _disable);
|
||||||
|
|
||||||
bool MQTTPublish(std::string _key, std::string _content, int retained_flag = 1); // retained Flag as Standart
|
bool MQTTPublish(std::string _key, std::string _content, bool retained_flag = 1); // retained Flag as Standart
|
||||||
|
|
||||||
bool getMQTTisEnabled();
|
bool getMQTTisEnabled();
|
||||||
bool getMQTTisConnected();
|
bool getMQTTisConnected();
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ std::string timeUnit = "";
|
|||||||
std::string rateUnit = "Unit/Minute";
|
std::string rateUnit = "Unit/Minute";
|
||||||
float roundInterval; // Minutes
|
float roundInterval; // Minutes
|
||||||
int keepAlive = 0; // Seconds
|
int keepAlive = 0; // Seconds
|
||||||
int retainFlag;
|
bool retainFlag;
|
||||||
static std::string maintopic;
|
static std::string maintopic;
|
||||||
|
|
||||||
|
|
||||||
@@ -221,7 +221,7 @@ esp_err_t sendDiscovery_and_static_Topics(httpd_req_t *req) {
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GotConnected(std::string maintopic, int retainFlag) {
|
void GotConnected(std::string maintopic, bool retainFlag) {
|
||||||
if (HomeassistantDiscovery) {
|
if (HomeassistantDiscovery) {
|
||||||
MQTThomeassistantDiscovery();
|
MQTThomeassistantDiscovery();
|
||||||
}
|
}
|
||||||
@@ -251,7 +251,7 @@ void SetHomeassistantDiscoveryEnabled(bool enabled) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void setMqtt_Server_Retain(int _retainFlag) {
|
void setMqtt_Server_Retain(bool _retainFlag) {
|
||||||
retainFlag = _retainFlag;
|
retainFlag = _retainFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
void SetHomeassistantDiscoveryEnabled(bool enabled);
|
void SetHomeassistantDiscoveryEnabled(bool enabled);
|
||||||
void mqttServer_setParameter(std::vector<NumberPost*>* _NUMBERS, int interval, float roundInterval);
|
void mqttServer_setParameter(std::vector<NumberPost*>* _NUMBERS, int interval, float roundInterval);
|
||||||
void mqttServer_setMeterType(std::string meterType, std::string valueUnit, std::string timeUnit,std::string rateUnit);
|
void mqttServer_setMeterType(std::string meterType, std::string valueUnit, std::string timeUnit,std::string rateUnit);
|
||||||
void setMqtt_Server_Retain(int SetRetainFlag);
|
void setMqtt_Server_Retain(bool SetRetainFlag);
|
||||||
void mqttServer_setMainTopic( std::string maintopic);
|
void mqttServer_setMainTopic( std::string maintopic);
|
||||||
std::string mqttServer_getMainTopic();
|
std::string mqttServer_getMainTopic();
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ void register_server_mqtt_uri(httpd_handle_t server);
|
|||||||
void publishSystemData();
|
void publishSystemData();
|
||||||
|
|
||||||
std::string getTimeUnit(void);
|
std::string getTimeUnit(void);
|
||||||
void GotConnected(std::string maintopic, int SetRetainFlag);
|
void GotConnected(std::string maintopic, bool SetRetainFlag);
|
||||||
|
|
||||||
|
|
||||||
#endif //SERVERMQTT_H
|
#endif //SERVERMQTT_H
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ TaskHandle_t xHandletask_autodoFlow = NULL;
|
|||||||
bool bTaskAutoFlowCreated = false;
|
bool bTaskAutoFlowCreated = false;
|
||||||
bool flowisrunning = false;
|
bool flowisrunning = false;
|
||||||
|
|
||||||
long auto_intervall = 0;
|
long auto_interval = 0;
|
||||||
bool auto_isrunning = false;
|
bool auto_isrunning = false;
|
||||||
|
|
||||||
int countRounds = 0;
|
int countRounds = 0;
|
||||||
@@ -620,8 +620,8 @@ esp_err_t handler_editflow(httpd_req_t *req)
|
|||||||
// string zwzw = "Do " + _task + " start\n"; ESP_LOGD(TAG, zwzw.c_str());
|
// string zwzw = "Do " + _task + " start\n"; ESP_LOGD(TAG, zwzw.c_str());
|
||||||
Camera.SetBrightnessContrastSaturation(bri, con, sat);
|
Camera.SetBrightnessContrastSaturation(bri, con, sat);
|
||||||
Camera.SetLEDIntensity(intens);
|
Camera.SetLEDIntensity(intens);
|
||||||
ESP_LOGD(TAG, "test_take - vor MakeImage");
|
ESP_LOGD(TAG, "test_take - vor TakeImage");
|
||||||
std::string zw = tfliteflow.doSingleStep("[MakeImage]", _host);
|
std::string zw = tfliteflow.doSingleStep("[TakeImage]", _host);
|
||||||
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
|
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
|
||||||
httpd_resp_send(req, zw.c_str(), zw.length());
|
httpd_resp_send(req, zw.c_str(), zw.length());
|
||||||
}
|
}
|
||||||
@@ -825,13 +825,13 @@ void task_autodoFlow(void *pvParameter)
|
|||||||
ESP_LOGD(TAG, "task_autodoFlow: start");
|
ESP_LOGD(TAG, "task_autodoFlow: start");
|
||||||
doInit();
|
doInit();
|
||||||
|
|
||||||
auto_isrunning = tfliteflow.isAutoStart(auto_intervall);
|
auto_isrunning = tfliteflow.isAutoStart(auto_interval);
|
||||||
|
|
||||||
if (isSetupModusActive())
|
if (isSetupModusActive())
|
||||||
{
|
{
|
||||||
auto_isrunning = false;
|
auto_isrunning = false;
|
||||||
std::string zw_time = getCurrentTimeString(LOGFILE_TIME_FORMAT);
|
std::string zw_time = getCurrentTimeString(LOGFILE_TIME_FORMAT);
|
||||||
tfliteflow.doFlowMakeImageOnly(zw_time);
|
tfliteflow.doFlowTakeImageOnly(zw_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (auto_isrunning)
|
while (auto_isrunning)
|
||||||
@@ -873,9 +873,9 @@ void task_autodoFlow(void *pvParameter)
|
|||||||
" completed (" + std::to_string(getUpTime() - roundStartTime) + " seconds)");
|
" completed (" + std::to_string(getUpTime() - roundStartTime) + " seconds)");
|
||||||
|
|
||||||
fr_delta_ms = (esp_timer_get_time() - fr_start) / 1000;
|
fr_delta_ms = (esp_timer_get_time() - fr_start) / 1000;
|
||||||
if (auto_intervall > fr_delta_ms)
|
if (auto_interval > fr_delta_ms)
|
||||||
{
|
{
|
||||||
const TickType_t xDelay = (auto_intervall - fr_delta_ms) / portTICK_PERIOD_MS;
|
const TickType_t xDelay = (auto_interval - fr_delta_ms) / portTICK_PERIOD_MS;
|
||||||
ESP_LOGD(TAG, "Autoflow: sleep for: %ldms", (long) xDelay);
|
ESP_LOGD(TAG, "Autoflow: sleep for: %ldms", (long) xDelay);
|
||||||
vTaskDelay( xDelay );
|
vTaskDelay( xDelay );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ std::string hostname = "";
|
|||||||
std::string std_hostname = "watermeter";
|
std::string std_hostname = "watermeter";
|
||||||
std::string ipadress = "";
|
std::string ipadress = "";
|
||||||
std::string ssid = "";
|
std::string ssid = "";
|
||||||
int RSSIThreashold;
|
int RSSIThreshold;
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
@@ -403,9 +403,9 @@ void strinttoip4(const char *ip, int &a, int &b, int &c, int &d) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostname, const char *_ipadr, const char *_gw, const char *_netmask, const char *_dns, int _rssithreashold)
|
void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostname, const char *_ipadr, const char *_gw, const char *_netmask, const char *_dns, int _rssithreshold)
|
||||||
{
|
{
|
||||||
RSSI_Threshold = _rssithreashold;
|
RSSI_Threshold = _rssithreshold;
|
||||||
s_wifi_event_group = xEventGroupCreate();
|
s_wifi_event_group = xEventGroupCreate();
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_netif_init());
|
ESP_ERROR_CHECK(esp_netif_init());
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostname, const char *_ipadr, const char *_gw, const char *_netmask, const char *_dns, int _rssithreashold);
|
void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostname, const char *_ipadr, const char *_gw, const char *_netmask, const char *_dns, int _rssithreshold);
|
||||||
void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostname);
|
void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostname);
|
||||||
void wifi_init_sta(const char *_ssid, const char *_password);
|
void wifi_init_sta(const char *_ssid, const char *_password);
|
||||||
|
|
||||||
@@ -17,6 +17,6 @@ void WIFIDestroy();
|
|||||||
|
|
||||||
extern std::string hostname;
|
extern std::string hostname;
|
||||||
extern std::string std_hostname;
|
extern std::string std_hostname;
|
||||||
extern int RSSIThreashold;
|
extern int RSSIThreshold;
|
||||||
|
|
||||||
#endif //CONNECT_WLAN_H
|
#endif //CONNECT_WLAN_H
|
||||||
@@ -41,7 +41,7 @@ std::vector<string> ZerlegeZeileWLAN(std::string input, std::string _delimiter =
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool LoadWlanFromFile(std::string fn, char *&_ssid, char *&_password, char *&_hostname, char *&_ipadr, char *&_gw, char *&_netmask, char *&_dns, int &_rssithreashold)
|
bool LoadWlanFromFile(std::string fn, char *&_ssid, char *&_password, char *&_hostname, char *&_ipadr, char *&_gw, char *&_netmask, char *&_dns, int &_rssithreshold)
|
||||||
{
|
{
|
||||||
std::string ssid = "";
|
std::string ssid = "";
|
||||||
std::string passphrase = "";
|
std::string passphrase = "";
|
||||||
@@ -91,7 +91,7 @@ bool LoadWlanFromFile(std::string fn, char *&_ssid, char *&_password, char *&_ho
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((splitted.size() > 1) && (toUpper(splitted[0]) == "RSSITHREASHOLD")){
|
if ((splitted.size() > 1) && (toUpper(splitted[0]) == "RSSITHRESHOLD")){
|
||||||
string _s = trim(splitted[1]);
|
string _s = trim(splitted[1]);
|
||||||
if ((_s[0] == '"') && (_s[_s.length()-1] == '"')){
|
if ((_s[0] == '"') && (_s[_s.length()-1] == '"')){
|
||||||
_s = _s.substr(1, ssid.length()-2);
|
_s = _s.substr(1, ssid.length()-2);
|
||||||
@@ -194,8 +194,8 @@ bool LoadWlanFromFile(std::string fn, char *&_ssid, char *&_password, char *&_ho
|
|||||||
else
|
else
|
||||||
_dns = NULL;
|
_dns = NULL;
|
||||||
|
|
||||||
_rssithreashold = rssithreshold;
|
_rssithreshold = rssithreshold;
|
||||||
RSSIThreashold = rssithreshold;
|
RSSIThreshold = rssithreshold;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,9 +274,9 @@ bool ChangeHostName(std::string fn, std::string _newhostname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ChangeRSSIThreashold(std::string fn, int _newrssithreashold)
|
bool ChangeRSSIThreshold(std::string fn, int _newrssithreshold)
|
||||||
{
|
{
|
||||||
if (RSSIThreashold == _newrssithreashold)
|
if (RSSIThreshold == _newrssithreshold)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
string line = "";
|
string line = "";
|
||||||
@@ -305,8 +305,8 @@ bool ChangeRSSIThreashold(std::string fn, int _newrssithreashold)
|
|||||||
splitted = ZerlegeZeileWLAN(line, "=");
|
splitted = ZerlegeZeileWLAN(line, "=");
|
||||||
splitted[0] = trim(splitted[0], " ");
|
splitted[0] = trim(splitted[0], " ");
|
||||||
|
|
||||||
if ((splitted.size() > 1) && (toUpper(splitted[0]) == "RSSITHREASHOLD")){
|
if ((splitted.size() > 1) && (toUpper(splitted[0]) == "RSSITHRESHOLD")){
|
||||||
line = "RSSIThreashold = " + to_string(_newrssithreashold) + "\n";
|
line = "RSSIThreshold = " + to_string(_newrssithreshold) + "\n";
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,7 +324,7 @@ bool ChangeRSSIThreashold(std::string fn, int _newrssithreashold)
|
|||||||
|
|
||||||
if (!found)
|
if (!found)
|
||||||
{
|
{
|
||||||
line = "RSSIThreashold = " + to_string(_newrssithreashold) + "\n";
|
line = "RSSIThreshold = " + to_string(_newrssithreshold) + "\n";
|
||||||
neuesfile.push_back(line);
|
neuesfile.push_back(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,7 +340,7 @@ bool ChangeRSSIThreashold(std::string fn, int _newrssithreashold)
|
|||||||
|
|
||||||
fclose(pFile);
|
fclose(pFile);
|
||||||
|
|
||||||
ESP_LOGD(TAG, "*** RSSIThreashold update done ***");
|
ESP_LOGD(TAG, "*** RSSIThreshold update done ***");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
bool LoadWlanFromFile(std::string fn, char *&_ssid, char *&_password, char *&_hostname, char *&_ipadr, char *&_gw, char *&_netmask, char *&_dns, int &_rssithreashold);
|
bool LoadWlanFromFile(std::string fn, char *&_ssid, char *&_password, char *&_hostname, char *&_ipadr, char *&_gw, char *&_netmask, char *&_dns, int &_rssithreshold);
|
||||||
|
|
||||||
bool ChangeHostName(std::string fn, std::string _newhostname);
|
bool ChangeHostName(std::string fn, std::string _newhostname);
|
||||||
bool ChangeRSSIThreashold(std::string fn, int _newrssithreashold);
|
bool ChangeRSSIThreshold(std::string fn, int _newrssithreshold);
|
||||||
|
|
||||||
|
|
||||||
#endif //READ_WLANINI_H
|
#endif //READ_WLANINI_H
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
//#define CONFIG_IDF_TARGET_ARCH_XTENSA //not needed with platformio/espressif32 @ 5.2.0
|
//#define CONFIG_IDF_TARGET_ARCH_XTENSA //not needed with platformio/espressif32 @ 5.2.0
|
||||||
|
|
||||||
|
|
||||||
//ClassControllCamera + ClassFlowMakeImage + connect_wlan + main
|
//ClassControllCamera + ClassFlowTakeImage + connect_wlan + main
|
||||||
#define FLASH_GPIO GPIO_NUM_4
|
#define FLASH_GPIO GPIO_NUM_4
|
||||||
#define BLINK_GPIO GPIO_NUM_33
|
#define BLINK_GPIO GPIO_NUM_33
|
||||||
|
|
||||||
@@ -71,12 +71,13 @@
|
|||||||
//server_GPIO
|
//server_GPIO
|
||||||
#define __LEDGLOBAL
|
#define __LEDGLOBAL
|
||||||
|
|
||||||
//ClassControllCamera + ClassFlowMakeImage
|
//ClassControllCamera + ClassFlowTakeImage
|
||||||
#define CAMERA_MODEL_AI_THINKER
|
#define CAMERA_MODEL_AI_THINKER
|
||||||
#define BOARD_ESP32CAM_AITHINKER
|
#define BOARD_ESP32CAM_AITHINKER
|
||||||
|
|
||||||
//server_GPIO + server_file + SoftAP
|
//server_GPIO + server_file + SoftAP
|
||||||
#define CONFIG_FILE "/sdcard/config/config.ini"
|
#define CONFIG_FILE "/sdcard/config/config.ini"
|
||||||
|
#define CONFIG_FILE_BACKUP "/sdcard/config/config.bak"
|
||||||
|
|
||||||
//ClassFlowControll + Main + SoftAP
|
//ClassFlowControll + Main + SoftAP
|
||||||
#define WLAN_CONFIG_FILE "/sdcard/wlan.ini"
|
#define WLAN_CONFIG_FILE "/sdcard/wlan.ini"
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
//#include <string>
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <regex>
|
||||||
|
|
||||||
//#include "freertos/FreeRTOS.h"
|
//#include "freertos/FreeRTOS.h"
|
||||||
//#include "freertos/task.h"
|
//#include "freertos/task.h"
|
||||||
//#include "freertos/event_groups.h"
|
//#include "freertos/event_groups.h"
|
||||||
@@ -29,6 +33,7 @@
|
|||||||
#include "server_file.h"
|
#include "server_file.h"
|
||||||
#include "server_ota.h"
|
#include "server_ota.h"
|
||||||
#include "time_sntp.h"
|
#include "time_sntp.h"
|
||||||
|
#include "configFile.h"
|
||||||
//#include "ClassControllCamera.h"
|
//#include "ClassControllCamera.h"
|
||||||
#include "server_main.h"
|
#include "server_main.h"
|
||||||
#include "server_camera.h"
|
#include "server_camera.h"
|
||||||
@@ -78,6 +83,14 @@ extern std::string getFwVersion(void);
|
|||||||
extern std::string getHTMLversion(void);
|
extern std::string getHTMLversion(void);
|
||||||
extern std::string getHTMLcommit(void);
|
extern std::string getHTMLcommit(void);
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string> splitString(const std::string& str);
|
||||||
|
bool replace(std::string& s, std::string const& toReplace, std::string const& replaceWith);
|
||||||
|
bool replace(std::string& s, std::string const& toReplace, std::string const& replaceWith, bool logIt);
|
||||||
|
//bool replace_all(std::string& s, std::string const& toReplace, std::string const& replaceWith);
|
||||||
|
bool isInString(std::string& s, std::string const& toFind);
|
||||||
|
void migrateConfiguration(void);
|
||||||
|
|
||||||
static const char *TAG = "MAIN";
|
static const char *TAG = "MAIN";
|
||||||
|
|
||||||
bool Init_NVS_SDCard()
|
bool Init_NVS_SDCard()
|
||||||
@@ -198,6 +211,8 @@ extern "C" void app_main(void)
|
|||||||
return; // No way to continue without SD-Card!
|
return; // No way to continue without SD-Card!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
migrateConfiguration();
|
||||||
|
|
||||||
setupTime();
|
setupTime();
|
||||||
|
|
||||||
string versionFormated = getFwVersion() + ", Date/Time: " + std::string(BUILD_TIME) + \
|
string versionFormated = getFwVersion() + ", Date/Time: " + std::string(BUILD_TIME) + \
|
||||||
@@ -242,10 +257,10 @@ extern "C" void app_main(void)
|
|||||||
ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) );
|
ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *ssid = NULL, *passwd = NULL, *hostname = NULL, *ip = NULL, *gateway = NULL, *netmask = NULL, *dns = NULL; int rssithreashold = 0;
|
char *ssid = NULL, *passwd = NULL, *hostname = NULL, *ip = NULL, *gateway = NULL, *netmask = NULL, *dns = NULL; int rssithreshold = 0;
|
||||||
LoadWlanFromFile(WLAN_CONFIG_FILE, ssid, passwd, hostname, ip, gateway, netmask, dns, rssithreashold);
|
LoadWlanFromFile(WLAN_CONFIG_FILE, ssid, passwd, hostname, ip, gateway, netmask, dns, rssithreshold);
|
||||||
|
|
||||||
LogFile.WriteToFile(ESP_LOG_INFO, TAG, "WLAN-Settings - RSSI-Threashold: " + to_string(rssithreashold));
|
LogFile.WriteToFile(ESP_LOG_INFO, TAG, "WLAN-Settings - RSSI-Threshold: " + to_string(rssithreshold));
|
||||||
|
|
||||||
if (ssid != NULL && passwd != NULL)
|
if (ssid != NULL && passwd != NULL)
|
||||||
#ifdef __HIDE_PASSWORD
|
#ifdef __HIDE_PASSWORD
|
||||||
@@ -268,7 +283,7 @@ extern "C" void app_main(void)
|
|||||||
ESP_LOGD(TAG, "DNS IP: %s", dns);
|
ESP_LOGD(TAG, "DNS IP: %s", dns);
|
||||||
|
|
||||||
|
|
||||||
wifi_init_sta(ssid, passwd, hostname, ip, gateway, netmask, dns, rssithreashold);
|
wifi_init_sta(ssid, passwd, hostname, ip, gateway, netmask, dns, rssithreshold);
|
||||||
|
|
||||||
|
|
||||||
xDelay = 2000 / portTICK_PERIOD_MS;
|
xDelay = 2000 / portTICK_PERIOD_MS;
|
||||||
@@ -398,3 +413,243 @@ extern "C" void app_main(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void migrateConfiguration(void) {
|
||||||
|
bool migrated = false;
|
||||||
|
|
||||||
|
if (!FileExists(CONFIG_FILE)) {
|
||||||
|
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Config file seems to be missing!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string section = "";
|
||||||
|
std::ifstream ifs(CONFIG_FILE);
|
||||||
|
std::string content((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
|
||||||
|
|
||||||
|
/* Split config file it array of lines */
|
||||||
|
std::vector<std::string> configLines = splitString(content);
|
||||||
|
|
||||||
|
/* Process each line */
|
||||||
|
for (int i = 0; i < configLines.size(); i++) {
|
||||||
|
//ESP_LOGI(TAG, "Line %d: %s", i, configLines[i].c_str());
|
||||||
|
|
||||||
|
if (configLines[i].find("[") != std::string::npos) { // Start of new section
|
||||||
|
section = configLines[i];
|
||||||
|
replace(section, ";", "", false); // Remove possible semicolon (just for the string comparison)
|
||||||
|
//ESP_LOGI(TAG, "New section: %s", section.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Migrate parameters as needed
|
||||||
|
* For the boolean parameters, we make them enabled all the time now:
|
||||||
|
* 1. If they where disabled, set them to their default value
|
||||||
|
* 2. Enable them
|
||||||
|
* Notes:
|
||||||
|
* The migration has some simplifications:
|
||||||
|
* - Case Sensitiveness must be like in the initial config.ini
|
||||||
|
* - No Whitespace after a semicollon
|
||||||
|
* - Only one whitespace before/after the equal sign
|
||||||
|
*/
|
||||||
|
if (section == "[MakeImage]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "[MakeImage]", "[TakeImage]"); // Rename the section itself
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[MakeImage]" || section == "[TakeImage]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "LogImageLocation", "RawImagesLocation");
|
||||||
|
migrated = migrated | replace(configLines[i], "LogfileRetentionInDays", "RawImagesRetention");
|
||||||
|
|
||||||
|
migrated = migrated | replace(configLines[i], ";Demo = true", ";Demo = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";Demo", "Demo"); // Enable it
|
||||||
|
|
||||||
|
migrated = migrated | replace(configLines[i], ";FixedExposure = true", ";FixedExposure = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";FixedExposure", "FixedExposure"); // Enable it
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[Alignment]") {
|
||||||
|
migrated = migrated | replace(configLines[i], ";InitialMirror = true", ";InitialMirror = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";InitialMirror", "InitialMirror"); // Enable it
|
||||||
|
|
||||||
|
migrated = migrated | replace(configLines[i], ";FlipImageSize = true", ";FlipImageSize = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";FlipImageSize", "FlipImageSize"); // Enable it
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[Digits]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "LogImageLocation", "ROIImagesLocation");
|
||||||
|
migrated = migrated | replace(configLines[i], "LogfileRetentionInDays", "ROIImagesRetention");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[Analog]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "LogImageLocation", "ROIImagesLocation");
|
||||||
|
migrated = migrated | replace(configLines[i], "LogfileRetentionInDays", "ROIImagesRetention");
|
||||||
|
migrated = migrated | replace(configLines[i], "ExtendedResolution", ";UNUSED_PARAMETER"); // This parameter is no longer used
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[PostProcessing]") {
|
||||||
|
migrated = migrated | replace(configLines[i], ";PreValueUse = true", ";PreValueUse = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";PreValueUse", "PreValueUse"); // Enable it
|
||||||
|
|
||||||
|
/* AllowNegativeRates has a <NUMBER> as prefix! */
|
||||||
|
if (isInString(configLines[i], "AllowNegativeRates") && isInString(configLines[i], ";")) { // It is the parameter "AllowNegativeRates" and it is commented out
|
||||||
|
migrated = migrated | replace(configLines[i], "true", "false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";", ""); // Enable it
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IgnoreLeadingNaN has a <NUMBER> as prefix! */
|
||||||
|
if (isInString(configLines[i], "IgnoreLeadingNaN") && isInString(configLines[i], ";")) { // It is the parameter "IgnoreLeadingNaN" and it is commented out
|
||||||
|
migrated = migrated | replace(configLines[i], "true", "false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";", ""); // Enable it
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ExtendedResolution has a <NUMBER> as prefix! */
|
||||||
|
if (isInString(configLines[i], "ExtendedResolution") && isInString(configLines[i], ";")) { // It is the parameter "ExtendedResolution" and it is commented out
|
||||||
|
migrated = migrated | replace(configLines[i], "true", "false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";", ""); // Enable it
|
||||||
|
}
|
||||||
|
|
||||||
|
migrated = migrated | replace(configLines[i], ";ErrorMessage = true", ";ErrorMessage = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";ErrorMessage", "ErrorMessage"); // Enable it
|
||||||
|
|
||||||
|
migrated = migrated | replace(configLines[i], ";CheckDigitIncreaseConsistency = true", ";CheckDigitIncreaseConsistency = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";CheckDigitIncreaseConsistency", "CheckDigitIncreaseConsistency"); // Enable it
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[MQTT]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "SetRetainFlag", "RetainMessages"); // First rename it, enable it with its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";RetainMessages = true", ";RetainMessages = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";RetainMessages", "RetainMessages"); // Enable it
|
||||||
|
|
||||||
|
migrated = migrated | replace(configLines[i], ";HomeassistantDiscovery = true", ";HomeassistantDiscovery = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";HomeassistantDiscovery", "HomeassistantDiscovery"); // Enable it
|
||||||
|
|
||||||
|
if (configLines[i].rfind("Topic", 0) != std::string::npos) // only if string starts with "Topic" (Was the naming in very old version)
|
||||||
|
{
|
||||||
|
migrated = migrated | replace(configLines[i], "Topic", "MainTopic");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[InfluxDB]") {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[GPIO]") {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[DataLogging]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "DataLogRetentionInDays", "DataFilesRetention");
|
||||||
|
/* DataLogActive is true by default! */
|
||||||
|
migrated = migrated | replace(configLines[i], ";DataLogActive = true", ";DataLogActive = true"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";DataLogActive", "DataLogActive"); // Enable it
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[AutoTimer]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "Intervall", "Interval");
|
||||||
|
migrated = migrated | replace(configLines[i], ";AutoStart = true", ";AutoStart = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";AutoStart", "AutoStart"); // Enable it
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[Debug]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "Logfile ", "LogLevel "); // Whitespace needed so it does not match `LogfileRetentionInDays`
|
||||||
|
/* LogLevel (resp. LogFile) was originally a boolean, but we switched it to an int
|
||||||
|
* For both cases (true/false), we set it to level 2 (WARNING) */
|
||||||
|
migrated = migrated | replace(configLines[i], "LogLevel = true", "LogLevel = 2");
|
||||||
|
migrated = migrated | replace(configLines[i], "LogLevel = false", "LogLevel = 2");
|
||||||
|
migrated = migrated | replace(configLines[i], "LogfileRetentionInDays", "LogfilesRetention");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section == "[System]") {
|
||||||
|
migrated = migrated | replace(configLines[i], "RSSIThreashold", "RSSIThreshold");
|
||||||
|
migrated = migrated | replace(configLines[i], "AutoAdjustSummertime", ";UNUSED_PARAMETER"); // This parameter is no longer used
|
||||||
|
|
||||||
|
migrated = migrated | replace(configLines[i], ";SetupMode = true", ";SetupMode = false"); // Set it to its default value
|
||||||
|
migrated = migrated | replace(configLines[i], ";SetupMode", "SetupMode"); // Enable it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (migrated) { // At least one replacement happened
|
||||||
|
if (! RenameFile(CONFIG_FILE, CONFIG_FILE_BACKUP)) {
|
||||||
|
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Failed to create backup of Config file!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE* pfile = fopen(CONFIG_FILE, "w");
|
||||||
|
for (int i = 0; i < configLines.size(); i++) {
|
||||||
|
fwrite(configLines[i].c_str() , configLines[i].length(), 1, pfile);
|
||||||
|
fwrite("\n" , 1, 1, pfile);
|
||||||
|
}
|
||||||
|
fclose(pfile);
|
||||||
|
LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Config file migrated. Saved backup to " + string(CONFIG_FILE_BACKUP));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string> splitString(const std::string& str) {
|
||||||
|
std::vector<std::string> tokens;
|
||||||
|
|
||||||
|
std::stringstream ss(str);
|
||||||
|
std::string token;
|
||||||
|
|
||||||
|
while (std::getline(ss, token, '\n')) {
|
||||||
|
tokens.push_back(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*bool replace_all(std::string& s, std::string const& toReplace, std::string const& replaceWith) {
|
||||||
|
std::string buf;
|
||||||
|
std::size_t pos = 0;
|
||||||
|
std::size_t prevPos;
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
// Reserves rough estimate of final size of string.
|
||||||
|
buf.reserve(s.size());
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
prevPos = pos;
|
||||||
|
pos = s.find(toReplace, pos);
|
||||||
|
if (pos == std::string::npos) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
found = true;
|
||||||
|
buf.append(s, prevPos, pos - prevPos);
|
||||||
|
buf += replaceWith;
|
||||||
|
pos += toReplace.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.append(s, prevPos, s.size() - prevPos);
|
||||||
|
s.swap(buf);
|
||||||
|
|
||||||
|
return found;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
bool replace(std::string& s, std::string const& toReplace, std::string const& replaceWith) {
|
||||||
|
return replace(s, toReplace, replaceWith, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool replace(std::string& s, std::string const& toReplace, std::string const& replaceWith, bool logIt) {
|
||||||
|
std::size_t pos = s.find(toReplace);
|
||||||
|
|
||||||
|
if (pos == std::string::npos) { // Not found
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string old = s;
|
||||||
|
s.replace(pos, toReplace.length(), replaceWith);
|
||||||
|
if (logIt) {
|
||||||
|
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Migrated Configfile line '" + old + "' to '" + s + "'");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool isInString(std::string& s, std::string const& toFind) {
|
||||||
|
std::size_t pos = s.find(toFind);
|
||||||
|
|
||||||
|
if (pos == std::string::npos) { // Not found
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
@@ -140,14 +140,14 @@ void SendHTTPResponse(httpd_req_t *req)
|
|||||||
// message += "<tr><td>gateway</td><td><input type=\"text\" name=\"gateway\" id=\"gateway\"></td><td>Leave emtpy if set by router</td></tr>";
|
// message += "<tr><td>gateway</td><td><input type=\"text\" name=\"gateway\" id=\"gateway\"></td><td>Leave emtpy if set by router</td></tr>";
|
||||||
// message += "<tr><td>netmask</td><td><input type=\"text\" name=\"netmask\" id=\"netmask\"></td><td>Leave emtpy if set by router</td>";
|
// message += "<tr><td>netmask</td><td><input type=\"text\" name=\"netmask\" id=\"netmask\"></td><td>Leave emtpy if set by router</td>";
|
||||||
// message += "</tr><tr><td>DNS</td><td><input type=\"text\" name=\"dns\" id=\"dns\"></td><td>Leave emtpy if set by router</td></tr>";
|
// message += "</tr><tr><td>DNS</td><td><input type=\"text\" name=\"dns\" id=\"dns\"></td><td>Leave emtpy if set by router</td></tr>";
|
||||||
// message += "<tr><td>RSSI Threashold</td><td><input type=\"number\" name=\"name\" id=\"threashold\" min=\"-100\" max=\"0\" step=\"1\" value = \"0\"></td><td>WLAN Mesh Parameter: Threashold for RSSI value to check for start switching access point in a mesh system.Possible values: -100 to 0, 0 = disabled - Value will be transfered to wlan.ini at next startup)</td></tr>";
|
// message += "<tr><td>RSSI Threshold</td><td><input type=\"number\" name=\"name\" id=\"threshold\" min=\"-100\" max=\"0\" step=\"1\" value = \"0\"></td><td>WLAN Mesh Parameter: Threshold for RSSI value to check for start switching access point in a mesh system.Possible values: -100 to 0, 0 = disabled - Value will be transfered to wlan.ini at next startup)</td></tr>";
|
||||||
// httpd_resp_send_chunk(req, message.c_str(), strlen(message.c_str()));
|
// httpd_resp_send_chunk(req, message.c_str(), strlen(message.c_str()));
|
||||||
|
|
||||||
|
|
||||||
message = "<button class=\"button\" type=\"button\" onclick=\"wr()\">Write wlan.ini</button>";
|
message = "<button class=\"button\" type=\"button\" onclick=\"wr()\">Write wlan.ini</button>";
|
||||||
message += "<script language=\"JavaScript\">async function wr(){";
|
message += "<script language=\"JavaScript\">async function wr(){";
|
||||||
message += "api = \"/config?\"+\"ssid=\"+document.getElementById(\"ssid\").value+\"&pwd=\"+document.getElementById(\"password\").value;";
|
message += "api = \"/config?\"+\"ssid=\"+document.getElementById(\"ssid\").value+\"&pwd=\"+document.getElementById(\"password\").value;";
|
||||||
// message += "api = \"/config?\"+\"ssid=\"+document.getElementById(\"ssid\").value+\"&pwd=\"+document.getElementById(\"password\").value+\"&hn=\"+document.getElementById(\"hostname\").value+\"&ip=\"+document.getElementById(\"ip\").value+\"&gw=\"+document.getElementById(\"gateway\").value+\"&nm=\"+document.getElementById(\"netmask\").value+\"&dns=\"+document.getElementById(\"dns\").value+\"&rssi=\"+document.getElementById(\"threashold\").value;";
|
// message += "api = \"/config?\"+\"ssid=\"+document.getElementById(\"ssid\").value+\"&pwd=\"+document.getElementById(\"password\").value+\"&hn=\"+document.getElementById(\"hostname\").value+\"&ip=\"+document.getElementById(\"ip\").value+\"&gw=\"+document.getElementById(\"gateway\").value+\"&nm=\"+document.getElementById(\"netmask\").value+\"&dns=\"+document.getElementById(\"dns\").value+\"&rssi=\"+document.getElementById(\"threshold\").value;";
|
||||||
message += "fetch(api);await new Promise(resolve => setTimeout(resolve, 1000));location.reload();}</script>";
|
message += "fetch(api);await new Promise(resolve => setTimeout(resolve, 1000));location.reload();}</script>";
|
||||||
httpd_resp_send_chunk(req, message.c_str(), strlen(message.c_str()));
|
httpd_resp_send_chunk(req, message.c_str(), strlen(message.c_str()));
|
||||||
return;
|
return;
|
||||||
@@ -311,7 +311,7 @@ esp_err_t config_ini_handler(httpd_req_t *req)
|
|||||||
fputs(dns.c_str(), configfilehandle);
|
fputs(dns.c_str(), configfilehandle);
|
||||||
|
|
||||||
if (rssi.length())
|
if (rssi.length())
|
||||||
rssi = "RSSIThreashold = \"" + rssi + "\"\n";
|
rssi = "RSSIThreshold = \"" + rssi + "\"\n";
|
||||||
else
|
else
|
||||||
rssi = ";rssi = \"\"\n";
|
rssi = ";rssi = \"\"\n";
|
||||||
fputs(rssi.c_str(), configfilehandle);
|
fputs(rssi.c_str(), configfilehandle);
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ UnderTestPost* setUpClassFlowPostprocessing(t_CNNType digType, t_CNNType anaType
|
|||||||
ClassFlowCNNGeneral* _analog;
|
ClassFlowCNNGeneral* _analog;
|
||||||
ClassFlowCNNGeneral* _digit;
|
ClassFlowCNNGeneral* _digit;
|
||||||
std::vector<ClassFlow*> FlowControll;
|
std::vector<ClassFlow*> FlowControll;
|
||||||
ClassFlowMakeImage* flowmakeimage;
|
ClassFlowTakeImage* flowtakeimage;
|
||||||
|
|
||||||
// wird im doFlow verwendet
|
// wird im doFlow verwendet
|
||||||
flowmakeimage = new ClassFlowMakeImage(&FlowControll);
|
flowtakeimage = new ClassFlowTakeImage(&FlowControll);
|
||||||
FlowControll.push_back(flowmakeimage);
|
FlowControll.push_back(flowtakeimage);
|
||||||
|
|
||||||
// Die Modeltypen werden gesetzt, da keine Modelle verwendet werden.
|
// Die Modeltypen werden gesetzt, da keine Modelle verwendet werden.
|
||||||
_analog = new ClassFlowCNNGeneral(nullptr, anaType);
|
_analog = new ClassFlowCNNGeneral(nullptr, anaType);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#include <unity.h>
|
#include <unity.h>
|
||||||
#include <ClassFlowPostProcessing.h>
|
#include <ClassFlowPostProcessing.h>
|
||||||
#include <ClassFlowCNNGeneral.h>
|
#include <ClassFlowCNNGeneral.h>
|
||||||
#include <ClassFlowMakeImage.h>
|
#include <ClassFlowTakeImage.h>
|
||||||
#include <Helper.h>
|
#include <Helper.h>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[MakeImage]
|
[TakeImage]
|
||||||
;LogImageLocation = /log/source
|
;RawImagesLocation = /log/source
|
||||||
WaitBeforeTakingPicture = 5
|
WaitBeforeTakingPicture = 5
|
||||||
;LogfileRetentionInDays = 15
|
;RawImagesRetention = 15
|
||||||
Brightness = 0
|
Brightness = 0
|
||||||
Contrast = 0
|
Contrast = 0
|
||||||
Saturation = 0
|
Saturation = 0
|
||||||
@@ -24,8 +24,8 @@ FlipImageSize = false
|
|||||||
[Digits]
|
[Digits]
|
||||||
Model = /config/dig-cont_0600_s3.tflite
|
Model = /config/dig-cont_0600_s3.tflite
|
||||||
CNNGoodThreshold = 0.5
|
CNNGoodThreshold = 0.5
|
||||||
;LogImageLocation = /log/digit
|
;ROIImagesLocation = /log/digit
|
||||||
;LogfileRetentionInDays = 3
|
;ROIImagesRetention = 3
|
||||||
main.dig1 294 126 30 54 false
|
main.dig1 294 126 30 54 false
|
||||||
main.dig2 343 126 30 54 false
|
main.dig2 343 126 30 54 false
|
||||||
main.dig3 391 126 30 54 false
|
main.dig3 391 126 30 54 false
|
||||||
@@ -33,9 +33,8 @@ main.dig3 391 126 30 54 false
|
|||||||
[Analog]
|
[Analog]
|
||||||
Model = /config/ana-cont_11.3.1_s2.tflite
|
Model = /config/ana-cont_11.3.1_s2.tflite
|
||||||
CNNGoodThreshold = 0.5
|
CNNGoodThreshold = 0.5
|
||||||
;LogImageLocation = /log/analog
|
;ROIImagesLocation = /log/analog
|
||||||
;LogfileRetentionInDays = 3
|
;ROIImagesRetention = 3
|
||||||
ExtendedResolution = true
|
|
||||||
main.ana1 432 230 92 92 false
|
main.ana1 432 230 92 92 false
|
||||||
main.ana2 379 332 92 92 false
|
main.ana2 379 332 92 92 false
|
||||||
main.ana3 283 374 92 92 false
|
main.ana3 283 374 92 92 false
|
||||||
@@ -49,8 +48,8 @@ PreValueAgeStartup = 720
|
|||||||
main.AllowNegativeRates = false
|
main.AllowNegativeRates = false
|
||||||
main.MaxRateValue = 0.05
|
main.MaxRateValue = 0.05
|
||||||
;main.MaxRateType = AbsoluteChange
|
;main.MaxRateType = AbsoluteChange
|
||||||
;main.ExtendedResolution = false
|
main.ExtendedResolution = false
|
||||||
;main.IgnoreLeadingNaN = true
|
main.IgnoreLeadingNaN = false
|
||||||
ErrorMessage = true
|
ErrorMessage = true
|
||||||
CheckDigitIncreaseConsistency = false
|
CheckDigitIncreaseConsistency = false
|
||||||
|
|
||||||
@@ -60,8 +59,8 @@ CheckDigitIncreaseConsistency = false
|
|||||||
;ClientID = watermeter
|
;ClientID = watermeter
|
||||||
;user = USERNAME
|
;user = USERNAME
|
||||||
;password = PASSWORD
|
;password = PASSWORD
|
||||||
;SetRetainFlag = true
|
RetainMessages = false
|
||||||
;HomeassistantDiscovery = true
|
HomeassistantDiscovery = false
|
||||||
;MeterType = other
|
;MeterType = other
|
||||||
|
|
||||||
;[InfluxDB]
|
;[InfluxDB]
|
||||||
@@ -85,20 +84,19 @@ LEDColor = 150 150 150
|
|||||||
|
|
||||||
[AutoTimer]
|
[AutoTimer]
|
||||||
AutoStart = true
|
AutoStart = true
|
||||||
Intervall = 5
|
Interval = 5
|
||||||
|
|
||||||
[DataLogging]
|
[DataLogging]
|
||||||
DataLogActive = true
|
DataLogActive = true
|
||||||
DataLogRetentionInDays = 3
|
DataFilesRetention = 3
|
||||||
|
|
||||||
[Debug]
|
[Debug]
|
||||||
Logfile = 1
|
LogLevel = 1
|
||||||
LogfileRetentionInDays = 3
|
LogfilesRetention = 3
|
||||||
|
|
||||||
[System]
|
[System]
|
||||||
TimeZone = CET-1CEST,M3.5.0,M10.5.0/3
|
TimeZone = CET-1CEST,M3.5.0,M10.5.0/3
|
||||||
;TimeServer = pool.ntp.org
|
;TimeServer = pool.ntp.org
|
||||||
;AutoAdjustSummertime = false
|
|
||||||
;Hostname = undefined
|
;Hostname = undefined
|
||||||
;RSSIThreashold = 0
|
;RSSIThreshold = 0
|
||||||
SetupMode = true
|
SetupMode = true
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* The UI can also be run locally, but you have to set the IP of your devide accordingly.
|
/* The UI can also be run locally, but you have to set the IP of your devide accordingly.
|
||||||
* And you also might have to disable CORS in your webbrowser! */
|
* And you also might have to disable CORS in your webbrowser! */
|
||||||
var domainname_for_testing = "192.168.178.44";
|
var domainname_for_testing = "192.168.178.62";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -102,23 +102,23 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("MakeImage", "LogImageLocation")' unchecked >
|
<input type="checkbox" id="TakeImage_RawImagesLocation_enabled" value="1" onclick = 'InvertEnableItem("TakeImage", "RawImagesLocation")' unchecked >
|
||||||
<label for=MakeImage_LogImageLocation_enabled><class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class></label>
|
<label for=TakeImage_RawImagesLocation_enabled><class id="TakeImage_RawImagesLocation_text" style="color:black;">RawImagesLocation</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" name="name" id="MakeImage_LogImageLocation_value1">
|
<input type="text" name="name" id="TakeImage_RawImagesLocation_value1">
|
||||||
</td>
|
</td>
|
||||||
<td class="description">
|
<td class="description">
|
||||||
Location to store raw images for logging
|
Location to store raw camera images
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("MakeImage", "LogfileRetentionInDays")' unchecked >
|
<input type="checkbox" id="TakeImage_RawImagesRetention_enabled" value="1" onclick = 'InvertEnableItem("TakeImage", "RawImagesRetention")' unchecked >
|
||||||
<label for=MakeImage_LogfileRetentionInDays_enabled><class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class></label>
|
<label for=TakeImage_RawImagesRetention_enabled><class id="TakeImage_RawImagesRetention_text" style="color:black;">RawImagesRetention</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="MakeImage_LogfileRetentionInDays_value1" size="13" min="0" step="1">
|
<input type="number" id="TakeImage_RawImagesRetention_value1" size="13" min="0" step="1">
|
||||||
</td>
|
</td>
|
||||||
<td class="description">
|
<td class="description">
|
||||||
Time to keep the raw image (in days, resp. "0" = forever)
|
Time to keep the raw image (in days, resp. "0" = forever)
|
||||||
@@ -126,11 +126,10 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex1">
|
<tr class="expert" id="ex1">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="MakeImage_Demo_enabled" value="1" onclick = 'InvertEnableItem("MakeImage", "Demo")' unchecked >
|
<label for=TakeImage_Demo_enabled><class id="TakeImage_Demo_text" style="color:black;">Demo Mode</class></label>
|
||||||
<label for=MakeImage_Demo_enabled><class id="MakeImage_Demo_text" style="color:black;">Demo Mode</class></label>
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="MakeImage_Demo_value1">
|
<select id="TakeImage_Demo_value1">
|
||||||
<option value="true">true</option>
|
<option value="true">true</option>
|
||||||
<option value="false" selected>false</option>
|
<option value="false" selected>false</option>
|
||||||
</select>
|
</select>
|
||||||
@@ -144,10 +143,10 @@ textarea {
|
|||||||
<tr class="expert" id="ex1">
|
<tr class="expert" id="ex1">
|
||||||
|
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_WaitBeforeTakingPicture_text" style="color:black;">WaitBeforeTakingPicture</class>
|
<class id="TakeImage_WaitBeforeTakingPicture_text" style="color:black;">WaitBeforeTakingPicture</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="MakeImage_WaitBeforeTakingPicture_value1" size="13" min="0" step="any">
|
<input type="number" id="TakeImage_WaitBeforeTakingPicture_value1" size="13" min="0" step="any">
|
||||||
</td>
|
</td>
|
||||||
<td class="description">
|
<td class="description">
|
||||||
Wait time between switching illumination on and taking the picture (in seconds)
|
Wait time between switching illumination on and taking the picture (in seconds)
|
||||||
@@ -155,10 +154,10 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex2">
|
<tr class="expert" id="ex2">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_ImageQuality_text" style="color:black;">ImageQuality</class>
|
<class id="TakeImage_ImageQuality_text" style="color:black;">ImageQuality</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="MakeImage_ImageQuality_value1" size="13" min="8" max="63">
|
<input type="number" id="TakeImage_ImageQuality_value1" size="13" min="0" max="63">
|
||||||
</td>
|
</td>
|
||||||
<td class="description">
|
<td class="description">
|
||||||
Image quality index (default = 12) <br>
|
Image quality index (default = 12) <br>
|
||||||
@@ -168,10 +167,10 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex3">
|
<tr class="expert" id="ex3">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_ImageSize_text" style="color:black;">ImageSize</class>
|
<class id="TakeImage_ImageSize_text" style="color:black;">ImageSize</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="MakeImage_ImageSize_value1">
|
<select id="TakeImage_ImageSize_value1">
|
||||||
<option value="VGA" selected>VGA</option>
|
<option value="VGA" selected>VGA</option>
|
||||||
<option value="QVGA" >QVGA</option>
|
<option value="QVGA" >QVGA</option>
|
||||||
</select>
|
</select>
|
||||||
@@ -183,10 +182,10 @@ textarea {
|
|||||||
|
|
||||||
<tr class="expert" id="LEDIntensity_ex3">
|
<tr class="expert" id="LEDIntensity_ex3">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_LEDIntensity_text" style="color:black;">LEDIntensity</class>
|
<class id="TakeImage_LEDIntensity_text" style="color:black;">LEDIntensity</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="MakeImage_LEDIntensity_value1" size="13" min="0" max="100">
|
<input type="number" id="TakeImage_LEDIntensity_value1" size="13" min="0" max="100">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
Internal LED Flash Intensity (PWM from 0% - 100%). <br>
|
Internal LED Flash Intensity (PWM from 0% - 100%). <br>
|
||||||
@@ -196,10 +195,10 @@ textarea {
|
|||||||
|
|
||||||
<tr class="expert" id="Brightness_ex3">
|
<tr class="expert" id="Brightness_ex3">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_Brightness_text" style="color:black;">Brightness</class>
|
<class id="TakeImage_Brightness_text" style="color:black;">Brightness</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="MakeImage_Brightness_value1" size="13" min="-2" max="2">
|
<input type="number" id="TakeImage_Brightness_value1" size="13" min="-2" max="2">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
Image brightness (default = 0) <br>
|
Image brightness (default = 0) <br>
|
||||||
@@ -209,10 +208,10 @@ textarea {
|
|||||||
|
|
||||||
<tr class="expert" id="Contrast_ex3">
|
<tr class="expert" id="Contrast_ex3">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_Contrast_text" style="color:black;">Contrast</class>
|
<class id="TakeImage_Contrast_text" style="color:black;">Contrast</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="MakeImage_Contrast_value1" size="13" min="-2" max="2">
|
<input type="number" id="TakeImage_Contrast_value1" size="13" min="-2" max="2">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
Image contrast (default = 0) <br>
|
Image contrast (default = 0) <br>
|
||||||
@@ -222,10 +221,10 @@ textarea {
|
|||||||
|
|
||||||
<tr class="expert" id="Saturation_ex3">
|
<tr class="expert" id="Saturation_ex3">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_Saturation_text" style="color:black;">Saturation</class>
|
<class id="TakeImage_Saturation_text" style="color:black;">Saturation</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="MakeImage_Saturation_value1" size="13" min="-2" max="2">
|
<input type="number" id="TakeImage_Saturation_value1" size="13" min="-2" max="2">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
Image saturation (default = 0) <br>
|
Image saturation (default = 0) <br>
|
||||||
@@ -233,12 +232,12 @@ textarea {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr class="expert" id="MakeImage_FixedExposure_ex10">
|
<tr class="expert" id="TakeImage_FixedExposure_ex10">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="MakeImage_FixedExposure_text" style="color:black;">FixedExposure</class>
|
<class id="TakeImage_FixedExposure_text" style="color:black;">FixedExposure</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="MakeImage_FixedExposure_value1">
|
<select id="TakeImage_FixedExposure_value1">
|
||||||
<option value="true" selected>true</option>
|
<option value="true" selected>true</option>
|
||||||
<option value="false" >false</option>
|
<option value="false" >false</option>
|
||||||
</select>
|
</select>
|
||||||
@@ -292,6 +291,37 @@ textarea {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr class="expert" id="ex13">
|
||||||
|
<td class="indent1">
|
||||||
|
<class id="Alignment_FlipImageSize_text" style="color:black;">FlipImageSize</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="Alignment_FlipImageSize_value1">
|
||||||
|
<option value="true">true</option>
|
||||||
|
<option value="false" selected>false</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Rotate the viewport together with the alignment rotation.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr class="expert" id="ex13">
|
||||||
|
<td class="indent1">
|
||||||
|
<class id="Alignment_InitialMirror_text" style="color:black;">InitialMirror</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="Alignment_InitialMirror_value1">
|
||||||
|
<option value="true">true</option>
|
||||||
|
<option value="false" selected>false</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Rotate the viewport together with the alignment rotation.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr id="Category_Digits_ex4">
|
<tr id="Category_Digits_ex4">
|
||||||
<td colspan="3" style="padding-left: 20px;">
|
<td colspan="3" style="padding-left: 20px;">
|
||||||
@@ -328,11 +358,11 @@ textarea {
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Digits", "LogImageLocation")' unchecked >
|
<input type="checkbox" id="Digits_ROIImagesLocation_enabled" value="1" onclick = 'InvertEnableItem("Digits", "ROIImagesLocation")' unchecked >
|
||||||
<label for=Digits_LogImageLocation_enabled><class id="Digits_LogImageLocation_text" style="color:black;">LogImageLocation</class></label>
|
<label for=Digits_ROIImagesLocation_enabled><class id="Digits_ROIImagesLocation_text" style="color:black;">ROIImagesLocation</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" name="name" id="Digits_LogImageLocation_value1">
|
<input type="text" name="name" id="Digits_ROIImagesLocation_value1">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
Location to store separated digits for logging
|
Location to store separated digits for logging
|
||||||
@@ -340,11 +370,11 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="Digits_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Digits", "LogfileRetentionInDays")' unchecked >
|
<input type="checkbox" id="Digits_ROIImagesRetention_enabled" value="1" onclick = 'InvertEnableItem("Digits", "ROIImagesRetention")' unchecked >
|
||||||
<label for=Digits_LogfileRetentionInDays_enabled><class id="Digits_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class></label>
|
<label for=Digits_ROIImagesRetention_enabled><class id="Digits_ROIImagesRetention_text" style="color:black;">ROIImagesRetention</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="Digits_LogfileRetentionInDays_value1" min="0" step="1">
|
<input type="number" id="Digits_ROIImagesRetention_value1" min="0" step="1">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
Time to keep the separated digit images (in days, resp. "0" = forever)
|
Time to keep the separated digit images (in days, resp. "0" = forever)
|
||||||
@@ -370,18 +400,18 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Analog", "LogImageLocation")' unchecked >
|
<input type="checkbox" id="Analog_ROIImagesLocation_enabled" value="1" onclick = 'InvertEnableItem("Analog", "ROIImagesLocation")' unchecked >
|
||||||
<label for=Analog_LogImageLocation_enabled><class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
<label for=Analog_ROIImagesLocation_enabled><class id="Analog_ROIImagesLocation_text" style="color:black;">ROIImagesLocation</class>
|
||||||
</label>
|
</label>
|
||||||
</td>
|
</td>
|
||||||
<td> <input type="text" name="name" id="Analog_LogImageLocation_value1"> </td>
|
<td> <input type="text" name="name" id="Analog_ROIImagesLocation_value1"> </td>
|
||||||
<td style="font-size: 80%;"> Location to store separated digits for logging </td>
|
<td style="font-size: 80%;"> Location to store separated digits for logging </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Analog", "LogfileRetentionInDays")' unchecked >
|
<input type="checkbox" id="Analog_ROIImagesRetention_enabled" value="1" onclick = 'InvertEnableItem("Analog", "ROIImagesRetention")' unchecked >
|
||||||
<label for=Analog_LogfileRetentionInDays_enabled><class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class></label></td>
|
<label for=Analog_ROIImagesRetention_enabled><class id="Analog_ROIImagesRetention_text" style="color:black;">ROIImagesRetention</class></label></td>
|
||||||
<td> <input type="number" id="Analog_LogfileRetentionInDays_value1" min="0" step="1"> </td>
|
<td> <input type="number" id="Analog_ROIImagesRetention_value1" min="0" step="1"> </td>
|
||||||
<td style="font-size: 80%;"> Time to keep the separated digit images (in days, resp. "0" = forever) </td>
|
<td style="font-size: 80%;"> Time to keep the separated digit images (in days, resp. "0" = forever) </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -390,7 +420,6 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="PostProcessing_PreValueUse_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "PreValueUse")' unchecked >
|
|
||||||
<label for=PostProcessing_PreValueUse_enabled><class id="PostProcessing_PreValueUse_text" style="color:black;">PreValueUse</class></label>
|
<label for=PostProcessing_PreValueUse_enabled><class id="PostProcessing_PreValueUse_text" style="color:black;">PreValueUse</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -417,7 +446,6 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex12">
|
<tr class="expert" id="ex12">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "ErrorMessage")' unchecked >
|
|
||||||
<label for=PostProcessing_ErrorMessage_enabled><class id="PostProcessing_ErrorMessage_text" style="color:black;">ErrorMessage</class></label>
|
<label for=PostProcessing_ErrorMessage_enabled><class id="PostProcessing_ErrorMessage_text" style="color:black;">ErrorMessage</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -432,7 +460,6 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex1dddd">
|
<tr class="expert" id="ex1dddd">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "CheckDigitIncreaseConsistency")' unchecked >
|
|
||||||
<label for=PostProcessing_CheckDigitIncreaseConsistency_enabled><class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">CheckDigitIncreaseConsistency</class></label>
|
<label for=PostProcessing_CheckDigitIncreaseConsistency_enabled><class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">CheckDigitIncreaseConsistency</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -528,7 +555,6 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1" style="padding-left: 75px;">
|
<td class="indent1" style="padding-left: 75px;">
|
||||||
<input type="checkbox" id="PostProcessing_ExtendedResolution_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "ExtendedResolution")' unchecked >
|
|
||||||
<label for=PostProcessing_ExtendedResolution_enabled><class id="PostProcessing_ExtendedResolution_text" style="color:black;">ExtendedResolution</class></label>
|
<label for=PostProcessing_ExtendedResolution_enabled><class id="PostProcessing_ExtendedResolution_text" style="color:black;">ExtendedResolution</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -541,10 +567,8 @@ textarea {
|
|||||||
Enable to use the decimal place of the last analog counter
|
Enable to use the decimal place of the last analog counter
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td id="ex121" class="indent1" style="padding-left: 75px;">
|
<td id="ex121" class="indent1" style="padding-left: 75px;">
|
||||||
<input type="checkbox" id="PostProcessing_IgnoreLeadingNaN_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "IgnoreLeadingNaN")' unchecked >
|
|
||||||
<label for=PostProcessing_IgnoreLeadingNaN_enabled><class id="PostProcessing_IgnoreLeadingNaN_text" style="color:black;">IgnoreLeadingNaN</class></label>
|
<label for=PostProcessing_IgnoreLeadingNaN_enabled><class id="PostProcessing_IgnoreLeadingNaN_text" style="color:black;">IgnoreLeadingNaN</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -636,11 +660,10 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="MQTT_SetRetainFlag_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "SetRetainFlag")' unchecked >
|
<label for=MQTT_RetainMessages_enabled><class id="MQTT_RetainMessages_text" style="color:black;">Enable MQTT Retain Flag</class></label>
|
||||||
<label for=MQTT_SetRetainFlag_enabled><class id="MQTT_SetRetainFlag_text" style="color:black;">Enable MQTT Retain Flag</class></label>
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="MQTT_SetRetainFlag_value1">
|
<select id="MQTT_RetainMessages_value1">
|
||||||
<option value="true" selected>true</option>
|
<option value="true" selected>true</option>
|
||||||
<option value="false" >false</option>
|
<option value="false" >false</option>
|
||||||
</select>
|
</select>
|
||||||
@@ -658,7 +681,6 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="MQTT_HomeassistantDiscovery_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "HomeassistantDiscovery")' unchecked >
|
|
||||||
<label for=MQTT_HomeassistantDiscovery_enabled><class id="MQTT_HomeassistantDiscovery_text" style="color:black;">Homeassistant Discovery</class></label>
|
<label for=MQTT_HomeassistantDiscovery_enabled><class id="MQTT_HomeassistantDiscovery_text" style="color:black;">Homeassistant Discovery</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -703,7 +725,7 @@ textarea {
|
|||||||
<td colspan="3" style="padding-left: 20px;">
|
<td colspan="3" style="padding-left: 20px;">
|
||||||
<h4>
|
<h4>
|
||||||
<input type="checkbox" id="Category_InfluxDB_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >
|
<input type="checkbox" id="Category_InfluxDB_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >
|
||||||
<label for=Category_InfluxDB_enabled>InfluxDB</h4><h5>Only InfluxDB v1.x is configured here - v2.x see below [InfluxDBv2]</h5></label>
|
<label for=Category_InfluxDB_enabled>InfluxDB</h4><h5>Only InfluxDB v1.x is supported as of now</h5></label>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -767,8 +789,6 @@ textarea {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="3" style="padding-left: 20px;">
|
<td colspan="3" style="padding-left: 20px;">
|
||||||
<h4>
|
<h4>
|
||||||
@@ -860,16 +880,6 @@ textarea {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="3" style="padding-left: 20px;">
|
<td colspan="3" style="padding-left: 20px;">
|
||||||
<h4><input type="checkbox" id="Category_GPIO_enabled" value="1" onclick='UpdateAfterCategoryCheck()' unchecked >
|
<h4><input type="checkbox" id="Category_GPIO_enabled" value="1" onclick='UpdateAfterCategoryCheck()' unchecked >
|
||||||
@@ -1392,10 +1402,10 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="AutoTimer_Intervall_text" style="color:black;">Interval</class>
|
<class id="AutoTimer_Interval_text" style="color:black;">Interval</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="AutoTimer_Intervall_value1" size="13" min="3" step="any">
|
<input type="number" id="AutoTimer_Interval_value1" size="13" min="3" step="any">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
Interval in which the number(s) are read (in minutes). If a digitalization round takes longer than this interval, the next run gets postponed until the current run completes.
|
Interval in which the number(s) are read (in minutes). If a digitalization round takes longer than this interval, the next run gets postponed until the current run completes.
|
||||||
@@ -1422,10 +1432,10 @@ textarea {
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="DataLogging_DataLogRetentionInDays_text" style="color:black;">DataLogRetentionInDays</class>
|
<class id="DataLogging_DataFilesRetention_text" style="color:black;">DataFilesRetention</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="DataLogging_DataLogRetentionInDays_value1" size="13" min="0" step="1">
|
<input type="number" id="DataLogging_DataFilesRetention_value1" size="13" min="0" step="1">
|
||||||
</td>
|
</td>
|
||||||
<td class="description">
|
<td class="description">
|
||||||
Time to keep the data files (in days - "0" = forever)
|
Time to keep the data files (in days - "0" = forever)
|
||||||
@@ -1437,10 +1447,10 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="Debug_Logfile_text" style="color:black;">Logfile Log Level</class>
|
<class id="Debug_LogLevel_text" style="color:black;">Logfile Log Level</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select id="Debug_Logfile_value1">
|
<select id="Debug_LogLevel_value1">
|
||||||
<option value="1" selected>ERROR</option> <!-- matches esp_log_level_t -->
|
<option value="1" selected>ERROR</option> <!-- matches esp_log_level_t -->
|
||||||
<option value="2">WARNING</option>
|
<option value="2">WARNING</option>
|
||||||
<option value="3">INFO</option>
|
<option value="3">INFO</option>
|
||||||
@@ -1453,10 +1463,10 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
<class id="Debug_LogfilesRetention_text" style="color:black;">LogfilesRetention</class>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" id="Debug_LogfileRetentionInDays_value1" size="13" min="0" step="1">
|
<input type="number" id="Debug_LogfilesRetention_value1" size="13" min="0" step="1">
|
||||||
</td>
|
</td>
|
||||||
<td class="description">
|
<td class="description">
|
||||||
Time to keep the log files (in days - "0" = forever)
|
Time to keep the log files (in days - "0" = forever)
|
||||||
@@ -1506,15 +1516,15 @@ textarea {
|
|||||||
Hostname for server - will be transfered to wlan.ini at next startup)
|
Hostname for server - will be transfered to wlan.ini at next startup)
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="System_RSSIThreashold">
|
<tr class="expert" id="System_RSSIThreshold">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="System_RSSIThreashold_enabled" value="1" onclick = 'InvertEnableItem("System", "RSSIThreashold")' unchecked >
|
<input type="checkbox" id="System_RSSIThreshold_enabled" value="1" onclick = 'InvertEnableItem("System", "RSSIThreshold")' unchecked >
|
||||||
<label for=System_RSSIThreashold_enabled><class id="System_RSSIThreashold_text" style="color:black;">RSSIThreashold</class></label>
|
<label for=System_RSSIThreshold_enabled><class id="System_RSSIThreshold_text" style="color:black;">RSSIThreshold</class></label>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="number" name="name" id="System_RSSIThreashold_value1" min="-100" max="0" step="1">
|
<input type="number" name="name" id="System_RSSIThreshold_value1" min="-100" max="0" step="1">
|
||||||
<td class="description">
|
<td class="description">
|
||||||
WLAN Mesh Parameter: Threashold for RSSI value to check for start switching access point in a mesh system.
|
WLAN Mesh Parameter: Threshold for RSSI value to check for start switching access point in a mesh system.
|
||||||
Possible values: -100 to 0, 0 = disabled - Value will be transfered to wlan.ini at next startup)
|
Possible values: -100 to 0, 0 = disabled - Value will be transfered to wlan.ini at next startup)
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -1613,8 +1623,14 @@ function getParameterByName(name, url = window.location.href) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function WriteParameter(_param, _category, _cat, _name, _optional, _number = -1){
|
function WriteParameter(_param, _category, _cat, _name, _optional, _number = -1){
|
||||||
|
let anzpara;
|
||||||
let anzpara = _param[_cat][_name].anzParam;
|
try {
|
||||||
|
anzpara = _param[_cat][_name].anzParam;
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
firework.launch("Parameter '" + _name + "' in category '" + _cat + "' is unknown!", 'danger', 30000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_number > -1) {
|
if (_number > -1) {
|
||||||
if ((NUMBERS[_number] == undefined) || (NUMBERS[_number][_cat] == undefined) || (NUMBERS[_number][_cat][_name] == undefined))
|
if ((NUMBERS[_number] == undefined) || (NUMBERS[_number][_cat] == undefined) || (NUMBERS[_number][_cat][_name] == undefined))
|
||||||
@@ -1891,9 +1907,9 @@ function UpdateInputIndividual(sel)
|
|||||||
ReadParameter(param, "PostProcessing", "AnalogDigitalTransitionStart", true, NUNBERSAkt)
|
ReadParameter(param, "PostProcessing", "AnalogDigitalTransitionStart", true, NUNBERSAkt)
|
||||||
ReadParameter(param, "PostProcessing", "MaxRateValue", true, NUNBERSAkt)
|
ReadParameter(param, "PostProcessing", "MaxRateValue", true, NUNBERSAkt)
|
||||||
ReadParameter(param, "PostProcessing", "MaxRateType", true, NUNBERSAkt)
|
ReadParameter(param, "PostProcessing", "MaxRateType", true, NUNBERSAkt)
|
||||||
ReadParameter(param, "PostProcessing", "ExtendedResolution", true, NUNBERSAkt)
|
ReadParameter(param, "PostProcessing", "ExtendedResolution", false, NUNBERSAkt)
|
||||||
ReadParameter(param, "PostProcessing", "IgnoreLeadingNaN", true, NUNBERSAkt)
|
ReadParameter(param, "PostProcessing", "IgnoreLeadingNaN", false, NUNBERSAkt)
|
||||||
ReadParameter(param, "PostProcessing", "AllowNegativeRates", true, NUNBERSAkt)
|
ReadParameter(param, "PostProcessing", "AllowNegativeRates", false, NUNBERSAkt)
|
||||||
ReadParameter(param, "InfluxDBv2", "Fieldname", true, NUNBERSAkt)
|
ReadParameter(param, "InfluxDBv2", "Fieldname", true, NUNBERSAkt)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1903,9 +1919,9 @@ function UpdateInputIndividual(sel)
|
|||||||
WriteParameter(param, category, "PostProcessing", "AnalogDigitalTransitionStart", true, NUNBERSAkt);
|
WriteParameter(param, category, "PostProcessing", "AnalogDigitalTransitionStart", true, NUNBERSAkt);
|
||||||
WriteParameter(param, category, "PostProcessing", "MaxRateValue", true, NUNBERSAkt);
|
WriteParameter(param, category, "PostProcessing", "MaxRateValue", true, NUNBERSAkt);
|
||||||
WriteParameter(param, category, "PostProcessing", "MaxRateType", true, NUNBERSAkt);
|
WriteParameter(param, category, "PostProcessing", "MaxRateType", true, NUNBERSAkt);
|
||||||
WriteParameter(param, category, "PostProcessing", "ExtendedResolution", true, NUNBERSAkt);
|
WriteParameter(param, category, "PostProcessing", "ExtendedResolution", false, NUNBERSAkt);
|
||||||
WriteParameter(param, category, "PostProcessing", "IgnoreLeadingNaN", true, NUNBERSAkt);
|
WriteParameter(param, category, "PostProcessing", "IgnoreLeadingNaN", false, NUNBERSAkt);
|
||||||
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true, NUNBERSAkt);
|
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", false, NUNBERSAkt);
|
||||||
WriteParameter(param, category, "InfluxDBv2", "Fieldname", true, NUNBERSAkt);
|
WriteParameter(param, category, "InfluxDBv2", "Fieldname", true, NUNBERSAkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1918,42 +1934,42 @@ function UpdateInput() {
|
|||||||
document.getElementById("Category_InfluxDBv2_enabled").checked = category["InfluxDBv2"]["enabled"];
|
document.getElementById("Category_InfluxDBv2_enabled").checked = category["InfluxDBv2"]["enabled"];
|
||||||
setVisible("GPIO_item", category["GPIO"]["enabled"]);
|
setVisible("GPIO_item", category["GPIO"]["enabled"]);
|
||||||
|
|
||||||
WriteParameter(param, category, "MakeImage", "LogImageLocation", true);
|
WriteParameter(param, category, "TakeImage", "RawImagesLocation", true);
|
||||||
WriteParameter(param, category, "MakeImage", "LogfileRetentionInDays", true);
|
WriteParameter(param, category, "TakeImage", "RawImagesRetention", true);
|
||||||
WriteParameter(param, category, "MakeImage", "Demo", true);
|
WriteParameter(param, category, "TakeImage", "Demo", false);
|
||||||
WriteParameter(param, category, "MakeImage", "WaitBeforeTakingPicture", false);
|
WriteParameter(param, category, "TakeImage", "WaitBeforeTakingPicture", false);
|
||||||
WriteParameter(param, category, "MakeImage", "ImageQuality", false);
|
WriteParameter(param, category, "TakeImage", "ImageQuality", false);
|
||||||
WriteParameter(param, category, "MakeImage", "Brightness", false);
|
WriteParameter(param, category, "TakeImage", "Brightness", false);
|
||||||
WriteParameter(param, category, "MakeImage", "Contrast", false);
|
WriteParameter(param, category, "TakeImage", "Contrast", false);
|
||||||
WriteParameter(param, category, "MakeImage", "Saturation", false);
|
WriteParameter(param, category, "TakeImage", "Saturation", false);
|
||||||
WriteParameter(param, category, "MakeImage", "LEDIntensity", false);
|
WriteParameter(param, category, "TakeImage", "LEDIntensity", false);
|
||||||
WriteParameter(param, category, "MakeImage", "ImageSize", false);
|
WriteParameter(param, category, "TakeImage", "ImageSize", false);
|
||||||
WriteParameter(param, category, "MakeImage", "FixedExposure", false);
|
WriteParameter(param, category, "TakeImage", "FixedExposure", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
|
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
|
||||||
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
|
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
|
||||||
WriteParameter(param, category, "Alignment", "AlignmentAlgo", true);
|
WriteParameter(param, category, "Alignment", "AlignmentAlgo", true);
|
||||||
|
|
||||||
WriteParameter(param, category, "Digits", "CNNGoodThreshold", true);
|
WriteParameter(param, category, "Digits", "CNNGoodThreshold", true);
|
||||||
WriteParameter(param, category, "Digits", "LogImageLocation", true);
|
WriteParameter(param, category, "Digits", "ROIImagesLocation", true);
|
||||||
WriteParameter(param, category, "Digits", "LogfileRetentionInDays", true);
|
WriteParameter(param, category, "Digits", "ROIImagesRetention", true);
|
||||||
|
|
||||||
WriteParameter(param, category, "Analog", "LogImageLocation", true);
|
WriteParameter(param, category, "Analog", "ROIImagesLocation", true);
|
||||||
WriteParameter(param, category, "Analog", "LogfileRetentionInDays", true);
|
WriteParameter(param, category, "Analog", "ROIImagesRetention", true);
|
||||||
|
|
||||||
WriteParameter(param, category, "PostProcessing", "PreValueUse", true);
|
WriteParameter(param, category, "PostProcessing", "PreValueUse", false);
|
||||||
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
|
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
|
||||||
// WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true);
|
// WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true);
|
||||||
WriteParameter(param, category, "PostProcessing", "ErrorMessage", true);
|
WriteParameter(param, category, "PostProcessing", "ErrorMessage", false);
|
||||||
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "MQTT", "Uri", true);
|
WriteParameter(param, category, "MQTT", "Uri", true);
|
||||||
WriteParameter(param, category, "MQTT", "MainTopic", true);
|
WriteParameter(param, category, "MQTT", "MainTopic", true);
|
||||||
WriteParameter(param, category, "MQTT", "ClientID", true);
|
WriteParameter(param, category, "MQTT", "ClientID", true);
|
||||||
WriteParameter(param, category, "MQTT", "user", true);
|
WriteParameter(param, category, "MQTT", "user", true);
|
||||||
WriteParameter(param, category, "MQTT", "password", true);
|
WriteParameter(param, category, "MQTT", "password", true);
|
||||||
WriteParameter(param, category, "MQTT", "SetRetainFlag", true);
|
WriteParameter(param, category, "MQTT", "RetainMessages", false);
|
||||||
WriteParameter(param, category, "MQTT", "HomeassistantDiscovery", true);
|
WriteParameter(param, category, "MQTT", "HomeassistantDiscovery", false);
|
||||||
WriteParameter(param, category, "MQTT", "MeterType", true);
|
WriteParameter(param, category, "MQTT", "MeterType", true);
|
||||||
|
|
||||||
WriteParameter(param, category, "InfluxDB", "Uri", true);
|
WriteParameter(param, category, "InfluxDB", "Uri", true);
|
||||||
@@ -1980,18 +1996,18 @@ function UpdateInput() {
|
|||||||
WriteParameter(param, category, "GPIO", "LEDColor", false);
|
WriteParameter(param, category, "GPIO", "LEDColor", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "AutoTimer", "AutoStart", false);
|
WriteParameter(param, category, "AutoTimer", "AutoStart", false);
|
||||||
WriteParameter(param, category, "AutoTimer", "Intervall", false);
|
WriteParameter(param, category, "AutoTimer", "Interval", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "DataLogging", "DataLogActive", false);
|
WriteParameter(param, category, "DataLogging", "DataLogActive", false);
|
||||||
WriteParameter(param, category, "DataLogging", "DataLogRetentionInDays", false);
|
WriteParameter(param, category, "DataLogging", "DataFilesRetention", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "Debug", "Logfile", false);
|
WriteParameter(param, category, "Debug", "LogLevel", false);
|
||||||
WriteParameter(param, category, "Debug", "LogfileRetentionInDays", false);
|
WriteParameter(param, category, "Debug", "LogfilesRetention", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "System", "TimeZone", true);
|
WriteParameter(param, category, "System", "TimeZone", true);
|
||||||
WriteParameter(param, category, "System", "Hostname", true);
|
WriteParameter(param, category, "System", "Hostname", true);
|
||||||
WriteParameter(param, category, "System", "TimeServer", true);
|
WriteParameter(param, category, "System", "TimeServer", true);
|
||||||
WriteParameter(param, category, "System", "RSSIThreashold", true);
|
WriteParameter(param, category, "System", "RSSIThreshold", true);
|
||||||
|
|
||||||
WriteModelFiles();
|
WriteModelFiles();
|
||||||
}
|
}
|
||||||
@@ -2047,17 +2063,17 @@ function ReadParameterAll()
|
|||||||
category["InfluxDBv2"]["enabled"] = document.getElementById("Category_InfluxDBv2_enabled").checked;
|
category["InfluxDBv2"]["enabled"] = document.getElementById("Category_InfluxDBv2_enabled").checked;
|
||||||
category["GPIO"]["enabled"] = document.getElementById("Category_GPIO_enabled").checked;
|
category["GPIO"]["enabled"] = document.getElementById("Category_GPIO_enabled").checked;
|
||||||
|
|
||||||
ReadParameter(param, "MakeImage", "LogImageLocation", true);
|
ReadParameter(param, "TakeImage", "RawImagesLocation", true);
|
||||||
ReadParameter(param, "MakeImage", "LogfileRetentionInDays", true);
|
ReadParameter(param, "TakeImage", "RawImagesRetention", true);
|
||||||
ReadParameter(param, "MakeImage", "Demo", true);
|
ReadParameter(param, "TakeImage", "Demo", false);
|
||||||
ReadParameter(param, "MakeImage", "WaitBeforeTakingPicture", false);
|
ReadParameter(param, "TakeImage", "WaitBeforeTakingPicture", false);
|
||||||
ReadParameter(param, "MakeImage", "ImageQuality", false);
|
ReadParameter(param, "TakeImage", "ImageQuality", false);
|
||||||
ReadParameter(param, "MakeImage", "Brightness", false);
|
ReadParameter(param, "TakeImage", "Brightness", false);
|
||||||
ReadParameter(param, "MakeImage", "Contrast", false);
|
ReadParameter(param, "TakeImage", "Contrast", false);
|
||||||
ReadParameter(param, "MakeImage", "Saturation", false);
|
ReadParameter(param, "TakeImage", "Saturation", false);
|
||||||
ReadParameter(param, "MakeImage", "LEDIntensity", false);
|
ReadParameter(param, "TakeImage", "LEDIntensity", false);
|
||||||
ReadParameter(param, "MakeImage", "ImageSize", false);
|
ReadParameter(param, "TakeImage", "ImageSize", false);
|
||||||
ReadParameter(param, "MakeImage", "FixedExposure", false);
|
ReadParameter(param, "TakeImage", "FixedExposure", false);
|
||||||
|
|
||||||
ReadParameter(param, "Alignment", "SearchFieldX", false);
|
ReadParameter(param, "Alignment", "SearchFieldX", false);
|
||||||
ReadParameter(param, "Alignment", "SearchFieldY", false);
|
ReadParameter(param, "Alignment", "SearchFieldY", false);
|
||||||
@@ -2065,25 +2081,25 @@ function ReadParameterAll()
|
|||||||
|
|
||||||
ReadParameter(param, "Digits", "Model", false);
|
ReadParameter(param, "Digits", "Model", false);
|
||||||
ReadParameter(param, "Digits", "CNNGoodThreshold", true);
|
ReadParameter(param, "Digits", "CNNGoodThreshold", true);
|
||||||
ReadParameter(param, "Digits", "LogImageLocation", true);
|
ReadParameter(param, "Digits", "ROIImagesLocation", true);
|
||||||
ReadParameter(param, "Digits", "LogfileRetentionInDays", true);
|
ReadParameter(param, "Digits", "ROIImagesRetention", true);
|
||||||
|
|
||||||
ReadParameter(param, "Analog", "Model", false);
|
ReadParameter(param, "Analog", "Model", false);
|
||||||
ReadParameter(param, "Analog", "LogImageLocation", true);
|
ReadParameter(param, "Analog", "ROIImagesLocation", true);
|
||||||
ReadParameter(param, "Analog", "LogfileRetentionInDays", true);
|
ReadParameter(param, "Analog", "ROIImagesRetention", true);
|
||||||
|
|
||||||
ReadParameter(param, "PostProcessing", "PreValueUse", true);
|
ReadParameter(param, "PostProcessing", "PreValueUse", false);
|
||||||
ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
||||||
ReadParameter(param, "PostProcessing", "ErrorMessage", true);
|
ReadParameter(param, "PostProcessing", "ErrorMessage", false);
|
||||||
ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", false);
|
||||||
|
|
||||||
ReadParameter(param, "MQTT", "Uri", true);
|
ReadParameter(param, "MQTT", "Uri", true);
|
||||||
ReadParameter(param, "MQTT", "MainTopic", true);
|
ReadParameter(param, "MQTT", "MainTopic", true);
|
||||||
ReadParameter(param, "MQTT", "ClientID", true);
|
ReadParameter(param, "MQTT", "ClientID", true);
|
||||||
ReadParameter(param, "MQTT", "user", true);
|
ReadParameter(param, "MQTT", "user", true);
|
||||||
ReadParameter(param, "MQTT", "password", true);
|
ReadParameter(param, "MQTT", "password", true);
|
||||||
ReadParameter(param, "MQTT", "SetRetainFlag", true);
|
ReadParameter(param, "MQTT", "RetainMessages", false);
|
||||||
ReadParameter(param, "MQTT", "HomeassistantDiscovery", true);
|
ReadParameter(param, "MQTT", "HomeassistantDiscovery", false);
|
||||||
ReadParameter(param, "MQTT", "MeterType", true);
|
ReadParameter(param, "MQTT", "MeterType", true);
|
||||||
|
|
||||||
ReadParameter(param, "InfluxDB", "Uri", true);
|
ReadParameter(param, "InfluxDB", "Uri", true);
|
||||||
@@ -2117,18 +2133,18 @@ function ReadParameterAll()
|
|||||||
param["GPIO"]["LEDColor"]["found"] = true;
|
param["GPIO"]["LEDColor"]["found"] = true;
|
||||||
|
|
||||||
ReadParameter(param, "AutoTimer", "AutoStart", false);
|
ReadParameter(param, "AutoTimer", "AutoStart", false);
|
||||||
ReadParameter(param, "AutoTimer", "Intervall", false);
|
ReadParameter(param, "AutoTimer", "Interval", false);
|
||||||
|
|
||||||
ReadParameter(param, "DataLogging", "DataLogActive", false);
|
ReadParameter(param, "DataLogging", "DataLogActive", false);
|
||||||
ReadParameter(param, "DataLogging", "DataLogRetentionInDays", false);
|
ReadParameter(param, "DataLogging", "DataFilesRetention", false);
|
||||||
|
|
||||||
ReadParameter(param, "Debug", "Logfile", false);
|
ReadParameter(param, "Debug", "LogLevel", false);
|
||||||
ReadParameter(param, "Debug", "LogfileRetentionInDays", false);
|
ReadParameter(param, "Debug", "LogfilesRetention", false);
|
||||||
|
|
||||||
ReadParameter(param, "System", "TimeZone", true);
|
ReadParameter(param, "System", "TimeZone", true);
|
||||||
ReadParameter(param, "System", "Hostname", true);
|
ReadParameter(param, "System", "Hostname", true);
|
||||||
ReadParameter(param, "System", "TimeServer", true);
|
ReadParameter(param, "System", "TimeServer", true);
|
||||||
ReadParameter(param, "System", "RSSIThreashold", true);
|
ReadParameter(param, "System", "RSSIThreshold", true);
|
||||||
|
|
||||||
var sel = document.getElementById("Numbers_value1");
|
var sel = document.getElementById("Numbers_value1");
|
||||||
UpdateInputIndividual(sel);
|
UpdateInputIndividual(sel);
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ table {
|
|||||||
<td style="padding-top: 10px"><label for="mirror" id="labelmirror">Mirror Image:</label></td>
|
<td style="padding-top: 10px"><label for="mirror" id="labelmirror">Mirror Image:</label></td>
|
||||||
<td style="padding-top: 10px"><input type="checkbox" id="mirror" name="mirror" value="1" onchange="drawRotated()"></td>
|
<td style="padding-top: 10px"><input type="checkbox" id="mirror" name="mirror" value="1" onchange="drawRotated()"></td>
|
||||||
<td>
|
<td>
|
||||||
<class id="MakeImage_LEDIntensity_text" style="color:black;">LEDIntensity: </class>
|
<class id="TakeImage_LEDIntensity_text" style="color:black;">LEDIntensity: </class>
|
||||||
<input type="number" id="MakeImage_LEDIntensity_value1" size="13" value=0 min="0" max="100" style="float: right; clear: both;">
|
<input type="number" id="TakeImage_LEDIntensity_value1" size="13" value=0 min="0" max="100" style="float: right; clear: both;">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -62,8 +62,8 @@ table {
|
|||||||
<td><label for="flip" id="labelflip">Flip Image Size:</label></td>
|
<td><label for="flip" id="labelflip">Flip Image Size:</label></td>
|
||||||
<td><input type="checkbox" id="flip" name="flip" value="1" onchange="drawRotated()"></td>
|
<td><input type="checkbox" id="flip" name="flip" value="1" onchange="drawRotated()"></td>
|
||||||
<td>
|
<td>
|
||||||
<class id="MakeImage_Brightness_text" style="color:black;">Brightness: </class>
|
<class id="TakeImage_Brightness_text" style="color:black;">Brightness: </class>
|
||||||
<input type="number" id="MakeImage_Brightness_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
|
<input type="number" id="TakeImage_Brightness_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
@@ -71,16 +71,16 @@ table {
|
|||||||
<td><label for="mirror">Pre-rotate Angle:</label></td>
|
<td><label for="mirror">Pre-rotate Angle:</label></td>
|
||||||
<td><input type="number" id="prerotateangle" name="prerotateangle" value="0" min="-360" max="360" onchange="drawRotated()">Degrees</td>
|
<td><input type="number" id="prerotateangle" name="prerotateangle" value="0" min="-360" max="360" onchange="drawRotated()">Degrees</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="MakeImage_Contrast_text" style="color:black;">Contrast</class>
|
<class id="TakeImage_Contrast_text" style="color:black;">Contrast</class>
|
||||||
<input type="number" id="MakeImage_Contrast_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
|
<input type="number" id="TakeImage_Contrast_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><label for="mirror">Fine Alignment:</label></td>
|
<td><label for="mirror">Fine Alignment:</label></td>
|
||||||
<td><input type="number" id="finerotate" name="finerotate" value=0.0 min="-1" max="1" step="0.2" onchange="drawRotated()">Degrees</td>
|
<td><input type="number" id="finerotate" name="finerotate" value=0.0 min="-1" max="1" step="0.2" onchange="drawRotated()">Degrees</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="MakeImage_Saturation_text" style="color:black;">Saturation</class>
|
<class id="TakeImage_Saturation_text" style="color:black;">Saturation</class>
|
||||||
<input type="number" id="MakeImage_Saturation_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
|
<input type="number" id="TakeImage_Saturation_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
@@ -123,13 +123,13 @@ table {
|
|||||||
|
|
||||||
function doTake(){
|
function doTake(){
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
|
if (param["TakeImage"]["Brightness"].found && param["TakeImage"]["Brightness"].enabled)
|
||||||
{
|
{
|
||||||
_intensity = document.getElementById("MakeImage_LEDIntensity_value1").value;
|
_intensity = document.getElementById("TakeImage_LEDIntensity_value1").value;
|
||||||
if (_intensity == "") _intensity = "50";
|
if (_intensity == "") _intensity = "50";
|
||||||
_brightness = document.getElementById("MakeImage_Brightness_value1").value;
|
_brightness = document.getElementById("TakeImage_Brightness_value1").value;
|
||||||
_contrast = document.getElementById("MakeImage_Contrast_value1").value;
|
_contrast = document.getElementById("TakeImage_Contrast_value1").value;
|
||||||
_saturation = document.getElementById("MakeImage_Saturation_value1").value;
|
_saturation = document.getElementById("TakeImage_Saturation_value1").value;
|
||||||
url = getDomainname() + "/editflow?task=test_take&bri=" + _brightness;
|
url = getDomainname() + "/editflow?task=test_take&bri=" + _brightness;
|
||||||
url = url + "&con=" + _contrast + "&sat=" + _saturation + "&int=" + _intensity;
|
url = url + "&con=" + _contrast + "&sat=" + _saturation + "&int=" + _intensity;
|
||||||
}
|
}
|
||||||
@@ -168,24 +168,24 @@ table {
|
|||||||
document.getElementById("labelflip").style = "color:lightgrey;";
|
document.getElementById("labelflip").style = "color:lightgrey;";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
|
if (param["TakeImage"]["Brightness"].found && param["TakeImage"]["Brightness"].enabled)
|
||||||
{
|
{
|
||||||
document.getElementById("MakeImage_Brightness_value1").disabled = false;
|
document.getElementById("TakeImage_Brightness_value1").disabled = false;
|
||||||
document.getElementById("MakeImage_Contrast_value1").disabled = false;
|
document.getElementById("TakeImage_Contrast_value1").disabled = false;
|
||||||
document.getElementById("MakeImage_Saturation_value1").disabled = false;
|
document.getElementById("TakeImage_Saturation_value1").disabled = false;
|
||||||
document.getElementById("MakeImage_LEDIntensity_value1").disabled = false;
|
document.getElementById("TakeImage_LEDIntensity_value1").disabled = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
document.getElementById("MakeImage_Brightness_value1").type = "hidden";
|
document.getElementById("TakeImage_Brightness_value1").type = "hidden";
|
||||||
document.getElementById("MakeImage_Brightness_text").style.visibility = "hidden";
|
document.getElementById("TakeImage_Brightness_text").style.visibility = "hidden";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (param["MakeImage"]["Saturation"].found)
|
// if (param["TakeImage"]["Saturation"].found)
|
||||||
// document.getElementById("MakeImage_Saturation_value1").disabled = false;
|
// document.getElementById("TakeImage_Saturation_value1").disabled = false;
|
||||||
// if (param["MakeImage"]["Contrast"].found)
|
// if (param["TakeImage"]["Contrast"].found)
|
||||||
// document.getElementById("MakeImage_Contrast_value1").disabled = false;
|
// document.getElementById("TakeImage_Contrast_value1").disabled = false;
|
||||||
|
|
||||||
isActReference = false;
|
isActReference = false;
|
||||||
loadCanvas(url);
|
loadCanvas(url);
|
||||||
@@ -207,16 +207,16 @@ table {
|
|||||||
document.getElementById("prerotateangle").disabled = true;
|
document.getElementById("prerotateangle").disabled = true;
|
||||||
document.getElementById("updatereferenceimage").disabled = true;
|
document.getElementById("updatereferenceimage").disabled = true;
|
||||||
document.getElementById("take").disabled = true;
|
document.getElementById("take").disabled = true;
|
||||||
document.getElementById("MakeImage_Brightness_value1").disabled = true;
|
document.getElementById("TakeImage_Brightness_value1").disabled = true;
|
||||||
document.getElementById("MakeImage_Saturation_value1").disabled = true;
|
document.getElementById("TakeImage_Saturation_value1").disabled = true;
|
||||||
document.getElementById("MakeImage_Contrast_value1").disabled = true;
|
document.getElementById("TakeImage_Contrast_value1").disabled = true;
|
||||||
document.getElementById("MakeImage_LEDIntensity_value1").disabled = true;
|
document.getElementById("TakeImage_LEDIntensity_value1").disabled = true;
|
||||||
document.getElementById("mirror").disabled = false;
|
document.getElementById("mirror").disabled = false;
|
||||||
document.getElementById("flip").disabled = false;
|
document.getElementById("flip").disabled = false;
|
||||||
if (!(param["MakeImage"]["Brightness"].found))
|
if (!(param["TakeImage"]["Brightness"].found))
|
||||||
{
|
{
|
||||||
document.getElementById("MakeImage_Brightness_value1").type = "hidden";
|
document.getElementById("TakeImage_Brightness_value1").type = "hidden";
|
||||||
document.getElementById("MakeImage_Brightness_text").style.visibility = "hidden";
|
document.getElementById("TakeImage_Brightness_text").style.visibility = "hidden";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -255,12 +255,12 @@ table {
|
|||||||
else
|
else
|
||||||
param["Alignment"]["FlipImageSize"].value1 = "false";
|
param["Alignment"]["FlipImageSize"].value1 = "false";
|
||||||
|
|
||||||
if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
|
if (param["TakeImage"]["Brightness"].found && param["TakeImage"]["Brightness"].enabled)
|
||||||
{
|
{
|
||||||
ReadParameter(param, "MakeImage", "Brightness", false);
|
ReadParameter(param, "TakeImage", "Brightness", false);
|
||||||
ReadParameter(param, "MakeImage", "Contrast", false);
|
ReadParameter(param, "TakeImage", "Contrast", false);
|
||||||
ReadParameter(param, "MakeImage", "Saturation", false);
|
ReadParameter(param, "TakeImage", "Saturation", false);
|
||||||
ReadParameter(param, "MakeImage", "LEDIntensity", false);
|
ReadParameter(param, "TakeImage", "LEDIntensity", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
var canvas = document.getElementById("canvas");
|
var canvas = document.getElementById("canvas");
|
||||||
@@ -309,30 +309,30 @@ table {
|
|||||||
ParseConfig();
|
ParseConfig();
|
||||||
param = getConfigParameters();
|
param = getConfigParameters();
|
||||||
|
|
||||||
param["MakeImage"]["LEDIntensity"]["enabled"] = true;
|
param["TakeImage"]["LEDIntensity"]["enabled"] = true;
|
||||||
param["MakeImage"]["Brightness"]["enabled"] = true;
|
param["TakeImage"]["Brightness"]["enabled"] = true;
|
||||||
param["MakeImage"]["Contrast"]["enabled"] = true;
|
param["TakeImage"]["Contrast"]["enabled"] = true;
|
||||||
param["MakeImage"]["Saturation"]["enabled"] = true;
|
param["TakeImage"]["Saturation"]["enabled"] = true;
|
||||||
|
|
||||||
if (!param["MakeImage"]["LEDIntensity"]["found"])
|
if (!param["TakeImage"]["LEDIntensity"]["found"])
|
||||||
{
|
{
|
||||||
param["MakeImage"]["LEDIntensity"]["found"] = true;
|
param["TakeImage"]["LEDIntensity"]["found"] = true;
|
||||||
param["MakeImage"]["LEDIntensity"]["value1"] = "50";
|
param["TakeImage"]["LEDIntensity"]["value1"] = "50";
|
||||||
}
|
}
|
||||||
if (!param["MakeImage"]["Brightness"]["found"])
|
if (!param["TakeImage"]["Brightness"]["found"])
|
||||||
{
|
{
|
||||||
param["MakeImage"]["Brightness"]["found"] = true;
|
param["TakeImage"]["Brightness"]["found"] = true;
|
||||||
param["MakeImage"]["Brightness"]["value1"] = "0";
|
param["TakeImage"]["Brightness"]["value1"] = "0";
|
||||||
}
|
}
|
||||||
if (!param["MakeImage"]["Contrast"]["found"])
|
if (!param["TakeImage"]["Contrast"]["found"])
|
||||||
{
|
{
|
||||||
param["MakeImage"]["Contrast"]["found"] = true;
|
param["TakeImage"]["Contrast"]["found"] = true;
|
||||||
param["MakeImage"]["Contrast"]["value1"] = "0";
|
param["TakeImage"]["Contrast"]["value1"] = "0";
|
||||||
}
|
}
|
||||||
if (!param["MakeImage"]["Saturation"]["found"])
|
if (!param["TakeImage"]["Saturation"]["found"])
|
||||||
{
|
{
|
||||||
param["MakeImage"]["Saturation"]["found"] = true;
|
param["TakeImage"]["Saturation"]["found"] = true;
|
||||||
param["MakeImage"]["Saturation"]["value1"] = "0";
|
param["TakeImage"]["Saturation"]["value1"] = "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateInput();
|
UpdateInput();
|
||||||
@@ -340,10 +340,10 @@ table {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function UpdateInput() {
|
function UpdateInput() {
|
||||||
WriteParameter(param, category, "MakeImage", "Brightness", false);
|
WriteParameter(param, category, "TakeImage", "Brightness", false);
|
||||||
WriteParameter(param, category, "MakeImage", "Contrast", false);
|
WriteParameter(param, category, "TakeImage", "Contrast", false);
|
||||||
WriteParameter(param, category, "MakeImage", "Saturation", false);
|
WriteParameter(param, category, "TakeImage", "Saturation", false);
|
||||||
WriteParameter(param, category, "MakeImage", "LEDIntensity", false);
|
WriteParameter(param, category, "TakeImage", "LEDIntensity", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -105,14 +105,14 @@ function ParseConfig() {
|
|||||||
param = new Object();
|
param = new Object();
|
||||||
category = new Object();
|
category = new Object();
|
||||||
|
|
||||||
var catname = "MakeImage";
|
var catname = "TakeImage";
|
||||||
category[catname] = new Object();
|
category[catname] = new Object();
|
||||||
category[catname]["enabled"] = false;
|
category[catname]["enabled"] = false;
|
||||||
category[catname]["found"] = false;
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "LogImageLocation");
|
ParamAddValue(param, catname, "RawImagesLocation");
|
||||||
ParamAddValue(param, catname, "WaitBeforeTakingPicture");
|
ParamAddValue(param, catname, "WaitBeforeTakingPicture");
|
||||||
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
ParamAddValue(param, catname, "RawImagesRetention");
|
||||||
ParamAddValue(param, catname, "Demo");
|
ParamAddValue(param, catname, "Demo");
|
||||||
ParamAddValue(param, catname, "Brightness");
|
ParamAddValue(param, catname, "Brightness");
|
||||||
ParamAddValue(param, catname, "Contrast");
|
ParamAddValue(param, catname, "Contrast");
|
||||||
@@ -141,8 +141,8 @@ function ParseConfig() {
|
|||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "Model");
|
ParamAddValue(param, catname, "Model");
|
||||||
ParamAddValue(param, catname, "CNNGoodThreshold", 1);
|
ParamAddValue(param, catname, "CNNGoodThreshold", 1);
|
||||||
ParamAddValue(param, catname, "LogImageLocation");
|
ParamAddValue(param, catname, "ROIImagesLocation");
|
||||||
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
ParamAddValue(param, catname, "ROIImagesRetention");
|
||||||
|
|
||||||
var catname = "Analog";
|
var catname = "Analog";
|
||||||
category[catname] = new Object();
|
category[catname] = new Object();
|
||||||
@@ -150,8 +150,8 @@ function ParseConfig() {
|
|||||||
category[catname]["found"] = false;
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "Model");
|
ParamAddValue(param, catname, "Model");
|
||||||
ParamAddValue(param, catname, "LogImageLocation");
|
ParamAddValue(param, catname, "ROIImagesLocation");
|
||||||
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
ParamAddValue(param, catname, "ROIImagesRetention");
|
||||||
|
|
||||||
var catname = "PostProcessing";
|
var catname = "PostProcessing";
|
||||||
category[catname] = new Object();
|
category[catname] = new Object();
|
||||||
@@ -181,7 +181,7 @@ function ParseConfig() {
|
|||||||
ParamAddValue(param, catname, "ClientID");
|
ParamAddValue(param, catname, "ClientID");
|
||||||
ParamAddValue(param, catname, "user");
|
ParamAddValue(param, catname, "user");
|
||||||
ParamAddValue(param, catname, "password");
|
ParamAddValue(param, catname, "password");
|
||||||
ParamAddValue(param, catname, "SetRetainFlag");
|
ParamAddValue(param, catname, "RetainMessages");
|
||||||
ParamAddValue(param, catname, "HomeassistantDiscovery");
|
ParamAddValue(param, catname, "HomeassistantDiscovery");
|
||||||
ParamAddValue(param, catname, "MeterType");
|
ParamAddValue(param, catname, "MeterType");
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ function ParseConfig() {
|
|||||||
category[catname]["found"] = false;
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "AutoStart");
|
ParamAddValue(param, catname, "AutoStart");
|
||||||
ParamAddValue(param, catname, "Intervall");
|
ParamAddValue(param, catname, "Interval");
|
||||||
|
|
||||||
var catname = "DataLogging";
|
var catname = "DataLogging";
|
||||||
category[catname] = new Object();
|
category[catname] = new Object();
|
||||||
@@ -244,15 +244,15 @@ function ParseConfig() {
|
|||||||
category[catname]["found"] = false;
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "DataLogActive");
|
ParamAddValue(param, catname, "DataLogActive");
|
||||||
ParamAddValue(param, catname, "DataLogRetentionInDays");
|
ParamAddValue(param, catname, "DataFilesRetention");
|
||||||
|
|
||||||
var catname = "Debug";
|
var catname = "Debug";
|
||||||
category[catname] = new Object();
|
category[catname] = new Object();
|
||||||
category[catname]["enabled"] = false;
|
category[catname]["enabled"] = false;
|
||||||
category[catname]["found"] = false;
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "Logfile");
|
ParamAddValue(param, catname, "LogLevel");
|
||||||
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
ParamAddValue(param, catname, "LogfilesRetention");
|
||||||
|
|
||||||
var catname = "System";
|
var catname = "System";
|
||||||
category[catname] = new Object();
|
category[catname] = new Object();
|
||||||
@@ -261,9 +261,8 @@ function ParseConfig() {
|
|||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "TimeZone");
|
ParamAddValue(param, catname, "TimeZone");
|
||||||
ParamAddValue(param, catname, "TimeServer");
|
ParamAddValue(param, catname, "TimeServer");
|
||||||
ParamAddValue(param, catname, "AutoAdjustSummertime");
|
|
||||||
ParamAddValue(param, catname, "Hostname");
|
ParamAddValue(param, catname, "Hostname");
|
||||||
ParamAddValue(param, catname, "RSSIThreashold");
|
ParamAddValue(param, catname, "RSSIThreshold");
|
||||||
ParamAddValue(param, catname, "SetupMode");
|
ParamAddValue(param, catname, "SetupMode");
|
||||||
|
|
||||||
|
|
||||||
@@ -285,22 +284,7 @@ function ParseConfig() {
|
|||||||
aktline++;
|
aktline++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make the downward compatiblity
|
||||||
// Make the downward compatiblity with MQTT (Maintopic --> topic)
|
|
||||||
if (param["MQTT"]["Topic"]["found"] == true && param["MQTT"]["MainTopic"]["found"] == false)
|
|
||||||
{
|
|
||||||
param["MQTT"]["MainTopic"] = param["MQTT"]["Topic"]
|
|
||||||
}
|
|
||||||
delete param["MQTT"]["Topic"] // Dient nur der Downwardskompatibilität
|
|
||||||
|
|
||||||
|
|
||||||
if (param["Debug"]["Logfile"]["value1"] == "false" || param["Debug"]["Logfile"]["value1"] == "true")
|
|
||||||
{
|
|
||||||
param["Debug"]["Logfile"]["value1"] = "2";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Make the downward compatiblity with MQTT (Maintopic --> topic)
|
|
||||||
if (category["DataLogging"]["found"] == false)
|
if (category["DataLogging"]["found"] == false)
|
||||||
{
|
{
|
||||||
category["DataLogging"]["found"] = true;
|
category["DataLogging"]["found"] = true;
|
||||||
@@ -310,9 +294,9 @@ function ParseConfig() {
|
|||||||
param["DataLogging"]["DataLogActive"]["enabled"] = true;
|
param["DataLogging"]["DataLogActive"]["enabled"] = true;
|
||||||
param["DataLogging"]["DataLogActive"]["value1"] = "true";
|
param["DataLogging"]["DataLogActive"]["value1"] = "true";
|
||||||
|
|
||||||
param["DataLogging"]["DataLogRetentionInDays"]["found"] = true;
|
param["DataLogging"]["DataFilesRetention"]["found"] = true;
|
||||||
param["DataLogging"]["DataLogRetentionInDays"]["enabled"] = true;
|
param["DataLogging"]["DataFilesRetention"]["enabled"] = true;
|
||||||
param["DataLogging"]["DataLogRetentionInDays"]["value1"] = "3";
|
param["DataLogging"]["DataFilesRetention"]["value1"] = "3";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (category["DataLogging"]["enabled"] == false)
|
if (category["DataLogging"]["enabled"] == false)
|
||||||
@@ -325,11 +309,11 @@ function ParseConfig() {
|
|||||||
param["DataLogging"]["DataLogActive"]["value1"] = "true";
|
param["DataLogging"]["DataLogActive"]["value1"] = "true";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param["DataLogging"]["DataLogRetentionInDays"]["enabled"] == false && param["DataLogging"]["DataLogRetentionInDays"]["value1"] == "")
|
if (param["DataLogging"]["DataFilesRetention"]["enabled"] == false && param["DataLogging"]["DataFilesRetention"]["value1"] == "")
|
||||||
{
|
{
|
||||||
param["DataLogging"]["DataLogRetentionInDays"]["found"] = true;
|
param["DataLogging"]["DataFilesRetention"]["found"] = true;
|
||||||
param["DataLogging"]["DataLogRetentionInDays"]["enabled"] = true;
|
param["DataLogging"]["DataFilesRetention"]["enabled"] = true;
|
||||||
param["DataLogging"]["DataLogRetentionInDays"]["value1"] = "3";
|
param["DataLogging"]["DataFilesRetention"]["value1"] = "3";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user