Compare commits

..

4 Commits

Author SHA1 Message Date
CaCO3
4e1df4a0db changed log message 2024-10-06 16:49:48 +02:00
CaCO3
b34fdd937b log the uncatched MQTT connection error 2024-10-06 16:44:43 +02:00
CaCO3
775f9dcb14 Merge branch 'main' of https://github.com/jomjol/AI-on-the-edge-device 2024-10-06 16:43:51 +02:00
CaCO3
47c5a92648 updated changelog 2024-10-05 22:42:51 +02:00
29 changed files with 21 additions and 258 deletions

View File

@@ -53,7 +53,6 @@ jobs:
./code/.pio/build/esp32cam/partitions.bin ./code/.pio/build/esp32cam/partitions.bin
./code/.pio/build/esp32cam/bootloader.bin ./code/.pio/build/esp32cam/bootloader.bin
./html/* ./html/*
./demo/*
key: generated-files-${{ github.run_id }} key: generated-files-${{ github.run_id }}
restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache
@@ -88,11 +87,6 @@ jobs:
echo "Replacing variables..." echo "Replacing variables..."
cd html; find . -type f -exec sed -i 's/$COMMIT_HASH/${{ steps.vars.outputs.sha_short }}/g' {} \; cd html; find . -type f -exec sed -i 's/$COMMIT_HASH/${{ steps.vars.outputs.sha_short }}/g' {} \;
- name: Prepare Demo mode files
run: |
rm -rf ./demo
mkdir demo
cp -r ./sd-card/demo/* ./demo/
######################################################################################### #########################################################################################
## Pack for Update ## Pack for Update
@@ -103,7 +97,6 @@ jobs:
# - /firmware.bin # - /firmware.bin
# - (optional) /html/* (inkl. subfolders) # - (optional) /html/* (inkl. subfolders)
# - (optional) /config/*.tfl # - (optional) /config/*.tfl
# - (optional) /demo/*
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: build needs: build
@@ -118,7 +111,6 @@ jobs:
./code/.pio/build/esp32cam/partitions.bin ./code/.pio/build/esp32cam/partitions.bin
./code/.pio/build/esp32cam/bootloader.bin ./code/.pio/build/esp32cam/bootloader.bin
./html/* ./html/*
./demo/*
key: generated-files-${{ github.run_id }} key: generated-files-${{ github.run_id }}
restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache
@@ -143,9 +135,6 @@ jobs:
- name: Add Web UI to update - name: Add Web UI to update
run: cp -r ./html ./update/ run: cp -r ./html ./update/
- name: Add Demo mode files to update
run: cp -r ./demo ./update/
- name: Add CNN to update - name: Add CNN to update
run: | run: |
@@ -169,7 +158,6 @@ jobs:
# remote_setup__version.zip file with following content: # remote_setup__version.zip file with following content:
# - /firmware.bin # - /firmware.bin
# - /html/* (inkl. subfolders) # - /html/* (inkl. subfolders)
# - /demo/*
# - /config/* # - /config/*
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: build needs: build
@@ -185,7 +173,6 @@ jobs:
./code/.pio/build/esp32cam/partitions.bin ./code/.pio/build/esp32cam/partitions.bin
./code/.pio/build/esp32cam/bootloader.bin ./code/.pio/build/esp32cam/bootloader.bin
./html/* ./html/*
./demo/*
key: generated-files-${{ github.run_id }} key: generated-files-${{ github.run_id }}
restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache
@@ -210,9 +197,6 @@ jobs:
- name: Add Web UI to remote_setup - name: Add Web UI to remote_setup
run: cp -r ./html ./remote_setup/ run: cp -r ./html ./remote_setup/
- name: Add Demo mode files to update
run: cp -r ./demo ./update/
- name: Add whole config folder to remote_setup - name: Add whole config folder to remote_setup
run: | run: |
rm -rf ./remote_setup/config/ rm -rf ./remote_setup/config/
@@ -245,7 +229,6 @@ jobs:
./code/.pio/build/esp32cam/partitions.bin ./code/.pio/build/esp32cam/partitions.bin
./code/.pio/build/esp32cam/bootloader.bin ./code/.pio/build/esp32cam/bootloader.bin
./html/* ./html/*
./demo/*
key: generated-files-${{ github.run_id }} key: generated-files-${{ github.run_id }}
restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache restore-keys: generated-files # This matches above key as it is only used as a prefix. it the restores the nearest cache, see https://github.com/restore-keys:/blob/main/tips-and-workarounds.md#update-a-cache
@@ -274,9 +257,7 @@ jobs:
cp -f "./code/.pio/build/esp32cam/bootloader.bin" "manual_setup/bootloader.bin" cp -f "./code/.pio/build/esp32cam/bootloader.bin" "manual_setup/bootloader.bin"
cp -f "./code/.pio/build/esp32cam/partitions.bin" "manual_setup/partitions.bin" cp -f "./code/.pio/build/esp32cam/partitions.bin" "manual_setup/partitions.bin"
rm -rf ./sd-card/html rm -rf ./sd-card/html
rm -rf ./sd-card/demo
cp -r ./html ./sd-card/ # Overwrite the Web UI with the preprocessed files cp -r ./html ./sd-card/ # Overwrite the Web UI with the preprocessed files
cp -r ./demo ./sd-card/
cd sd-card; zip -r ../manual_setup/sd-card.zip *; cd .. cd sd-card; zip -r ../manual_setup/sd-card.zip *; cd ..
cd ./manual_setup cd ./manual_setup
@@ -290,7 +271,7 @@ jobs:
######################################################################################### #########################################################################################
## Prepare and create release ## Prepare and create release
######################################################################################### #########################################################################################
prepare-release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [pack-for-update, pack-for-manual_setup, pack-for-remote_setup] needs: [pack-for-update, pack-for-manual_setup, pack-for-remote_setup]
if: startsWith(github.ref, 'refs/tags/') if: startsWith(github.ref, 'refs/tags/')
@@ -390,34 +371,13 @@ jobs:
# git push origin HEAD:master # git push origin HEAD:master
#########################################################################################
## Update Contributors List in README.md on a release
#########################################################################################
contrib-readme-job:
if: github.event_name == 'release' && github.event.action == 'published' # Only run on release but not on prerelease
needs: [prepare-release]
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Contribute List
uses: akhilmhdh/contributors-readme-action@v2.3.10
with:
image_size: 50
use_username: true
columns_per_row: 8
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
######################################################################################### #########################################################################################
## Update the Web Installer on a release ## Update the Web Installer on a release
######################################################################################### #########################################################################################
# Make sure to also update update-webinstaller.yml! # Make sure to also update update-webinstaller.yml!
update-web-installer: update-web-installer:
if: github.event_name == 'release' && github.event.action == 'published' # Only run on release but not on prerelease if: github.event_name == 'release' && github.event.action == 'published' # Only run on release but not on prerelease
needs: [prepare-release] needs: [release]
environment: environment:
name: github-pages name: github-pages
url: ${{ steps.deployment.outputs.page_url }} url: ${{ steps.deployment.outputs.page_url }}

View File

@@ -1,22 +1,3 @@
## [16.0.0-RC4] - 2024-10-06
For a full list of changes see [Full list of changes](https://github.com/jomjol/AI-on-the-edge-device/compare/v15.7.0...v16.0.0-RC1)
#### Known issues
Please check the [issues](https://github.com/jomjol/AI-on-the-edge-device/issues) and
[discussions](https://github.com/jomjol/AI-on-the-edge-device/discussions) before reporting a new issue.
#### Core Changes
Only changes since RC2 are listed:
- Update esp32-camera submodule to `v2.0.13` (#3316)
- Added contributor list (#3317)
- Added files for demo mode (#3315)
#### Bug Fixes
Only changes since RC2 are listed:
- Added delay in InitCam (#3313) to fix `Camera not detected` issues
## [16.0.0-RC3] - 2024-10-05 ## [16.0.0-RC3] - 2024-10-05
For a full list of changes see [Full list of changes](https://github.com/jomjol/AI-on-the-edge-device/compare/v15.7.0...v16.0.0-RC1) For a full list of changes see [Full list of changes](https://github.com/jomjol/AI-on-the-edge-device/compare/v15.7.0...v16.0.0-RC1)

View File

@@ -2,11 +2,11 @@
<img src="images/icon/watermeter.svg" width="100px"> <img src="images/icon/watermeter.svg" width="100px">
Artificial intelligence based systems have become established in our everyday lives. Just think of speech or image recognition. Most of the systems rely on either powerful processors or a direct connection to the cloud for doing the calculations there. With the increasing power of modern processors, the AI systems are coming closer to the end user which is usually called **edge computing**. Artificial intelligence based systems have become established in our everyday lives. Just think of speech or image recognition. Most of the systems rely on either powerful processors or a direct connection to the cloud for doing the calculations there. With the increasing power of modern processors, the AI systems are coming closer to the end user which is usually called **edge computing**.
In this project, edge computing is demonstrated through a practical example, where an AI network is implemented on an ESP32 device, hence: **AI on the edge**. Here, this edge computing is put into a practically oriented example, where an AI network is implemented on an ESP32 device so: **AI on the edge**.
This project allows you to digitize your **analog** water, gas, power and other meters using cheap and easily available hardware. This project allows you to digitize your **analog** water, gas, power and other meters using cheap and easily available hardware.
All you need is an [ESP32 board with a supported camera](https://jomjol.github.io/AI-on-the-edge-device-docs/Hardware-Compatibility/) and some practical skills. All you need is an [ESP32 board with a supported camera](https://jomjol.github.io/AI-on-the-edge-device-docs/Hardware-Compatibility/) and something of a practical hand.
<img src="images/esp32-cam.png" width="200px"> <img src="images/esp32-cam.png" width="200px">
@@ -17,13 +17,13 @@ All you need is an [ESP32 board with a supported camera](https://jomjol.github.i
- Integrated camera and illumination - Integrated camera and illumination
- Web interface for administration and control - Web interface for administration and control
- OTA interface for updating directly via the web interface - OTA interface for updating directly via the web interface
- Full integration with Home Assistant - Full integration into Homeassistant
- Support for Influx DB 1 and 2 - Support for Influx DB 1 and 2
- MQTT - MQTT
- REST API - REST API
## Workflow ## Workflow
The device captures a photo of your meter at set intervals. It then extracts the Regions of Interest (ROIs) from the image and runs them through artificial intelligence. As a result, you get the digitized value of your meter. The device takes a photo of your meter at a defined interval. It then extracts the Regions of Interest (ROIs) from the image and runs them through artificial intelligence. As a result, you get the digitized value of your meter.
There are several options for what to do with that value. Either send it to an MQTT broker, write it to an InfluxDb or simply provide access to it via a REST API. There are several options for what to do with that value. Either send it to an MQTT broker, write it to an InfluxDb or simply provide access to it via a REST API.
@@ -74,7 +74,7 @@ See the [documentation](https://jomjol.github.io/AI-on-the-edge-device-docs/Inst
### Flashing the SD Card ### Flashing the SD Card
The SD card can be setup automatically after the firmware got installed. See the [documentation](https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#remote-setup-using-the-built-in-access-point) for details. For this to work, the SD card must be FAT formated (which is the default on a new SD card). The SD card can be setup automatically after the firmware got installed. See the [documentation](https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#remote-setup-using-the-built-in-access-point) for details. For this to work, the SD card must be FAT formated (which is the default on a new SD card).
Alternatively, the SD card still can be set up manually, see the [documentation](https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#3-sd-card) for details! Alternatively the SD card still can be setup manually, see the [documentation](https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#3-sd-card) for details!
## Casing ## Casing
Various 3D-printable housing can be found here: Various 3D-printable housing can be found here:
@@ -89,7 +89,7 @@ If you would like to support the developer with a cup of coffee, you can do that
<a href="https://www.paypal.com/donate?hosted_button_id=8TRSVYNYKDSWL"><img border="0" src="images/paypal.png" width="200px" target="_blank"></a> <a href="https://www.paypal.com/donate?hosted_button_id=8TRSVYNYKDSWL"><img border="0" src="images/paypal.png" width="200px" target="_blank"></a>
## Support ## Support
If you have any technical problems please search the [discussions](https://github.com/jomjol/AI-on-the-edge-device/discussions). In case you found a bug or have a feature request, please open an [issue](https://github.com/jomjol/AI-on-the-edge-device/issues). If you have any technical problems please search the [discussions](https://github.com/jomjol/AI-on-the-edge-device/discussions). In case you found a ug or have a feature request, please open an [issue](https://github.com/jomjol/AI-on-the-edge-device/issues).
In other cases you can contact the developer via email: <img src="https://raw.githubusercontent.com/jomjol/AI-on-the-edge-device/master/images/mail.jpg" height="25"> In other cases you can contact the developer via email: <img src="https://raw.githubusercontent.com/jomjol/AI-on-the-edge-device/master/images/mail.jpg" height="25">
@@ -106,10 +106,3 @@ See [Build Instructions](code/README.md).
## Additional Ideas ## Additional Ideas
There are some ideas and feature requests which are not currently being pursued mainly due to capacity reasons on the part of the developers. There are some ideas and feature requests which are not currently being pursued mainly due to capacity reasons on the part of the developers.
They features are collected in the [issues](https://github.com/jomjol/AI-on-the-edge-device/issues) and in [FeatureRequest.md](FeatureRequest.md). They features are collected in the [issues](https://github.com/jomjol/AI-on-the-edge-device/issues) and in [FeatureRequest.md](FeatureRequest.md).
## Our Contributors ❤️
<!-- Autogenerated table, do not manually update!
It gets automatically updated on the next release.
See https://github.com/marketplace/actions/contribute-list -->
<!-- readme: contributors -start -->
<!-- readme: contributors -end -->

View File

@@ -122,18 +122,12 @@ esp_err_t CCamera::InitCam(void)
{ {
ESP_LOGD(TAG, "Init Camera"); ESP_LOGD(TAG, "Init Camera");
TickType_t cam_xDelay = 100 / portTICK_PERIOD_MS;
CCstatus.ImageQuality = camera_config.jpeg_quality; CCstatus.ImageQuality = camera_config.jpeg_quality;
CCstatus.ImageFrameSize = camera_config.frame_size; CCstatus.ImageFrameSize = camera_config.frame_size;
// De-init in case it was already initialized
esp_camera_deinit();
vTaskDelay(cam_xDelay);
// initialize the camera // initialize the camera
esp_camera_deinit(); // De-init in case it was already initialized
esp_err_t err = esp_camera_init(&camera_config); esp_err_t err = esp_camera_init(&camera_config);
vTaskDelay(cam_xDelay);
if (err != ESP_OK) if (err != ESP_OK)
{ {
@@ -286,8 +280,8 @@ esp_err_t CCamera::setSensorDatenFromCCstatus(void)
s->set_dcw(s, CCstatus.ImageDcw); // 0 = disable , 1 = enable s->set_dcw(s, CCstatus.ImageDcw); // 0 = disable , 1 = enable
TickType_t cam_xDelay = 100 / portTICK_PERIOD_MS; TickType_t xDelay2 = 100 / portTICK_PERIOD_MS;
vTaskDelay(cam_xDelay); vTaskDelay(xDelay2);
return ESP_OK; return ESP_OK;
} }

View File

@@ -174,8 +174,7 @@ static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event) {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Connection refused, not authorized. Check username/password (0x05)"); LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Connection refused, not authorized. Check username/password (0x05)");
} }
else { else {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Other event id:" + event->error_handle->connect_return_code); LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Connection Refused with unknown event id:" + std::to_string(event->error_handle->connect_return_code));
ESP_LOGE(TAG, "Other event id:%d", event->error_handle->connect_return_code);
} }
#ifdef DEBUG_DETAIL_ON #ifdef DEBUG_DETAIL_ON

View File

@@ -38,7 +38,7 @@ Demo = false
InitialRotate = 0.0 InitialRotate = 0.0
SearchFieldX = 20 SearchFieldX = 20
SearchFieldY = 20 SearchFieldY = 20
AlignmentAlgo = default AlignmentAlgo = Default
/config/ref0.jpg 103 271 /config/ref0.jpg 103 271
/config/ref1.jpg 442 142 /config/ref1.jpg 442 142
@@ -91,17 +91,16 @@ HomeassistantDiscovery = false
;[InfluxDB] ;[InfluxDB]
;Uri = undefined ;Uri = undefined
;Database = undefined ;Database = undefined
;Measurement = undefined
;user = undefined ;user = undefined
;password = undefined ;password = undefined
;main.Measurement = undefined
;main.Field = undefined
;[InfluxDBv2] ;[InfluxDBv2]
;Uri = undefined ;Uri = undefined
;Bucket = undefined ;Bucket = undefined
;Measurement = undefined
;Org = undefined ;Org = undefined
;Token = undefined ;Token = undefined
;main.Measurement = undefined
;main.Field = undefined ;main.Field = undefined
;[Webhook] ;[Webhook]
@@ -116,7 +115,7 @@ HomeassistantDiscovery = false
;IO3 = input disabled 10 false false ;IO3 = input disabled 10 false false
;IO4 = built-in-led disabled 10 false false ;IO4 = built-in-led disabled 10 false false
;IO12 = input-pullup disabled 10 false false ;IO12 = input-pullup disabled 10 false false
;IO13 = input-pullup disabled 10 false false ;IO13 = input-pullup disabled 10 false false
LEDType = WS2812 LEDType = WS2812
LEDNumbers = 2 LEDNumbers = 2
LEDColor = 150 150 150 LEDColor = 150 150 150
@@ -139,5 +138,4 @@ TimeZone = CET-1CEST,M3.5.0,M10.5.0/3
;Hostname = undefined ;Hostname = undefined
RSSIThreshold = -75 RSSIThreshold = -75
CPUFrequency = 160 CPUFrequency = 160
Tooltip = true
SetupMode = true SetupMode = true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -1,137 +0,0 @@
[TakeImage]
;RawImagesLocation = /log/source
;RawImagesRetention = 15
WaitBeforeTakingPicture = 2
CamGainceiling = x8
CamQuality = 10
CamBrightness = 0
CamContrast = 0
CamSaturation = 0
CamSharpness = 0
CamAutoSharpness = false
CamSpecialEffect = no_effect
CamWbMode = auto
CamAwb = true
CamAwbGain = true
CamAec = true
CamAec2 = true
CamAeLevel = 2
CamAecValue = 600
CamAgc = true
CamAgcGain = 8
CamBpc = true
CamWpc = true
CamRawGma = true
CamLenc = true
CamHmirror = false
CamVflip = false
CamDcw = true
CamDenoise = 0
CamZoom = false
CamZoomOffsetX = 0
CamZoomOffsetY = 0
CamZoomSize = 0
LEDIntensity = 0
Demo = true
[Alignment]
InitialRotate = -34.6
SearchFieldX = 20
SearchFieldY = 20
AlignmentAlgo = default
/config/ref0.jpg 30 189
/config/ref1.jpg 536 113
[Digits]
Model = /config/dig-cont_0710_s3_q.tflite
CNNGoodThreshold = 0.5
;ROIImagesLocation = /log/digit
;ROIImagesRetention = 3
main.dig1 438 62 49 71 false
[Analog]
Model = /config/ana-cont_1300_s2.tflite
;ROIImagesLocation = /log/analog
;ROIImagesRetention = 3
main.ana1 452 199 120 120 false
[PostProcessing]
main.DecimalShift = 0
;main.AnalogToDigitTransitionStart =
main.ChangeRateThreshold = 2
PreValueUse = true
PreValueAgeStartup = 720
main.AllowNegativeRates = true
;main.MaxRateValue = 0
;main.MaxRateType = AbsoluteChange
main.ExtendedResolution = true
main.IgnoreLeadingNaN = false
ErrorMessage = true
CheckDigitIncreaseConsistency = false
;[MQTT]
;Uri = mqtt://IP-ADRESS:1883
;MainTopic = watermeter
;ClientID = watermeter
;user = USERNAME
;password = PASSWORD
RetainMessages = false
HomeassistantDiscovery = false
;MeterType = other
;CACert = /config/certs/RootCA.pem
;ClientCert = /config/certs/client.pem.crt
;ClientKey = /config/certs/client.pem.key
;[InfluxDB]
;Uri = undefined
;Database = undefined
;user = undefined
;password = undefined
;main.Measurement = undefined
;main.Field =
;[InfluxDBv2]
;Uri = undefined
;Bucket = undefined
;Org = undefined
;Token = undefined
;main.Measurement = undefined
;main.Field = undefined
;[Webhook]
;Uri = undefined
;ApiKey = undefined
;UploadImg = 0
;[GPIO]
;IO0 = input disabled 10 false false
;IO1 = input disabled 10 false false
;IO3 = input disabled 10 false false
;IO4 = built-in-led disabled 10 false false
;IO12 = input-pullup disabled 10 false false
;IO13 = input-pullup disabled 10 false false
LEDType = WS2812
LEDNumbers = 2
LEDColor = 150 150 150
[AutoTimer]
AutoStart = true
Interval = 1
[DataLogging]
DataLogActive = false
DataFilesRetention = 3
[Debug]
LogLevel = 3
LogfilesRetention = 3
[System]
Tooltip = true
TimeZone = CET-1CEST,M3.5.0,M10.5.0/3
;TimeServer = pool.ntp.org
;Hostname = undefined
RSSIThreshold = -75
CPUFrequency = 160
SetupMode = false

View File

@@ -1,12 +0,0 @@
530.07077.jpg
530.07325.jpg
530.12067.jpg
530.21419.jpg
530.48435.jpg
530.70265.jpg
530.95675.jpg
531.10877.jpg
531.24108.jpg
531.38301.jpg
531.63071.jpg
531.82235.jpg

0
sd-card/demo/leer.txt Normal file
View File

View File

@@ -1 +0,0 @@
main 2024-10-06T23:02:42+0200 0.05

View File

@@ -1,12 +0,0 @@
This folder contains a prepared demo setup.
All you need to do is:
1. Copy the following files to the config folder of your SD-Card:
- config.ini
- ref0.jpg
- ref1.jpg
- reference.jpg
- prevalue.ini
1. Restart the device
More details at https://jomjol.github.io/AI-on-the-edge-device-docs/Demo-Mode

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -2555,7 +2555,7 @@ function UpdateExpertModus() {
_style_pur = ''; _style_pur = '';
_hidden = false; _hidden = false;
document.getElementById("Button_Edit_Config_Raw").style.display = ""; document.getElementById("Button_Edit_Config_Raw").style.display = "";
firework.launch("Expert view activated. Please use it carefully", 'warning', 5000); firework.launch("Expert view activated. Please use carefully", 'warning', 5000);
} }
else { else {
document.getElementById("Button_Edit_Config_Raw").style.display = "none"; document.getElementById("Button_Edit_Config_Raw").style.display = "none";
@@ -2821,7 +2821,7 @@ function camSettingsSet(){
} }
catch (error){} catch (error){}
document.getElementById("overlaytext").innerHTML = "Device is busy, please wait.<br><br>Current step: " + _xhttp.responseText; document.getElementById("overlaytext").innerHTML = "Device is busy, plase waiting...<br><br>Current step: " + _xhttp.responseText;
console.log("Device is busy, waiting 2s then checking again..."); console.log("Device is busy, waiting 2s then checking again...");
await sleep(2000); await sleep(2000);
} }

View File

@@ -617,7 +617,7 @@
} }
catch (error){} catch (error){}
document.getElementById("overlaytext").innerHTML = "Device is busy, please wait.<br><br>Current step: " + _xhttp.responseText; document.getElementById("overlaytext").innerHTML = "Device is busy, plase waiting...<br><br>Current step: " + _xhttp.responseText;
console.log("Device is busy, waiting 5s then checking again..."); console.log("Device is busy, waiting 5s then checking again...");
await sleep(2000); await sleep(2000);
} }
@@ -1053,7 +1053,7 @@
if (document.getElementById("ExpertModus_enabled").checked) { if (document.getElementById("ExpertModus_enabled").checked) {
_style_pur = ''; _style_pur = '';
_hidden = false; _hidden = false;
firework.launch("Expert parameter view activated. Please use it carefully", 'warning', 5000); firework.launch("Expert parameter view activated. Please use carefully", 'warning', 5000);
} }
const expert = document.querySelectorAll(".expert"); const expert = document.querySelectorAll(".expert");