mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-07 20:16:55 +03:00
Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
20b054472e | ||
|
|
21a70c5655 | ||
|
|
08270f5d6d | ||
|
|
9923be2f1d | ||
|
|
5df57c95d4 | ||
|
|
d8c91466d0 | ||
|
|
37b2e370fe | ||
|
|
98dfba0640 | ||
|
|
574c9084c2 | ||
|
|
9862ae8e7a | ||
|
|
7bc4e63209 | ||
|
|
ad40150cfa | ||
|
|
970530d99f | ||
|
|
c6ae989b82 | ||
|
|
a0ebf354b1 | ||
|
|
97ecbc792e | ||
|
|
5934a59489 | ||
|
|
ee18046581 | ||
|
|
1e4e38c02f | ||
|
|
7a3038eceb | ||
|
|
7d2f86b72e | ||
|
|
3aaa319505 | ||
|
|
f4075f0a51 | ||
|
|
59643a8d52 | ||
|
|
baf2a880e4 | ||
|
|
d71e8320c7 | ||
|
|
3b3d924f40 | ||
|
|
60701bc007 | ||
|
|
5ca3e184e0 | ||
|
|
2903d1a0a6 | ||
|
|
5f0f1802a4 | ||
|
|
5be56d9b00 | ||
|
|
d3fd1b5045 | ||
|
|
4615e87483 | ||
|
|
fb9b72deea | ||
|
|
5cc873a6bb |
126
Changelog.md
126
Changelog.md
@@ -1,6 +1,130 @@
|
|||||||
# Versions
|
# Versions
|
||||||
|
|
||||||
|
##### 5.0.0 Setup Modus - (2020-12-06)
|
||||||
|
|
||||||
|
* Implementation of initial setup modus for fresh installation
|
||||||
|
|
||||||
|
* Code restructuring (full compatibility between pure ESP-IDF and Platformio w/ espressif)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### 4.1.1 Configuration editor - (2020-12-02)
|
||||||
|
|
||||||
|
* Bug fixing: internal improvement of file handling (reduce not responding)
|
||||||
|
|
||||||
|
|
||||||
|
##### 4.1.0 Configuration editor - (2020-11-30)
|
||||||
|
|
||||||
|
* Implementation of configuration editor (including basic and expert mode)
|
||||||
|
|
||||||
|
* Adjustable time zone to adjust to local time setting (incl. daylight saving time)
|
||||||
|
|
||||||
|
* MQTT: additional topic for error reporting
|
||||||
|
|
||||||
|
* standardized access to current logfile via `http://IP-ADRESS/logfileact`
|
||||||
|
|
||||||
|
* Update digital CNN to v7.2.0, analog CNN to 6.3.0
|
||||||
|
|
||||||
|
* Bug fixing: truncation error, CheckDigitConsistency & PreValue implementation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### 4.0.0 Tflite Core - (2020-11-15)
|
||||||
|
|
||||||
|
* Implementation of rolling log-files
|
||||||
|
|
||||||
|
* Update Tflite-Core to master@20201108 (v2.4)
|
||||||
|
|
||||||
|
* Bug-fixing for reducing reboots
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### 3.1.0 MQTT-Client - (2020-10-26)
|
||||||
|
|
||||||
|
* Update digital CNN to v6.5.0 and HTML (Info to hostname, IP, ssid)
|
||||||
|
|
||||||
|
* New implementation of "checkDigitConsistency" also for digits
|
||||||
|
* MQTT-Adapter: user and password for sign in MQTT-Broker
|
||||||
|
|
||||||
|
##### 3.0.0 MQTT-Client (2020-10-14)
|
||||||
|
|
||||||
|
* Implementation of MQTT Client
|
||||||
|
* Improved Version Control
|
||||||
|
* bug-fixing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### 2.2.1 Version Control (2020-09-27)
|
||||||
|
|
||||||
|
* Bug-Fixing (hostname in wlan.ini and error handling inside flow)
|
||||||
|
|
||||||
|
|
||||||
|
##### 2.2.0 Version Control (2020-09-27)
|
||||||
|
|
||||||
|
* Integrated automated versioning system (menu: SYSTEM --> INFO)
|
||||||
|
* Update Build-System to PlatformIO - Espressif 32 v2.0.0 (ESP-IDF 4.1)
|
||||||
|
|
||||||
|
|
||||||
|
##### 2.1.0 Decimal Shift, Chrome & Edge (2020-09-25)
|
||||||
|
|
||||||
|
* Implementation of Decimal Shift
|
||||||
|
|
||||||
|
* Update default CNN for digits to v6.4.0
|
||||||
|
|
||||||
|
* Improvement HTML
|
||||||
|
|
||||||
|
* Support for Chrome and Edge
|
||||||
|
|
||||||
|
* Reduce logging to minimum - extended logging on demand
|
||||||
|
|
||||||
|
* Implementation of hostname in wlan.ini (`hostname = "HOSTNAME")`
|
||||||
|
|
||||||
|
* Bug fixing, code corrections
|
||||||
|
|
||||||
|
|
||||||
|
##### 2.0.0 Layout update (2020-09-12)
|
||||||
|
|
||||||
|
* Update to **new and modern layout**
|
||||||
|
* Support for Chrome improved
|
||||||
|
* Improved robustness: improved error handling in auto flow reduces spontaneous reboots
|
||||||
|
* File server: Option for "DELETE ALL"
|
||||||
|
* WLan: support of spaces in SSID and password
|
||||||
|
* Reference Image: Option for mirror image, option for image update on the fly
|
||||||
|
* additional parameter in `wasserzaehler.html?noerror=true` to suppress an potential error message
|
||||||
|
* bug fixing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### 1.1.3 (2020-09-09)
|
||||||
|
|
||||||
|
* **Bug in configuration of analog ROIs corrected** - correction in v.1.0.2 did not work properly
|
||||||
|
* Improved update page for the web server (`/html` can be updated via a zip-file, which is provided in `/firmware/html.zip`)
|
||||||
|
* Improved Chrome support
|
||||||
|
|
||||||
|
##### 1.1.0 (2020-09-06)
|
||||||
|
|
||||||
|
* Implementation of "delete complete directory"
|
||||||
|
**Attention: beside the `firmware.bin`, also the content of `/html` needs to be updated!**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### 1.0.2 (2020-09-06)
|
||||||
|
|
||||||
|
* Bug in configuration of analog ROIs corrected
|
||||||
|
* minor bug correction
|
||||||
|
|
||||||
|
##### 1.0.1 (2020-09-05)
|
||||||
|
|
||||||
|
* preValue.ini Bug corrected
|
||||||
|
* minor bug correction
|
||||||
|
|
||||||
|
##### 1.0.0 (2020-09-04)
|
||||||
|
|
||||||
|
* **First usable version** - compatible to previous project (https://github.com/jomjol/water-meter-system-complete)
|
||||||
|
* NEW:
|
||||||
|
* no docker container for CNN calculation necessary
|
||||||
|
* web based configuration editor on board
|
||||||
|
|
||||||
##### 0.1.0 (2020-08-07)
|
##### 0.1.0 (2020-08-07)
|
||||||
|
|
||||||
* Initial Version
|
* Initial Version
|
||||||
|
|
||||||
|
|||||||
72
FeatureRequest.md
Normal file
72
FeatureRequest.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
## Feature Requests
|
||||||
|
|
||||||
|
**There are a lot of ideas for further improvements, but only limited capacity on side of the developer.** Therefore I have created this page as a collection of ideas.
|
||||||
|
|
||||||
|
1. Who ever has a new idea can put it here, so it that it is not forgotten.
|
||||||
|
|
||||||
|
2. Who ever has time, capacity and passion to support, can take any of the ideas and implement them.
|
||||||
|
I will support and help where ever I can!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
____
|
||||||
|
|
||||||
|
#### #4 Initial Shifting and Rotation
|
||||||
|
|
||||||
|
* https://github.com/jomjol/AI-on-the-edge-device/issues/123
|
||||||
|
|
||||||
|
Implementation of a shifting additional to the initial rotation of the raw camera input
|
||||||
|
|
||||||
|
To do:
|
||||||
|
|
||||||
|
* Implementation of shifting
|
||||||
|
* Extension of configuration
|
||||||
|
* Adaption of the html configuration to implement shifting
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### #3 Allow grouping of digits to multiple reading values
|
||||||
|
|
||||||
|
* https://github.com/jomjol/AI-on-the-edge-device/issues/123
|
||||||
|
|
||||||
|
Implementation of two different independent readouts in one setup
|
||||||
|
|
||||||
|
To do:
|
||||||
|
|
||||||
|
* Extend the configuration, setting and processing flow for two independend readouts
|
||||||
|
|
||||||
|
https://github.com/jomjol/AI-on-the-edge-device/issues/123
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
____
|
||||||
|
|
||||||
|
#### #2 MQTT-controll with callback
|
||||||
|
* https://github.com/jomjol/AI-on-the-edge-device/issues/105
|
||||||
|
|
||||||
|
Extend the MQTT client to also enable callbacks for configuration setting
|
||||||
|
|
||||||
|
To do:
|
||||||
|
|
||||||
|
* implement callback for receiving information and override `config.ini` settings
|
||||||
|
|
||||||
|
* change configuration management to handle online updates (currently changes need a restart)
|
||||||
|
|
||||||
|
* think about the startup, as there the default config is loaded
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
____
|
||||||
|
|
||||||
|
#### #1 Optional GPIO for external flash/lighting
|
||||||
|
|
||||||
|
* https://github.com/jomjol/AI-on-the-edge-device/issues/133
|
||||||
|
|
||||||
|
Implementation of an an extrnal flash / lightning through GPIOs.
|
||||||
|
* available GPIOs: 12 & 13 (currently in use for html switching)
|
||||||
|
|
||||||
|
To do:
|
||||||
|
|
||||||
|
* Implementation of a software module for external light source (e.g. WS8132 LED controller, ...)
|
||||||
|
* Update of the camera module to use the external light instead of the internal flash light
|
||||||
|
* Adopt the configuration algorithm with a configurable light source
|
||||||
165
README.md
165
README.md
@@ -41,8 +41,31 @@ If you would like to support the developer with a cup of coffee you can do that
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 6.2.1 Image Processing in Memory - (2021-03-08)
|
##### 6.6.1 Image Processing in Memory - (2021-04-05)
|
||||||
|
|
||||||
|
* NEW 6.6.1: failed SD card initialization indicated by fast blinking LED at startup
|
||||||
|
* Improved SD-card handling (increase compatibility with more type of cards)
|
||||||
|
|
||||||
|
##### 6.5.0 Image Processing in Memory - (2021-03-25)
|
||||||
|
|
||||||
|
* Upgrade digital CNN to v8.2.0 (added new type of digits)
|
||||||
|
* Supporting alignment structures in ROI definition
|
||||||
|
* Bug fixing: definition of hostname in `config.ini`
|
||||||
|
|
||||||
|
##### 6.4.0 Image Processing in Memory - (2021-03-20)
|
||||||
|
|
||||||
|
* Additional alignment marks for settings the ROIs (analog and digit)
|
||||||
|
* Upgrade analog CNN to v7.0.0 (added new type of pointer)
|
||||||
|
|
||||||
|
##### 6.3.1 Image Processing in Memory - (2021-03-16)
|
||||||
|
|
||||||
|
* NEW: 6.3.1: bug fixing in initial edit reference image and `config.ini` (Spelling error in `InitialRotate`)
|
||||||
|
* Initial setup mode: bug fixing, error correction
|
||||||
|
* Bug-fixing
|
||||||
|
|
||||||
|
##### 6.2.2 Image Processing in Memory - (2021-03-10)
|
||||||
|
|
||||||
|
* NEW 6.2.2: bug fixing
|
||||||
* NEW 6.2.1: Changed brightness and contrast to default if not enabled (resolves to bright images)
|
* NEW 6.2.1: Changed brightness and contrast to default if not enabled (resolves to bright images)
|
||||||
* Determination of fixed illumination settings during startup - speed up of 5s in each run
|
* Determination of fixed illumination settings during startup - speed up of 5s in each run
|
||||||
* Update digital CNN to v8.1.1 (additional digital images trained)
|
* Update digital CNN to v8.1.1 (additional digital images trained)
|
||||||
@@ -69,151 +92,43 @@ If you would like to support the developer with a cup of coffee you can do that
|
|||||||
* **Major change**: image processing fully in memory - no need of SD card buffer anymore
|
* **Major change**: image processing fully in memory - no need of SD card buffer anymore
|
||||||
|
|
||||||
* Need to limit camera resolution to VGA (due to memory limits)
|
* Need to limit camera resolution to VGA (due to memory limits)
|
||||||
|
|
||||||
* MQTT: Last Will Testament (LWT) implemented: "connection lost" in case of connection lost to `TopicError`
|
* MQTT: Last Will Testament (LWT) implemented: "connection lost" in case of connection lost to `TopicError`
|
||||||
|
|
||||||
* Disabled `CheckDigitIncreaseConsistency` in default configuration - must now be explicit enabled if needed
|
* Disabled `CheckDigitIncreaseConsistency` in default configuration - must now be explicit enabled if needed
|
||||||
|
|
||||||
* Update digital CNN to v7.2.1 (additional digital images trained)
|
* Update digital CNN to v7.2.1 (additional digital images trained)
|
||||||
|
|
||||||
* Setting of arbitrary time server in `config.ini`
|
* Setting of arbitrary time server in `config.ini`
|
||||||
|
|
||||||
* Option for fixed IP-, DNS-Settings in `wlan.ini`
|
* Option for fixed IP-, DNS-Settings in `wlan.ini`
|
||||||
|
|
||||||
* Increased stability (internal image and camera handling)
|
* Increased stability (internal image and camera handling)
|
||||||
|
|
||||||
* Bug fixing: edit digits, handling PreValue, html-bugs
|
* Bug fixing: edit digits, handling PreValue, html-bugs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Additional ideas
|
||||||
|
|
||||||
|
There are some ideas and feature request, which are not followed currently - mainly due to capacity reasons on side of the developer. They are collected here: [FeatureRequest.md](FeatureRequest.md)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## History
|
||||||
|
|
||||||
##### 5.0.0 Setup Modus - (2020-12-06)
|
##### 5.0.0 Setup Modus - (2020-12-06)
|
||||||
|
|
||||||
* Implementation of initial setup modus for fresh installation
|
|
||||||
|
|
||||||
* Code restructuring (full compatibility between pure ESP-IDF and Platformio w/ espressif)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 4.1.1 Configuration editor - (2020-12-02)
|
##### 4.1.1 Configuration editor - (2020-12-02)
|
||||||
|
|
||||||
* Bug fixing: internal improvement of file handling (reduce not responding)
|
|
||||||
|
|
||||||
|
|
||||||
##### 4.1.0 Configuration editor - (2020-11-30)
|
|
||||||
|
|
||||||
* Implementation of configuration editor (including basic and expert mode)
|
|
||||||
|
|
||||||
* Adjustable time zone to adjust to local time setting (incl. daylight saving time)
|
|
||||||
|
|
||||||
* MQTT: additional topic for error reporting
|
|
||||||
|
|
||||||
* standardized access to current logfile via `http://IP-ADRESS/logfileact`
|
|
||||||
|
|
||||||
* Update digital CNN to v7.2.0, analog CNN to 6.3.0
|
|
||||||
|
|
||||||
* Bug fixing: truncation error, CheckDigitConsistency & PreValue implementation
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 4.0.0 Tflite Core - (2020-11-15)
|
##### 4.0.0 Tflite Core - (2020-11-15)
|
||||||
* Implementation of rolling log-files
|
|
||||||
|
|
||||||
* Update Tflite-Core to master@20201108 (v2.4)
|
|
||||||
|
|
||||||
* Bug-fixing for reducing reboots
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 3.1.0 MQTT-Client - (2020-10-26)
|
##### 3.1.0 MQTT-Client - (2020-10-26)
|
||||||
|
|
||||||
* Update digital CNN to v6.5.0 and HTML (Info to hostname, IP, ssid)
|
##### 2.2.1 Version Control - (2020-09-27)
|
||||||
|
|
||||||
* New implementation of "checkDigitConsistency" also for digits
|
|
||||||
* MQTT-Adapter: user and password for sign in MQTT-Broker
|
|
||||||
|
|
||||||
##### 3.0.0 MQTT-Client (2020-10-14)
|
|
||||||
|
|
||||||
* Implementation of MQTT Client
|
|
||||||
* Improved Version Control
|
|
||||||
* bug-fixing
|
|
||||||
|
|
||||||
|
|
||||||
|
##### 2.1.0 Decimal Shift, Chrome & Edge - (2020-09-25)
|
||||||
##### 2.2.1 Version Control (2020-09-27)
|
|
||||||
|
|
||||||
* Bug-Fixing (hostname in wlan.ini and error handling inside flow)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 2.2.0 Version Control (2020-09-27)
|
##### 2.0.0 Layout update - (2020-09-12)
|
||||||
|
|
||||||
* Integrated automated versioning system (menu: SYSTEM --> INFO)
|
##### 1.1.3 Initial Version - (2020-09-09)
|
||||||
* Update Build-System to PlatformIO - Espressif 32 v2.0.0 (ESP-IDF 4.1)
|
|
||||||
|
|
||||||
|
|
||||||
##### 2.1.0 Decimal Shift, Chrome & Edge (2020-09-25)
|
|
||||||
|
|
||||||
* Implementation of Decimal Shift
|
|
||||||
|
|
||||||
* Update default CNN for digits to v6.4.0
|
|
||||||
|
|
||||||
* Improvement HTML
|
|
||||||
|
|
||||||
* Support for Chrome and Edge
|
|
||||||
|
|
||||||
* Reduce logging to minimum - extended logging on demand
|
|
||||||
|
|
||||||
* Implementation of hostname in wlan.ini (`hostname = "HOSTNAME")`
|
|
||||||
|
|
||||||
* Bug fixing, code corrections
|
|
||||||
|
|
||||||
|
|
||||||
##### 2.0.0 Layout update (2020-09-12)
|
|
||||||
|
|
||||||
* Update to **new and modern layout**
|
|
||||||
* Support for Chrome improved
|
|
||||||
* Improved robustness: improved error handling in auto flow reduces spontaneous reboots
|
|
||||||
* File server: Option for "DELETE ALL"
|
|
||||||
* WLan: support of spaces in SSID and password
|
|
||||||
* Reference Image: Option for mirror image, option for image update on the fly
|
|
||||||
* additional parameter in `wasserzaehler.html?noerror=true` to suppress an potential error message
|
|
||||||
* bug fixing
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 1.1.3 (2020-09-09)
|
|
||||||
|
|
||||||
* **Bug in configuration of analog ROIs corrected** - correction in v.1.0.2 did not work properly
|
|
||||||
* Improved update page for the web server (`/html` can be updated via a zip-file, which is provided in `/firmware/html.zip`)
|
|
||||||
* Improved Chrome support
|
|
||||||
|
|
||||||
##### 1.1.0 (2020-09-06)
|
|
||||||
|
|
||||||
* Implementation of "delete complete directory"
|
|
||||||
**Attention: beside the `firmware.bin`, also the content of `/html` needs to be updated!**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 1.0.2 (2020-09-06)
|
|
||||||
|
|
||||||
* Bug in configuration of analog ROIs corrected
|
|
||||||
* minor bug correction
|
|
||||||
|
|
||||||
##### 1.0.1 (2020-09-05)
|
|
||||||
|
|
||||||
* preValue.ini Bug corrected
|
|
||||||
* minor bug correction
|
|
||||||
|
|
||||||
##### 1.0.0 (2020-09-04)
|
|
||||||
|
|
||||||
* **First usable version** - compatible to previous project (https://github.com/jomjol/water-meter-system-complete)
|
|
||||||
* NEW:
|
|
||||||
* no docker container for CNN calculation necessary
|
|
||||||
* web based configuration editor on board
|
|
||||||
|
|
||||||
##### 0.1.0 (2020-08-07)
|
|
||||||
|
|
||||||
* Initial Version
|
|
||||||
|
|
||||||
|
|
||||||
#### [Full Changelog](Changelog.md)
|
#### [Full Changelog](Changelog.md)
|
||||||
|
|||||||
@@ -292,11 +292,14 @@ bool ChangeHostName(std::string fn, std::string _newhostname)
|
|||||||
|
|
||||||
for (int i = 0; i < neuesfile.size(); ++i)
|
for (int i = 0; i < neuesfile.size(); ++i)
|
||||||
{
|
{
|
||||||
|
printf(neuesfile[i].c_str());
|
||||||
fputs(neuesfile[i].c_str(), pFile);
|
fputs(neuesfile[i].c_str(), pFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(pFile);
|
fclose(pFile);
|
||||||
|
|
||||||
|
printf("*** Update hostname done ***\n");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ static const char *TAGPARTOTA = "server_ota";
|
|||||||
void register_server_ota_sdcard_uri(httpd_handle_t server);
|
void register_server_ota_sdcard_uri(httpd_handle_t server);
|
||||||
void CheckOTAUpdate();
|
void CheckOTAUpdate();
|
||||||
void doReboot();
|
void doReboot();
|
||||||
|
void hard_restart();
|
||||||
|
|
||||||
|
|||||||
@@ -382,6 +382,9 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
{
|
{
|
||||||
// reboot notwendig damit die neue wlan.ini auch benutzt wird !!!
|
// reboot notwendig damit die neue wlan.ini auch benutzt wird !!!
|
||||||
fclose(pfile);
|
fclose(pfile);
|
||||||
|
printf("do reboot\n");
|
||||||
|
esp_restart();
|
||||||
|
hard_restart();
|
||||||
doReboot();
|
doReboot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -368,7 +368,7 @@ bool ClassFlowPostProcessing::doFlow(string zwtime)
|
|||||||
|
|
||||||
if (useMaxRateValue && (abs(Value - PreValue) > MaxRateValue))
|
if (useMaxRateValue && (abs(Value - PreValue) > MaxRateValue))
|
||||||
{
|
{
|
||||||
ErrorMessageText = ErrorMessageText + "Rate too high - Returned old value - read value: " + zwvalue + " - checked value: " + std::to_string(Value) + " ";
|
ErrorMessageText = ErrorMessageText + "Rate too high - Returned old value - read value: " + zwvalue + " - checked value: " + RundeOutput(Value, AnzahlAnalog - DecimalShift) + " ";
|
||||||
Value = PreValue;
|
Value = PreValue;
|
||||||
zwvalue = RundeOutput(Value, AnzahlAnalog - DecimalShift);
|
zwvalue = RundeOutput(Value, AnzahlAnalog - DecimalShift);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,51 +25,111 @@
|
|||||||
#include "ClassControllCamera.h"
|
#include "ClassControllCamera.h"
|
||||||
#include "server_main.h"
|
#include "server_main.h"
|
||||||
#include "server_camera.h"
|
#include "server_camera.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define __SD_USE_ONE_LINE_MODE__
|
||||||
|
|
||||||
|
#ifdef __SD_USE_ONE_LINE_MODE__
|
||||||
#include "server_GPIO.h"
|
#include "server_GPIO.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define BLINK_GPIO GPIO_NUM_33
|
||||||
|
|
||||||
static const char *TAGMAIN = "connect_wlan_main";
|
static const char *TAGMAIN = "connect_wlan_main";
|
||||||
|
|
||||||
#define FLASH_GPIO GPIO_NUM_4
|
#define FLASH_GPIO GPIO_NUM_4
|
||||||
|
|
||||||
void Init_NVS_SDCard()
|
bool Init_NVS_SDCard()
|
||||||
{
|
{
|
||||||
esp_err_t ret = nvs_flash_init();
|
esp_err_t ret = nvs_flash_init();
|
||||||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
|
if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
|
||||||
ESP_ERROR_CHECK(nvs_flash_erase());
|
ESP_ERROR_CHECK(nvs_flash_erase());
|
||||||
ret = nvs_flash_init();
|
ret = nvs_flash_init();
|
||||||
}
|
}
|
||||||
|
////////////////////////////////////////////////
|
||||||
|
|
||||||
ESP_LOGI(TAGMAIN, "Initializing SD card");
|
ESP_LOGI(TAG, "Using SDMMC peripheral");
|
||||||
sdmmc_host_t host = SDMMC_HOST_DEFAULT();
|
sdmmc_host_t host = SDMMC_HOST_DEFAULT();
|
||||||
host.flags = SDMMC_HOST_FLAG_1BIT;
|
|
||||||
// sdmmc_host_t host = SDMMC_HOST_SLOT_1();
|
// This initializes the slot without card detect (CD) and write protect (WP) signals.
|
||||||
// host.flags = SDMMC_HOST_FLAG_1BIT;
|
// Modify slot_config.gpio_cd and slot_config.gpio_wp if your board has these signals.
|
||||||
sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
|
sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
|
||||||
slot_config.width = 1; // 1 line SD mode
|
|
||||||
|
|
||||||
esp_vfs_fat_sdmmc_mount_config_t mount_config = { };
|
|
||||||
mount_config.format_if_mount_failed = false;
|
|
||||||
mount_config.max_files = 5;
|
|
||||||
|
|
||||||
gpio_set_pull_mode((gpio_num_t) 15, GPIO_PULLUP_ONLY); // CMD, needed in 4- and 1- line modes
|
// To use 1-line SD mode, uncomment the following line:
|
||||||
gpio_set_pull_mode((gpio_num_t) 2, GPIO_PULLUP_ONLY); // D0, needed in 4- and 1-line modes
|
|
||||||
|
|
||||||
|
#ifdef __SD_USE_ONE_LINE_MODE__
|
||||||
|
slot_config.width = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// GPIOs 15, 2, 4, 12, 13 should have external 10k pull-ups.
|
||||||
|
// Internal pull-ups are not sufficient. However, enabling internal pull-ups
|
||||||
|
// does make a difference some boards, so we do that here.
|
||||||
|
gpio_set_pull_mode(GPIO_NUM_15, GPIO_PULLUP_ONLY); // CMD, needed in 4- and 1- line modes
|
||||||
|
gpio_set_pull_mode(GPIO_NUM_2, GPIO_PULLUP_ONLY); // D0, needed in 4- and 1-line modes
|
||||||
|
gpio_set_pull_mode(GPIO_NUM_4, GPIO_PULLUP_ONLY); // D1, needed in 4-line mode only
|
||||||
|
gpio_set_pull_mode(GPIO_NUM_12, GPIO_PULLUP_ONLY); // D2, needed in 4-line mode only
|
||||||
|
gpio_set_pull_mode(GPIO_NUM_13, GPIO_PULLUP_ONLY); // D3, needed in 4- and 1-line modes
|
||||||
|
|
||||||
|
// Options for mounting the filesystem.
|
||||||
|
// If format_if_mount_failed is set to true, SD card will be partitioned and
|
||||||
|
// formatted in case when mounting fails.
|
||||||
|
esp_vfs_fat_sdmmc_mount_config_t mount_config = {
|
||||||
|
.format_if_mount_failed = false,
|
||||||
|
.max_files = 5,
|
||||||
|
.allocation_unit_size = 16 * 1024
|
||||||
|
};
|
||||||
|
|
||||||
|
// Use settings defined above to initialize SD card and mount FAT filesystem.
|
||||||
|
// Note: esp_vfs_fat_sdmmc_mount is an all-in-one convenience function.
|
||||||
|
// Please check its source code and implement error recovery when developing
|
||||||
|
// production applications.
|
||||||
sdmmc_card_t* card;
|
sdmmc_card_t* card;
|
||||||
ret = esp_vfs_fat_sdmmc_mount("/sdcard", &host, &slot_config, &mount_config, &card);
|
ret = esp_vfs_fat_sdmmc_mount("/sdcard", &host, &slot_config, &mount_config, &card);
|
||||||
|
|
||||||
if (ret != ESP_OK) {
|
if (ret != ESP_OK) {
|
||||||
if (ret == ESP_FAIL) {
|
if (ret == ESP_FAIL) {
|
||||||
ESP_LOGE(TAGMAIN, "Failed to mount filesystem. If you want the card to be formatted, set format_if_mount_failed = true.");
|
ESP_LOGE(TAG, "Failed to mount filesystem. "
|
||||||
|
"If you want the card to be formatted, set format_if_mount_failed = true.");
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGE(TAGMAIN, "Failed to initialize the card (%d). Make sure SD card lines have pull-up resistors in place.", ret);
|
ESP_LOGE(TAG, "Failed to initialize the card (%s). "
|
||||||
|
"Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret));
|
||||||
}
|
}
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Card has been initialized, print its properties
|
||||||
sdmmc_card_print_info(stdout, card);
|
sdmmc_card_print_info(stdout, card);
|
||||||
|
|
||||||
|
|
||||||
// Init the GPIO
|
// Init the GPIO
|
||||||
// Flash ausschalten
|
// Flash ausschalten
|
||||||
gpio_pad_select_gpio(FLASH_GPIO);
|
gpio_pad_select_gpio(FLASH_GPIO);
|
||||||
gpio_set_direction(FLASH_GPIO, GPIO_MODE_OUTPUT);
|
gpio_set_direction(FLASH_GPIO, GPIO_MODE_OUTPUT);
|
||||||
gpio_set_level(FLASH_GPIO, 0);
|
gpio_set_level(FLASH_GPIO, 0);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void task_NoSDBlink(void *pvParameter)
|
||||||
|
{
|
||||||
|
gpio_pad_select_gpio(BLINK_GPIO);
|
||||||
|
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
|
||||||
|
|
||||||
|
|
||||||
|
TickType_t xDelay;
|
||||||
|
xDelay = 100 / portTICK_PERIOD_MS;
|
||||||
|
printf("SD-Card could not be inialized - STOP THE PROGRAMM HERE\n");
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
gpio_set_level(BLINK_GPIO, 1);
|
||||||
|
vTaskDelay( xDelay );
|
||||||
|
gpio_set_level(BLINK_GPIO, 0);
|
||||||
|
vTaskDelay( xDelay );
|
||||||
|
|
||||||
|
}
|
||||||
|
vTaskDelete(NULL); //Delete this task if it exits from the loop above
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void app_main(void)
|
extern "C" void app_main(void)
|
||||||
@@ -79,7 +139,11 @@ extern "C" void app_main(void)
|
|||||||
Camera.InitCam();
|
Camera.InitCam();
|
||||||
Camera.LightOnOff(false);
|
Camera.LightOnOff(false);
|
||||||
|
|
||||||
Init_NVS_SDCard();
|
if (!Init_NVS_SDCard())
|
||||||
|
{
|
||||||
|
xTaskCreate(&task_NoSDBlink, "task_NoSDBlink", configMINIMAL_STACK_SIZE * 64, NULL, tskIDLE_PRIORITY+1, NULL);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
CheckOTAUpdate();
|
CheckOTAUpdate();
|
||||||
|
|
||||||
@@ -113,7 +177,11 @@ extern "C" void app_main(void)
|
|||||||
register_server_tflite_uri(server);
|
register_server_tflite_uri(server);
|
||||||
register_server_file_uri(server, "/sdcard");
|
register_server_file_uri(server, "/sdcard");
|
||||||
register_server_ota_sdcard_uri(server);
|
register_server_ota_sdcard_uri(server);
|
||||||
|
|
||||||
|
#ifdef __SD_USE_ONE_LINE_MODE__
|
||||||
register_server_GPIO_uri(server);
|
register_server_GPIO_uri(server);
|
||||||
|
#endif
|
||||||
|
|
||||||
register_server_main_uri(server, "/sdcard");
|
register_server_main_uri(server, "/sdcard");
|
||||||
|
|
||||||
TFliteDoAutoStart();
|
TFliteDoAutoStart();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="4537725";
|
const char* GIT_REV="21a70c5";
|
||||||
const char* GIT_TAG="v6.2.0";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="master";
|
const char* GIT_BRANCH="master";
|
||||||
const char* BUILD_TIME="2021-03-09 21:07";
|
const char* BUILD_TIME="2021-04-05 10:14";
|
||||||
@@ -13,7 +13,7 @@ extern "C"
|
|||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
const char* GIT_BASE_BRANCH = "master - v6.2.1 - 2020-03-09";
|
const char* GIT_BASE_BRANCH = "master - v6.6.1 - 2020-04-05";
|
||||||
|
|
||||||
|
|
||||||
const char* git_base_branch(void)
|
const char* git_base_branch(void)
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
|
|
||||||
This directory is intended for PlatformIO Unit Testing and project tests.
|
|
||||||
|
|
||||||
Unit Testing is a software testing method by which individual units of
|
|
||||||
source code, sets of one or more MCU program modules together with associated
|
|
||||||
control data, usage procedures, and operating procedures, are tested to
|
|
||||||
determine whether they are fit for use. Unit testing finds problems early
|
|
||||||
in the development cycle.
|
|
||||||
|
|
||||||
More information about PlatformIO Unit Testing:
|
|
||||||
- https://docs.platformio.org/page/plus/unit-testing.html
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="4537725";
|
const char* GIT_REV="21a70c5";
|
||||||
const char* GIT_TAG="v6.2.0";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="master";
|
const char* GIT_BRANCH="master";
|
||||||
const char* BUILD_TIME="2021-03-09 21:07";
|
const char* BUILD_TIME="2021-04-05 10:14";
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
images/focus_adjustment.jpg
Normal file
BIN
images/focus_adjustment.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 682 KiB |
BIN
sd-card/config/ana0700s1lq.tflite
Normal file
BIN
sd-card/config/ana0700s1lq.tflite
Normal file
Binary file not shown.
@@ -5,19 +5,19 @@ WaitBeforeTakingPicture = 5
|
|||||||
ImageQuality = 5
|
ImageQuality = 5
|
||||||
ImageSize = VGA
|
ImageSize = VGA
|
||||||
;Brightness = -2
|
;Brightness = -2
|
||||||
FixedExposure = true
|
FixedExposure = false
|
||||||
|
|
||||||
[Alignment]
|
[Alignment]
|
||||||
InitalRotate=180
|
InitialRotate=180
|
||||||
/config/ref0.jpg 119 273
|
/config/ref0.jpg 119 273
|
||||||
/config/ref1.jpg 456 138
|
/config/ref1.jpg 456 138
|
||||||
SearchFieldX = 20
|
SearchFieldX = 20
|
||||||
SearchFieldY = 20
|
SearchFieldY = 20
|
||||||
|
InitialMirror= false
|
||||||
AlignmentAlgo = Default
|
AlignmentAlgo = Default
|
||||||
|
|
||||||
|
|
||||||
[Digits]
|
[Digits]
|
||||||
Model = /config/dig0811s1.tflite
|
Model = /config/dig0820s2q.tflite
|
||||||
;LogImageLocation = /log/digit
|
;LogImageLocation = /log/digit
|
||||||
;LogfileRetentionInDays = 3
|
;LogfileRetentionInDays = 3
|
||||||
ModelInputSize = 20 32
|
ModelInputSize = 20 32
|
||||||
@@ -26,7 +26,7 @@ digit2 355 120 37 67
|
|||||||
digit3 404 120 37 67
|
digit3 404 120 37 67
|
||||||
|
|
||||||
[Analog]
|
[Analog]
|
||||||
Model = /config/ana0630s2.tflite
|
Model = /config/ana0700s1lq.tflite
|
||||||
;LogImageLocation = /log/analog
|
;LogImageLocation = /log/analog
|
||||||
;LogfileRetentionInDays = 3
|
;LogfileRetentionInDays = 3
|
||||||
ModelInputSize = 32 32
|
ModelInputSize = 32 32
|
||||||
|
|||||||
BIN
sd-card/config/dig0820s2q.tflite
Normal file
BIN
sd-card/config/dig0820s2q.tflite
Normal file
Binary file not shown.
@@ -85,13 +85,14 @@ select {
|
|||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><input class="button" type="submit" name="saveroi" onclick="SaveToConfig()" value="Save to Config.ini"></td>
|
<td colspan="2"><input class="button" type="submit" name="saveroi" onclick="SaveToConfig()" value="Save all to Config.ini"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
<script type="text/javascript" src="./readconfig.js"></script>
|
<script type="text/javascript" src="./readconfig.js"></script>
|
||||||
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<script language="JavaScript">
|
<script language="JavaScript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
@@ -101,7 +102,8 @@ select {
|
|||||||
drag = false,
|
drag = false,
|
||||||
aktindex = 0,
|
aktindex = 0,
|
||||||
refInfo,
|
refInfo,
|
||||||
enhanceCon = false;
|
enhanceCon = false,
|
||||||
|
param;
|
||||||
basepath = "http://192.168.178.26";
|
basepath = "http://192.168.178.26";
|
||||||
basepath = "";
|
basepath = "";
|
||||||
|
|
||||||
@@ -111,60 +113,60 @@ function ChangeSelection(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SaveToConfig(){
|
function SaveToConfig(){
|
||||||
refInfo["name"] = document.getElementById("name").value;
|
/*
|
||||||
refInfo["x"] = document.getElementById("refx").value;
|
refInfo[aktindex]["name"] = document.getElementById("name").value;
|
||||||
refInfo["y"] = document.getElementById("refy").value;
|
refInfo[aktindex]["x"] = document.getElementById("refx").value;
|
||||||
refInfo["dx"] = document.getElementById("refdx").value;
|
refInfo[aktindex]["y"] = document.getElementById("refy").value;
|
||||||
refInfo["dy"] = document.getElementById("refdy").value;
|
refInfo[aktindex]["dx"] = document.getElementById("refdx").value;
|
||||||
UpdateConfig(refInfo, aktindex, enhanceCon, basepath);
|
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;
|
||||||
|
*/
|
||||||
|
UpdateConfigReference(refInfo, basepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
function EnhanceContrast(){
|
function EnhanceContrast(){
|
||||||
refInfo["name"] = document.getElementById("name").value;
|
refInfo[aktindex]["name"] = document.getElementById("name").value;
|
||||||
refInfo["x"] = document.getElementById("refx").value;
|
refInfo[aktindex]["x"] = document.getElementById("refx").value;
|
||||||
refInfo["y"] = document.getElementById("refy").value;
|
refInfo[aktindex]["y"] = document.getElementById("refy").value;
|
||||||
refInfo["dx"] = document.getElementById("refdx").value;
|
refInfo[aktindex]["dx"] = document.getElementById("refdx").value;
|
||||||
refInfo["dy"] = document.getElementById("refdy").value;
|
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;
|
||||||
|
|
||||||
enhanceCon = true;
|
enhanceCon = true;
|
||||||
MakeContrastImageZW(refInfo, enhanceCon, basepath);
|
MakeContrastImageZW(refInfo[aktindex], enhanceCon, basepath);
|
||||||
var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
|
UpdateReference();
|
||||||
document.getElementById("img_ref").src = url;
|
// var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
|
||||||
var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
|
// document.getElementById("img_ref").src = url;
|
||||||
document.getElementById("img_ref_org").src = url;
|
// var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
|
||||||
|
// document.getElementById("img_ref_org").src = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdateReference(){
|
function UpdateReference(){
|
||||||
refInfo = GetCoordinates(aktindex, basepath);
|
|
||||||
document.getElementById("img_ref").onload = function () {
|
document.getElementById("img_ref").onload = function () {
|
||||||
document.getElementById("refdx").value = this.width;
|
document.getElementById("refdx").value = this.width;
|
||||||
document.getElementById("refdy").value = this.height;
|
document.getElementById("refdy").value = this.height;
|
||||||
refInfo["dx"] = this.width;
|
refInfo[aktindex]["dx"] = this.width;
|
||||||
refInfo["dy"] = this.height;
|
refInfo[aktindex]["dy"] = this.height;
|
||||||
rect.w = document.getElementById("refdx").value;
|
rect.w = document.getElementById("refdx").value;
|
||||||
rect.h = document.getElementById("refdy").value;
|
rect.h = document.getElementById("refdy").value;
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
|
_filenameurl = refInfo[aktindex]["name"].replace("/config/", "/img_tmp/");
|
||||||
document.getElementById("img_ref_org").src = url;
|
|
||||||
var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
|
var url = basepath + "/fileserver" + _filenameurl + "?" + Date.now();
|
||||||
document.getElementById("img_ref").src = url;
|
document.getElementById("img_ref").src = url;
|
||||||
|
|
||||||
document.getElementById("name").value = refInfo["name"];
|
_filenameurl = _filenameurl.replace(".jpg", "_org.jpg");
|
||||||
document.getElementById("refx").value = refInfo["x"];
|
var url = basepath + "/fileserver" + _filenameurl + "?" + Date.now();
|
||||||
document.getElementById("refy").value = refInfo["y"];
|
document.getElementById("img_ref_org").src = url;
|
||||||
|
|
||||||
|
document.getElementById("name").value = refInfo[aktindex]["name"];
|
||||||
|
document.getElementById("refx").value = refInfo[aktindex]["x"];
|
||||||
|
document.getElementById("refy").value = refInfo[aktindex]["y"];
|
||||||
rect.startX = document.getElementById("refx").value;
|
rect.startX = document.getElementById("refx").value;
|
||||||
rect.startY = document.getElementById("refy").value;
|
rect.startY = document.getElementById("refy").value;
|
||||||
document.getElementById("enhancecontrast").disabled = true;
|
document.getElementById("enhancecontrast").disabled = true;
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
function ParseIni(_basepath) {
|
|
||||||
loadConfig(_basepath);
|
|
||||||
ParseConfig();
|
|
||||||
UpdateReference();
|
|
||||||
}
|
|
||||||
|
|
||||||
function dataURLtoBlob(dataurl) {
|
function dataURLtoBlob(dataurl) {
|
||||||
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
|
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
|
||||||
@@ -205,13 +207,21 @@ function dataURLtoBlob(dataurl) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
basepath = getbasepath();
|
basepath = getbasepath();
|
||||||
|
loadConfig(basepath);
|
||||||
|
ParseConfig();
|
||||||
|
|
||||||
canvas.addEventListener('mousedown', mouseDown, false);
|
canvas.addEventListener('mousedown', mouseDown, false);
|
||||||
canvas.addEventListener('mouseup', mouseUp, false);
|
canvas.addEventListener('mouseup', mouseUp, false);
|
||||||
canvas.addEventListener('mousemove', mouseMove, false);
|
canvas.addEventListener('mousemove', mouseMove, false);
|
||||||
loadCanvas(basepath + "/fileserver/config/reference.jpg");
|
loadCanvas(basepath + "/fileserver/config/reference.jpg");
|
||||||
ParseIni(basepath);
|
|
||||||
|
CopyReferenceToImgTmp(basepath);
|
||||||
|
refInfo = GetReferencesInfo();
|
||||||
|
|
||||||
|
UpdateReference();
|
||||||
|
|
||||||
drawImage();
|
drawImage();
|
||||||
}
|
}
|
||||||
function drawImage(){
|
function drawImage(){
|
||||||
@@ -226,17 +236,13 @@ function dataURLtoBlob(dataurl) {
|
|||||||
|
|
||||||
|
|
||||||
function CutOutReference(){
|
function CutOutReference(){
|
||||||
refInfo["x"] = document.getElementById("refx").value;
|
refInfo[aktindex]["x"] = document.getElementById("refx").value;
|
||||||
refInfo["y"] = document.getElementById("refy").value;
|
refInfo[aktindex]["y"] = document.getElementById("refy").value;
|
||||||
refInfo["dx"] = document.getElementById("refdx").value;
|
refInfo[aktindex]["dx"] = document.getElementById("refdx").value;
|
||||||
refInfo["dy"] = document.getElementById("refdy").value;
|
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;
|
||||||
MakeRefZW(refInfo, basepath);
|
MakeRefZW(refInfo[aktindex], basepath);
|
||||||
var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
|
UpdateReference();
|
||||||
document.getElementById("img_ref_org").src = url;
|
|
||||||
var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
|
|
||||||
document.getElementById("img_ref").src = url;
|
|
||||||
document.getElementById("enhancecontrast").disabled = false;
|
document.getElementById("enhancecontrast").disabled = false;
|
||||||
draw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawGrid(){
|
function drawGrid(){
|
||||||
|
|||||||
@@ -363,7 +363,15 @@ function ParseIni(_basepath) {
|
|||||||
var y0 = parseInt(rect.startY) - parseInt(lw/2);
|
var y0 = parseInt(rect.startY) - parseInt(lw/2);
|
||||||
var dx = parseInt(rect.w) + parseInt(lw);
|
var dx = parseInt(rect.w) + parseInt(lw);
|
||||||
var dy = parseInt(rect.h) + parseInt(lw);
|
var dy = parseInt(rect.h) + parseInt(lw);
|
||||||
context.strokeRect(x0, y0, dx, dy);
|
context.strokeRect(x0, y0, dx, dy);
|
||||||
|
context.lineWidth = 1;
|
||||||
|
context.beginPath();
|
||||||
|
context.arc(x0+dx/2, y0+dy/2, dx/2, 0, 2 * Math.PI);
|
||||||
|
context.moveTo(x0+dx/2, y0);
|
||||||
|
context.lineTo(x0+dx/2, y0+dy);
|
||||||
|
context.moveTo(x0, y0+dy/2);
|
||||||
|
context.lineTo(x0+dx, y0+dy/2);
|
||||||
|
context.stroke();
|
||||||
ROIInfo[aktindex]["x"] = rect.startX;
|
ROIInfo[aktindex]["x"] = rect.startX;
|
||||||
ROIInfo[aktindex]["y"] = rect.startY;
|
ROIInfo[aktindex]["y"] = rect.startY;
|
||||||
ROIInfo[aktindex]["dx"] = rect.w;
|
ROIInfo[aktindex]["dx"] = rect.w;
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogImageLocation_value1").disabled = !document.getElementById("MakeImage_LogImageLocation_value1").disabled' unchecked >
|
<input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("MakeImage", "LogImageLocation")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
<class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
||||||
@@ -75,7 +75,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled = !document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("MakeImage", "LogfileRetentionInDays")' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
<class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
@@ -223,7 +223,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="AlignmentAlgo_ex8">
|
<tr class="expert" id="AlignmentAlgo_ex8">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'document.getElementById("Alignment_AlignmentAlgo_value1").disabled = !document.getElementById("Alignment_AlignmentAlgo_value1").disabled' unchecked >
|
<input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'InvertEnableItem("Alignment", "AlignmentAlgo")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="Alignment_AlignmentAlgo_text" style="color:black;">AlignmentAlgo</class>
|
<class id="Alignment_AlignmentAlgo_text" style="color:black;">AlignmentAlgo</class>
|
||||||
@@ -260,7 +260,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Digits_LogImageLocation_value1").disabled = !document.getElementById("Digits_LogImageLocation_value1").disabled' unchecked >
|
<input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Digits", "LogImageLocation")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="Digits_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
<class id="Digits_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
||||||
@@ -274,7 +274,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="Digits_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Digits_LogfileRetentionInDays_value1").disabled = !document.getElementById("Digits_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="Digits_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Digits", "LogfileRetentionInDays")' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="Digits_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
<class id="Digits_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
@@ -313,7 +313,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Analog_LogImageLocation_value1").disabled = !document.getElementById("Analog_LogImageLocation_value1").disabled' unchecked >
|
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Analog", "LogImageLocation")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td> <class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class> </td>
|
<td> <class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class> </td>
|
||||||
<td> <input type="text" name="name" id="Analog_LogImageLocation_value1"> </td>
|
<td> <input type="text" name="name" id="Analog_LogImageLocation_value1"> </td>
|
||||||
@@ -321,7 +321,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Analog_LogfileRetentionInDays_value1").disabled = !document.getElementById("Analog_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Analog", "LogfileRetentionInDays")' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td> <class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class> </td>
|
<td> <class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class> </td>
|
||||||
<td> <input type="number" id="Analog_LogfileRetentionInDays_value1" min="0" step="1"> </td>
|
<td> <input type="number" id="Analog_LogfileRetentionInDays_value1" min="0" step="1"> </td>
|
||||||
@@ -330,7 +330,7 @@ textarea {
|
|||||||
|
|
||||||
<tr class="expert" id="Analog_ExtendedResolution_ex10">
|
<tr class="expert" id="Analog_ExtendedResolution_ex10">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="Analog_ExtendedResolution_enabled" value="1" onclick = 'document.getElementById("Analog_ExtendedResolution_value1").disabled = !document.getElementById("Analog_ExtendedResolution_value1").disabled' unchecked >
|
<input type="checkbox" id="Analog_ExtendedResolution_enabled" value="1" onclick = 'InvertEnableItem("Analog", "ExtendedResolution")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="Analog_ExtendedResolution_text" style="color:black;">ExtendedResolution</class>
|
<class id="Analog_ExtendedResolution_text" style="color:black;">ExtendedResolution</class>
|
||||||
@@ -364,7 +364,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="PostProcessing_DecimalShift_enabled" value="1" onclick = 'document.getElementById("PostProcessing_DecimalShift_value1").disabled = !document.getElementById("PostProcessing_DecimalShift_value1").disabled' unchecked >
|
<input type="checkbox" id="PostProcessing_DecimalShift_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "DecimalShift")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="PostProcessing_DecimalShift_text" style="color:black;">DecimalShift</class>
|
<class id="PostProcessing_DecimalShift_text" style="color:black;">DecimalShift</class>
|
||||||
@@ -378,7 +378,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="PostProcessing_PreValueUse_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueUse_value1").disabled = !document.getElementById("PostProcessing_PreValueUse_value1").disabled' unchecked >
|
<input type="checkbox" id="PostProcessing_PreValueUse_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "PreValueUse")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="PostProcessing_PreValueUse_text" style="color:black;">PreValueUse</class>
|
<class id="PostProcessing_PreValueUse_text" style="color:black;">PreValueUse</class>
|
||||||
@@ -395,7 +395,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex11">
|
<tr class="expert" id="ex11">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="PostProcessing_PreValueAgeStartup_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled = !document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled' unchecked >
|
<input type="checkbox" id="PostProcessing_PreValueAgeStartup_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "PreValueAgeStartup")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="PostProcessing_PreValueAgeStartup_text" style="color:black;">PreValueAgeStartup</class>
|
<class id="PostProcessing_PreValueAgeStartup_text" style="color:black;">PreValueAgeStartup</class>
|
||||||
@@ -409,7 +409,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="PostProcessing_AllowNegativeRates_enabled" value="1" onclick = 'document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled = !document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled' unchecked >
|
<input type="checkbox" id="PostProcessing_AllowNegativeRates_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "AllowNegativeRates")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="PostProcessing_AllowNegativeRates_text" style="color:black;">AllowNegativeRates</class>
|
<class id="PostProcessing_AllowNegativeRates_text" style="color:black;">AllowNegativeRates</class>
|
||||||
@@ -426,7 +426,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="PostProcessing_MaxRateValue_enabled" value="1" onclick = 'document.getElementById("PostProcessing_MaxRateValue_value1").disabled = !document.getElementById("PostProcessing_MaxRateValue_value1").disabled' unchecked >
|
<input type="checkbox" id="PostProcessing_MaxRateValue_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "MaxRateValue")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="PostProcessing_MaxRateValue_text" style="color:black;">MaxRateValue</class>
|
<class id="PostProcessing_MaxRateValue_text" style="color:black;">MaxRateValue</class>
|
||||||
@@ -440,7 +440,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex12">
|
<tr class="expert" id="ex12">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'document.getElementById("PostProcessing_ErrorMessage_value1").disabled = !document.getElementById("PostProcessing_ErrorMessage_value1").disabled' unchecked >
|
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "ErrorMessage")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="PostProcessing_ErrorMessage_text" style="color:black;">ErrorMessage</class>
|
<class id="PostProcessing_ErrorMessage_text" style="color:black;">ErrorMessage</class>
|
||||||
@@ -457,7 +457,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled = !document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled' unchecked >
|
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "CheckDigitIncreaseConsistency")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">CheckDigitIncreaseConsistency</class>
|
<class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">CheckDigitIncreaseConsistency</class>
|
||||||
@@ -478,7 +478,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'document.getElementById("MQTT_Uri_value1").disabled = !document.getElementById("MQTT_Uri_value1").disabled' unchecked >
|
<input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "Uri")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MQTT_Uri_text" style="color:black;">Uri</class>
|
<class id="MQTT_Uri_text" style="color:black;">Uri</class>
|
||||||
@@ -487,12 +487,12 @@ textarea {
|
|||||||
<input type="text" id="MQTT_Uri_value1">
|
<input type="text" id="MQTT_Uri_value1">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
URI to the MQTT broker including port: http:\\IP-ADRESS:port
|
URI to the MQTT broker including port e.g.: mqtt://IP-Address:Port
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MQTT_Topic_enabled" value="1" onclick = 'document.getElementById("MQTT_Topic_value1").disabled = !document.getElementById("MQTT_Topic_value1").disabled' unchecked >
|
<input type="checkbox" id="MQTT_Topic_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "Topic")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MQTT_Topic_text" style="color:black;">Topic</class>
|
<class id="MQTT_Topic_text" style="color:black;">Topic</class>
|
||||||
@@ -506,7 +506,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MQTT_TopicError_enabled" value="1" onclick = 'document.getElementById("MQTT_TopicError_value1").disabled = !document.getElementById("MQTT_TopicError_value1").disabled' unchecked >
|
<input type="checkbox" id="MQTT_TopicError_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "TopicError")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MQTT_TopicError_text" style="color:black;">TopicError</class>
|
<class id="MQTT_TopicError_text" style="color:black;">TopicError</class>
|
||||||
@@ -520,7 +520,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'document.getElementById("MQTT_ClientID_value1").disabled = !document.getElementById("MQTT_ClientID_value1").disabled' unchecked >
|
<input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "ClientID")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MQTT_ClientID_text" style="color:black;">ClientID</class>
|
<class id="MQTT_ClientID_text" style="color:black;">ClientID</class>
|
||||||
@@ -534,7 +534,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MQTT_user_enabled" value="1" onclick = 'document.getElementById("MQTT_user_value1").disabled = !document.getElementById("MQTT_user_value1").disabled' unchecked >
|
<input type="checkbox" id="MQTT_user_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "user")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MQTT_user_text" style="color:black;">user</class>
|
<class id="MQTT_user_text" style="color:black;">user</class>
|
||||||
@@ -543,12 +543,12 @@ textarea {
|
|||||||
<input type="text" id="MQTT_user_value1">
|
<input type="text" id="MQTT_user_value1">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
user for MQTT authenficiation
|
user for MQTT authentication
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'document.getElementById("MQTT_password_value1").disabled = !document.getElementById("MQTT_password_value1").disabled' unchecked >
|
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "password")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MQTT_password_text" style="color:black;">password</class>
|
<class id="MQTT_password_text" style="color:black;">password</class>
|
||||||
@@ -557,7 +557,7 @@ textarea {
|
|||||||
<input type="text" id="MQTT_password_value1">
|
<input type="text" id="MQTT_password_value1">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;">
|
||||||
password for MQTT authenficiation
|
password for MQTT authentication
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -566,7 +566,6 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex13">
|
<tr class="expert" id="ex13">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="AutoTimer_AutoStart_enabled" value="1" onclick = 'document.getElementById("AutoTimer_AutoStart_value1").disabled = !document.getElementById("AutoTimer_AutoStart_value1").disabled' unchecked >
|
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="AutoTimer_AutoStart_text" style="color:black;">AutoStart</class>
|
<class id="AutoTimer_AutoStart_text" style="color:black;">AutoStart</class>
|
||||||
@@ -583,7 +582,6 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="AutoTimer_Intervall_enabled" value="1" onclick = 'document.getElementById("AutoTimer_Intervall_value1").disabled = !document.getElementById("AutoTimerg_Intervall_value1").disabled' unchecked >
|
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="AutoTimer_Intervall_text" style="color:black;">Intervall</class>
|
<class id="AutoTimer_Intervall_text" style="color:black;">Intervall</class>
|
||||||
@@ -601,7 +599,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="Debug_Logfile_enabled" value="1" onclick = 'document.getElementById("Debug_Logfile_value1").disabled = !document.getElementById("Debug_Logfile_value1").disabled' unchecked >
|
<input type="checkbox" id="Debug_Logfile_enabled" value="1" onclick = 'InvertEnableItem("Debug", "Logfile")' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="Debug_Logfile_text" style="color:black;">Logfile</class>
|
<class id="Debug_Logfile_text" style="color:black;">Logfile</class>
|
||||||
@@ -618,7 +616,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="Debug_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Debug_LogfileRetentionInDays_value1").disabled = !document.getElementById("Debug_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="Debug_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Debug", "LogfileRetentionInDays")' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
<class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
@@ -636,7 +634,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'document.getElementById("System_TimeZone_value1").disabled = !document.getElementById("System_TimeZone_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'InvertEnableItem("System", "TimeZone")' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="System_TimeZone_text" style="color:black;">TimeZone</class>
|
<class id="System_TimeZone_text" style="color:black;">TimeZone</class>
|
||||||
@@ -650,7 +648,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex16">
|
<tr class="expert" id="ex16">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="System_TimeServer_enabled" value="1" onclick = 'document.getElementById("System_TimeServer_value1").disabled = !document.getElementById("System_TimeServer_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="System_TimeServer_enabled" value="1" onclick = 'InvertEnableItem("System", "TimeServer")' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="System_TimeServer_text" style="color:black;">TimeServer</class>
|
<class id="System_TimeServer_text" style="color:black;">TimeServer</class>
|
||||||
@@ -664,7 +662,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="System_Hostname">
|
<tr class="expert" id="System_Hostname">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'document.getElementById("System_Hostname_value1").disabled = !document.getElementById("System_Hostname_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'InvertEnableItem("System", "Hostname")' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="System_Hostname_text" style="color:black;">Hostname</class>
|
<class id="System_Hostname_text" style="color:black;">Hostname</class>
|
||||||
@@ -768,6 +766,33 @@ function WriteParameter(_param, _category, _cat, _name, _optional, _select = fal
|
|||||||
EnDisableItem(_category[_cat]["enabled"], _param, _category, _cat, _name, _optional);
|
EnDisableItem(_category[_cat]["enabled"], _param, _category, _cat, _name, _optional);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function InvertEnableItem(_cat, _param)
|
||||||
|
{
|
||||||
|
_zw = _cat + "_" + _param + "_enabled";
|
||||||
|
_isOn = document.getElementById(_zw).checked;
|
||||||
|
|
||||||
|
_color = "color:lightgrey;";
|
||||||
|
if (_isOn) {
|
||||||
|
_color = "color:black;";
|
||||||
|
}
|
||||||
|
|
||||||
|
_zw = _cat + "_" + _param + "_text";
|
||||||
|
document.getElementById(_zw).disabled = !_isOn;
|
||||||
|
document.getElementById(_zw).style = _color;
|
||||||
|
|
||||||
|
if (param[_cat][_param]["anzParam"] == 2) {
|
||||||
|
_color = "width: 30px;" + _color;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var j = 1; j <= param[_cat][_param]["anzParam"]; ++j) {
|
||||||
|
document.getElementById(_cat+"_"+_param+"_value"+j).disabled = !_isOn;
|
||||||
|
document.getElementById(_cat+"_"+_param+"_value"+j).style=_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function EnDisableItem(_status, _param, _category, _cat, _name, _optional)
|
function EnDisableItem(_status, _param, _category, _cat, _name, _optional)
|
||||||
{
|
{
|
||||||
_status = _param[_cat][_name]["found"] && _category[_cat]["enabled"];
|
_status = _param[_cat][_name]["found"] && _category[_cat]["enabled"];
|
||||||
@@ -864,8 +889,8 @@ function UpdateInput() {
|
|||||||
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, "AutoTimer", "AutoStart", true, true);
|
WriteParameter(param, category, "AutoTimer", "AutoStart", false, true);
|
||||||
WriteParameter(param, category, "AutoTimer", "Intervall", true);
|
WriteParameter(param, category, "AutoTimer", "Intervall", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "Debug", "Logfile", true, true);
|
WriteParameter(param, category, "Debug", "Logfile", true, true);
|
||||||
WriteParameter(param, category, "Debug", "LogfileRetentionInDays", true);
|
WriteParameter(param, category, "Debug", "LogfileRetentionInDays", true);
|
||||||
@@ -921,8 +946,8 @@ function ReadParameterAll()
|
|||||||
ReadParameter(param, "MQTT", "user", true);
|
ReadParameter(param, "MQTT", "user", true);
|
||||||
ReadParameter(param, "MQTT", "password", true);
|
ReadParameter(param, "MQTT", "password", true);
|
||||||
|
|
||||||
ReadParameter(param, "AutoTimer", "AutoStart", true, true);
|
ReadParameter(param, "AutoTimer", "AutoStart", false, true);
|
||||||
ReadParameter(param, "AutoTimer", "Intervall", true);
|
ReadParameter(param, "AutoTimer", "Intervall", false);
|
||||||
|
|
||||||
ReadParameter(param, "Debug", "Logfile", true, true);
|
ReadParameter(param, "Debug", "Logfile", true, true);
|
||||||
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
|
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
|
||||||
|
|||||||
@@ -354,7 +354,9 @@ function draw() {
|
|||||||
var y0 = parseInt(rect.startY) - parseInt(lw/2);
|
var y0 = parseInt(rect.startY) - parseInt(lw/2);
|
||||||
var dx = parseInt(rect.w) + parseInt(lw);
|
var dx = parseInt(rect.w) + parseInt(lw);
|
||||||
var dy = parseInt(rect.h) + parseInt(lw);
|
var dy = parseInt(rect.h) + parseInt(lw);
|
||||||
context.strokeRect(x0, y0, dx, dy);
|
context.strokeRect(x0, y0, dx, dy);
|
||||||
|
context.lineWidth = 1;
|
||||||
|
context.strokeRect(x0+dx*0.2, y0+dy*0.2, dx*0.6, dy*0.6);
|
||||||
ROIInfo[aktindex]["x"] = rect.startX;
|
ROIInfo[aktindex]["x"] = rect.startX;
|
||||||
ROIInfo[aktindex]["y"] = rect.startY;
|
ROIInfo[aktindex]["y"] = rect.startY;
|
||||||
ROIInfo[aktindex]["dx"] = rect.w;
|
ROIInfo[aktindex]["dx"] = rect.w;
|
||||||
|
|||||||
@@ -29,23 +29,21 @@ p {font-size: 1em;}
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
This is the first time you the digitizer. You have been automatically routed to the <b>initial setup procedure</b>.
|
This is the first time you started the digitizer after the initial installation. You have been automatically routed to the <b>initial setup procedure</b>.
|
||||||
This procedure should adjust the setting to your local counter. Basically you can customize your settings in five steps.
|
Here you adjust the setting to your local counter within five steps. In the final step the inital setup will be disabled and it will restart to the normal mode.
|
||||||
<br>
|
|
||||||
In the final step the inital setup will be disabled and it will restart to the normal mode.
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
Just use the buttons "Next" and "Previous" to nagivate through the process.
|
You can navigate forward and backward during the setup with the buttons "Next" and "Previous". Do not forget to save in each step.
|
||||||
<br>
|
<br>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Follow the instructions:
|
This is an overview over the five steps:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<ol>
|
<ol>
|
||||||
<li>Create reference image <br>
|
<li>Create reference image <br>
|
||||||
Basis for the position references and the marking of the digits and counters.</li>
|
Base for the position referencing and the identification of the digits and counters.</li>
|
||||||
<li>Define two unique references <br>
|
<li>Define two unique references <br>
|
||||||
Used to align the individual camera shot and identify the absolut positions</li>
|
Used to align the individual camera shot and identify the absolut positions</li>
|
||||||
<li>Define the digits <br>
|
<li>Define the digits <br>
|
||||||
@@ -53,7 +51,7 @@ p {font-size: 1em;}
|
|||||||
<li>Define the analog counters <br>
|
<li>Define the analog counters <br>
|
||||||
Analog counters to be identified</li>
|
Analog counters to be identified</li>
|
||||||
<li>General settings <br>
|
<li>General settings <br>
|
||||||
Most can stay to the default value - also MQTT connection can be specified here</li>
|
Most settings can be used with default value at the beginning. MQTT connection can be specified here</li>
|
||||||
</ol>
|
</ol>
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ p {font-size: 1em;}
|
|||||||
<br>
|
<br>
|
||||||
Once you have pushed below button, the setup modus will be left and the digitizer start to normal operation mode.
|
Once you have pushed below button, the setup modus will be left and the digitizer start to normal operation mode.
|
||||||
<br>
|
<br>
|
||||||
After a view seconds you can reload this page again and will go to normal operation mode.
|
After a view seconds you can reload this page. It will take two to four minutes, until you get the first reading.
|
||||||
<br>
|
<br>
|
||||||
All settings can be changed later on as well in the configuration menue.
|
All settings can be changed as well in the configuration menue in normal operation mode.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ table {
|
|||||||
_brightness = document.getElementById("MakeImage_Brightness_value1").value;
|
_brightness = document.getElementById("MakeImage_Brightness_value1").value;
|
||||||
// _contrast = document.getElementById("MakeImage_Contrast_value1").value;
|
// _contrast = document.getElementById("MakeImage_Contrast_value1").value;
|
||||||
// _saturation = document.getElementById("MakeImage_Saturation_value1").value;
|
// _saturation = document.getElementById("MakeImage_Saturation_value1").value;
|
||||||
url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
|
url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -118,9 +118,6 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
|
|||||||
|
|
||||||
function loadRawImage(){
|
function loadRawImage(){
|
||||||
url = basepath + "/img_tmp/raw.jpg" + "?session=" + Math.floor((Math.random() * 1000000) + 1);
|
url = basepath + "/img_tmp/raw.jpg" + "?session=" + Math.floor((Math.random() * 1000000) + 1);
|
||||||
// document.getElementById("finerotate").value = 0;
|
|
||||||
// document.getElementById("prerotateangle").value = getPreRotate();
|
|
||||||
// document.getElementById("mirror").checked = getMirror();
|
|
||||||
document.getElementById("finerotate").disabled = false;
|
document.getElementById("finerotate").disabled = false;
|
||||||
document.getElementById("prerotateangle").disabled = false;
|
document.getElementById("prerotateangle").disabled = false;
|
||||||
document.getElementById("updatereferenceimage").disabled = false;
|
document.getElementById("updatereferenceimage").disabled = false;
|
||||||
@@ -128,7 +125,9 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
|
|||||||
if (param["Alignment"]["InitialMirror"].found)
|
if (param["Alignment"]["InitialMirror"].found)
|
||||||
document.getElementById("mirror").disabled = false;
|
document.getElementById("mirror").disabled = false;
|
||||||
else
|
else
|
||||||
|
{
|
||||||
document.getElementById("labelmirror").style = "color:lightgrey;";
|
document.getElementById("labelmirror").style = "color:lightgrey;";
|
||||||
|
}
|
||||||
|
|
||||||
if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
|
if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
|
||||||
document.getElementById("MakeImage_Brightness_value1").disabled = false;
|
document.getElementById("MakeImage_Brightness_value1").disabled = false;
|
||||||
@@ -164,6 +163,14 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
|
|||||||
document.getElementById("MakeImage_Brightness_value1").disabled = true;
|
document.getElementById("MakeImage_Brightness_value1").disabled = true;
|
||||||
// document.getElementById("MakeImage_Saturation_value1").disabled = true;
|
// document.getElementById("MakeImage_Saturation_value1").disabled = true;
|
||||||
// document.getElementById("MakeImage_Contrast_value1").disabled = true;
|
// document.getElementById("MakeImage_Contrast_value1").disabled = true;
|
||||||
|
document.getElementById("mirror").disabled = false;
|
||||||
|
if (!(param["MakeImage"]["Brightness"].found))
|
||||||
|
{
|
||||||
|
document.getElementById("MakeImage_Brightness_value1").type = "hidden";
|
||||||
|
document.getElementById("MakeImage_Brightness_text").style.visibility = "hidden";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
document.getElementById("mirror").disabled = true;
|
document.getElementById("mirror").disabled = true;
|
||||||
|
|
||||||
isActReference = true;
|
isActReference = true;
|
||||||
@@ -193,13 +200,15 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
|
|||||||
ReadParameter(param, "MakeImage", "Brightness", false);
|
ReadParameter(param, "MakeImage", "Brightness", false);
|
||||||
// ReadParameter(param, "MakeImage", "Contrast", false);
|
// ReadParameter(param, "MakeImage", "Contrast", false);
|
||||||
// ReadParameter(param, "MakeImage", "Saturation", false);
|
// ReadParameter(param, "MakeImage", "Saturation", false);
|
||||||
var textToSave = setConfigParameters(param);
|
|
||||||
FileDeleteOnServer("/config/config.ini", basepath);
|
|
||||||
FileSendContent(textToSave, "/config/config.ini", basepath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var canvas = document.getElementById("canvas");
|
var canvas = document.getElementById("canvas");
|
||||||
drawRotated(false);
|
drawRotated(false);
|
||||||
|
|
||||||
|
var textToSave = setConfigParameters(param);
|
||||||
|
FileDeleteOnServer("/config/config.ini", basepath);
|
||||||
|
FileSendContent(textToSave, "/config/config.ini", basepath);
|
||||||
|
|
||||||
SaveCanvasToImage(canvas, "/config/reference.jpg", true, basepath);
|
SaveCanvasToImage(canvas, "/config/reference.jpg", true, basepath);
|
||||||
showReference();
|
showReference();
|
||||||
UpdatePage();
|
UpdatePage();
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ p {font-size: 1em;}
|
|||||||
<body style="font-family: arial">
|
<body style="font-family: arial">
|
||||||
|
|
||||||
<h4>Reference Image</h4>
|
<h4>Reference Image</h4>
|
||||||
The reference image is needed to define the digits, counters and references for alignment.
|
The reference image is the base to define the digits, counters and references positions.
|
||||||
<p>
|
<p>
|
||||||
The last taken raw image from the camera is taken. Use the Button "Create New Reference" to make your own reference.<br>
|
Firstly you see the default image. Use the Button "Create New Reference" to start to create your own reference image.<br>
|
||||||
Most important feature is a straight alignment of the image. Use the Pre roate Angle and the fine alignment to fine tune the rotation of the image<br>
|
Most important feature is a straight alignment of the image. Use the Pre-rotate angle and the fine alignment to adjust the rotation of the image<br>
|
||||||
Finish the step by pushing <b>"Update Reference Image"</b>.
|
Store the reference image by pushing <b>"Update Reference Image"</b>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ function getbasepath(){
|
|||||||
{
|
{
|
||||||
// host = "http://192.168.2.118"; // jomjol interner test
|
// host = "http://192.168.2.118"; // jomjol interner test
|
||||||
// host = "http://192.168.178.26"; // jomjol interner test
|
// host = "http://192.168.178.26"; // jomjol interner test
|
||||||
host = "http://192.168.178.22"; // jomjol interner Real
|
host = "http://192.168.178.26"; // jomjol interner Real
|
||||||
// host = "."; // jomjol interner localhost
|
// host = "."; // jomjol interner localhost
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ var digitsEnabled = false;
|
|||||||
var posDigitsHeader;
|
var posDigitsHeader;
|
||||||
|
|
||||||
function MakeRefZW(zw, _basepath){
|
function MakeRefZW(zw, _basepath){
|
||||||
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw_org.jpg&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
|
_filetarget = zw["name"].replace("/config/", "/img_tmp/");
|
||||||
|
_filetarget = _filetarget.replace(".jpg", "_org.jpg");
|
||||||
|
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out="+_filetarget+"&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
try {
|
try {
|
||||||
xhttp.open("GET", url, false);
|
xhttp.open("GET", url, false);
|
||||||
@@ -22,18 +24,30 @@ function MakeRefZW(zw, _basepath){
|
|||||||
catch (error)
|
catch (error)
|
||||||
{
|
{
|
||||||
// alert("Deleting Config.ini failed");
|
// alert("Deleting Config.ini failed");
|
||||||
}
|
}
|
||||||
FileCopyOnServer("/img_tmp/ref_zw_org.jpg", "/img_tmp/ref_zw.jpg", _basepath);
|
_filetarget2 = zw["name"].replace("/config/", "/img_tmp/");
|
||||||
|
// _filetarget2 = _filetarget2.replace(".jpg", "_org.jpg");
|
||||||
|
FileCopyOnServer(_filetarget, _filetarget2, _basepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetCoordinates(index, _basepath){
|
function CopyReferenceToImgTmp(_basepath)
|
||||||
FileCopyOnServer(ref[index]["name"], "/img_tmp/ref_zw.jpg", _basepath);
|
{
|
||||||
|
for (index = 0; index < 2; ++index)
|
||||||
|
{
|
||||||
|
_filenamevon = ref[index]["name"];
|
||||||
|
_filenamenach = _filenamevon.replace("/config/", "/img_tmp/");
|
||||||
|
FileDeleteOnServer(_filenamenach, _basepath);
|
||||||
|
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
|
||||||
|
|
||||||
|
_filenamevon = _filenamevon.replace(".jpg", "_org.jpg");
|
||||||
|
_filenamenach = _filenamenach.replace(".jpg", "_org.jpg");
|
||||||
|
FileDeleteOnServer(_filenamenach, _basepath);
|
||||||
|
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FileDeleteOnServer("/img_tmp/ref_zw_org.jpg", _basepath);
|
function GetReferencesInfo(){
|
||||||
var namezw = ref[index]["name"].replace(".jpg", "_org.jpg");
|
return ref;
|
||||||
FileCopyOnServer(namezw, "/img_tmp/ref_zw_org.jpg", _basepath);
|
|
||||||
|
|
||||||
return ref[index];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function ParseConfigAlignment(_aktline){
|
function ParseConfigAlignment(_aktline){
|
||||||
@@ -321,21 +335,31 @@ function UpdateConfigFileReferenceChange(_basepath){
|
|||||||
SaveConfigToServer(_basepath);
|
SaveConfigToServer(_basepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdateConfig(zw, _index, _enhance, _basepath){
|
function UpdateConfigReference(zw, _basepath){
|
||||||
var zeile = zw["name"] + " " + zw["x"] + " " + zw["y"];
|
for (var index = 0; index < 2; ++index)
|
||||||
var _pos = ref[_index]["pos_ref"];
|
{
|
||||||
config_split[_pos] = zeile;
|
var zeile = zw[index]["name"] + " " + zw[index]["x"] + " " + zw[index]["y"];
|
||||||
|
var _pos = zw[index]["pos_ref"];
|
||||||
|
config_split[_pos] = zeile;
|
||||||
|
|
||||||
|
_filenamenach = ref[index]["name"];
|
||||||
|
_filenamevon = _filenamenach.replace("/config/", "/img_tmp/");
|
||||||
|
FileDeleteOnServer(_filenamenach, _basepath);
|
||||||
|
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
|
||||||
|
|
||||||
|
_filenamenach = _filenamenach.replace(".jpg", "_org.jpg");
|
||||||
|
_filenamevon = _filenamevon.replace(".jpg", "_org.jpg");
|
||||||
|
FileDeleteOnServer(_filenamenach, _basepath);
|
||||||
|
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
SaveConfigToServer(_basepath);
|
SaveConfigToServer(_basepath);
|
||||||
|
|
||||||
var namezw = zw["name"];
|
|
||||||
FileCopyOnServer("/img_tmp/ref_zw.jpg", namezw, _basepath);
|
|
||||||
var namezw = zw["name"].replace(".jpg", "_org.jpg");
|
|
||||||
FileCopyOnServer("/img_tmp/ref_zw_org.jpg", namezw, _basepath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function MakeContrastImageZW(zw, _enhance, _basepath){
|
function MakeContrastImageZW(zw, _enhance, _basepath){
|
||||||
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw.jpg" + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
|
_filename = zw["name"].replace("/config/", "/img_tmp/");
|
||||||
|
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=" + _filename + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
|
||||||
if (_enhance == true){
|
if (_enhance == true){
|
||||||
url = url + "&enhance=true";
|
url = url + "&enhance=true";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ function loadConfig(_basepath) {
|
|||||||
xhttp.open("GET", url, false);
|
xhttp.open("GET", url, false);
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
config_gesamt = xhttp.responseText;
|
config_gesamt = xhttp.responseText;
|
||||||
|
config_gesamt = config_gesamt.replace("InitalRotate", "InitialRotate"); // Korrigiere Schreibfehler in config.ini !!!!!
|
||||||
}
|
}
|
||||||
catch (error)
|
catch (error)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
5.4.0
|
6.4.1
|
||||||
|
|||||||
Reference in New Issue
Block a user