diff --git a/PowerControlHub/PowerControlHub.vcxproj b/PowerControlHub/PowerControlHub.vcxproj
index cc96c4d..55ac48c 100644
--- a/PowerControlHub/PowerControlHub.vcxproj
+++ b/PowerControlHub/PowerControlHub.vcxproj
@@ -307,7 +307,7 @@
VisualMicroDebugger
- $(ProjectDir)..\PowerControlHub;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SerialCommandManager\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SensorManager\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SdFat\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\SPI\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\WiFi\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\Network\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\NextionControl\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\TinyGPSPlus\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\EEPROM\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\HTTPClient\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\NetworkClientSecure\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\Update\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\Ds1302\src;$(ProjectDir)..\..\..\program files\microsoft visual studio\18\insiders\common7\ide\extensions\hti01q5k.0wk\Micro Platforms\default;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\dio_qspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\cores\esp32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\variants\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\newlib\platform_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\esp_additions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\dma\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\ldo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\debug_probe\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\tuning_scheme_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\power_supply\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\tlsf;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\register;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\platform_port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\port\include\private;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\deprecated_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_timer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps\sntp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\lwip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\arch;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\sys;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\gemmlowp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\flatbuffers\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\ruy;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\kissfft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\driver\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\conversions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\deprecated;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_pm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_ringbuf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gpio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_pcnt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gptimer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_spi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_mcpwm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ana_cmpr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2s\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_dac\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_rmt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_tsens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_uart\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\vfs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ledc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_parlio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_usb_serial_jtag\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\app\ember_coupling;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib\dnssd;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\OpenThread;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\jsoncpp\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlfaultinjection\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlassert\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlio\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\zzz_generated\app-common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-idf\espressif__esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\zap_common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\utils;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_bridge;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\nimble;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\route_hook;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_eth\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_event\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\include\esp32c3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\osi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\api\include\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\blufi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\hci_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\ble_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\storage;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\dfu;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\mbt;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ans\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\bas\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\dis\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gatt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\htp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ias\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ipss\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\lls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\prox\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cts\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\tps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\sps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cte\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\util\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\ram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ras\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\porting\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\npl\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\esp-hci\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include\local;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\nan_app\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_netif\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\library;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\esp_crt_bundle\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\everest\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\diskio;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\vfs;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wear_levelling\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_partition\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\bootloader_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_app_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_bootloader_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_vfs_console\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spi_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_secure_cert_mgr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_parser\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__jsmn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spiffs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_generator\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\json\cJSON;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__mdns\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_delta_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_encrypted_img\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_insights\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diagnostics\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\esp-tts\esp_tts_chinese\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_mm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_security\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\pthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\xip_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_trace\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\esp_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_coex\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_gdbstub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\unity\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\cmock\CMock\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_bitscrambler\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\http_parser;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls\esp-tls-crypto;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\deprecated\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_isp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\dvp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ppa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\hw_ver2\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hal_ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\tcp_transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\rgb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protobuf-c\protobuf-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\security;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\transports;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\crypto\srp6a;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\proto-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_local_ctrl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include\port\xtensa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mqtt\esp-mqtt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_sec_provider\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\perfmon\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\rt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\touch_element\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\usb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wifi_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\src\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__rmaker_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__cbor\tinycbor\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\src\rtc_store;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rcp_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base\isa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dotprod\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\mem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\hann\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_harris\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\flat_top\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\iir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sqrt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fft\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dct\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\conv\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf_imu13states\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\chmorgan__esp-libhelix-mp3\libhelix-mp3\pub;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-modbus\freemodbus\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zboss-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include\radio_spinel;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\port_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\libsodium\src\libsodium\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\command\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_schedule\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__network_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rainmaker\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__qrcode\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\joltwallet__littlefs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\tinyusb\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fb_gfx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\xtensa-esp-elf\esp32s3\no-rtti;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\backward;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include-fixed;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SerialCommandManager\src
+ $(ProjectDir)..\..\..\program files\microsoft visual studio\18\insiders\common7\ide\extensions\hti01q5k.0wk\Micro Platforms\default;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\dio_qspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\cores\esp32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\variants\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\newlib\platform_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\esp_additions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\dma\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\ldo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\debug_probe\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\tuning_scheme_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\power_supply\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\tlsf;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\register;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\platform_port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\port\include\private;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\deprecated_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_timer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps\sntp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\lwip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\arch;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\sys;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\gemmlowp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\flatbuffers\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\ruy;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\kissfft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\driver\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\conversions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\deprecated;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_pm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_ringbuf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gpio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_pcnt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gptimer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_spi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_mcpwm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ana_cmpr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2s\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_dac\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_rmt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_tsens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_uart\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\vfs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ledc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_parlio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_usb_serial_jtag\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\app\ember_coupling;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib\dnssd;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\OpenThread;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\jsoncpp\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlfaultinjection\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlassert\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlio\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\zzz_generated\app-common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-idf\espressif__esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\zap_common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\utils;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_bridge;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\nimble;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\route_hook;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_eth\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_event\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\include\esp32c3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\osi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\api\include\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\blufi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\hci_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\ble_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\storage;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\dfu;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\mbt;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ans\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\bas\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\dis\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gatt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\htp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ias\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ipss\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\lls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\prox\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cts\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\tps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\sps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cte\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\util\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\ram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ras\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\porting\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\npl\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\esp-hci\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include\local;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\nan_app\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_netif\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\library;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\esp_crt_bundle\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\everest\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\diskio;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\vfs;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wear_levelling\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_partition\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\bootloader_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_app_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_bootloader_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_vfs_console\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spi_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_secure_cert_mgr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_parser\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__jsmn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spiffs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_generator\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\json\cJSON;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__mdns\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_delta_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_encrypted_img\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_insights\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diagnostics\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\esp-tts\esp_tts_chinese\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_mm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_security\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\pthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\xip_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_trace\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\esp_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_coex\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_gdbstub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\unity\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\cmock\CMock\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_bitscrambler\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\http_parser;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls\esp-tls-crypto;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\deprecated\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_isp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\dvp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ppa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\hw_ver2\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hal_ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\tcp_transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\rgb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protobuf-c\protobuf-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\security;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\transports;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\crypto\srp6a;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\proto-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_local_ctrl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include\port\xtensa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mqtt\esp-mqtt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_sec_provider\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\perfmon\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\rt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\touch_element\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\usb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wifi_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\src\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__rmaker_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__cbor\tinycbor\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\src\rtc_store;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rcp_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base\isa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dotprod\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\mem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\hann\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_harris\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\flat_top\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\iir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sqrt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fft\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dct\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\conv\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf_imu13states\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\chmorgan__esp-libhelix-mp3\libhelix-mp3\pub;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-modbus\freemodbus\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zboss-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include\radio_spinel;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\port_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\libsodium\src\libsodium\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\command\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_schedule\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__network_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rainmaker\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__qrcode\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\joltwallet__littlefs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\tinyusb\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fb_gfx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\xtensa-esp-elf\esp32s3\no-rtti;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\backward;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include-fixed;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SerialCommandManager\src
$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\bin\xtensa-esp32s3-elf-g++
$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\bin\xtensa-esp32s3-elf-g++
false
@@ -334,7 +334,7 @@
- $(ProjectDir)..\PowerControlHub;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SerialCommandManager\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SensorManager\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SdFat\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\SPI\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\WiFi\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\Network\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\NextionControl\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\TinyGPSPlus\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\EEPROM\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\HTTPClient\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\NetworkClientSecure\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\libraries\Update\src;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\Ds1302\src;$(ProjectDir)..\..\..\program files\microsoft visual studio\18\insiders\common7\ide\extensions\hti01q5k.0wk\Micro Platforms\default;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\dio_qspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\cores\esp32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\variants\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\newlib\platform_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\esp_additions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\dma\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\ldo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\debug_probe\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\tuning_scheme_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\power_supply\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\tlsf;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\register;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\platform_port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\port\include\private;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\deprecated_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_timer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps\sntp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\lwip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\arch;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\sys;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\gemmlowp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\flatbuffers\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\ruy;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\kissfft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\driver\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\conversions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\deprecated;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_pm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_ringbuf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gpio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_pcnt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gptimer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_spi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_mcpwm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ana_cmpr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2s\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_dac\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_rmt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_tsens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_uart\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\vfs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ledc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_parlio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_usb_serial_jtag\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\app\ember_coupling;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib\dnssd;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\OpenThread;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\jsoncpp\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlfaultinjection\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlassert\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlio\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\zzz_generated\app-common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-idf\espressif__esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\zap_common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\utils;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_bridge;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\nimble;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\route_hook;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_eth\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_event\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\include\esp32c3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\osi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\api\include\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\blufi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\hci_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\ble_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\storage;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\dfu;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\mbt;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ans\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\bas\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\dis\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gatt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\htp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ias\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ipss\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\lls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\prox\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cts\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\tps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\sps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cte\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\util\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\ram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ras\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\porting\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\npl\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\esp-hci\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include\local;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\nan_app\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_netif\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\library;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\esp_crt_bundle\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\everest\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\diskio;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\vfs;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wear_levelling\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_partition\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\bootloader_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_app_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_bootloader_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_vfs_console\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spi_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_secure_cert_mgr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_parser\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__jsmn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spiffs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_generator\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\json\cJSON;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__mdns\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_delta_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_encrypted_img\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_insights\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diagnostics\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\esp-tts\esp_tts_chinese\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_mm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_security\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\pthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\xip_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_trace\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\esp_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_coex\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_gdbstub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\unity\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\cmock\CMock\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_bitscrambler\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\http_parser;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls\esp-tls-crypto;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\deprecated\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_isp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\dvp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ppa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\hw_ver2\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hal_ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\tcp_transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\rgb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protobuf-c\protobuf-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\security;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\transports;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\crypto\srp6a;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\proto-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_local_ctrl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include\port\xtensa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mqtt\esp-mqtt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_sec_provider\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\perfmon\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\rt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\touch_element\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\usb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wifi_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\src\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__rmaker_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__cbor\tinycbor\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\src\rtc_store;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rcp_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base\isa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dotprod\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\mem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\hann\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_harris\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\flat_top\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\iir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sqrt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fft\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dct\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\conv\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf_imu13states\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\chmorgan__esp-libhelix-mp3\libhelix-mp3\pub;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-modbus\freemodbus\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zboss-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include\radio_spinel;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\port_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\libsodium\src\libsodium\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\command\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_schedule\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__network_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rainmaker\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__qrcode\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\joltwallet__littlefs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\tinyusb\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fb_gfx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\xtensa-esp-elf\esp32s3\no-rtti;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\backward;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include-fixed;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SerialCommandManager\src;%(AdditionalIncludeDirectories)
+ $(ProjectDir)..\..\..\program files\microsoft visual studio\18\insiders\common7\ide\extensions\hti01q5k.0wk\Micro Platforms\default;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\dio_qspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\cores\esp32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\hardware\esp32\3.3.8\variants\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\newlib\platform_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\config\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\portable\xtensa\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\esp_additions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\dma\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\ldo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\debug_probe\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\tuning_scheme_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\power_supply\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\port\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hw_support\mspi_timing_tuning\port\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\heap\tlsf;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\soc\esp32s3\register;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\platform_port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\hal\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_rom\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_system\port\include\private;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\xtensa\deprecated_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_timer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\include\apps\sntp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\lwip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\arch;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\lwip\port\esp32xx\include\sys;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\gemmlowp;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\flatbuffers\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\ruy;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-tflite-micro\third_party\kissfft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\driver\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp32-camera\conversions\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\deprecated;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\driver\touch_sensor\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_pm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_ringbuf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gpio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_pcnt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_gptimer\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_spi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_mcpwm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ana_cmpr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2s\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\sdmmc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdspi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_dac\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_rmt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_tsens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_sdm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_i2c\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_uart\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\vfs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ledc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_parlio\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_usb_serial_jtag\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_twai\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\app\ember_coupling;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\lib\dnssd;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\OpenThread;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\jsoncpp\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlfaultinjection\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlassert\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\third_party\nlio\repo\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\zzz_generated\app-common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-idf\espressif__esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\zap_common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter\utils;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_bridge;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_matter_console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\nimble;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_matter\connectedhomeip\connectedhomeip\src\platform\ESP32\route_hook;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_eth\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_event\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\include\esp32c3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\osi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\api\include\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\blufi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\btc\profile\esp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\hci_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\ble_log\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\core\storage;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\models\server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\api;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\core\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\api\models\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\btc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\dfu;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\esp_ble_mesh\v1.1\mbt;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\common\tinycrypt\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ans\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\bas\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\dis\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gap\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\gatt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\htp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ias\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ipss\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\lls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\prox\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cts\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\tps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\sps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\cte\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\util\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\ram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\store\config\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\host\services\ras\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\nimble\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\nimble\transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\porting\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\nimble\porting\npl\freertos\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bt\host\nimble\esp-hci\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\include\local;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_wifi\wifi_apps\nan_app\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_phy\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_netif\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\library;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\esp_crt_bundle\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\everest\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mbedtls\mbedtls\3rdparty\p256-m\p256-m;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\diskio;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fatfs\vfs;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wear_levelling\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_partition\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\bootloader_support\bootloader_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_app_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_bootloader_format\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\console;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_vfs_console\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\openthread\openthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spi_flash\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_secure_cert_mgr\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_parser\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__jsmn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\spiffs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_client\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__json_generator\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\json\cJSON;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__mdns\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_delta_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_encrypted_img\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_insights\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diagnostics\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\esp-tts\esp_tts_chinese\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-sr\src\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\efuse\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_mm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_security\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\pthread\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_psram\xip_impl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\app_trace\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\port\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wpa_supplicant\esp_supplicant\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_coex\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_gdbstub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\unity\unity\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\cmock\CMock\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_bitscrambler\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\http_parser;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp-tls\esp-tls-crypto;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\esp32s3\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_adc\deprecated\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_isp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_cam\dvp\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_jpeg\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_ppa\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_driver_touch_sens\hw_ver2\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hal_ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_hid\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\tcp_transport\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_http_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_ota\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_https_server\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\interface;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_lcd\rgb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protobuf-c\protobuf-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\security;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\transports;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\include\crypto\srp6a;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\protocomm\proto-c;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\esp_local_ctrl\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espcoredump\include\port\xtensa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\idf_test\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ieee802154\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\mqtt\esp-mqtt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\nvs_sec_provider\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\perfmon\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\rt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\touch_element\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\ulp\ulp_fsm\include\esp32s3;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\usb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\wifi_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-nn\src\common;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__rmaker_common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__cbor\tinycbor\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\src\rtc_store;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_diag_data_store\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-serial-flasher\port;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rcp_update\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__dl_fft\base\isa;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dotprod\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\support\mem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\hann\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_harris\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\blackman_nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\nuttall\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\windows\flat_top\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\iir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fir\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\math\sqrt\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\add\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\addc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mulc\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\sub\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\fft\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\dct\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\conv\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\matrix\mul\test\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-dsp\modules\kalman\ekf_imu13states\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\chmorgan__esp-libhelix-mp3\libhelix-mp3\pub;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-modbus\freemodbus\common\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zboss-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp-zigbee-lib\include\radio_spinel;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\port_include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__libsodium\libsodium\src\libsodium\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_modem\command\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_schedule\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__network_provisioning\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__esp_rainmaker\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\espressif__qrcode\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\joltwallet__littlefs\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\freertos\FreeRTOS-Kernel\include\freertos;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\tinyusb\src;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\arduino_tinyusb\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp32s3-libs\3.3.8\include\fb_gfx\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\xtensa-esp-elf\esp32s3\no-rtti;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include\c++\14.2.0\backward;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\lib\gcc\xtensa-esp-elf\14.2.0\include-fixed;$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\xtensa-esp-elf\include;$(ProjectDir)..\..\..\Users\Simon\Documents\Arduino\libraries\SerialCommandManager\src;%(AdditionalIncludeDirectories)
$(ProjectDir)..\..\..\Users\Simon\AppData\Local\arduino15\packages\esp32\tools\esp-x32\2601\bin\xtensa-esp32s3-elf-g++
c++2a
gnu11
@@ -365,7 +365,7 @@
-
+
\ No newline at end of file
diff --git a/PowerControlHubApp/App.xaml.cs b/PowerControlHubApp/App.xaml.cs
index 4d5c01a..a0d5e21 100644
--- a/PowerControlHubApp/App.xaml.cs
+++ b/PowerControlHubApp/App.xaml.cs
@@ -1,6 +1,7 @@
using Microsoft.Extensions.Logging;
using PowerControlHubApp.Services;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
#if WINDOWS
using WinRT.Interop;
@@ -39,11 +40,12 @@ public App(
// Apply after InitializeComponent so Application.Resources is populated.
ThemeService.ApplySaved();
+ LanguageService.ApplySaved();
}
protected override Window CreateWindow(IActivationState activationState)
{
- var window = new Window(new AppShell());
+ Window window = new Window(new AppShell());
#if WINDOWS
window.HandlerChanged += OnWindowHandlerChanged;
diff --git a/PowerControlHubApp/AppShell.xaml b/PowerControlHubApp/AppShell.xaml
index 44d4619..a0393de 100644
--- a/PowerControlHubApp/AppShell.xaml
+++ b/PowerControlHubApp/AppShell.xaml
@@ -4,42 +4,43 @@
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:PowerControlHubApp.Views"
+ xmlns:localization="clr-namespace:PowerControlHubApp.Resources.Localization"
Title="PowerControlHub"
Shell.NavBarIsVisible="False">
diff --git a/PowerControlHubApp/Converters/SingleOrArrayConverter.cs b/PowerControlHubApp/Converters/SingleOrArrayConverter.cs
index 4440d10..381c9fd 100644
--- a/PowerControlHubApp/Converters/SingleOrArrayConverter.cs
+++ b/PowerControlHubApp/Converters/SingleOrArrayConverter.cs
@@ -11,7 +11,7 @@ public override T[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSeri
if (reader.TokenType == JsonTokenType.StartArray)
return JsonSerializer.Deserialize(ref reader, options)!;
- var single = JsonSerializer.Deserialize(ref reader, options);
+ T single = JsonSerializer.Deserialize(ref reader, options);
return [single!];
}
diff --git a/PowerControlHubApp/GlobalSuppressions.cs b/PowerControlHubApp/GlobalSuppressions.cs
new file mode 100644
index 0000000..5f63e2c
--- /dev/null
+++ b/PowerControlHubApp/GlobalSuppressions.cs
@@ -0,0 +1,9 @@
+// This file is used by Code Analysis to maintain SuppressMessage
+// attributes that are applied to this project.
+// Project-level suppressions either have no target or are given
+// a specific target and scoped to a namespace, type, member, etc.
+
+using System.Diagnostics.CodeAnalysis;
+
+[assembly: SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "Used as binding in xaml", Scope = "member", Target = "~P:PowerControlHubApp.ViewModels.SystemViewModel.LanguageOptions")]
+[assembly: SuppressMessage("Style", "CC0009:Avoid magic numbers (and un-named literals)", Justification = "", Scope = "member", Target = "~M:PowerControlHubApp.Services.LanguageService.BuildAvailableCultures~System.Collections.Generic.List{System.Globalization.CultureInfo}")]
diff --git a/PowerControlHubApp/Internal/Constants.cs b/PowerControlHubApp/Internal/Constants.cs
index 1e33768..f76ea0f 100644
--- a/PowerControlHubApp/Internal/Constants.cs
+++ b/PowerControlHubApp/Internal/Constants.cs
@@ -1,8 +1,5 @@
-namespace PowerControlHubApp.Internal
+namespace PowerControlHubApp.Internal
{
-
-#pragma warning disable CC0003
-
internal static class Constants
{
#if WINDOWS
@@ -13,6 +10,26 @@ internal static class Constants
public const int NoSavedPosition = int.MinValue;
public const int DefaultSize = 0;
#endif
+ public const string ApplicationNameWithIcon = IconWarning + SingleSpace + ApplicationName;
+ public const string ApplicationName = "Power Control Hub";
+ public const string SummarySeparator = ";";
+ public const string IconTimePrefix = "🕐";
+ public const string IconExternalSensor = "📡";
+ public const string IconCheckMark = "✓";
+ public const string IconSettings = "⚙";
+ public const string Chevron = ">";
+ public const string ClearColorMark = "X";
+ public const string IconWarning = "⚠";
+ public const string IconGreenCircle = "🟢";
+ public const string IconRedCircle = "🔴";
+ public const string IconMoon = "🌙";
+ public const string IconSun = "☀";
+ public const string IconRefreshSymbol = "↻";
+ public const string IconLocalSensor = "🔌";
+ public const string IconRelaySymbol = "⚡";
+ public const string IconRemove = "🗑";
+ public const string NavBack = "...";
+ public const string FailSeparator = ";";
public const string ColorAsHex1 = "#44cc44";
public const string ColorError = "#cc4444";
public const string ColorBusy = "#4488cc";
@@ -34,25 +51,8 @@ internal static class Constants
public const string DefaultDeviceIpPort = "80";
public const string KeyAuthApiKey = "auth_apikey";
public const string KeyAuthHmacKey = "auth_hmackey";
- public const string MessageNotConfigured = "Not configured — tap ⚙ to set device IP";
- public const string MessageDeviceUnreachable = "Device unreachable";
- public const string MessageNoActiveWarnings = "No active warnings";
- public const string MessageToggleFailed = "Toggle failed — see log";
- public const string LogOtaTrigger = "OTA: triggering firmware install…";
- public const string OtaTriggerFailed = "OTA trigger failed";
- public const string OtaDialogTitle = "Install Firmware";
- public const string OtaDialogMessage = "An OTA update to {0} is available. Download and install now?";
- public const string OtaDialogAccept = "Install";
public const int RelayCount = 8;
public const int UnconfiguredPin = 255;
- // Dashboard poller log messages
- public const string LogDashboardStarted = "DashboardPoller started with interval {IntervalMs}ms";
- public const string LogDashboardFetched = "DashboardPoller fetched index at {Time}";
- public const string LogDashboardSkipping = "DashboardPoller skipping poll: service not configured";
- public const string LogDeviceInvalidJson = "Device returned invalid JSON while polling index";
- public const string LogUnexpectedPollingError = "Unexpected error while polling index";
- public const string LogDashboardStopping = "DashboardPoller stopping";
- public const string LogMetaRefreshFailed = "Failed to refresh sensor meta cache at startup";
// Theme keys
public const string ThemeKey_AppPageBg = "AppPageBg";
@@ -108,32 +108,14 @@ internal static class Constants
public const string ThemeColor_LogText_Dark = "#aaaaaa";
public const string ThemeColor_Placeholder_Dark = "#555555";
- // Networking / settings
- public const int PortMin = 1;
- public const int PortMax = 65535;
- public const string MsgIpRequired = "IP address is required.";
- public const string MsgInvalidPort = "Enter a valid port number (1–65535).";
- public const string MessageNotConnected = "Not connected";
-
- // Relay UI
- public const string NoneString = "None";
- public const string SavedOk = "✓ Saved successfully";
- public const string SavedFailed = "⚠ One or more commands failed";
- public const int ColorOptionNoneIndex = 6;
- public static readonly string[] ColorOptionNames = [ColorName_Blue, ColorName_Green, ColorName_Grey, ColorName_Orange, ColorName_Red, ColorName_Yellow, NoneString];
- public static readonly string[] ActionOptionNames = [ActionName_Default, ActionName_Horn, ActionName_NightRelay];
- public static readonly string[] DefaultStateOptionNames = [DefaultState_Off, DefaultState_On];
- public const string NavBack = "..";
- public const string RelayPageTitle = "Relay";
- public const string CheckMark = "✓";
- // Relay panel colours (order matches Nextion picture IDs with +2 offset)
+ // Relay panel colours
public const int RelayColorBlue = 0;
public const int RelayColorGreen = 1;
public const int RelayColorGrey = 2;
public const int RelayColorOrange = 3;
public const int RelayColorRed = 4;
public const int RelayColorYellow = 5;
- // Nextion picture IDs for button colours (stored on device)
+ // Nextion picture IDs for button colours
public const int NextionImageIdBlue = 2;
public const int NextionImageIdGreen = 3;
public const int NextionImageIdGrey = 4;
@@ -148,26 +130,9 @@ internal static class Constants
public const string ColorRelayPanelOrange = "#dd7722";
public const string ColorRelayPanelRed = "#cc3333";
public const string ColorRelayPanelYellow = "#ccbb22";
- public const string WarningMark = "⚠";
-
- // Color option names
- public const string ColorName_Blue = "Blue";
- public const string ColorName_Green = "Green";
- public const string ColorName_Grey = "Grey";
- public const string ColorName_Orange = "Orange";
- public const string ColorName_Red = "Red";
- public const string ColorName_Yellow = "Yellow";
-
- // Action option names
- public const string ActionName_Default = "Default";
- public const string ActionName_Horn = "Horn";
- public const string ActionName_NightRelay = "Night Relay";
-
- // Default state option names
- public const string DefaultState_Off = "Off";
- public const string DefaultState_On = "On";
+ public const int ColorOptionNoneIndex = 6;
- // OTA states and labels
+ // OTA states
public const string OtaState_Idle = "idle";
public const string OtaState_Available = "available";
public const string OtaState_Checking = "checking";
@@ -175,16 +140,11 @@ internal static class Constants
public const string OtaState_Rebooting = "rebooting";
public const string OtaState_Failed = "failed";
public const string OtaState_UpToDate = "uptodate";
-
- public const string OtaLabel_Available = "Update available: {0} (installed: {1})";
- public const string OtaLabel_Checking = "Checking for firmware update…";
- public const string OtaLabel_Downloading = "Downloading firmware update…";
- public const string OtaLabel_Rebooting = "Applying update — device rebooting…";
- public const string OtaLabel_Failed = "Firmware update failed. Tap to retry.";
- public const string OtaLabel_Uptodate = "Firmware is up to date ({0})";
-
public const string OtaAuto_Off = "0";
+ // Networking / settings
+ public const int PortMin = 1;
+ public const int PortMax = 65535;
public const int DefaultIntervalMs = 750;
public const int TimeSyncIntervalMinutes = 60;
public const int TimeSyncDriftThresholdSeconds = 120;
@@ -209,14 +169,10 @@ internal static class Constants
public const string RouteConfigSdCardInitSpeed = "api/config/C31";
public const string RouteConfigSdCardCsPin = "api/config/C32";
- public const string SaveFailed = "Save failed — device unreachable";
-
// RTC config
public const string RouteConfigRtc = "api/config/C18";
public const string RouteRtcSettingsPage = "RtcSettingsPage";
public const string RouteLocationSettingsPage = "LocationSettingsPage";
- public const string RtcMsgSaved = "RTC settings saved";
- public const string RtcMsgRefreshed = "Refreshed";
public const string JsonRtcDataPin = "dat";
public const string JsonRtcClockPin = "clk";
public const string JsonRtcResetPin = "rst";
@@ -225,24 +181,12 @@ internal static class Constants
// XpdzTone / Buzzer config
public const string RouteConfigXpdzTone = "api/config/C6";
public const string RouteXpdzToneSettingsPage = "XpdzToneSettingsPage";
- public const string XpdzToneMsgSaved = "Buzzer settings saved";
- public const string XpdzToneMsgRefreshed = "Refreshed";
public const string JsonXpdzPin = "xpdzPin";
// Nextion display config
public const string RouteConfigNextionGet = "api/config/N0";
public const string RouteConfigNextionSetFormat = "api/config/N{0}?v={1}";
public const string RouteNextionSettingsPage = "NextionSettingsPage";
- public const string NextionMsgSaved = "Nextion settings saved";
- public const string NextionMsgRefreshed = "Refreshed";
- public const string NextionUart1 = "UART1";
- public const string NextionUart2 = "UART2";
- public const string NextionRebootTitle = "Reboot Required";
- public const string NextionRebootMessage = "Changes require a device reboot to take effect. Reboot device now? (If the device has no reboot endpoint you will need to power-cycle it manually)";
- public const string NextionRebootButton = "Reboot";
- public const string NextionRebootOk = "OK";
- public const string NextionRebootSaved = "Settings saved. Please power-cycle the device to apply Nextion configuration.";
- public const string NextionRebootFailed = "Failed to save settings before reboot.";
public const string NextionRouteN1 = "api/config/N1";
public const string NextionRouteN2 = "api/config/N2";
public const string NextionRouteN3 = "api/config/N3";
@@ -250,7 +194,7 @@ internal static class Constants
public const string NextionRouteN5 = "api/config/N5";
public const string NextionRouteN6 = "api/config/N6";
- // Nextion JSON property names (N0 response)
+ // Nextion JSON property names
public const string NextionJsonN1 = "n1";
public const string NextionJsonN2 = "n2";
public const string NextionJsonN3 = "n3";
@@ -288,22 +232,13 @@ internal static class Constants
public const string MqttConfigKeepAlive = "M7";
public const string MqttConfigState = "M8";
public const string MqttConfigDiscoveryPrefix = "M9";
- public const string MqttConnectedLabel = "Connected";
- public const string MqttDisconnectedLabel = "Disconnected";
- public const string MqttMsgSaved = "MQTT settings saved";
- public const string SdCardMsgSaved = "SD Card settings saved";
- public const string SdCardMsgPartiallySaved = "⚠ Partially saved — SPI pins rejected (check for pin conflicts)";
- public const string SdCardMsgSpiFailed = "⚠ SPI pins not saved (pin conflict or invalid pin)";
- public const string SdCardMsgRefreshed = "Refreshed";
+
public const int SdCardDefaultSpeed = 4;
public const int SdCardPinDisabled = 255;
public const string SdCardConfigSpiPins = "C4";
public const string SdCardConfigInitSpeed = "C31";
public const string SdCardConfigCsPin = "C32";
- public const string NetworkSecurityMsgSaved = "Network security settings saved";
- public const string NetworkSecurityMsgKeysGenerated = "New keys generated and saved";
- public const string NetworkSecurityMsgRefreshed = "Refreshed";
- public const string NetworkSecurityMsgGenerateFailed = "Key generation failed — device unreachable";
+
public const string RouteWarnings = "api/warning/W5";
public const string ForwardSlash = "/";
public const string ResultSuccess = "success";
@@ -336,16 +271,13 @@ internal static class Constants
public const int SecondsTwo = 2;
public const string UserAgentKey = "User-Agent";
public const string UserAgentValue = "PowerControlHub/1.0";
- public const string PowerHubNotConfigured = "PowerHubService is not configured. Call Configure() first.";
public const string ErrorKey = "error";
public const char QuoteChar = '"';
public const string PreferenceKey = "app_theme";
- public const string ThemeLight = "Light";
- public const string ThemeDark = "Dark";
+ public const string KeyAppLanguage = "app_language";
+ public const string DefaultAppLanguage = "en";
public const string BoolFalseString = "0";
public const string BoolTrueString = "1";
-
-
public const int KilobyteBytes = 1024;
public const int DefaultDecimalPlaces = 2;
@@ -366,8 +298,6 @@ internal static class Constants
public const char JsonObjectOpen = '{';
public const char JsonObjectClose = '}';
- public const string ErrRemoveCommandFailed = "⚠ Remove command failed";
-
// Local sensor config JSON property names
public const string JsonLocalSensorIndex = "i";
public const string JsonLocalSensorType = "t";
@@ -383,48 +313,14 @@ internal static class Constants
// Sensor config command strings
public const string SensorConfigGetAll = "S0";
- // Sensor meta JSON property names (S0?meta=1 response)
+ // Sensor meta JSON property names
public const string JsonMeta = "meta";
public const string JsonMetaCount = "count";
public const string JsonMetaDescriptors = "descriptors";
- // JSON key for sensor type in the dashboard /api/index response
+ // JSON key for sensor type
public const string SensorTypeJsonKey = "type";
- // Sensor type display names
- public const string SensorTypeWater = "Water";
- public const string SensorTypeDht11 = "DHT11";
- public const string SensorTypeLight = "Light";
- public const string SensorTypeGps = "GPS";
- public const string SensorTypeSystem = "System";
- public const string SensorTypeBinaryPresence = "Binary Presence";
- public const string SensorTypeVoltage = "Voltage";
- public const string SensorTypeUnknown = "Unknown";
- public const string SensorTypeMetaDataUnavailable = "Sensor type metadata unavailable.";
- public const string FailAddUpdateSensor = "add/update sensor entry";
- public const string FailEnableDisableSensor = "change enabled state";
- public const string FailSaveSettings = "save settings to disk";
- public const string FailSeparator = "; ";
- public const string FailPrefix = "⚠ Failed to: ";
-
- // Sensor type display names with enum values for picker
- public const string SensorTypeWaterPicker = "Water (0)";
- public const string SensorTypeDht11Picker = "DHT11 (1)";
- public const string SensorTypeLightPicker = "Light (2)";
- public const string SensorTypeGpsPicker = "GPS (3)";
- public const string SensorTypeSystemPicker = "System (4)";
- public const string SensorTypeBinaryPresencePicker = "Binary Presence (5)";
- public const string SensorTypeVoltagePicker = "Voltage (6)";
-
- // Sensor page UI
- public const string SensorPageTitle = "Sensor";
- public const string SensorNotConfigured = "Not configured";
- public const string MsgRemoveSensor = "Remove Sensor";
- public const string MsgRemove = "Remove";
- public const string MsgCancel = "Cancel";
- public const string MsgPinSummaryFormat = "Pin {0}, {1}";
- public const string MsgPinFormat = "Pin {0}";
-
// Sensor type enum values
public const int SensorEnumWater = 0;
public const int SensorEnumDht11 = 1;
@@ -434,7 +330,7 @@ internal static class Constants
public const int SensorEnumBinaryPresence = 5;
public const int SensorEnumVoltage = 6;
- // Sensor telemetry JSON property names (firmware sensor keys in /api/index)
+ // Sensor telemetry JSON property names
public const string JsonSensorIdType = "idType";
public const string JsonSensorUid = "uid";
public const string JsonSensorTemperature = "temperature";
@@ -468,80 +364,19 @@ internal static class Constants
public const string SensorFmtDouble2 = "0.00";
public const string SensorFmtGpsCoord = "0.000000";
- // Sensor telemetry unit suffixes
- public const string SensorSuffixCelsius = "°C";
- public const string SensorSuffixPercent = "%";
- public const string SensorSuffixKb = " kb";
- public const string SensorSuffixKmh = " km/h";
- public const string SensorSuffixVolt = " V";
- public const string SensorSuffixMetre = " m";
- public const string SensorSuffixDegree = "°";
// Sensor telemetry binary presence states
public const string SensorStateDetected = "detected";
public const string SensorStateClear = "clear";
- // Sensor telemetry display labels
- public const string SensorLabelDay = "Day";
- public const string SensorLabelNight = "Night";
- public const string SensorLabelFix = "Fix";
- public const string SensorLabelNoFix = "No Fix";
- public const string SensorLabelDetected = "Detected";
- public const string SensorLabelClear = "Clear";
-
- // Sensor telemetry icon literals
- public const string SensorIconSun = "☀";
- public const string SensorIconMoon = "🌙";
- public const string SensorIconRedCircle = "🔴";
- public const string SensorIconGreenCircle = "🟢";
-
- // Sensor telemetry generic fallback separator
- public const string SensorSummarySeparator = "; ";
-
- // Sensor detail page default label strings
- public const string LabelPin0Default = "GPIO Pin 0 (blank or 255 = disabled)";
- public const string LabelPin1Default = "GPIO Pin 1 (blank or 255 = disabled)";
- public const string LabelOpt1_0Default = "Option 1 (int8)";
- public const string LabelOpt1_1Default = "Option 2 (int8)";
- public const string LabelOpt2_0Default = "Option 3 (int16)";
- public const string LabelOpt2_1Default = "Option 4 (int16)";
-
// ConfigConnection constants
public const int ConfigConnectionQueueCapacity = 64;
- public const string LogConfigExecuting = "ConfigConnection executing: {Description}";
- public const string LogConfigSucceeded = "ConfigConnection succeeded: {Description}";
- public const string LogConfigFailed = "ConfigConnection failed: {Description}";
- public const string LogConfigFailureResponse = "Device returned failure response";
- public const string LogConfigConsumerError = "ConfigConnection consumer error";
- public const string LogPublishSuccessFailed = "Failed to publish success message for: {Description}";
- public const string LogPublishFailureFailed = "Failed to publish failure message for: {Description}";
- public const string ConfigSuccessRelay = "RelayConfigSucceeded";
- public const string ConfigSuccessSensor = "SensorConfigSucceeded";
-
- // ConfigPoller log messages
- public const string LogConfigMetaRefreshed = "ConfigPoller: SensorMetaCache refreshed after connection.";
- public const string LogConfigHealthCheckFailed = "ConfigPoller: Connection health check failed.";
-
- // TimeSyncService log messages
- public const string LogTimeSyncStarted = "TimeSyncService started with interval {IntervalMin}min, drift threshold {DriftSec}s";
- public const string LogTimeSyncDeviceTime = "TimeSyncService: device time is {DeviceTime}, delta {DeltaSec}s";
- public const string LogTimeSyncSetting = "TimeSyncService: drift {DeltaSec}s exceeds threshold, setting device time to {LocalTime}";
- public const string LogTimeSyncInSync = "TimeSyncService: device time is in sync (delta {DeltaSec}s)";
- public const string LogTimeSyncNotSet = "TimeSyncService: device time not set, synchronizing";
- public const string LogTimeSyncFailed = "TimeSyncService: time sync attempt failed";
- public const string LogTimeSyncStopping = "TimeSyncService stopping";
-
- // MauiProgram startup orchestration
- public const string LogStartupMetaFetch = "Startup: first dashboard data received, fetching sensor meta on connection 2.";
- public const string LogStartupMetaPopulated = "Startup: sensor meta cache populated.";
- public const string LogStartupMetaAlready = "Startup: dashboard data already available, fetching sensor meta on connection 2.";
-
public const string LocationTypeBoat = "boat";
public const string NullByte = "0x00";
public const string NibbleZero = "0x0";
- }
-#pragma warning restore CC0003
+ public const string SingleSpace = " ";
+ }
}
diff --git a/PowerControlHubApp/MainPage.xaml b/PowerControlHubApp/MainPage.xaml
deleted file mode 100644
index 0fd8e0e..0000000
--- a/PowerControlHubApp/MainPage.xaml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/PowerControlHubApp/MainPage.xaml.cs b/PowerControlHubApp/MainPage.xaml.cs
deleted file mode 100644
index 4541707..0000000
--- a/PowerControlHubApp/MainPage.xaml.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-namespace PowerControlHubApp
-{
- public partial class MainPage : ContentPage
- {
- int count = 0;
-
- public MainPage()
- {
- InitializeComponent();
- }
-
- private void OnCounterClicked(object sender, EventArgs e)
- {
- count++;
-
- if (count == 1)
- CounterBtn.Text = $"Clicked {count} time";
- else
- CounterBtn.Text = $"Clicked {count} times";
-
- SemanticScreenReader.Announce(CounterBtn.Text);
- }
- }
-}
diff --git a/PowerControlHubApp/MauiProgram.cs b/PowerControlHubApp/MauiProgram.cs
index 42b6fd4..951eb92 100644
--- a/PowerControlHubApp/MauiProgram.cs
+++ b/PowerControlHubApp/MauiProgram.cs
@@ -11,7 +11,7 @@ public static class MauiProgram
public static MauiApp CreateMauiApp()
{
- var builder = MauiApp.CreateBuilder();
+ MauiAppBuilder builder = MauiApp.CreateBuilder();
builder
.UseMauiApp()
.ConfigureFonts(fonts =>
@@ -26,7 +26,7 @@ public static MauiApp CreateMauiApp()
// Connections — each owns its own HttpClient (one persistent TCP socket)
builder.Services.AddSingleton(sp =>
{
- var connection = new DashboardConnection();
+ DashboardConnection connection = new DashboardConnection();
string ip = Preferences.Get(KeyDeviceIpAddress, string.Empty);
string port = Preferences.Get(KeyDeviceIpPort, DefaultDeviceIpPort);
@@ -48,7 +48,7 @@ public static MauiApp CreateMauiApp()
// Register ConfigConnection as the inner singleton
builder.Services.AddSingleton(sp =>
{
- var connection = new ConfigConnection(
+ ConfigConnection connection = new ConfigConnection(
sp.GetRequiredService(),
sp.GetRequiredService>());
@@ -78,7 +78,7 @@ public static MauiApp CreateMauiApp()
// Legacy service — kept as thin facade that delegates to the two connections
builder.Services.AddSingleton(sp =>
{
- var service = new PowerHubService(
+ PowerHubService service = new PowerHubService(
sp.GetRequiredService(),
sp.GetRequiredService(),
sp.GetRequiredService());
@@ -92,6 +92,7 @@ public static MauiApp CreateMauiApp()
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
@@ -114,15 +115,14 @@ public static MauiApp CreateMauiApp()
builder.Services.AddTransient();
builder.Services.AddTransient();
- // Pages
- builder.Services.AddSingleton();
- builder.Services.AddSingleton();
- builder.Services.AddSingleton();
- builder.Services.AddSingleton();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
builder.Services.AddTransient();
- builder.Services.AddSingleton();
+ builder.Services.AddTransient();
builder.Services.AddTransient();
- builder.Services.AddSingleton();
+ builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.AddTransient();
diff --git a/PowerControlHubApp/Models/ExternalSensorConfigModel.cs b/PowerControlHubApp/Models/ExternalSensorConfigModel.cs
index 64e3ba2..2338997 100644
--- a/PowerControlHubApp/Models/ExternalSensorConfigModel.cs
+++ b/PowerControlHubApp/Models/ExternalSensorConfigModel.cs
@@ -1,5 +1,6 @@
using System.Text.Json.Serialization;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Models
{
diff --git a/PowerControlHubApp/Models/Json/OtaStatusModel.cs b/PowerControlHubApp/Models/Json/OtaStatusModel.cs
index d99e1a2..1b09f5a 100644
--- a/PowerControlHubApp/Models/Json/OtaStatusModel.cs
+++ b/PowerControlHubApp/Models/Json/OtaStatusModel.cs
@@ -1,5 +1,6 @@
using System.Text.Json.Serialization;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Models.Json;
@@ -29,23 +30,23 @@ public class OtaStatusModel
public string Auto { get; set; } = OtaAuto_Off;
public bool UpdateAvailable =>
- string.Equals(State, OtaState_Available, StringComparison.OrdinalIgnoreCase);
+ String.Equals(State, OtaState_Available, StringComparison.OrdinalIgnoreCase);
public bool IsBusy =>
State is OtaState_Checking or OtaState_Downloading or OtaState_Rebooting;
public bool HasFailed =>
- string.Equals(State, OtaState_Failed, StringComparison.OrdinalIgnoreCase);
+ String.Equals(State, OtaState_Failed, StringComparison.OrdinalIgnoreCase);
/// Human-readable label shown in the update banner.
public string BannerLabel => State switch
{
- var s when string.Equals(s, OtaState_Available, StringComparison.OrdinalIgnoreCase) => string.Format(OtaLabel_Available, AvailableVersion, CurrentVersion),
- var s when string.Equals(s, OtaState_Checking, StringComparison.OrdinalIgnoreCase) => OtaLabel_Checking,
- var s when string.Equals(s, OtaState_Downloading, StringComparison.OrdinalIgnoreCase) => OtaLabel_Downloading,
- var s when string.Equals(s, OtaState_Rebooting, StringComparison.OrdinalIgnoreCase) => OtaLabel_Rebooting,
- var s when string.Equals(s, OtaState_Failed, StringComparison.OrdinalIgnoreCase) => OtaLabel_Failed,
- var s when string.Equals(s, OtaState_UpToDate, StringComparison.OrdinalIgnoreCase) => string.Format(OtaLabel_Uptodate, CurrentVersion),
- _ => string.Empty
+ string s when String.Equals(s, OtaState_Available, StringComparison.OrdinalIgnoreCase) => String.Format(OtaLabelAvailable, AvailableVersion, CurrentVersion),
+ string s when String.Equals(s, OtaState_Checking, StringComparison.OrdinalIgnoreCase) => OtaLabelChecking,
+ string s when String.Equals(s, OtaState_Downloading, StringComparison.OrdinalIgnoreCase) => OtaLabelDownloading,
+ string s when String.Equals(s, OtaState_Rebooting, StringComparison.OrdinalIgnoreCase) => OtaLabelRebooting,
+ string s when String.Equals(s, OtaState_Failed, StringComparison.OrdinalIgnoreCase) => OtaLabelFailed,
+ string s when String.Equals(s, OtaState_UpToDate, StringComparison.OrdinalIgnoreCase) => String.Format(OtaLabelUptodate, CurrentVersion),
+ _ => String.Empty
};
}
diff --git a/PowerControlHubApp/Models/Json/SensorsModel.cs b/PowerControlHubApp/Models/Json/SensorsModel.cs
index 33e98ac..ec680b6 100644
--- a/PowerControlHubApp/Models/Json/SensorsModel.cs
+++ b/PowerControlHubApp/Models/Json/SensorsModel.cs
@@ -1,5 +1,6 @@
using System.Text.Json;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Models.Json
{
@@ -54,7 +55,7 @@ private static string FormatDouble(JsonElement el, string format)
if (el.ValueKind == JsonValueKind.String)
{
- var s = el.GetString();
+ string s = el.GetString();
return s ?? string.Empty;
}
@@ -108,9 +109,9 @@ public string Temperature
{
get
{
- if (TryGet(ExtraFields, JsonSensorTemperature, out var el))
+ if (TryGet(ExtraFields, JsonSensorTemperature, out JsonElement el))
{
- var s = FormatDouble(el, SensorFmtTempDouble);
+ string s = FormatDouble(el, SensorFmtTempDouble);
return string.IsNullOrEmpty(s) ? string.Empty : s + SensorSuffixCelsius;
}
@@ -122,10 +123,10 @@ public string Humidity
{
get
{
- if (TryGet(ExtraFields, JsonSensorHumidity, out var el))
+ if (TryGet(ExtraFields, JsonSensorHumidity, out JsonElement el))
{
- var s = FormatDouble(el, SensorFmtTempDouble);
- return string.IsNullOrEmpty(s) ? string.Empty : s + SensorSuffixPercent;
+ string s = FormatDouble(el, SensorFmtTempDouble);
+ return string.IsNullOrEmpty(s) ? string.Empty : s + SuffixPercent;
}
return string.Empty;
@@ -136,9 +137,9 @@ public string DewPoint
{
get
{
- if (TryGet(ExtraFields, JsonSensorDewPoint, out var el))
+ if (TryGet(ExtraFields, JsonSensorDewPoint, out JsonElement el))
{
- var s = FormatDouble(el, SensorFmtTempDouble);
+ string s = FormatDouble(el, SensorFmtTempDouble);
return string.IsNullOrEmpty(s) ? string.Empty : s + SensorSuffixCelsius;
}
@@ -150,7 +151,7 @@ public string Comfort
{
get
{
- if (TryGet(ExtraFields, JsonSensorComfort, out var el) && el.ValueKind == JsonValueKind.String)
+ if (TryGet(ExtraFields, JsonSensorComfort, out JsonElement el) && el.ValueKind == JsonValueKind.String)
return el.GetString() ?? string.Empty;
return string.Empty;
@@ -161,7 +162,7 @@ public string CondensationRisk
{
get
{
- if (TryGet(ExtraFields, JsonSensorCondensationRisk, out var el) && el.ValueKind == JsonValueKind.String)
+ if (TryGet(ExtraFields, JsonSensorCondensationRisk, out JsonElement el) && el.ValueKind == JsonValueKind.String)
return el.GetString() ?? string.Empty;
return string.Empty;
@@ -173,8 +174,8 @@ public string DayNightIcon
{
get
{
- if (TryGet(ExtraFields, JsonSensorIsDaytime, out var el) && TryGetBool(el, out bool isDay))
- return isDay ? SensorIconSun : SensorIconMoon;
+ if (TryGet(ExtraFields, JsonSensorIsDaytime, out JsonElement el) && TryGetBool(el, out bool isDay))
+ return isDay ? IconSun : IconMoon;
return string.Empty;
}
@@ -184,8 +185,8 @@ public string DayNightLabel
{
get
{
- if (TryGet(ExtraFields, JsonSensorIsDaytime, out var el) && TryGetBool(el, out bool isDay))
- return isDay ? SensorLabelDay : SensorLabelNight;
+ if (TryGet(ExtraFields, JsonSensorIsDaytime, out JsonElement el) && TryGetBool(el, out bool isDay))
+ return isDay ? LabelDay : LabelNight;
return string.Empty;
}
@@ -195,7 +196,7 @@ public string LightLevel
{
get
{
- if (TryGet(ExtraFields, JsonSensorLightLevel, out var el))
+ if (TryGet(ExtraFields, JsonSensorLightLevel, out JsonElement el))
return FormatInt(el);
return string.Empty;
@@ -206,7 +207,7 @@ public string LightLevelAvg
{
get
{
- if (TryGet(ExtraFields, JsonSensorAvgLightLevel, out var el))
+ if (TryGet(ExtraFields, JsonSensorAvgLightLevel, out JsonElement el))
return FormatInt(el);
return string.Empty;
@@ -218,7 +219,7 @@ private JsonElement? GpsObject
{
get
{
- if (TryGet(ExtraFields, JsonSensorGps, out var el) && el.ValueKind == JsonValueKind.Object)
+ if (TryGet(ExtraFields, JsonSensorGps, out JsonElement el) && el.ValueKind == JsonValueKind.Object)
return el;
return null;
@@ -229,7 +230,7 @@ public string GpsLatitude
{
get
{
- if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsLat, out var el))
+ if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsLat, out JsonElement el))
return FormatDouble(el, SensorFmtGpsCoord);
return string.Empty;
@@ -240,7 +241,7 @@ public string GpsLongitude
{
get
{
- if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsLon, out var el))
+ if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsLon, out JsonElement el))
return FormatDouble(el, SensorFmtGpsCoord);
return string.Empty;
@@ -251,8 +252,8 @@ public string GpsAltitude
{
get
{
- if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsAlt, out var el))
- return FormatDouble(el, SensorFmtDouble2) + SensorSuffixMetre;
+ if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsAlt, out JsonElement el))
+ return $"{FormatDouble(el, SensorFmtDouble2)} {SuffixMetre}";
return string.Empty;
}
@@ -262,8 +263,8 @@ public string GpsSpeed
{
get
{
- if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsSpeed, out var el))
- return FormatDouble(el, SensorFmtDouble2) + SensorSuffixKmh;
+ if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsSpeed, out JsonElement el))
+ return $"{FormatDouble(el, SensorFmtDouble2)} {SuffixKmh}";
return string.Empty;
}
@@ -273,8 +274,8 @@ public string GpsCourse
{
get
{
- if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsCourse, out var el))
- return FormatDouble(el, SensorFmtDouble2) + SensorSuffixDegree;
+ if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsCourse, out JsonElement el))
+ return $"{FormatDouble(el, SensorFmtDouble2)} {SuffixDegree}";
return string.Empty;
}
@@ -284,22 +285,22 @@ public string GpsSatellites
{
get
{
- if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsSats, out var el))
+ if (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsSats, out JsonElement el))
return FormatInt(el);
return string.Empty;
}
}
- public string GpsFixLabel => (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsValid, out var el) && TryGetBool(el, out bool v) && v) ? SensorLabelFix : SensorLabelNoFix;
+ public string GpsFixLabel => (GpsObject.HasValue && TryGet(GpsObject, JsonSensorGpsValid, out JsonElement el) && TryGetBool(el, out bool v) && v) ? LabelFix : LabelNoFix;
// --- System ---
public string FreeMemory
{
get
{
- if (TryGet(ExtraFields, JsonSensorFreeMemory, out var el) && el.TryGetInt32(out int mem))
- return $"{Math.Round((double)mem / KilobyteBytes, 0)}{SensorSuffixKb}";
+ if (TryGet(ExtraFields, JsonSensorFreeMemory, out JsonElement el) && el.TryGetInt32(out int mem))
+ return $"{Math.Round((double)mem / KilobyteBytes, 0)}{SuffixKb}";
return string.Empty;
}
@@ -309,8 +310,8 @@ public string CpuUsage
{
get
{
- if (TryGet(ExtraFields, JsonSensorCpuUsage, out var el) && el.TryGetInt32(out int cpu))
- return $"{cpu}{SensorSuffixPercent}";
+ if (TryGet(ExtraFields, JsonSensorCpuUsage, out JsonElement el) && el.TryGetInt32(out int cpu))
+ return $"{cpu}{SuffixPercent}";
return string.Empty;
}
@@ -321,15 +322,15 @@ public string BinaryStateIcon
{
get
{
- if (TryGet(ExtraFields, JsonSensorState, out var el) && el.ValueKind == JsonValueKind.String)
+ if (TryGet(ExtraFields, JsonSensorState, out JsonElement el) && el.ValueKind == JsonValueKind.String)
{
- var s = el.GetString();
+ string s = el.GetString();
if (s == SensorStateDetected)
- return SensorIconRedCircle;
+ return IconRedCircle;
if (s == SensorStateClear)
- return SensorIconGreenCircle;
+ return IconGreenCircle;
}
return string.Empty;
@@ -340,15 +341,15 @@ public string BinaryStateLabel
{
get
{
- if (TryGet(ExtraFields, JsonSensorState, out var el) && el.ValueKind == JsonValueKind.String)
+ if (TryGet(ExtraFields, JsonSensorState, out JsonElement el) && el.ValueKind == JsonValueKind.String)
{
- var s = el.GetString();
+ string s = el.GetString();
if (s == SensorStateDetected)
- return SensorLabelDetected;
+ return LabelDetected;
if (s == SensorStateClear)
- return SensorLabelClear;
+ return LabelClear;
return s ?? string.Empty;
}
@@ -362,8 +363,8 @@ public string Voltage
{
get
{
- if (TryGet(ExtraFields, JsonSensorVoltage, out var el))
- return FormatDouble(el, SensorFmtDouble2) + SensorSuffixVolt;
+ if (TryGet(ExtraFields, JsonSensorVoltage, out JsonElement el))
+ return FormatDouble(el, SensorFmtDouble2) + SuffixVolt;
return string.Empty;
}
@@ -373,8 +374,8 @@ public string VoltageAvg
{
get
{
- if (TryGet(ExtraFields, JsonSensorVoltageAvg, out var el))
- return FormatDouble(el, SensorFmtDouble2) + SensorSuffixVolt;
+ if (TryGet(ExtraFields, JsonSensorVoltageAvg, out JsonElement el))
+ return FormatDouble(el, SensorFmtDouble2) + SuffixVolt;
return string.Empty;
}
@@ -385,7 +386,7 @@ public string WaterLevel
{
get
{
- if (TryGet(ExtraFields, JsonSensorWaterLevel, out var el))
+ if (TryGet(ExtraFields, JsonSensorWaterLevel, out JsonElement el))
return FormatInt(el);
return string.Empty;
@@ -396,7 +397,7 @@ public string WaterLevelAvg
{
get
{
- if (TryGet(ExtraFields, JsonSensorWaterLevelAvg, out var el))
+ if (TryGet(ExtraFields, JsonSensorWaterLevelAvg, out JsonElement el))
return FormatInt(el);
return string.Empty;
@@ -411,9 +412,9 @@ public string ValueSummary
if (!ExtraFields.HasValue || ExtraFields.Value.ValueKind != JsonValueKind.Object)
return string.Empty;
- var parts = new List();
+ List parts = [];
- foreach (var p in ExtraFields.Value.EnumerateObject())
+ foreach (JsonProperty p in ExtraFields.Value.EnumerateObject())
{
if (p.NameEquals(JsonSensorUid) || p.NameEquals(JsonSensorIdType) || p.NameEquals(JsonSensorType))
continue;
@@ -421,7 +422,7 @@ public string ValueSummary
if (p.Value.ValueKind == JsonValueKind.Object)
{
// Flatten small nested objects (gps)
- foreach (var sub in p.Value.EnumerateObject())
+ foreach (JsonProperty sub in p.Value.EnumerateObject())
{
parts.Add($"{sub.Name}={sub.Value.ToString()}");
}
@@ -432,7 +433,7 @@ public string ValueSummary
}
}
- return string.Join(SensorSummarySeparator, parts);
+ return string.Join(SummarySeparator, parts);
}
}
}
diff --git a/PowerControlHubApp/Models/LocalSensorConfigModel.cs b/PowerControlHubApp/Models/LocalSensorConfigModel.cs
index 3241c6f..f0b4249 100644
--- a/PowerControlHubApp/Models/LocalSensorConfigModel.cs
+++ b/PowerControlHubApp/Models/LocalSensorConfigModel.cs
@@ -1,5 +1,6 @@
using System.Text.Json.Serialization;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Models
{
@@ -85,10 +86,10 @@ public string PinSummary
return SensorNotConfigured;
if (Pin0 < UnconfiguredPin && Pin1 < UnconfiguredPin)
- return $"Pin {Pin0}, {Pin1}";
+ return string.Format(PinPairFormat, Pin0, Pin1);
if (Pin0 < UnconfiguredPin)
- return $"Pin {Pin0}";
+ return string.Format(PinFormat, Pin0);
return TypeName;
}
diff --git a/PowerControlHubApp/PowerControlHubApp.csproj b/PowerControlHubApp/PowerControlHubApp.csproj
index 2936475..e9d10e9 100644
--- a/PowerControlHubApp/PowerControlHubApp.csproj
+++ b/PowerControlHubApp/PowerControlHubApp.csproj
@@ -1,4 +1,4 @@
-
+
net10.0-android
@@ -76,6 +76,21 @@
+
+
+ True
+ True
+ AppResources.resx
+
+
+
+
+
+ PublicResXFileCodeGenerator
+ AppResources.Designer.cs
+
+
+
MSBuild:Compile
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.Designer.cs b/PowerControlHubApp/Resources/Localization/AppResources.Designer.cs
new file mode 100644
index 0000000..97fe834
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.Designer.cs
@@ -0,0 +1,3546 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace PowerControlHubApp.Resources.Localization {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class AppResources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal AppResources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PowerControlHubApp.Resources.Localization.AppResources", typeof(AppResources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Default.
+ ///
+ public static string ActionBadgeDefault {
+ get {
+ return ResourceManager.GetString("ActionBadgeDefault", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Horn.
+ ///
+ public static string ActionBadgeHorn {
+ get {
+ return ResourceManager.GetString("ActionBadgeHorn", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Night.
+ ///
+ public static string ActionBadgeNight {
+ get {
+ return ResourceManager.GetString("ActionBadgeNight", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Default.
+ ///
+ public static string ActionDefault {
+ get {
+ return ResourceManager.GetString("ActionDefault", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Horn.
+ ///
+ public static string ActionHorn {
+ get {
+ return ResourceManager.GetString("ActionHorn", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Night Relay.
+ ///
+ public static string ActionNightRelay {
+ get {
+ return ResourceManager.GetString("ActionNightRelay", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Action Type.
+ ///
+ public static string ActionTypeLabel {
+ get {
+ return ResourceManager.GetString("ActionTypeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Active Warnings.
+ ///
+ public static string ActiveWarnings {
+ get {
+ return ResourceManager.GetString("ActiveWarnings", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Advanced.
+ ///
+ public static string Advanced {
+ get {
+ return ResourceManager.GetString("Advanced", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Advisory: .
+ ///
+ public static string AdvisoryPrefix {
+ get {
+ return ResourceManager.GetString("AdvisoryPrefix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Altitude.
+ ///
+ public static string AltitudeLabel {
+ get {
+ return ResourceManager.GetString("AltitudeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to API Key.
+ ///
+ public static string ApiKey {
+ get {
+ return ResourceManager.GetString("ApiKey", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to API Key (X-API-Key).
+ ///
+ public static string ApiKeyLabel {
+ get {
+ return ResourceManager.GetString("ApiKeyLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to App Theme.
+ ///
+ public static string AppThemeLabel {
+ get {
+ return ResourceManager.GetString("AppThemeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Available version: .
+ ///
+ public static string AvailableVersionPrefix {
+ get {
+ return ResourceManager.GetString("AvailableVersionPrefix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Avg.
+ ///
+ public static string AverageLabel {
+ get {
+ return ResourceManager.GetString("AverageLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Avg.
+ ///
+ public static string AvgLabel {
+ get {
+ return ResourceManager.GetString("AvgLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Back.
+ ///
+ public static string Back {
+ get {
+ return ResourceManager.GetString("Back", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Baud Rate.
+ ///
+ public static string BaudRate {
+ get {
+ return ResourceManager.GetString("BaudRate", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Binary.
+ ///
+ public static string Binary {
+ get {
+ return ResourceManager.GetString("Binary", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Boat Details.
+ ///
+ public static string BoatDetails {
+ get {
+ return ResourceManager.GetString("BoatDetails", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Button Colour.
+ ///
+ public static string ButtonColourLabel {
+ get {
+ return ResourceManager.GetString("ButtonColourLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Buzzer.
+ ///
+ public static string Buzzer {
+ get {
+ return ResourceManager.GetString("Buzzer", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Buzzer Pin.
+ ///
+ public static string BuzzerPin {
+ get {
+ return ResourceManager.GetString("BuzzerPin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Buzzer settings saved.
+ ///
+ public static string BuzzerSettingsSaved {
+ get {
+ return ResourceManager.GetString("BuzzerSettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Buzzer Settings.
+ ///
+ public static string BuzzerSettingsTitle {
+ get {
+ return ResourceManager.GetString("BuzzerSettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Call Sign.
+ ///
+ public static string CallSignLabel {
+ get {
+ return ResourceManager.GetString("CallSignLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cancel.
+ ///
+ public static string Cancel {
+ get {
+ return ResourceManager.GetString("Cancel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Check for Updates.
+ ///
+ public static string CheckForUpdates {
+ get {
+ return ResourceManager.GetString("CheckForUpdates", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Chip Select.
+ ///
+ public static string ChipSelect {
+ get {
+ return ResourceManager.GetString("ChipSelect", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Clock Pin.
+ ///
+ public static string ClockPin {
+ get {
+ return ResourceManager.GetString("ClockPin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Blue.
+ ///
+ public static string ColorBlue {
+ get {
+ return ResourceManager.GetString("ColorBlue", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Green.
+ ///
+ public static string ColorGreen {
+ get {
+ return ResourceManager.GetString("ColorGreen", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Grey.
+ ///
+ public static string ColorGrey {
+ get {
+ return ResourceManager.GetString("ColorGrey", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Orange.
+ ///
+ public static string ColorOrange {
+ get {
+ return ResourceManager.GetString("ColorOrange", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Red.
+ ///
+ public static string ColorRed {
+ get {
+ return ResourceManager.GetString("ColorRed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Yellow.
+ ///
+ public static string ColorYellow {
+ get {
+ return ResourceManager.GetString("ColorYellow", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Comfort.
+ ///
+ public static string ComfortLabel {
+ get {
+ return ResourceManager.GetString("ComfortLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Communication.
+ ///
+ public static string Communication {
+ get {
+ return ResourceManager.GetString("Communication", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Condensation.
+ ///
+ public static string CondensationLabel {
+ get {
+ return ResourceManager.GetString("CondensationLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Condensation Risk.
+ ///
+ public static string CondensationRiskLabel {
+ get {
+ return ResourceManager.GetString("CondensationRiskLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to RelayConfigSucceeded.
+ ///
+ public static string ConfigSuccessRelay {
+ get {
+ return ResourceManager.GetString("ConfigSuccessRelay", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SensorConfigSucceeded.
+ ///
+ public static string ConfigSuccessSensor {
+ get {
+ return ResourceManager.GetString("ConfigSuccessSensor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Connection.
+ ///
+ public static string Connection {
+ get {
+ return ResourceManager.GetString("Connection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to CONTROLS.
+ ///
+ public static string ControlsSection {
+ get {
+ return ResourceManager.GetString("ControlsSection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Course.
+ ///
+ public static string CourseLabel {
+ get {
+ return ResourceManager.GetString("CourseLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to CPU:.
+ ///
+ public static string CpuLabel {
+ get {
+ return ResourceManager.GetString("CpuLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to CPU.
+ ///
+ public static string CpuUsageLabel {
+ get {
+ return ResourceManager.GetString("CpuUsageLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Credentials.
+ ///
+ public static string Credentials {
+ get {
+ return ResourceManager.GetString("Credentials", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to CS Pin.
+ ///
+ public static string CsPin {
+ get {
+ return ResourceManager.GetString("CsPin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Current version: .
+ ///
+ public static string CurrentVersionPrefix {
+ get {
+ return ResourceManager.GetString("CurrentVersionPrefix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Dashboard.
+ ///
+ public static string Dashboard {
+ get {
+ return ResourceManager.GetString("Dashboard", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Data Pin.
+ ///
+ public static string DataPin {
+ get {
+ return ResourceManager.GetString("DataPin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Default State at Power-On.
+ ///
+ public static string DefaultStateLabel {
+ get {
+ return ResourceManager.GetString("DefaultStateLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Device Identity.
+ ///
+ public static string DeviceIdentity {
+ get {
+ return ResourceManager.GetString("DeviceIdentity", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Device IP Address.
+ ///
+ public static string DeviceIpAddress {
+ get {
+ return ResourceManager.GetString("DeviceIpAddress", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Device Time.
+ ///
+ public static string DeviceTime {
+ get {
+ return ResourceManager.GetString("DeviceTime", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Dew Point.
+ ///
+ public static string DewPointLabel {
+ get {
+ return ResourceManager.GetString("DewPointLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enable Authentication.
+ ///
+ public static string EnableAuthentication {
+ get {
+ return ResourceManager.GetString("EnableAuthentication", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enabled.
+ ///
+ public static string Enabled {
+ get {
+ return ResourceManager.GetString("Enabled", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ENABLED.
+ ///
+ public static string EnabledSection {
+ get {
+ return ResourceManager.GetString("EnabledSection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enter API key.
+ ///
+ public static string EnterApiKeyPlaceholder {
+ get {
+ return ResourceManager.GetString("EnterApiKeyPlaceholder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enter HMAC key.
+ ///
+ public static string EnterHmacKeyPlaceholder {
+ get {
+ return ResourceManager.GetString("EnterHmacKeyPlaceholder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enter password to change.
+ ///
+ public static string EnterPasswordToChange {
+ get {
+ return ResourceManager.GetString("EnterPasswordToChange", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Remove command failed.
+ ///
+ public static string ErrRemoveCommandFailed {
+ get {
+ return ResourceManager.GetString("ErrRemoveCommandFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to External Sensors.
+ ///
+ public static string ExternalSensors {
+ get {
+ return ResourceManager.GetString("ExternalSensors", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ext. Sensors.
+ ///
+ public static string ExternalSensorsPageTitle {
+ get {
+ return ResourceManager.GetString("ExternalSensorsPageTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to External Sensors.
+ ///
+ public static string ExternalSensorsTitle {
+ get {
+ return ResourceManager.GetString("ExternalSensorsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to External Sensor.
+ ///
+ public static string ExternalSensorTitle {
+ get {
+ return ResourceManager.GetString("ExternalSensorTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ext. Sensors.
+ ///
+ public static string ExtSensorsTitle {
+ get {
+ return ResourceManager.GetString("ExtSensorsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to add/update sensor entry.
+ ///
+ public static string FailAddUpdateSensor {
+ get {
+ return ResourceManager.GetString("FailAddUpdateSensor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to change enabled state.
+ ///
+ public static string FailEnableDisableSensor {
+ get {
+ return ResourceManager.GetString("FailEnableDisableSensor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to: .
+ ///
+ public static string FailPrefix {
+ get {
+ return ResourceManager.GetString("FailPrefix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to save settings to disk.
+ ///
+ public static string FailSaveSettings {
+ get {
+ return ResourceManager.GetString("FailSaveSettings", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Firmware Update.
+ ///
+ public static string FirmwareUpdate {
+ get {
+ return ResourceManager.GetString("FirmwareUpdate", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Free Memory.
+ ///
+ public static string FreeMemoryLabel {
+ get {
+ return ResourceManager.GetString("FreeMemoryLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Free RAM.
+ ///
+ public static string FreeRamLabel {
+ get {
+ return ResourceManager.GetString("FreeRamLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to FW: .
+ ///
+ public static string FwPrefix {
+ get {
+ return ResourceManager.GetString("FwPrefix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Generate New Keys.
+ ///
+ public static string GenerateNewKeys {
+ get {
+ return ResourceManager.GetString("GenerateNewKeys", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIO Pin.
+ ///
+ public static string GpioPin {
+ get {
+ return ResourceManager.GetString("GpioPin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIO Pin (blank or 255 = disabled).
+ ///
+ public static string GpioPinDisabled {
+ get {
+ return ResourceManager.GetString("GpioPinDisabled", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIO Pin (blank or 255 = disabled).
+ ///
+ public static string GpioPinLabel {
+ get {
+ return ResourceManager.GetString("GpioPinLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIO Pin Restrictions.
+ ///
+ public static string GpioPinRestrictions {
+ get {
+ return ResourceManager.GetString("GpioPinRestrictions", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIO Restrictions.
+ ///
+ public static string GpioRestrictions {
+ get {
+ return ResourceManager.GetString("GpioRestrictions", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIOs In Use.
+ ///
+ public static string GpiosInUse {
+ get {
+ return ResourceManager.GetString("GpiosInUse", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Alt.
+ ///
+ public static string GpsAltLabel {
+ get {
+ return ResourceManager.GetString("GpsAltLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Course.
+ ///
+ public static string GpsCourseLabel {
+ get {
+ return ResourceManager.GetString("GpsCourseLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Lat.
+ ///
+ public static string GpsLatLabel {
+ get {
+ return ResourceManager.GetString("GpsLatLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Lon.
+ ///
+ public static string GpsLonLabel {
+ get {
+ return ResourceManager.GetString("GpsLonLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sats.
+ ///
+ public static string GpsSatsLabel {
+ get {
+ return ResourceManager.GetString("GpsSatsLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Speed.
+ ///
+ public static string GpsSpeedLabel {
+ get {
+ return ResourceManager.GetString("GpsSpeedLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hard-blocked: .
+ ///
+ public static string HardBlockedPrefix {
+ get {
+ return ResourceManager.GetString("HardBlockedPrefix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hardware Serial.
+ ///
+ public static string HardwareSerial {
+ get {
+ return ResourceManager.GetString("HardwareSerial", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Hello, World!.
+ ///
+ public static string HelloWorld {
+ get {
+ return ResourceManager.GetString("HelloWorld", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to HMAC Key.
+ ///
+ public static string HmacKey {
+ get {
+ return ResourceManager.GetString("HmacKey", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to HMAC Key (X-Auth-Signature).
+ ///
+ public static string HmacKeyLabel {
+ get {
+ return ResourceManager.GetString("HmacKeyLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to homeassistant.
+ ///
+ public static string HomeassistantPlaceholder {
+ get {
+ return ResourceManager.GetString("HomeassistantPlaceholder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Home Port.
+ ///
+ public static string HomePortLabel {
+ get {
+ return ResourceManager.GetString("HomePortLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Host / IP.
+ ///
+ public static string HostIp {
+ get {
+ return ResourceManager.GetString("HostIp", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to How to connect.
+ ///
+ public static string HowToConnect {
+ get {
+ return ResourceManager.GetString("HowToConnect", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 1. Ensure your phone/PC is on the same WiFi network as the ESP32 board..
+ ///
+ public static string HowToConnectStep1 {
+ get {
+ return ResourceManager.GetString("HowToConnectStep1", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 2. Enter the IP address shown on the device's serial output or your router's DHCP table..
+ ///
+ public static string HowToConnectStep2 {
+ get {
+ return ResourceManager.GetString("HowToConnectStep2", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 3. The default port is 80..
+ ///
+ public static string HowToConnectStep3 {
+ get {
+ return ResourceManager.GetString("HowToConnectStep3", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 4. If the device has network authentication enabled (C19:e=1), enter the API Key or HMAC Key above to match the device's configuration..
+ ///
+ public static string HowToConnectStep4 {
+ get {
+ return ResourceManager.GetString("HowToConnectStep4", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 5. Tap Save & Connect, then return to the Dashboard..
+ ///
+ public static string HowToConnectStep5 {
+ get {
+ return ResourceManager.GetString("HowToConnectStep5", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to HTTP Port.
+ ///
+ public static string HttpPort {
+ get {
+ return ResourceManager.GetString("HttpPort", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Humidity.
+ ///
+ public static string HumidityLabel {
+ get {
+ return ResourceManager.GetString("HumidityLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Init Speed.
+ ///
+ public static string InitSpeed {
+ get {
+ return ResourceManager.GetString("InitSpeed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Install.
+ ///
+ public static string Install {
+ get {
+ return ResourceManager.GetString("Install", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Instant.
+ ///
+ public static string InstantLabel {
+ get {
+ return ResourceManager.GetString("InstantLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Daylight.
+ ///
+ public static string IsDaytimeLabel {
+ get {
+ return ResourceManager.GetString("IsDaytimeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Keep Alive (seconds).
+ ///
+ public static string KeepAliveSeconds {
+ get {
+ return ResourceManager.GetString("KeepAliveSeconds", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Clear.
+ ///
+ public static string LabelClear {
+ get {
+ return ResourceManager.GetString("LabelClear", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Day.
+ ///
+ public static string LabelDay {
+ get {
+ return ResourceManager.GetString("LabelDay", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Detected.
+ ///
+ public static string LabelDetected {
+ get {
+ return ResourceManager.GetString("LabelDetected", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Fix.
+ ///
+ public static string LabelFix {
+ get {
+ return ResourceManager.GetString("LabelFix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Night.
+ ///
+ public static string LabelNight {
+ get {
+ return ResourceManager.GetString("LabelNight", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No Fix.
+ ///
+ public static string LabelNoFix {
+ get {
+ return ResourceManager.GetString("LabelNoFix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Option 1 (int8).
+ ///
+ public static string LabelOpt1_0Default {
+ get {
+ return ResourceManager.GetString("LabelOpt1_0Default", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Option 2 (int8).
+ ///
+ public static string LabelOpt1_1Default {
+ get {
+ return ResourceManager.GetString("LabelOpt1_1Default", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Option 3 (int16).
+ ///
+ public static string LabelOpt2_0Default {
+ get {
+ return ResourceManager.GetString("LabelOpt2_0Default", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Option 4 (int16).
+ ///
+ public static string LabelOpt2_1Default {
+ get {
+ return ResourceManager.GetString("LabelOpt2_1Default", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIO Pin 0 (blank or 255 = disabled).
+ ///
+ public static string LabelPin0Default {
+ get {
+ return ResourceManager.GetString("LabelPin0Default", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPIO Pin 1 (blank or 255 = disabled).
+ ///
+ public static string LabelPin1Default {
+ get {
+ return ResourceManager.GetString("LabelPin1Default", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Language.
+ ///
+ public static string LanguageLabel {
+ get {
+ return ResourceManager.GetString("LanguageLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Latitude.
+ ///
+ public static string LatitudeLabel {
+ get {
+ return ResourceManager.GetString("LatitudeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Leave empty for none.
+ ///
+ public static string LeaveEmptyForNone {
+ get {
+ return ResourceManager.GetString("LeaveEmptyForNone", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Level.
+ ///
+ public static string LevelLabel {
+ get {
+ return ResourceManager.GetString("LevelLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Light Level.
+ ///
+ public static string LightLevelLabel {
+ get {
+ return ResourceManager.GetString("LightLevelLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Toggling this relay will also toggle the linked relay..
+ ///
+ public static string LinkedRelayHelp {
+ get {
+ return ResourceManager.GetString("LinkedRelayHelp", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Linked Relay.
+ ///
+ public static string LinkedRelayLabel {
+ get {
+ return ResourceManager.GetString("LinkedRelayLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Local Sensors.
+ ///
+ public static string LocalSensorsPageTitle {
+ get {
+ return ResourceManager.GetString("LocalSensorsPageTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Local Sensors.
+ ///
+ public static string LocalSensorsTitle {
+ get {
+ return ResourceManager.GetString("LocalSensorsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Location.
+ ///
+ public static string Location {
+ get {
+ return ResourceManager.GetString("Location", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Location name....
+ ///
+ public static string LocationNamePlaceholder {
+ get {
+ return ResourceManager.GetString("LocationNamePlaceholder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Boat Type.
+ ///
+ public static string LocationSettingsBoatTypeLabel {
+ get {
+ return ResourceManager.GetString("LocationSettingsBoatTypeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Call Sign.
+ ///
+ public static string LocationSettingsCallSignLabel {
+ get {
+ return ResourceManager.GetString("LocationSettingsCallSignLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Home Port.
+ ///
+ public static string LocationSettingsHomePortLabel {
+ get {
+ return ResourceManager.GetString("LocationSettingsHomePortLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MMSI.
+ ///
+ public static string LocationSettingsMmsiLabel {
+ get {
+ return ResourceManager.GetString("LocationSettingsMmsiLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Rename.
+ ///
+ public static string LocationSettingsRenameLabel {
+ get {
+ return ResourceManager.GetString("LocationSettingsRenameLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Location settings saved.
+ ///
+ public static string LocationSettingsSaved {
+ get {
+ return ResourceManager.GetString("LocationSettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Location Settings.
+ ///
+ public static string LocationSettingsTitle {
+ get {
+ return ResourceManager.GetString("LocationSettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Location Type.
+ ///
+ public static string LocationType {
+ get {
+ return ResourceManager.GetString("LocationType", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ConfigConnection consumer error.
+ ///
+ public static string LogConfigConsumerError {
+ get {
+ return ResourceManager.GetString("LogConfigConsumerError", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ConfigConnection executing: {Description}.
+ ///
+ public static string LogConfigExecuting {
+ get {
+ return ResourceManager.GetString("LogConfigExecuting", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ConfigConnection failed: {Description}.
+ ///
+ public static string LogConfigFailed {
+ get {
+ return ResourceManager.GetString("LogConfigFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Device returned failure response.
+ ///
+ public static string LogConfigFailureResponse {
+ get {
+ return ResourceManager.GetString("LogConfigFailureResponse", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ConfigPoller: Connection health check failed..
+ ///
+ public static string LogConfigHealthCheckFailed {
+ get {
+ return ResourceManager.GetString("LogConfigHealthCheckFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ConfigPoller: SensorMetaCache refreshed after connection..
+ ///
+ public static string LogConfigMetaRefreshed {
+ get {
+ return ResourceManager.GetString("LogConfigMetaRefreshed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ConfigConnection succeeded: {Description}.
+ ///
+ public static string LogConfigSucceeded {
+ get {
+ return ResourceManager.GetString("LogConfigSucceeded", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to DashboardPoller fetched index at {Time}.
+ ///
+ public static string LogDashboardFetched {
+ get {
+ return ResourceManager.GetString("LogDashboardFetched", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to DashboardPoller skipping poll: service not configured.
+ ///
+ public static string LogDashboardSkipping {
+ get {
+ return ResourceManager.GetString("LogDashboardSkipping", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to DashboardPoller started with interval {IntervalMs}ms.
+ ///
+ public static string LogDashboardStarted {
+ get {
+ return ResourceManager.GetString("LogDashboardStarted", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to DashboardPoller stopping.
+ ///
+ public static string LogDashboardStopping {
+ get {
+ return ResourceManager.GetString("LogDashboardStopping", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Device returned invalid JSON while polling index.
+ ///
+ public static string LogDeviceInvalidJson {
+ get {
+ return ResourceManager.GetString("LogDeviceInvalidJson", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to LOG.
+ ///
+ public static string LogLabel {
+ get {
+ return ResourceManager.GetString("LogLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to refresh sensor meta cache at startup.
+ ///
+ public static string LogMetaRefreshFailed {
+ get {
+ return ResourceManager.GetString("LogMetaRefreshFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to OTA: triggering firmware install….
+ ///
+ public static string LogOtaTrigger {
+ get {
+ return ResourceManager.GetString("LogOtaTrigger", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to publish failure message for: {Description}.
+ ///
+ public static string LogPublishFailureFailed {
+ get {
+ return ResourceManager.GetString("LogPublishFailureFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to publish success message for: {Description}.
+ ///
+ public static string LogPublishSuccessFailed {
+ get {
+ return ResourceManager.GetString("LogPublishSuccessFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Startup: dashboard data already available, fetching sensor meta on connection 2..
+ ///
+ public static string LogStartupMetaAlready {
+ get {
+ return ResourceManager.GetString("LogStartupMetaAlready", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Startup: first dashboard data received, fetching sensor meta on connection 2..
+ ///
+ public static string LogStartupMetaFetch {
+ get {
+ return ResourceManager.GetString("LogStartupMetaFetch", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Startup: sensor meta cache populated..
+ ///
+ public static string LogStartupMetaPopulated {
+ get {
+ return ResourceManager.GetString("LogStartupMetaPopulated", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TimeSyncService: device time is {DeviceTime}, delta {DeltaSec}s.
+ ///
+ public static string LogTimeSyncDeviceTime {
+ get {
+ return ResourceManager.GetString("LogTimeSyncDeviceTime", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TimeSyncService: time sync attempt failed.
+ ///
+ public static string LogTimeSyncFailed {
+ get {
+ return ResourceManager.GetString("LogTimeSyncFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TimeSyncService: device time is in sync (delta {DeltaSec}s).
+ ///
+ public static string LogTimeSyncInSync {
+ get {
+ return ResourceManager.GetString("LogTimeSyncInSync", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TimeSyncService: device time not set, synchronizing.
+ ///
+ public static string LogTimeSyncNotSet {
+ get {
+ return ResourceManager.GetString("LogTimeSyncNotSet", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TimeSyncService: drift {DeltaSec}s exceeds threshold, setting device time to {LocalTime}.
+ ///
+ public static string LogTimeSyncSetting {
+ get {
+ return ResourceManager.GetString("LogTimeSyncSetting", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TimeSyncService started with interval {IntervalMin}min, drift threshold {DriftSec}s.
+ ///
+ public static string LogTimeSyncStarted {
+ get {
+ return ResourceManager.GetString("LogTimeSyncStarted", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TimeSyncService stopping.
+ ///
+ public static string LogTimeSyncStopping {
+ get {
+ return ResourceManager.GetString("LogTimeSyncStopping", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unexpected error while polling index.
+ ///
+ public static string LogUnexpectedPollingError {
+ get {
+ return ResourceManager.GetString("LogUnexpectedPollingError", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Longitude.
+ ///
+ public static string LongitudeLabel {
+ get {
+ return ResourceManager.GetString("LongitudeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Long Name (max 20 chars).
+ ///
+ public static string LongNameLabel {
+ get {
+ return ResourceManager.GetString("LongNameLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Mem:.
+ ///
+ public static string MemLabel {
+ get {
+ return ResourceManager.GetString("MemLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Device unreachable.
+ ///
+ public static string MessageDeviceUnreachable {
+ get {
+ return ResourceManager.GetString("MessageDeviceUnreachable", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No active warnings.
+ ///
+ public static string MessageNoActiveWarnings {
+ get {
+ return ResourceManager.GetString("MessageNoActiveWarnings", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not configured — tap ⚙ to set device IP.
+ ///
+ public static string MessageNotConfigured {
+ get {
+ return ResourceManager.GetString("MessageNotConfigured", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not connected.
+ ///
+ public static string MessageNotConnected {
+ get {
+ return ResourceManager.GetString("MessageNotConnected", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Toggle failed — see log.
+ ///
+ public static string MessageToggleFailed {
+ get {
+ return ResourceManager.GetString("MessageToggleFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MISO (Master In).
+ ///
+ public static string MisoMasterIn {
+ get {
+ return ResourceManager.GetString("MisoMasterIn", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MMSI.
+ ///
+ public static string MmsiLabel {
+ get {
+ return ResourceManager.GetString("MmsiLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MOSI (Master Out).
+ ///
+ public static string MosiMasterOut {
+ get {
+ return ResourceManager.GetString("MosiMasterOut", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT.
+ ///
+ public static string MQTT {
+ get {
+ return ResourceManager.GetString("MQTT", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Broker.
+ ///
+ public static string MqttBrokerLabel {
+ get {
+ return ResourceManager.GetString("MqttBrokerLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Connected.
+ ///
+ public static string MqttConnected {
+ get {
+ return ResourceManager.GetString("MqttConnected", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Connection.
+ ///
+ public static string MqttConnectionLabel {
+ get {
+ return ResourceManager.GetString("MqttConnectionLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Connection State.
+ ///
+ public static string MqttConnectionStateLabel {
+ get {
+ return ResourceManager.GetString("MqttConnectionStateLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT Device Class.
+ ///
+ public static string MqttDeviceClass {
+ get {
+ return ResourceManager.GetString("MqttDeviceClass", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Device ID.
+ ///
+ public static string MqttDeviceIdLabel {
+ get {
+ return ResourceManager.GetString("MqttDeviceIdLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. boat_seawolf_01.
+ ///
+ public static string MqttDeviceIdPlaceholder {
+ get {
+ return ResourceManager.GetString("MqttDeviceIdPlaceholder", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Disconnected.
+ ///
+ public static string MqttDisconnected {
+ get {
+ return ResourceManager.GetString("MqttDisconnected", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Discovery Prefix.
+ ///
+ public static string MqttDiscoveryPrefixLabel {
+ get {
+ return ResourceManager.GetString("MqttDiscoveryPrefixLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT Enabled.
+ ///
+ public static string MqttEnabledLabel {
+ get {
+ return ResourceManager.GetString("MqttEnabledLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Home Assistant Discovery.
+ ///
+ public static string MqttHaDiscoveryLabel {
+ get {
+ return ResourceManager.GetString("MqttHaDiscoveryLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Keep Alive (s).
+ ///
+ public static string MqttKeepAliveLabel {
+ get {
+ return ResourceManager.GetString("MqttKeepAliveLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT Name.
+ ///
+ public static string MqttName {
+ get {
+ return ResourceManager.GetString("MqttName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Password.
+ ///
+ public static string MqttPasswordLabel {
+ get {
+ return ResourceManager.GetString("MqttPasswordLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Port.
+ ///
+ public static string MqttPortLabel {
+ get {
+ return ResourceManager.GetString("MqttPortLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT settings saved.
+ ///
+ public static string MqttSettingsSaved {
+ get {
+ return ResourceManager.GetString("MqttSettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT Settings.
+ ///
+ public static string MqttSettingsTitle {
+ get {
+ return ResourceManager.GetString("MqttSettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT Slug.
+ ///
+ public static string MqttSlug {
+ get {
+ return ResourceManager.GetString("MqttSlug", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT Type.
+ ///
+ public static string MqttType {
+ get {
+ return ResourceManager.GetString("MqttType", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MQTT Unit.
+ ///
+ public static string MqttUnit {
+ get {
+ return ResourceManager.GetString("MqttUnit", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Username.
+ ///
+ public static string MqttUsernameLabel {
+ get {
+ return ResourceManager.GetString("MqttUsernameLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cancel.
+ ///
+ public static string MsgCancel {
+ get {
+ return ResourceManager.GetString("MsgCancel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enter a valid port number (1–65535)..
+ ///
+ public static string MsgInvalidPort {
+ get {
+ return ResourceManager.GetString("MsgInvalidPort", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to IP address is required..
+ ///
+ public static string MsgIpRequired {
+ get {
+ return ResourceManager.GetString("MsgIpRequired", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Name.
+ ///
+ public static string NameLabel {
+ get {
+ return ResourceManager.GetString("NameLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to API Key.
+ ///
+ public static string NetworkSecurityApiKeyLabel {
+ get {
+ return ResourceManager.GetString("NetworkSecurityApiKeyLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Authentication Enabled.
+ ///
+ public static string NetworkSecurityAuthEnabledLabel {
+ get {
+ return ResourceManager.GetString("NetworkSecurityAuthEnabledLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Key generation failed — device unreachable.
+ ///
+ public static string NetworkSecurityGenerateFailed {
+ get {
+ return ResourceManager.GetString("NetworkSecurityGenerateFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Generate New Keys.
+ ///
+ public static string NetworkSecurityGenerateKeys {
+ get {
+ return ResourceManager.GetString("NetworkSecurityGenerateKeys", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to HMAC Key.
+ ///
+ public static string NetworkSecurityHmacKeyLabel {
+ get {
+ return ResourceManager.GetString("NetworkSecurityHmacKeyLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to New keys generated and saved.
+ ///
+ public static string NetworkSecurityKeysGenerated {
+ get {
+ return ResourceManager.GetString("NetworkSecurityKeysGenerated", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Network security settings saved.
+ ///
+ public static string NetworkSecuritySettingsSaved {
+ get {
+ return ResourceManager.GetString("NetworkSecuritySettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Network Security.
+ ///
+ public static string NetworkSecurityTitle {
+ get {
+ return ResourceManager.GetString("NetworkSecurityTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Nextion.
+ ///
+ public static string Nextion {
+ get {
+ return ResourceManager.GetString("Nextion", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Baud Rate.
+ ///
+ public static string NextionBaudRateLabel {
+ get {
+ return ResourceManager.GetString("NextionBaudRateLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Nextion Display.
+ ///
+ public static string NextionDisplay {
+ get {
+ return ResourceManager.GetString("NextionDisplay", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Enabled.
+ ///
+ public static string NextionEnabledLabel {
+ get {
+ return ResourceManager.GetString("NextionEnabledLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Failed to save settings before reboot..
+ ///
+ public static string NextionRebootFailed {
+ get {
+ return ResourceManager.GetString("NextionRebootFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Changes require a device reboot to take effect. Reboot device now? (If the device has no reboot endpoint you will need to power-cycle it manually).
+ ///
+ public static string NextionRebootMessage {
+ get {
+ return ResourceManager.GetString("NextionRebootMessage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Changes to Nextion configuration require a device reboot to take effect. Save settings and reboot the device..
+ ///
+ public static string NextionRebootRequiredMessage {
+ get {
+ return ResourceManager.GetString("NextionRebootRequiredMessage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Settings saved. Please power-cycle the device to apply Nextion configuration..
+ ///
+ public static string NextionRebootSavedMessage {
+ get {
+ return ResourceManager.GetString("NextionRebootSavedMessage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reboot Required.
+ ///
+ public static string NextionRebootTitle {
+ get {
+ return ResourceManager.GetString("NextionRebootTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to RX Pin.
+ ///
+ public static string NextionRxPinLabel {
+ get {
+ return ResourceManager.GetString("NextionRxPinLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Nextion settings saved.
+ ///
+ public static string NextionSettingsSaved {
+ get {
+ return ResourceManager.GetString("NextionSettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Nextion Settings.
+ ///
+ public static string NextionSettingsTitle {
+ get {
+ return ResourceManager.GetString("NextionSettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TX Pin.
+ ///
+ public static string NextionTxPinLabel {
+ get {
+ return ResourceManager.GetString("NextionTxPinLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UART1.
+ ///
+ public static string NextionUart1 {
+ get {
+ return ResourceManager.GetString("NextionUart1", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UART2.
+ ///
+ public static string NextionUart2 {
+ get {
+ return ResourceManager.GetString("NextionUart2", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UART Port.
+ ///
+ public static string NextionUartLabel {
+ get {
+ return ResourceManager.GetString("NextionUartLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to None.
+ ///
+ public static string None {
+ get {
+ return ResourceManager.GetString("None", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No relays configured.
+ ///
+ public static string NoRelaysConfigured {
+ get {
+ return ResourceManager.GetString("NoRelaysConfigured", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No sensors configured.
+ ///
+ public static string NoSensorsConfigured {
+ get {
+ return ResourceManager.GetString("NoSensorsConfigured", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not configured.
+ ///
+ public static string NotConfigured {
+ get {
+ return ResourceManager.GetString("NotConfigured", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to OK.
+ ///
+ public static string OK {
+ get {
+ return ResourceManager.GetString("OK", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to OPTIONS.
+ ///
+ public static string OptionsSection {
+ get {
+ return ResourceManager.GetString("OptionsSection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Install.
+ ///
+ public static string OtaDialogAccept {
+ get {
+ return ResourceManager.GetString("OtaDialogAccept", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to An OTA update to {0} is available. Download and install now?.
+ ///
+ public static string OtaDialogMessage {
+ get {
+ return ResourceManager.GetString("OtaDialogMessage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Install Firmware.
+ ///
+ public static string OtaDialogTitle {
+ get {
+ return ResourceManager.GetString("OtaDialogTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Update available: {0} (installed: {1}).
+ ///
+ public static string OtaLabelAvailable {
+ get {
+ return ResourceManager.GetString("OtaLabelAvailable", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Checking for firmware update….
+ ///
+ public static string OtaLabelChecking {
+ get {
+ return ResourceManager.GetString("OtaLabelChecking", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Downloading firmware update….
+ ///
+ public static string OtaLabelDownloading {
+ get {
+ return ResourceManager.GetString("OtaLabelDownloading", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Firmware update failed. Tap to retry..
+ ///
+ public static string OtaLabelFailed {
+ get {
+ return ResourceManager.GetString("OtaLabelFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Applying update — device rebooting….
+ ///
+ public static string OtaLabelRebooting {
+ get {
+ return ResourceManager.GetString("OtaLabelRebooting", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Firmware is up to date ({0}).
+ ///
+ public static string OtaLabelUptodate {
+ get {
+ return ResourceManager.GetString("OtaLabelUptodate", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to OTA trigger failed.
+ ///
+ public static string OtaTriggerFailed {
+ get {
+ return ResourceManager.GetString("OtaTriggerFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pin {0}.
+ ///
+ public static string PinFormat {
+ get {
+ return ResourceManager.GetString("PinFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pin {0}, {1}.
+ ///
+ public static string PinPairFormat {
+ get {
+ return ResourceManager.GetString("PinPairFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pins.
+ ///
+ public static string Pins {
+ get {
+ return ResourceManager.GetString("Pins", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {0} pin(s) currently assigned.
+ ///
+ public static string PinsAssignedFormat {
+ get {
+ return ResourceManager.GetString("PinsAssignedFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to pin(s) currently assigned.
+ ///
+ public static string PinsAssignedSuffix {
+ get {
+ return ResourceManager.GetString("PinsAssignedSuffix", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pin {0}, {1}.
+ ///
+ public static string PinSummaryFormat {
+ get {
+ return ResourceManager.GetString("PinSummaryFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 255 = disabled.
+ ///
+ public static string Placeholder255Disabled {
+ get {
+ return ResourceManager.GetString("Placeholder255Disabled", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Optional – device API key for authentication.
+ ///
+ public static string PlaceholderApiKey {
+ get {
+ return ResourceManager.GetString("PlaceholderApiKey", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 9600.
+ ///
+ public static string PlaceholderBaud9600 {
+ get {
+ return ResourceManager.GetString("PlaceholderBaud9600", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. Bilge Pump.
+ ///
+ public static string PlaceholderBilgePump {
+ get {
+ return ResourceManager.GetString("PlaceholderBilgePump", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. Bilge.
+ ///
+ public static string PlaceholderBilgeShort {
+ get {
+ return ResourceManager.GetString("PlaceholderBilgeShort", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Optional – HMAC-SHA256 key for authentication.
+ ///
+ public static string PlaceholderHmacKey {
+ get {
+ return ResourceManager.GetString("PlaceholderHmacKey", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 192.168.1.100.
+ ///
+ public static string PlaceholderIpAddress {
+ get {
+ return ResourceManager.GetString("PlaceholderIpAddress", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 60.
+ ///
+ public static string PlaceholderKeepAlive {
+ get {
+ return ResourceManager.GetString("PlaceholderKeepAlive", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. Bilge Pump.
+ ///
+ public static string PlaceholderLongName {
+ get {
+ return ResourceManager.GetString("PlaceholderLongName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 1883.
+ ///
+ public static string PlaceholderMqttPort {
+ get {
+ return ResourceManager.GetString("PlaceholderMqttPort", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 10.
+ ///
+ public static string PlaceholderPin10 {
+ get {
+ return ResourceManager.GetString("PlaceholderPin10", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 11.
+ ///
+ public static string PlaceholderPin11 {
+ get {
+ return ResourceManager.GetString("PlaceholderPin11", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 12.
+ ///
+ public static string PlaceholderPin12 {
+ get {
+ return ResourceManager.GetString("PlaceholderPin12", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 13.
+ ///
+ public static string PlaceholderPin13 {
+ get {
+ return ResourceManager.GetString("PlaceholderPin13", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 21.
+ ///
+ public static string PlaceholderPin21 {
+ get {
+ return ResourceManager.GetString("PlaceholderPin21", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 22.
+ ///
+ public static string PlaceholderPin22 {
+ get {
+ return ResourceManager.GetString("PlaceholderPin22", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. 23.
+ ///
+ public static string PlaceholderPin23 {
+ get {
+ return ResourceManager.GetString("PlaceholderPin23", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 255 = disabled.
+ ///
+ public static string PlaceholderPinDisabled {
+ get {
+ return ResourceManager.GetString("PlaceholderPinDisabled", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 80.
+ ///
+ public static string PlaceholderPort {
+ get {
+ return ResourceManager.GetString("PlaceholderPort", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to e.g. Bilge.
+ ///
+ public static string PlaceholderShortName {
+ get {
+ return ResourceManager.GetString("PlaceholderShortName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to 4.
+ ///
+ public static string PlaceholderSpeedMhz {
+ get {
+ return ResourceManager.GetString("PlaceholderSpeedMhz", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to PowerHubService is not configured. Call Configure() first..
+ ///
+ public static string PowerHubNotConfigured {
+ get {
+ return ResourceManager.GetString("PowerHubNotConfigured", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reboot.
+ ///
+ public static string Reboot {
+ get {
+ return ResourceManager.GetString("Reboot", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reboot required.
+ ///
+ public static string RebootRequired {
+ get {
+ return ResourceManager.GetString("RebootRequired", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Refreshed.
+ ///
+ public static string Refreshed {
+ get {
+ return ResourceManager.GetString("Refreshed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Refresh now.
+ ///
+ public static string RefreshNowTooltip {
+ get {
+ return ResourceManager.GetString("RefreshNowTooltip", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Relay Config.
+ ///
+ public static string RelayConfigPageTitle {
+ get {
+ return ResourceManager.GetString("RelayConfigPageTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Relay Configuration.
+ ///
+ public static string RelayConfigTitle {
+ get {
+ return ResourceManager.GetString("RelayConfigTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Relay.
+ ///
+ public static string RelayPageTitle {
+ get {
+ return ResourceManager.GetString("RelayPageTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Relay {0}.
+ ///
+ public static string RelayPageTitleFormat {
+ get {
+ return ResourceManager.GetString("RelayPageTitleFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Relays.
+ ///
+ public static string Relays {
+ get {
+ return ResourceManager.GetString("Relays", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Remove.
+ ///
+ public static string Remove {
+ get {
+ return ResourceManager.GetString("Remove", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Remove Sensor.
+ ///
+ public static string RemoveSensor {
+ get {
+ return ResourceManager.GetString("RemoveSensor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Reset Pin.
+ ///
+ public static string ResetPin {
+ get {
+ return ResourceManager.GetString("ResetPin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Rolling avg.
+ ///
+ public static string RollingAvgLabel {
+ get {
+ return ResourceManager.GetString("RollingAvgLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to RTC.
+ ///
+ public static string RTC {
+ get {
+ return ResourceManager.GetString("RTC", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to RTC Pins.
+ ///
+ public static string RtcPins {
+ get {
+ return ResourceManager.GetString("RtcPins", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to RTC settings saved.
+ ///
+ public static string RtcSettingsSaved {
+ get {
+ return ResourceManager.GetString("RtcSettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to RTC Settings.
+ ///
+ public static string RtcSettingsTitle {
+ get {
+ return ResourceManager.GetString("RtcSettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to RX Pin (blank or 255 = disabled).
+ ///
+ public static string RxPinDisabled {
+ get {
+ return ResourceManager.GetString("RxPinDisabled", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Satellites.
+ ///
+ public static string SatellitesLabel {
+ get {
+ return ResourceManager.GetString("SatellitesLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Save.
+ ///
+ public static string Save {
+ get {
+ return ResourceManager.GetString("Save", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Save All Settings.
+ ///
+ public static string SaveAllSettings {
+ get {
+ return ResourceManager.GetString("SaveAllSettings", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Save & Connect.
+ ///
+ public static string SaveAndConnect {
+ get {
+ return ResourceManager.GetString("SaveAndConnect", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to One or more commands failed.
+ ///
+ public static string SavedFailed {
+ get {
+ return ResourceManager.GetString("SavedFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Saved successfully.
+ ///
+ public static string SavedOk {
+ get {
+ return ResourceManager.GetString("SavedOk", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Save failed — device unreachable.
+ ///
+ public static string SaveFailed {
+ get {
+ return ResourceManager.GetString("SaveFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Save Timezone.
+ ///
+ public static string SaveTimezone {
+ get {
+ return ResourceManager.GetString("SaveTimezone", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SCK (Clock).
+ ///
+ public static string SckClock {
+ get {
+ return ResourceManager.GetString("SckClock", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SD Card.
+ ///
+ public static string SDCard {
+ get {
+ return ResourceManager.GetString("SDCard", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to CS Pin.
+ ///
+ public static string SdCardCsPinLabel {
+ get {
+ return ResourceManager.GetString("SdCardCsPinLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Init Speed (MHz).
+ ///
+ public static string SdCardInitSpeedLabel {
+ get {
+ return ResourceManager.GetString("SdCardInitSpeedLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Partially saved — SPI pins rejected (check for pin conflicts).
+ ///
+ public static string SdCardPartiallySaved {
+ get {
+ return ResourceManager.GetString("SdCardPartiallySaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SD Card settings saved.
+ ///
+ public static string SdCardSettingsSaved {
+ get {
+ return ResourceManager.GetString("SdCardSettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SD Card Settings.
+ ///
+ public static string SdCardSettingsTitle {
+ get {
+ return ResourceManager.GetString("SdCardSettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SPI pins not saved (pin conflict or invalid pin).
+ ///
+ public static string SdCardSpiFailed {
+ get {
+ return ResourceManager.GetString("SdCardSpiFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SPI Pins (SCK/MOSI/MISO).
+ ///
+ public static string SdCardSpiPinsLabel {
+ get {
+ return ResourceManager.GetString("SdCardSpiPinsLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to BEHAVIOUR.
+ ///
+ public static string SectionBehaviour {
+ get {
+ return ResourceManager.GetString("SectionBehaviour", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to HARDWARE.
+ ///
+ public static string SectionHardware {
+ get {
+ return ResourceManager.GetString("SectionHardware", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to IDENTITY.
+ ///
+ public static string SectionIdentity {
+ get {
+ return ResourceManager.GetString("SectionIdentity", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to LINKING.
+ ///
+ public static string SectionLinking {
+ get {
+ return ResourceManager.GetString("SectionLinking", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Security.
+ ///
+ public static string Security {
+ get {
+ return ResourceManager.GetString("Security", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Select location type....
+ ///
+ public static string SelectLocationType {
+ get {
+ return ResourceManager.GetString("SelectLocationType", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Select sensor type.
+ ///
+ public static string SelectSensorType {
+ get {
+ return ResourceManager.GetString("SelectSensorType", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Select timezone....
+ ///
+ public static string SelectTimezone {
+ get {
+ return ResourceManager.GetString("SelectTimezone", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sensor Enabled.
+ ///
+ public static string SensorEnabled {
+ get {
+ return ResourceManager.GetString("SensorEnabled", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Not configured.
+ ///
+ public static string SensorNotConfigured {
+ get {
+ return ResourceManager.GetString("SensorNotConfigured", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sensor.
+ ///
+ public static string SensorPageTitle {
+ get {
+ return ResourceManager.GetString("SensorPageTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SENSORS.
+ ///
+ public static string SensorsSection {
+ get {
+ return ResourceManager.GetString("SensorsSection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to °C.
+ ///
+ public static string SensorSuffixCelsius {
+ get {
+ return ResourceManager.GetString("SensorSuffixCelsius", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to °.
+ ///
+ public static string SensorSuffixDegree {
+ get {
+ return ResourceManager.GetString("SensorSuffixDegree", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to kb.
+ ///
+ public static string SensorSuffixKb {
+ get {
+ return ResourceManager.GetString("SensorSuffixKb", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to km/h.
+ ///
+ public static string SensorSuffixKmh {
+ get {
+ return ResourceManager.GetString("SensorSuffixKmh", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to m.
+ ///
+ public static string SensorSuffixMetre {
+ get {
+ return ResourceManager.GetString("SensorSuffixMetre", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to %.
+ ///
+ public static string SensorSuffixPercent {
+ get {
+ return ResourceManager.GetString("SensorSuffixPercent", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to V.
+ ///
+ public static string SensorSuffixVolt {
+ get {
+ return ResourceManager.GetString("SensorSuffixVolt", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sensor.
+ ///
+ public static string SensorTitle {
+ get {
+ return ResourceManager.GetString("SensorTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Binary Presence.
+ ///
+ public static string SensorTypeBinaryPresence {
+ get {
+ return ResourceManager.GetString("SensorTypeBinaryPresence", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Binary Presence (5).
+ ///
+ public static string SensorTypeBinaryPresencePicker {
+ get {
+ return ResourceManager.GetString("SensorTypeBinaryPresencePicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to DHT11.
+ ///
+ public static string SensorTypeDht11 {
+ get {
+ return ResourceManager.GetString("SensorTypeDht11", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to DHT11 (1).
+ ///
+ public static string SensorTypeDht11Picker {
+ get {
+ return ResourceManager.GetString("SensorTypeDht11Picker", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPS.
+ ///
+ public static string SensorTypeGps {
+ get {
+ return ResourceManager.GetString("SensorTypeGps", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to GPS (3).
+ ///
+ public static string SensorTypeGpsPicker {
+ get {
+ return ResourceManager.GetString("SensorTypeGpsPicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sensor Type.
+ ///
+ public static string SensorTypeLabel {
+ get {
+ return ResourceManager.GetString("SensorTypeLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Light.
+ ///
+ public static string SensorTypeLight {
+ get {
+ return ResourceManager.GetString("SensorTypeLight", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Light (2).
+ ///
+ public static string SensorTypeLightPicker {
+ get {
+ return ResourceManager.GetString("SensorTypeLightPicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sensor type metadata unavailable..
+ ///
+ public static string SensorTypeMetaDataUnavailable {
+ get {
+ return ResourceManager.GetString("SensorTypeMetaDataUnavailable", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Presence.
+ ///
+ public static string SensorTypePresence {
+ get {
+ return ResourceManager.GetString("SensorTypePresence", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Presence.
+ ///
+ public static string SensorTypePresenceShort {
+ get {
+ return ResourceManager.GetString("SensorTypePresenceShort", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to System.
+ ///
+ public static string SensorTypeSystem {
+ get {
+ return ResourceManager.GetString("SensorTypeSystem", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to System (4).
+ ///
+ public static string SensorTypeSystemPicker {
+ get {
+ return ResourceManager.GetString("SensorTypeSystemPicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unknown.
+ ///
+ public static string SensorTypeUnknown {
+ get {
+ return ResourceManager.GetString("SensorTypeUnknown", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Voltage.
+ ///
+ public static string SensorTypeVoltage {
+ get {
+ return ResourceManager.GetString("SensorTypeVoltage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Voltage (6).
+ ///
+ public static string SensorTypeVoltagePicker {
+ get {
+ return ResourceManager.GetString("SensorTypeVoltagePicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Water.
+ ///
+ public static string SensorTypeWater {
+ get {
+ return ResourceManager.GetString("SensorTypeWater", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Water (0).
+ ///
+ public static string SensorTypeWaterPicker {
+ get {
+ return ResourceManager.GetString("SensorTypeWaterPicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Settings.
+ ///
+ public static string Settings {
+ get {
+ return ResourceManager.GetString("Settings", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Settings.
+ ///
+ public static string SettingsTitle {
+ get {
+ return ResourceManager.GetString("SettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Short Name (max 5 chars).
+ ///
+ public static string ShortNameLabel {
+ get {
+ return ResourceManager.GetString("ShortNameLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Speed.
+ ///
+ public static string SpeedLabel {
+ get {
+ return ResourceManager.GetString("SpeedLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Speed (MHz).
+ ///
+ public static string SpeedMhz {
+ get {
+ return ResourceManager.GetString("SpeedMhz", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to SPI Pins.
+ ///
+ public static string SpiPins {
+ get {
+ return ResourceManager.GetString("SpiPins", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to State.
+ ///
+ public static string StateLabel {
+ get {
+ return ResourceManager.GetString("StateLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Off.
+ ///
+ public static string StateOff {
+ get {
+ return ResourceManager.GetString("StateOff", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to On.
+ ///
+ public static string StateOn {
+ get {
+ return ResourceManager.GetString("StateOn", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to °C.
+ ///
+ public static string SuffixCelsius {
+ get {
+ return ResourceManager.GetString("SuffixCelsius", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to °.
+ ///
+ public static string SuffixDegree {
+ get {
+ return ResourceManager.GetString("SuffixDegree", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to kb.
+ ///
+ public static string SuffixKb {
+ get {
+ return ResourceManager.GetString("SuffixKb", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to km/h.
+ ///
+ public static string SuffixKmh {
+ get {
+ return ResourceManager.GetString("SuffixKmh", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to m.
+ ///
+ public static string SuffixMetre {
+ get {
+ return ResourceManager.GetString("SuffixMetre", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to %.
+ ///
+ public static string SuffixPercent {
+ get {
+ return ResourceManager.GetString("SuffixPercent", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to V.
+ ///
+ public static string SuffixVolt {
+ get {
+ return ResourceManager.GetString("SuffixVolt", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sync Time Now.
+ ///
+ public static string SyncTimeNow {
+ get {
+ return ResourceManager.GetString("SyncTimeNow", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to System.
+ ///
+ public static string SystemTitle {
+ get {
+ return ResourceManager.GetString("SystemTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Temperature.
+ ///
+ public static string TemperatureLabel {
+ get {
+ return ResourceManager.GetString("TemperatureLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Temp.
+ ///
+ public static string TempLabel {
+ get {
+ return ResourceManager.GetString("TempLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Dark.
+ ///
+ public static string ThemeDark {
+ get {
+ return ResourceManager.GetString("ThemeDark", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Light.
+ ///
+ public static string ThemeLight {
+ get {
+ return ResourceManager.GetString("ThemeLight", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Time.
+ ///
+ public static string Time {
+ get {
+ return ResourceManager.GetString("Time", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Time settings saved.
+ ///
+ public static string TimeSettingsSaved {
+ get {
+ return ResourceManager.GetString("TimeSettingsSaved", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sync Now.
+ ///
+ public static string TimeSettingsSyncNow {
+ get {
+ return ResourceManager.GetString("TimeSettingsSyncNow", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Timezone Offset (hours).
+ ///
+ public static string TimeSettingsTimezoneLabel {
+ get {
+ return ResourceManager.GetString("TimeSettingsTimezoneLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Time Settings.
+ ///
+ public static string TimeSettingsTitle {
+ get {
+ return ResourceManager.GetString("TimeSettingsTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Timezone.
+ ///
+ public static string TimezoneLabel {
+ get {
+ return ResourceManager.GetString("TimezoneLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to TX Pin (blank or 255 = disabled).
+ ///
+ public static string TxPinDisabled {
+ get {
+ return ResourceManager.GetString("TxPinDisabled", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UART.
+ ///
+ public static string Uart {
+ get {
+ return ResourceManager.GetString("Uart", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to UART Number.
+ ///
+ public static string UartNumber {
+ get {
+ return ResourceManager.GetString("UartNumber", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Use 255 to disable.
+ ///
+ public static string Use255Disable {
+ get {
+ return ResourceManager.GetString("Use255Disable", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Use 255 to disable any pin.
+ ///
+ public static string Use255DisableAnyPin {
+ get {
+ return ResourceManager.GetString("Use255DisableAnyPin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Use 255 to disable pin.
+ ///
+ public static string Use255DisablePin {
+ get {
+ return ResourceManager.GetString("Use255DisablePin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Valid: 4, 8, 12, 16, 20, 24 MHz.
+ ///
+ public static string ValidSpeeds {
+ get {
+ return ResourceManager.GetString("ValidSpeeds", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Voltage.
+ ///
+ public static string VoltageLabel {
+ get {
+ return ResourceManager.GetString("VoltageLabel", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Water Level.
+ ///
+ public static string WaterLevelLabel {
+ get {
+ return ResourceManager.GetString("WaterLevelLabel", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.da-DK.resx b/PowerControlHubApp/Resources/Localization/AppResources.da-DK.resx
new file mode 100644
index 0000000..2fc0f1e
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.da-DK.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Ikke konfigureret — tryk på ⚙ for at indstille enheds-IP
+
+
+ Enheden kan ikke nås
+
+
+ Ingen aktive advarsler
+
+
+ Skift mislykkedes — se loggen
+
+
+ Ikke forbundet
+
+
+ IP-adresse er påkrævet.
+
+
+ Indtast et gyldigt portnummer (1–65535).
+
+
+ Ikke konfigureret
+
+
+ OTA: starter firmwareinstallation…
+
+
+ OTA-trigger fejlede
+
+
+ Installer firmware
+
+
+ Installer
+
+
+ En OTA-opdatering til {0} er tilgængelig. Vil du downloade og installere den nu?
+
+
+ Opdatering tilgængelig: {0} (installeret: {1})
+
+
+ Søger efter firmwareopdatering…
+
+
+ Henter firmwareopdatering…
+
+
+ Installerer opdatering — enheden genstarter…
+
+
+ Firmwareopdatering mislykkedes. Tryk for at prøve igen.
+
+
+ Firmware er opdateret ({0})
+
+
+ DashboardPoller startet med interval {IntervalMs}ms
+
+
+ DashboardPoller hentede indeks kl. {Time}
+
+
+ DashboardPoller springer polling over: tjenesten er ikke konfigureret
+
+
+ Enhed returnerede ugyldig JSON under polling af indeks
+
+
+ Uventet fejl under polling af indeks
+
+
+ DashboardPoller stopper
+
+
+ Kunne ikke opdatere sensor meta cache ved opstart
+
+
+ Relæ
+
+
+ Relæ {0}
+
+
+ Gemt succesfuldt
+
+
+ En eller flere kommandoer mislykkedes
+
+
+ Gem mislykkedes — enhed ikke tilgængelig
+
+
+ Fastgør {0}
+
+
+ PIN {0}, {1}
+
+
+ Fjern kommando mislykkedes
+
+
+ Fjern sensor
+
+
+ Fjern
+
+
+ Annuller
+
+
+ Gem
+
+
+ Tilbage
+
+
+ Ingen
+
+
+ OK
+
+
+ Genstart
+
+
+ Opdateret
+
+
+ blå
+
+
+ Grøn
+
+
+ grå
+
+
+ orange
+
+
+ Rød
+
+
+ gul
+
+
+ Standard
+
+
+ horn
+
+
+ Natstafet
+
+
+ Standard
+
+
+ horn
+
+
+ Nat
+
+
+ Slukket
+
+
+ Til
+
+
+ Lys
+
+
+ mørk
+
+
+ Indstillinger
+
+
+ Enhed IP-adresse
+
+
+ HTTP-port
+
+
+ API-nøgle (X-API-Key)
+
+
+ HMAC-nøgle (X-Auth-Signature)
+
+
+ App-tema
+
+
+ Gem & Tilslut
+
+
+ Sådan opretter du forbindelse
+
+
+ 1. Sørg for, at din telefon/pc er på det samme WiFi-netværk som ESP32-kortet.
+
+
+ 2. Indtast IP-adressen, der vises i enhedens serielle output eller din routers DHCP-tabel.
+
+
+ 3. Standardporten er 80.
+
+
+ 4. Hvis enheden har netværksgodkendelse aktiveret (C19:e=1), skal du indtaste API-nøglen eller HMAC-nøglen ovenfor for at matche enhedens konfiguration.
+
+
+ 5. Tryk på Gem & Tilslut, og vend derefter tilbage til Dashboardet.
+
+
+ f.eks. 192.168.1.100
+
+
+ 80
+
+
+ Valgfrit – enheds-API-nøgle til autentificering
+
+
+ Valgfrit – HMAC-SHA256-nøgle til autentificering
+
+
+ system
+
+
+ Tid
+
+
+ RTC
+
+
+ Placering
+
+
+ MQTT
+
+
+ SD-kort
+
+
+ Sikkerhed
+
+
+ Nextion
+
+
+ summer
+
+
+ Aktive advarsler
+
+
+ GPIO'er i brug
+
+
+ GPIO pin-begrænsninger
+
+
+ {0} pin(s) aktuelt tildelt
+
+
+ KONTROLLER
+
+
+ Sensorer
+
+
+ Relækonfiguration
+
+
+ Relækonfiguration
+
+
+ identitet
+
+
+ hardware
+
+
+ ADFÆRD
+
+
+ Sammenkædning
+
+
+ Kort navn (maks. 5 tegn)
+
+
+ Langt navn (maks. 20 tegn)
+
+
+ GPIO Pin (tom eller 255 = deaktiveret)
+
+
+ Standardtilstand ved tænding
+
+
+ Handlingstype
+
+
+ Knapfarve
+
+
+ Linket relæ
+
+
+ At skifte dette relæ vil også skifte det tilknyttede relæ.
+
+
+ f.eks. Bilge
+
+
+ f.eks. lænsepumpe
+
+
+ 255 = deaktiveret
+
+
+ Lokale sensorer
+
+
+ Eksterne sensorer
+
+
+ Lokale sensorer
+
+
+ Ekst. sensorer
+
+
+ sensor
+
+
+ Ikke konfigureret
+
+
+ Vand
+
+
+ DHT11
+
+
+ Lys
+
+
+ GPS
+
+
+ system
+
+
+ Binær tilstedeværelse
+
+
+ Spænding
+
+
+ Ukendt
+
+
+ Sensortype metadata ikke tilgængelig.
+
+
+ Vand (0)
+
+
+ DHT11 (1)
+
+
+ Lys (2)
+
+
+ GPS (3)
+
+
+ System (4)
+
+
+ Binær tilstedeværelse (5)
+
+
+ Spænding (6)
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/t
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Dag
+
+
+ Nat
+
+
+ Fix
+
+
+ Ingen løsning
+
+
+ Opdaget
+
+
+ Klar
+
+
+ tilføj/opdater sensorpost
+
+
+ skift aktiveret tilstand
+
+
+ Gem indstillinger på disk
+
+
+ Kunne ikke:
+
+
+ GPIO Pin 0 (tom eller 255 = deaktiveret)
+
+
+ GPIO-ben 1 (tom eller 255 = deaktiveret)
+
+
+ Mulighed 1 (int8)
+
+
+ Valgmulighed 2 (int8)
+
+
+ Mulighed 3 (int16)
+
+
+ Valgmulighed 4 (int16)
+
+
+ Tidsindstillinger
+
+
+ RTC-indstillinger
+
+
+ Placeringsindstillinger
+
+
+ MQTT-indstillinger
+
+
+ SD-kortindstillinger
+
+
+ Netværkssikkerhed
+
+
+ Nextion-indstillinger
+
+
+ Summerindstillinger
+
+
+ RTC-indstillinger gemt
+
+
+ Buzzerindstillinger gemt
+
+
+ Nextion indstillinger gemt
+
+
+ Genstart påkrævet
+
+
+ Ændringer kræver en genstart af enheden for at træde i kraft. Genstart enheden nu? (Hvis enheden ikke har et genstart-endepunkt, skal du slukke og tænde den manuelt)
+
+
+ Indstillinger gemt. Sluk og tænd venligst enheden for at anvende Nextion-konfigurationen.
+
+
+ Kunne ikke gemme indstillinger før genstart.
+
+
+ UART1
+
+
+ UART2
+
+
+ UART-port
+
+
+ baudrate
+
+
+ RX-ben
+
+
+ TX-ben
+
+
+ Aktiveret
+
+
+ Forbundet
+
+
+ Afbrudt
+
+
+ MQTT-indstillinger gemt
+
+
+ Forbindelse
+
+
+ MQTT aktiveret
+
+
+ Forbindelsestilstand
+
+
+ Mægler
+
+
+ Havn
+
+
+ brugernavn
+
+
+ Adgangskode
+
+
+ Enheds-id
+
+
+ Home Assistant Opdagelse
+
+
+ Hold i live (s)
+
+
+ Opdagelsespræfiks
+
+
+ SD-kortindstillinger gemt
+
+
+ Delvist gemt — SPI-ben afvist (tjek for pin-konflikter)
+
+
+ SPI-ben ikke gemt (benkonflikt eller ugyldigt ben)
+
+
+ SPI-ben (SCK/MOSI/MISO)
+
+
+ Starthastighed (MHz)
+
+
+ CS PIN
+
+
+ Netværkssikkerhedsindstillinger gemt
+
+
+ Nye nøgler genereret og gemt
+
+
+ Nøglegenerering mislykkedes — enhed utilgængelig
+
+
+ Godkendelse aktiveret
+
+
+ Generer nye nøgler
+
+
+ API-nøgle
+
+
+ HMAC-nøgle
+
+
+ Tidszoneoffset (timer)
+
+
+ Synkroniser nu
+
+
+ Tidsindstillinger gemt
+
+
+ Bådtype
+
+
+ Omdøb
+
+
+ MMSI
+
+
+ Kaldesignal
+
+
+ Hjemmehavn
+
+
+ Placeringsindstillinger gemt
+
+
+ PowerHubService er ikke konfigureret. Kald Configure() først.
+
+
+ ConfigConnection udfører: {Description}
+
+
+ ConfigConnection lykkedes: {Description}
+
+
+ ConfigConnection mislykkedes: {Description}
+
+
+ Enheden returnerede fejlsvar
+
+
+ ConfigConnection consumer-fejl
+
+
+ Kunne ikke publicere succesbesked for: {Description}
+
+
+ Kunne ikke publicere fejlmeddelelse for: {Description}
+
+
+ Relækonfiguration lykkedes
+
+
+ SensorKonfigurationLykkedes
+
+
+ ConfigPoller: SensorMetaCache opdateret efter forbindelse.
+
+
+ ConfigPoller: Forbindelsens sundhedstjek mislykkedes.
+
+
+ TimeSyncService startet med interval {IntervalMin} min, driftgrænse {DriftSec} s
+
+
+ TimeSyncService: enhedstid er {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService: drift {DeltaSec}s overskrider grænsen, indstiller enhedstid til {LocalTime}
+
+
+ TimeSyncService: enhedstiden er synkroniseret (delta {DeltaSec}s)
+
+
+ TimeSyncService: enhedstid ikke indstillet, synkroniserer
+
+
+ TimeSyncService: tidsynkroniseringsforsøg mislykkedes
+
+
+ TimeSyncService stopper
+
+
+ Opstart: første dashboarddata modtaget, henter sensormetadata på forbindelse 2.
+
+
+ Opstart: sensor-metacache udfyldt.
+
+
+ Opstart: dashboarddata er allerede tilgængelige, henter sensormeta på forbindelse 2.
+
+
+ Temp
+
+
+ Fugtighed
+
+
+ Dugpunkt
+
+
+ Komfort
+
+
+ Kondensrisiko
+
+
+ Lysniveau
+
+
+ Dagslys
+
+
+ breddegrad
+
+
+ Lon
+
+
+ Alt
+
+
+ Hastighed
+
+
+ Kursus
+
+
+ Sats
+
+
+ Vandstand
+
+
+ Ledig hukommelse
+
+
+ CPU
+
+
+ Spænding
+
+
+ Stat
+
+
+ Gns.
+
+
+ Annuller
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/t
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Dashboard
+
+
+ Relæer
+
+
+ Eksterne sensorer
+
+
+ Indstillinger
+
+
+ Hej, verden!
+
+
+ Installer
+
+
+ Ingen relæer konfigureret
+
+
+ Ingen sensorer konfigureret
+
+
+ Hukommelse:
+
+
+ CPU:
+
+
+ VS:
+
+
+ log
+
+
+ Opdater nu
+
+
+ Sprog
+
+
+ GPIO-begrænsninger
+
+
+ Hårdt blokeret:
+
+
+ Rådgivning:
+
+
+ Firmwareopdatering
+
+
+ Nuværende version:
+
+
+ Tilgængelig version:
+
+
+ Søg efter opdateringer
+
+
+ Pinkode(r) aktuelt tildelt
+
+
+ Enhedstid
+
+
+ Synkroniser tid nu
+
+
+ Tidszone
+
+
+ Vælg tidszone...
+
+
+ Gem tidszone
+
+
+ Navn
+
+
+ Stednavn...
+
+
+ Lokationstype
+
+
+ Vælg placeringstype...
+
+
+ Båddetaljer
+
+
+ RTC-ben
+
+
+ Datapin
+
+
+ Urstift
+
+
+ Nulstil pinkode
+
+
+ Brug 255 til at deaktivere enhver pin
+
+
+ SPI-ben
+
+
+ SCK (ur)
+
+
+ MOSI (Master-udgang)
+
+
+ MISO (Master ind)
+
+
+ Brug 255 til at deaktivere
+
+
+ Chip-select
+
+
+ Starthastighed
+
+
+ Hastighed (MHz)
+
+
+ Gyldig: 4, 8, 12, 16, 20, 24 MHz
+
+
+ Aktivér godkendelse
+
+
+ Indtast API-nøgle
+
+
+ Indtast HMAC-nøgle
+
+
+ Nextion Display
+
+
+ Hardware-serienummer
+
+
+ Knappenåle
+
+
+ RX-pin (tom eller 255 = deaktiveret)
+
+
+ TX-pin (tom eller 255 = deaktiveret)
+
+
+ Kommunikation
+
+
+ UART-nummer
+
+
+ UART
+
+
+ Genstart påkrævet
+
+
+ Ændringer i Nextion-konfigurationen kræver en genstart af enheden for at træde i kraft. Gem indstillingerne og genstart enheden.
+
+
+ Buzzer-pin
+
+
+ GPIO-ben
+
+
+ Brug 255 for at deaktivere pin
+
+
+ Vært / IP
+
+
+ Legitimationsoplysninger
+
+
+ Lad stå tomt for ingen
+
+
+ Indtast adgangskode for at ændre
+
+
+ Enhedsidentitet
+
+
+ f.eks. boat_seawolf_01
+
+
+ hjemmeassistent
+
+
+ Keep Alive (sekunder)
+
+
+ Avanceret
+
+
+ Gem alle indstillinger
+
+
+ Ekstern sensor
+
+
+ Sensortype
+
+
+ Vælg sensortype
+
+
+ MQTT Navn
+
+
+ MQTT Slug
+
+
+ MQTT type
+
+
+ MQTT Enhedsklasse
+
+
+ MQTT-enhed
+
+
+ binær
+
+
+ INDSTILLINGER
+
+
+ AKTIVERET
+
+
+ Sensor aktiveret
+
+
+ Tilstedeværelse
+
+
+ Niveau
+
+
+ Temperatur
+
+
+ Kondensation
+
+
+ Breddegrad
+
+
+ Længdegrad
+
+
+ Højde
+
+
+ satellitter
+
+
+ Ledig RAM
+
+
+ Øjeblikkelig
+
+
+ glidende gennemsnit
+
+
+ f.eks. 21
+
+
+ f.eks. 22
+
+
+ f.eks. 23
+
+
+ f.eks. 12
+
+
+ f.eks. 11
+
+
+ f.eks. 13
+
+
+ f.eks. 10
+
+
+ f.eks. 9600
+
+
+ MMSI
+
+
+ Kaldesignal
+
+
+ Hjemhavn
+
+
+ CS nål
+
+
+ API-nøgle
+
+
+ HMAC-nøgle
+
+
+ Aktiveret
+
+
+ Baudhastighed
+
+
+ Forbindelse
+
+
+ Generer nye nøgler
+
+
+ 255 = deaktiveret
+
+
+ f.eks. Bilge
+
+
+ f.eks. lænsepumpe
+
+
+ GPIO Pin (blank eller 255 = deaktiveret)
+
+
+ Nærvær
+
+
+ Eksterne sensorer
+
+
+ Sensor
+
+
+ Hastighed
+
+
+ Kursus
+
+
+ Gns.
+
+
+ Pinkode {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.de-DE.resx b/PowerControlHubApp/Resources/Localization/AppResources.de-DE.resx
new file mode 100644
index 0000000..1e04c39
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.de-DE.resx
@@ -0,0 +1,1281 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Not configured — tap ⚙ to set device IP
+
+
+ Device unreachable
+
+
+ No active warnings
+
+
+ Toggle failed — see log
+
+
+ Not connected
+
+
+ IP address is required.
+
+
+ Enter a valid port number (1–65535).
+
+
+ Not configured
+
+
+ OTA: triggering firmware install…
+
+
+ OTA trigger failed
+
+
+ Install Firmware
+
+
+ Install
+
+
+ An OTA update to {0} is available. Download and install now?
+
+
+ Update available: {0} (installed: {1})
+
+
+ Checking for firmware update…
+
+
+ Downloading firmware update…
+
+
+ Applying update — device rebooting…
+
+
+ Firmware update failed. Tap to retry.
+
+
+ Firmware is up to date ({0})
+
+
+ DashboardPoller started with interval {IntervalMs}ms
+
+
+ DashboardPoller fetched index at {Time}
+
+
+ DashboardPoller skipping poll: service not configured
+
+
+ Device returned invalid JSON while polling index
+
+
+ Unexpected error while polling index
+
+
+ DashboardPoller stopping
+
+
+ Failed to refresh sensor meta cache at startup
+
+
+ Relay
+
+
+ Relay {0}
+
+
+ Saved successfully
+
+
+ One or more commands failed
+
+
+ Save failed — device unreachable
+
+
+ Pin {0}
+
+
+ Pin {0}, {1}
+
+
+ Remove command failed
+
+
+ Remove Sensor
+
+
+ Remove
+
+
+ Cancel
+
+
+ Save
+
+
+ Back
+
+
+ None
+
+
+ OK
+
+
+ Reboot
+
+
+ Refreshed
+
+
+ Blue
+
+
+ Green
+
+
+ Grey
+
+
+ Orange
+
+
+ Red
+
+
+ Yellow
+
+
+ Default
+
+
+ Horn
+
+
+ Night Relay
+
+
+ Default
+
+
+ Horn
+
+
+ Night
+
+
+ Off
+
+
+ On
+
+
+ Light
+
+
+ Dark
+
+
+ Settings
+
+
+ Device IP Address
+
+
+ HTTP Port
+
+
+ API Key (X-API-Key)
+
+
+ HMAC Key (X-Auth-Signature)
+
+
+ App Theme
+
+
+ Save & Connect
+
+
+ How to connect
+
+
+ 1. Ensure your phone/PC is on the same WiFi network as the ESP32 board.
+
+
+ 2. Enter the IP address shown on the device's serial output or your router's DHCP table.
+
+
+ 3. The default port is 80.
+
+
+ 4. If the device has network authentication enabled (C19:e=1), enter the API Key or HMAC Key above to match the device's configuration.
+
+
+ 5. Tap Save & Connect, then return to the Dashboard.
+
+
+ e.g. 192.168.1.100
+
+
+ 80
+
+
+ Optional – device API key for authentication
+
+
+ Optional – HMAC-SHA256 key for authentication
+
+
+ System
+
+
+ Time
+
+
+ RTC
+
+
+ Location
+
+
+ MQTT
+
+
+ SD Card
+
+
+ Security
+
+
+ Nextion
+
+
+ Buzzer
+
+
+ Active Warnings
+
+
+ GPIOs In Use
+
+
+ GPIO Pin Restrictions
+
+
+ {0} pin(s) currently assigned
+
+
+ CONTROLS
+
+
+ SENSORS
+
+
+ Relay Configuration
+
+
+ Relay Config
+
+
+ IDENTITY
+
+
+ HARDWARE
+
+
+ BEHAVIOUR
+
+
+ LINKING
+
+
+ Short Name (max 5 chars)
+
+
+ Long Name (max 20 chars)
+
+
+ GPIO Pin (blank or 255 = disabled)
+
+
+ Default State at Power-On
+
+
+ Action Type
+
+
+ Button Colour
+
+
+ Linked Relay
+
+
+ Toggling this relay will also toggle the linked relay.
+
+
+ e.g. Bilge
+
+
+ e.g. Bilge Pump
+
+
+ 255 = disabled
+
+
+ Local Sensors
+
+
+ External Sensors
+
+
+ Local Sensors
+
+
+ Ext. Sensors
+
+
+ Sensor
+
+
+ Not configured
+
+
+ Water
+
+
+ DHT11
+
+
+ Light
+
+
+ GPS
+
+
+ System
+
+
+ Binary Presence
+
+
+ Voltage
+
+
+ Unknown
+
+
+ Sensor type metadata unavailable.
+
+
+ Water (0)
+
+
+ DHT11 (1)
+
+
+ Light (2)
+
+
+ GPS (3)
+
+
+ System (4)
+
+
+ Binary Presence (5)
+
+
+ Voltage (6)
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Day
+
+
+ Night
+
+
+ Fix
+
+
+ No Fix
+
+
+ Detected
+
+
+ Clear
+
+
+ add/update sensor entry
+
+
+ change enabled state
+
+
+ save settings to disk
+
+
+ Failed to:
+
+
+ GPIO Pin 0 (blank or 255 = disabled)
+
+
+ GPIO Pin 1 (blank or 255 = disabled)
+
+
+ Option 1 (int8)
+
+
+ Option 2 (int8)
+
+
+ Option 3 (int16)
+
+
+ Option 4 (int16)
+
+
+ Time Settings
+
+
+ RTC Settings
+
+
+ Location Settings
+
+
+ MQTT Settings
+
+
+ SD Card Settings
+
+
+ Network Security
+
+
+ Nextion Settings
+
+
+ Buzzer Settings
+
+
+ RTC settings saved
+
+
+ Buzzer settings saved
+
+
+ Nextion settings saved
+
+
+ Reboot Required
+
+
+ Changes require a device reboot to take effect. Reboot device now? (If the device has no reboot endpoint you will need to power-cycle it manually)
+
+
+ Settings saved. Please power-cycle the device to apply Nextion configuration.
+
+
+ Failed to save settings before reboot.
+
+
+ UART1
+
+
+ UART2
+
+
+ UART Port
+
+
+ Baud Rate
+
+
+ RX Pin
+
+
+ TX Pin
+
+
+ Enabled
+
+
+ Connected
+
+
+ Disconnected
+
+
+ MQTT settings saved
+
+
+ Connection
+
+
+ MQTT Enabled
+
+
+ Connection State
+
+
+ Broker
+
+
+ Port
+
+
+ Username
+
+
+ Password
+
+
+ Device ID
+
+
+ Home Assistant Discovery
+
+
+ Keep Alive (s)
+
+
+ Discovery Prefix
+
+
+ SD Card settings saved
+
+
+ Partially saved — SPI pins rejected (check for pin conflicts)
+
+
+ SPI pins not saved (pin conflict or invalid pin)
+
+
+ SPI Pins (SCK/MOSI/MISO)
+
+
+ Init Speed (MHz)
+
+
+ CS Pin
+
+
+ Network security settings saved
+
+
+ New keys generated and saved
+
+
+ Key generation failed — device unreachable
+
+
+ Authentication Enabled
+
+
+ Generate New Keys
+
+
+ API Key
+
+
+ HMAC Key
+
+
+ Timezone Offset (hours)
+
+
+ Sync Now
+
+
+ Time settings saved
+
+
+ Boat Type
+
+
+ Rename
+
+
+ MMSI
+
+
+ Call Sign
+
+
+ Home Port
+
+
+ Location settings saved
+
+
+ PowerHubService is not configured. Call Configure() first.
+
+
+ ConfigConnection executing: {Description}
+
+
+ ConfigConnection succeeded: {Description}
+
+
+ ConfigConnection failed: {Description}
+
+
+ Device returned failure response
+
+
+ ConfigConnection consumer error
+
+
+ Failed to publish success message for: {Description}
+
+
+ Failed to publish failure message for: {Description}
+
+
+ RelayConfigSucceeded
+
+
+ SensorConfigSucceeded
+
+
+ ConfigPoller: SensorMetaCache refreshed after connection.
+
+
+ ConfigPoller: Connection health check failed.
+
+
+ TimeSyncService started with interval {IntervalMin}min, drift threshold {DriftSec}s
+
+
+ TimeSyncService: device time is {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService: drift {DeltaSec}s exceeds threshold, setting device time to {LocalTime}
+
+
+ TimeSyncService: device time is in sync (delta {DeltaSec}s)
+
+
+ TimeSyncService: device time not set, synchronizing
+
+
+ TimeSyncService: time sync attempt failed
+
+
+ TimeSyncService stopping
+
+
+ Startup: first dashboard data received, fetching sensor meta on connection 2.
+
+
+ Startup: sensor meta cache populated.
+
+
+ Startup: dashboard data already available, fetching sensor meta on connection 2.
+
+
+ Temp
+
+
+ Humidity
+
+
+ Dew Point
+
+
+ Comfort
+
+
+ Condensation Risk
+
+
+ Light Level
+
+
+ Daylight
+
+
+ Lat
+
+
+ Lon
+
+
+ Alt
+
+
+ Speed
+
+
+ Course
+
+
+ Sats
+
+
+ Water Level
+
+
+ Free Memory
+
+
+ CPU
+
+
+ Voltage
+
+
+ State
+
+
+ Avg
+
+
+ Cancel
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Dashboard
+
+
+ Relays
+
+
+ External Sensors
+
+
+ Settings
+
+
+ Hello, World!
+
+
+ Install
+
+
+ No relays configured
+
+
+ No sensors configured
+
+
+ Mem:
+
+
+ CPU:
+
+
+ FW:
+
+
+ LOG
+
+
+ Refresh now
+
+
+ Language
+
+
+ GPIO Restrictions
+
+
+ Hard-blocked:
+
+
+ Advisory:
+
+
+ Firmware Update
+
+
+ Current version:
+
+
+ Available version:
+
+
+ Check for Updates
+
+
+ pin(s) currently assigned
+
+
+ Device Time
+
+
+ Sync Time Now
+
+
+ Timezone
+
+
+ Select timezone...
+
+
+ Save Timezone
+
+
+ Name
+
+
+ Location name...
+
+
+ Location Type
+
+
+ Select location type...
+
+
+ Boat Details
+
+
+ RTC Pins
+
+
+ Data Pin
+
+
+ Clock Pin
+
+
+ Reset Pin
+
+
+ Use 255 to disable any pin
+
+
+ SPI Pins
+
+
+ SCK (Clock)
+
+
+ MOSI (Master Out)
+
+
+ MISO (Master In)
+
+
+ Use 255 to disable
+
+
+ Chip Select
+
+
+ Init Speed
+
+
+ Speed (MHz)
+
+
+ Valid: 4, 8, 12, 16, 20, 24 MHz
+
+
+ Enable Authentication
+
+
+ Enter API key
+
+
+ Enter HMAC key
+
+
+ Nextion Display
+
+
+ Hardware Serial
+
+
+ Pins
+
+
+ RX Pin (blank or 255 = disabled)
+
+
+ TX Pin (blank or 255 = disabled)
+
+
+ Communication
+
+
+ UART Number
+
+
+ UART
+
+
+ Reboot required
+
+
+ Changes to Nextion configuration require a device reboot to take effect. Save settings and reboot the device.
+
+
+ Buzzer Pin
+
+
+ GPIO Pin
+
+
+ Use 255 to disable pin
+
+
+ Host / IP
+
+
+ Credentials
+
+
+ Leave empty for none
+
+
+ Enter password to change
+
+
+ Device Identity
+
+
+ e.g. boat_seawolf_01
+
+
+ homeassistant
+
+
+ Keep Alive (seconds)
+
+
+ Advanced
+
+
+ Save All Settings
+
+
+ External Sensor
+
+
+ Sensor Type
+
+
+ Select sensor type
+
+
+ MQTT Name
+
+
+ MQTT Slug
+
+
+ MQTT Type
+
+
+ MQTT Device Class
+
+
+ MQTT Unit
+
+
+ Binary
+
+
+ OPTIONS
+
+
+ ENABLED
+
+
+ Sensor Enabled
+
+
+ Presence
+
+
+ Level
+
+
+ Temperature
+
+
+ Condensation
+
+
+ Latitude
+
+
+ Longitude
+
+
+ Altitude
+
+
+ Satellites
+
+
+ Free RAM
+
+
+ Instant
+
+
+ Rolling avg
+
+
+ e.g. 21
+
+
+ e.g. 22
+
+
+ e.g. 23
+
+
+ e.g. 12
+
+
+ e.g. 11
+
+
+ e.g. 13
+
+
+ e.g. 10
+
+
+ e.g. 9600
+
+
+ MMSI
+
+
+ Call Sign
+
+
+ Home Port
+
+
+ CS Pin
+
+
+ API Key
+
+
+ HMAC Key
+
+
+ Enabled
+
+
+ Baud Rate
+
+
+ Connection
+
+
+ Generate New Keys
+
+
+ 255 = disabled
+
+
+ e.g. Bilge
+
+
+ e.g. Bilge Pump
+
+
+ GPIO Pin (blank or 255 = disabled)
+
+
+ Presence
+
+
+ Ext. Sensors
+
+
+ Sensor
+
+
+ Speed
+
+
+ Course
+
+
+ Avg
+
+
+ Pin {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.en-US.resx b/PowerControlHubApp/Resources/Localization/AppResources.en-US.resx
new file mode 100644
index 0000000..67b571e
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.en-US.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Not configured — tap ⚙ to set device IP
+
+
+ Device unreachable
+
+
+ No active warnings
+
+
+ Toggle failed — see log
+
+
+ Not connected
+
+
+ IP address is required.
+
+
+ Enter a valid port number (1–65535).
+
+
+ Not configured
+
+
+ OTA: triggering firmware install…
+
+
+ OTA trigger failed
+
+
+ Install Firmware
+
+
+ Install
+
+
+ An OTA update to {0} is available. Download and install now?
+
+
+ Update available: {0} (installed: {1})
+
+
+ Checking for firmware update…
+
+
+ Downloading firmware update…
+
+
+ Applying update — device rebooting…
+
+
+ Firmware update failed. Tap to retry.
+
+
+ Firmware is up to date ({0})
+
+
+ DashboardPoller started with interval {IntervalMs}ms
+
+
+ DashboardPoller fetched index at {Time}
+
+
+ DashboardPoller skipping poll: service not configured
+
+
+ Device returned invalid JSON while polling index
+
+
+ Unexpected error while polling index
+
+
+ DashboardPoller stopping
+
+
+ Failed to refresh sensor meta cache at startup
+
+
+ Relay
+
+
+ Relay {0}
+
+
+ Saved successfully
+
+
+ One or more commands failed
+
+
+ Save failed — device unreachable
+
+
+ Pin {0}
+
+
+ Pin {0}, {1}
+
+
+ Remove command failed
+
+
+ Remove Sensor
+
+
+ Remove
+
+
+ Cancel
+
+
+ Save
+
+
+ Back
+
+
+ None
+
+
+ OK
+
+
+ Reboot
+
+
+ Refreshed
+
+
+ Blue
+
+
+ Green
+
+
+ Gray
+
+
+ Orange
+
+
+ Red
+
+
+ Yellow
+
+
+ Default
+
+
+ Horn
+
+
+ Night Relay
+
+
+ Default
+
+
+ Horn
+
+
+ Night
+
+
+ Off
+
+
+ On
+
+
+ Light
+
+
+ Dark
+
+
+ Settings
+
+
+ Device IP Address
+
+
+ HTTP Port
+
+
+ API Key (X-API-Key)
+
+
+ HMAC Key (X-Auth-Signature)
+
+
+ App Theme
+
+
+ Save & Connect
+
+
+ How to connect
+
+
+ 1. Ensure your phone/PC is on the same WiFi network as the ESP32 board.
+
+
+ 2. Enter the IP address shown on the device's serial output or your router's DHCP table.
+
+
+ 3. The default port is 80.
+
+
+ 4. If the device has network authentication enabled (C19:e=1), enter the API Key or HMAC Key above to match the device's configuration.
+
+
+ 5. Tap Save & Connect, then return to the Dashboard.
+
+
+ e.g. 192.168.1.100
+
+
+ 80
+
+
+ Optional – device API key for authentication
+
+
+ Optional – HMAC-SHA256 key for authentication
+
+
+ System
+
+
+ Time
+
+
+ RTC
+
+
+ Location
+
+
+ MQTT
+
+
+ SD Card
+
+
+ Security
+
+
+ Nextion
+
+
+ Buzzer
+
+
+ Active Warnings
+
+
+ GPIOs In Use
+
+
+ GPIO Pin Restrictions
+
+
+ {0} pin(s) currently assigned
+
+
+ CONTROLS
+
+
+ SENSORS
+
+
+ Relay Configuration
+
+
+ Relay Config
+
+
+ IDENTITY
+
+
+ HARDWARE
+
+
+ BEHAVIOR
+
+
+ LINKING
+
+
+ Short Name (max 5 chars)
+
+
+ Long Name (max 20 chars)
+
+
+ GPIO Pin (blank or 255 = disabled)
+
+
+ Default State at Power-On
+
+
+ Action Type
+
+
+ Button Color
+
+
+ Linked Relay
+
+
+ Toggling this relay will also toggle the linked relay.
+
+
+ e.g. Bilge
+
+
+ e.g. Bilge Pump
+
+
+ 255 = disabled
+
+
+ Local Sensors
+
+
+ External Sensors
+
+
+ Local Sensors
+
+
+ Ext. Sensors
+
+
+ Sensor
+
+
+ Not configured
+
+
+ Water
+
+
+ DHT11
+
+
+ Light
+
+
+ GPS
+
+
+ System
+
+
+ Binary Presence
+
+
+ Voltage
+
+
+ Unknown
+
+
+ Sensor type metadata unavailable.
+
+
+ Water (0)
+
+
+ DHT11 (1)
+
+
+ Light (2)
+
+
+ GPS (3)
+
+
+ System (4)
+
+
+ Binary Presence (5)
+
+
+ Voltage (6)
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Day
+
+
+ Night
+
+
+ Fix
+
+
+ No Fix
+
+
+ Detected
+
+
+ Clear
+
+
+ add/update sensor entry
+
+
+ change enabled state
+
+
+ save settings to disk
+
+
+ Failed to:
+
+
+ GPIO Pin 0 (blank or 255 = disabled)
+
+
+ GPIO Pin 1 (blank or 255 = disabled)
+
+
+ Option 1 (int8)
+
+
+ Option 2 (int8)
+
+
+ Option 3 (int16)
+
+
+ Option 4 (int16)
+
+
+ Time Settings
+
+
+ RTC Settings
+
+
+ Location Settings
+
+
+ MQTT Settings
+
+
+ SD Card Settings
+
+
+ Network Security
+
+
+ Nextion Settings
+
+
+ Buzzer Settings
+
+
+ RTC settings saved
+
+
+ Buzzer settings saved
+
+
+ Nextion settings saved
+
+
+ Reboot Required
+
+
+ Changes require a device reboot to take effect. Reboot device now? (If the device has no reboot endpoint you will need to power-cycle it manually)
+
+
+ Settings saved. Please power-cycle the device to apply Nextion configuration.
+
+
+ Failed to save settings before reboot.
+
+
+ UART1
+
+
+ UART2
+
+
+ UART Port
+
+
+ Baud Rate
+
+
+ RX Pin
+
+
+ TX Pin
+
+
+ Enabled
+
+
+ Connected
+
+
+ Disconnected
+
+
+ MQTT settings saved
+
+
+ Connection
+
+
+ MQTT Enabled
+
+
+ Connection State
+
+
+ Broker
+
+
+ Port
+
+
+ Username
+
+
+ Password
+
+
+ Device ID
+
+
+ Home Assistant Discovery
+
+
+ Keep Alive (s)
+
+
+ Discovery Prefix
+
+
+ SD Card settings saved
+
+
+ Partially saved — SPI pins rejected (check for pin conflicts)
+
+
+ SPI pins not saved (pin conflict or invalid pin)
+
+
+ SPI Pins (SCK/MOSI/MISO)
+
+
+ Init Speed (MHz)
+
+
+ CS Pin
+
+
+ Network security settings saved
+
+
+ New keys generated and saved
+
+
+ Key generation failed — device unreachable
+
+
+ Authentication Enabled
+
+
+ Generate New Keys
+
+
+ API Key
+
+
+ HMAC Key
+
+
+ Timezone Offset (hours)
+
+
+ Sync Now
+
+
+ Time settings saved
+
+
+ Boat Type
+
+
+ Rename
+
+
+ MMSI
+
+
+ Call Sign
+
+
+ Home Port
+
+
+ Location settings saved
+
+
+ PowerHubService is not configured. Call Configure() first.
+
+
+ ConfigConnection executing: {Description}
+
+
+ ConfigConnection succeeded: {Description}
+
+
+ ConfigConnection failed: {Description}
+
+
+ Device returned failure response
+
+
+ ConfigConnection consumer error
+
+
+ Failed to publish success message for: {Description}
+
+
+ Failed to publish failure message for: {Description}
+
+
+ RelayConfigSucceeded
+
+
+ SensorConfigSucceeded
+
+
+ ConfigPoller: SensorMetaCache refreshed after connection.
+
+
+ ConfigPoller: Connection health check failed.
+
+
+ TimeSyncService started with interval {IntervalMin}min, drift threshold {DriftSec}s
+
+
+ TimeSyncService: device time is {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService: drift {DeltaSec}s exceeds threshold, setting device time to {LocalTime}
+
+
+ TimeSyncService: device time is in sync (delta {DeltaSec}s)
+
+
+ TimeSyncService: device time not set, synchronizing
+
+
+ TimeSyncService: time sync attempt failed
+
+
+ TimeSyncService stopping
+
+
+ Startup: first dashboard data received, fetching sensor meta on connection 2.
+
+
+ Startup: sensor meta cache populated.
+
+
+ Startup: dashboard data already available, fetching sensor meta on connection 2.
+
+
+ Temp
+
+
+ Humidity
+
+
+ Dew Point
+
+
+ Comfort
+
+
+ Condensation Risk
+
+
+ Light Level
+
+
+ Daylight
+
+
+ Lat
+
+
+ Lon
+
+
+ Alt
+
+
+ Speed
+
+
+ Course
+
+
+ Sats
+
+
+ Water Level
+
+
+ Free Memory
+
+
+ CPU
+
+
+ Voltage
+
+
+ State
+
+
+ Avg
+
+
+ Cancel
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Dashboard
+
+
+ Relays
+
+
+ External Sensors
+
+
+ Settings
+
+
+ Hello, World!
+
+
+ Install
+
+
+ No relays configured
+
+
+ No sensors configured
+
+
+ Mem:
+
+
+ CPU:
+
+
+ FW:
+
+
+ LOG
+
+
+ Refresh now
+
+
+ Language
+
+
+ GPIO Restrictions
+
+
+ Hard-blocked:
+
+
+ Advisory:
+
+
+ Firmware Update
+
+
+ Current version:
+
+
+ Available version:
+
+
+ Check for Updates
+
+
+ pin(s) currently assigned
+
+
+ Device Time
+
+
+ Sync Time Now
+
+
+ Timezone
+
+
+ Select timezone...
+
+
+ Save Timezone
+
+
+ Name
+
+
+ Location name...
+
+
+ Location Type
+
+
+ Select location type...
+
+
+ Boat Details
+
+
+ RTC Pins
+
+
+ Data Pin
+
+
+ Clock Pin
+
+
+ Reset Pin
+
+
+ Use 255 to disable any pin
+
+
+ SPI Pins
+
+
+ SCK (Clock)
+
+
+ MOSI (Master Out)
+
+
+ MISO (Master In)
+
+
+ Use 255 to disable
+
+
+ Chip Select
+
+
+ Init Speed
+
+
+ Speed (MHz)
+
+
+ Valid: 4, 8, 12, 16, 20, 24 MHz
+
+
+ Enable Authentication
+
+
+ Enter API key
+
+
+ Enter HMAC key
+
+
+ Nextion Display
+
+
+ Hardware Serial
+
+
+ Pins
+
+
+ RX Pin (blank or 255 = disabled)
+
+
+ TX Pin (blank or 255 = disabled)
+
+
+ Communication
+
+
+ UART Number
+
+
+ UART
+
+
+ Reboot required
+
+
+ Changes to Nextion configuration require a device reboot to take effect. Save settings and reboot the device.
+
+
+ Buzzer Pin
+
+
+ GPIO Pin
+
+
+ Use 255 to disable pin
+
+
+ Host / IP
+
+
+ Credentials
+
+
+ Leave empty for none
+
+
+ Enter password to change
+
+
+ Device Identity
+
+
+ e.g. boat_seawolf_01
+
+
+ homeassistant
+
+
+ Keep Alive (seconds)
+
+
+ Advanced
+
+
+ Save All Settings
+
+
+ External Sensor
+
+
+ Sensor Type
+
+
+ Select sensor type
+
+
+ MQTT Name
+
+
+ MQTT Slug
+
+
+ MQTT Type
+
+
+ MQTT Device Class
+
+
+ MQTT Unit
+
+
+ Binary
+
+
+ OPTIONS
+
+
+ ENABLED
+
+
+ Sensor Enabled
+
+
+ Presence
+
+
+ Level
+
+
+ Temperature
+
+
+ Condensation
+
+
+ Latitude
+
+
+ Longitude
+
+
+ Altitude
+
+
+ Satellites
+
+
+ Free RAM
+
+
+ Instant
+
+
+ Rolling avg
+
+
+ e.g. 21
+
+
+ e.g. 22
+
+
+ e.g. 23
+
+
+ e.g. 12
+
+
+ e.g. 11
+
+
+ e.g. 13
+
+
+ e.g. 10
+
+
+ e.g. 9600
+
+
+ MMSI
+
+
+ Call Sign
+
+
+ Home Port
+
+
+ CS Pin
+
+
+ API Key
+
+
+ HMAC Key
+
+
+ Enabled
+
+
+ Baud Rate
+
+
+ Connection
+
+
+ Generate New Keys
+
+
+ 255 = disabled
+
+
+ e.g. Bilge
+
+
+ e.g. Bilge Pump
+
+
+ GPIO Pin (blank or 255 = disabled)
+
+
+ Presence
+
+
+ Ext. Sensors
+
+
+ Sensor
+
+
+ Speed
+
+
+ Course
+
+
+ Avg
+
+
+ Pin {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.es-ES.resx b/PowerControlHubApp/Resources/Localization/AppResources.es-ES.resx
new file mode 100644
index 0000000..559f57e
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.es-ES.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ No configurado — toca ⚙ para establecer la IP del dispositivo
+
+
+ Dispositivo inalcanzable
+
+
+ Sin advertencias activas
+
+
+ Error al alternar — consulte el registro
+
+
+ No conectado
+
+
+ Se requiere la dirección IP.
+
+
+ Introduzca un número de puerto válido (1–65535).
+
+
+ Sin configurar
+
+
+ OTA: activando la instalación del firmware…
+
+
+ Error al activar OTA
+
+
+ Instalar Firmware
+
+
+ Instalar
+
+
+ Hay una actualización OTA para {0} disponible. ¿Descargar e instalar ahora?
+
+
+ Actualización disponible: {0} (instalada: {1})
+
+
+ Comprobando si hay actualización de firmware…
+
+
+ Descargando actualización de firmware…
+
+
+ Aplicando actualización: el dispositivo se está reiniciando…
+
+
+ Actualización del firmware fallida. Pulsa para reintentar.
+
+
+ El firmware está actualizado ({0})
+
+
+ DashboardPoller iniciado con intervalo de {IntervalMs} ms
+
+
+ DashboardPoller recuperó el índice en {Time}
+
+
+ DashboardPoller omitiendo sondeo: servicio no configurado
+
+
+ El dispositivo devolvió un JSON no válido al consultar el índice.
+
+
+ Error inesperado al consultar el índice
+
+
+ DashboardPoller deteniéndose
+
+
+ No se pudo actualizar la caché de metadatos del sensor al iniciar.
+
+
+ Relevo
+
+
+ Relé {0}
+
+
+ Guardado correctamente
+
+
+ Uno o más comandos fallaron
+
+
+ Error al guardar — dispositivo inaccesible
+
+
+ Anclar {0}
+
+
+ Anclar {0}, {1}
+
+
+ El comando de eliminación falló
+
+
+ Quitar sensor
+
+
+ Eliminar
+
+
+ Cancelar
+
+
+ Guardar
+
+
+ Atrás
+
+
+ Ninguno
+
+
+ Vale
+
+
+ Reiniciar
+
+
+ Actualizado
+
+
+ Azul
+
+
+ Verde
+
+
+ Gris
+
+
+ Naranja
+
+
+ rojo
+
+
+ Amarillo
+
+
+ Predeterminado
+
+
+ Cuerno
+
+
+ Relevo Nocturno
+
+
+ Predeterminado
+
+
+ Cuerno
+
+
+ Noche
+
+
+ Apagado
+
+
+ En
+
+
+ Luz
+
+
+ oscuro
+
+
+ Configuración
+
+
+ Dirección IP del dispositivo
+
+
+ Puerto HTTP
+
+
+ Clave de API (X-API-Key)
+
+
+ Clave HMAC (X-Auth-Signature)
+
+
+ Tema de la aplicación
+
+
+ Guardar y conectar
+
+
+ Cómo conectar
+
+
+ 1. Asegúrate de que tu teléfono/PC esté en la misma red WiFi que la placa ESP32.
+
+
+ 2. Introduce la dirección IP que aparece en la salida serie del dispositivo o en la tabla DHCP de tu router.
+
+
+ 3. El puerto predeterminado es 80.
+
+
+ 4. Si el dispositivo tiene habilitada la autenticación de red (C19:e=1), introduzca la clave API o la clave HMAC arriba para que coincida con la configuración del dispositivo.
+
+
+ 5. Toca Guardar y conectar y, a continuación, vuelve al panel.
+
+
+ p. ej. 192.168.1.100
+
+
+ 80
+
+
+ Opcional: clave de API del dispositivo para autenticación
+
+
+ Opcional: clave HMAC-SHA256 para autenticación
+
+
+ Sistema
+
+
+ Tiempo
+
+
+ RTC
+
+
+ Ubicación
+
+
+ MQTT
+
+
+ Tarjeta SD
+
+
+ Seguridad
+
+
+ Nextion
+
+
+ zumbador
+
+
+ Avisos activos
+
+
+ GPIOs en uso
+
+
+ Restricciones de pines GPIO
+
+
+ {0} pin(es) actualmente asignado(s)
+
+
+ CONTROLES
+
+
+ SENSORES
+
+
+ Configuración de relé
+
+
+ Configuración de relé
+
+
+ identidad
+
+
+ hardware
+
+
+ COMPORTAMIENTO
+
+
+ ENLAZANDO
+
+
+ Nombre corto (máx. 5 caracteres)
+
+
+ Nombre largo (máx. 20 caracteres)
+
+
+ Pin GPIO (en blanco o 255 = deshabilitado)
+
+
+ Estado predeterminado al encender
+
+
+ Tipo de acción
+
+
+ Color del botón
+
+
+ Relevo enlazado
+
+
+ Alternar este relé también alternará el relé vinculado.
+
+
+ p. ej. Bilge
+
+
+ p. ej. bomba de sentina
+
+
+ 255 = deshabilitado
+
+
+ Sensores locales
+
+
+ Sensores externos
+
+
+ Sensores locales
+
+
+ Sensores ext.
+
+
+ Sensor
+
+
+ No configurado
+
+
+ Agua
+
+
+ DHT11
+
+
+ Luz
+
+
+ GPS
+
+
+ Sistema
+
+
+ Presencia Binaria
+
+
+ Voltaje
+
+
+ Desconocido
+
+
+ Metadatos del tipo de sensor no disponibles.
+
+
+ Agua (0)
+
+
+ DHT11 (1)
+
+
+ Luz (2)
+
+
+ GPS (3)
+
+
+ Sistema (4)
+
+
+ Presencia binaria (5)
+
+
+ Voltaje (6)
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Día
+
+
+ Noche
+
+
+ Arreglar
+
+
+ Sin arreglo
+
+
+ Detectado
+
+
+ Borrar
+
+
+ Añadir/Actualizar entrada de sensor
+
+
+ Cambiar estado habilitado
+
+
+ guardar configuración en disco
+
+
+ No se pudo:
+
+
+ Pin GPIO 0 (en blanco o 255 = deshabilitado)
+
+
+ Pin GPIO 1 (en blanco o 255 = deshabilitado)
+
+
+ Opción 1 (int8)
+
+
+ Opción 2 (int8)
+
+
+ Opción 3 (int16)
+
+
+ Opción 4 (int16)
+
+
+ Configuración de hora
+
+
+ Configuración de RTC
+
+
+ Configuración de ubicación
+
+
+ Configuración de MQTT
+
+
+ Configuración de la tarjeta SD
+
+
+ Seguridad de redes
+
+
+ Ajustes de Nextion
+
+
+ Configuración del zumbador
+
+
+ Configuración RTC guardada
+
+
+ Ajustes del zumbador guardados
+
+
+ Ajustes de Nextion guardados
+
+
+ Reinicio requerido
+
+
+ Los cambios requieren un reinicio del dispositivo para surtir efecto. ¿Reiniciar el dispositivo ahora? (Si el dispositivo no tiene un endpoint de reinicio, tendrá que apagarlo y encenderlo manualmente)
+
+
+ Ajustes guardados. Por favor, apague y encienda el dispositivo para aplicar la configuración de Nextion.
+
+
+ No se pudieron guardar los ajustes antes de reiniciar.
+
+
+ UART1
+
+
+ UART2
+
+
+ Puerto UART
+
+
+ tasa de baudios
+
+
+ Pin RX
+
+
+ Pin TX
+
+
+ Habilitado
+
+
+ Conectado
+
+
+ Desconectado
+
+
+ Ajustes MQTT guardados
+
+
+ Conexión
+
+
+ MQTT habilitado
+
+
+ Estado de conexión
+
+
+ Bróker
+
+
+ Puerto
+
+
+ nombre de usuario
+
+
+ Contraseña
+
+
+ ID de dispositivo
+
+
+ Descubrimiento de Home Assistant
+
+
+ Mantener vivo (s)
+
+
+ Prefijo de descubrimiento
+
+
+ Ajustes de tarjeta SD guardados
+
+
+ Guardado parcialmente — pines SPI rechazados (compruebe si hay conflictos de pines)
+
+
+ Pines SPI no guardados (conflicto de pines o pin inválido)
+
+
+ Pines SPI (SCK/MOSI/MISO)
+
+
+ Velocidad inicial (MHz)
+
+
+ Pin CS
+
+
+ Ajustes de seguridad de red guardados
+
+
+ Nuevas claves generadas y guardadas
+
+
+ La generación de claves falló — dispositivo inaccesible
+
+
+ Autenticación habilitada
+
+
+ Generar nuevas claves
+
+
+ Clave de API
+
+
+ Clave HMAC
+
+
+ Desfase de zona horaria (horas)
+
+
+ Sincronizar ahora
+
+
+ Ajustes de hora guardados
+
+
+ Tipo de embarcación
+
+
+ Renombrar
+
+
+ MMSI
+
+
+ Indicativo
+
+
+ Puerto base
+
+
+ Ajustes de ubicación guardados
+
+
+ PowerHubService no está configurado. Llame a Configure() primero.
+
+
+ ConfigConnection ejecutando: {Description}
+
+
+ ConfigConnection se realizó correctamente: {Description}
+
+
+ ConfigConnection falló: {Description}
+
+
+ El dispositivo devolvió una respuesta de fallo.
+
+
+ ConfigConnection error del consumidor
+
+
+ No se pudo publicar el mensaje de éxito para: {Description}
+
+
+ No se pudo publicar el mensaje de error para: {Description}
+
+
+ Configuración del relé correcta
+
+
+ SensorConfiguradoCorrectamente
+
+
+ ConfigPoller: SensorMetaCache actualizado tras la conexión.
+
+
+ ConfigPoller: Fallo en la comprobación de estado de la conexión.
+
+
+ TimeSyncService iniciado con intervalo {IntervalMin}min, umbral de deriva {DriftSec}s
+
+
+ TimeSyncService: la hora del dispositivo es {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService: la deriva {DeltaSec}s supera el umbral, estableciendo la hora del dispositivo a {LocalTime}
+
+
+ TimeSyncService: la hora del dispositivo está sincronizada (delta {DeltaSec}s)
+
+
+ TimeSyncService: hora del dispositivo no establecida, sincronizando
+
+
+ TimeSyncService: falló el intento de sincronización de hora
+
+
+ TimeSyncService deteniéndose
+
+
+ Arranque: primeros datos del panel recibidos, recuperando metadatos del sensor en la conexión 2.
+
+
+ Inicio: caché de metadatos del sensor poblada.
+
+
+ Inicio: datos del panel ya disponibles, obteniendo metadatos del sensor en la conexión 2.
+
+
+ temperatura
+
+
+ Humedad
+
+
+ punto de rocío
+
+
+ Comodidad
+
+
+ Riesgo de condensación
+
+
+ Nivel de luz
+
+
+ Luz del día
+
+
+ Dorsal
+
+
+ Lon
+
+
+ Alt
+
+
+ Velocidad
+
+
+ Curso
+
+
+ Sats
+
+
+ Nivel del agua
+
+
+ Memoria libre
+
+
+ CPU
+
+
+ Voltaje
+
+
+ Estado
+
+
+ Promedio
+
+
+ Cancelar
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Panel de control
+
+
+ Relés
+
+
+ Sensores externos
+
+
+ Configuración
+
+
+ ¡Hola, mundo!
+
+
+ Instalar
+
+
+ No hay relés configurados
+
+
+ No hay sensores configurados
+
+
+ Memoria:
+
+
+ CPU:
+
+
+ RV:
+
+
+ REGISTRO
+
+
+ Actualizar ahora
+
+
+ Idioma
+
+
+ Restricciones de GPIO
+
+
+ Bloqueado de forma permanente:
+
+
+ Aviso:
+
+
+ Actualización de firmware
+
+
+ Versión actual:
+
+
+ Versión disponible:
+
+
+ Buscar actualizaciones
+
+
+ pin(es) asignados actualmente
+
+
+ Hora del dispositivo
+
+
+ Sincronizar hora ahora
+
+
+ Zona horaria
+
+
+ Seleccionar zona horaria...
+
+
+ Guardar zona horaria
+
+
+ Nombre
+
+
+ Nombre de la ubicación...
+
+
+ Tipo de ubicación
+
+
+ Seleccione el tipo de ubicación...
+
+
+ Detalles del barco
+
+
+ Pines RTC
+
+
+ Pin de datos
+
+
+ Pin de reloj
+
+
+ Restablecer PIN
+
+
+ Usa 255 para desactivar cualquier pin
+
+
+ Pines SPI
+
+
+ SCK (Reloj)
+
+
+ MOSI (salida del maestro)
+
+
+ MISO (entrada maestra)
+
+
+ Use 255 para desactivar
+
+
+ Selección de chip
+
+
+ Velocidad inicial
+
+
+ Velocidad (MHz)
+
+
+ Válido: 4, 8, 12, 16, 20, 24 MHz
+
+
+ Habilitar autenticación
+
+
+ Introduce la clave API
+
+
+ Introduzca la clave HMAC
+
+
+ Pantalla Nextion
+
+
+ Número de serie del hardware
+
+
+ Alfileres
+
+
+ Pin RX (en blanco o 255 = desactivado)
+
+
+ Pin TX (en blanco o 255 = deshabilitado)
+
+
+ Comunicación
+
+
+ Número UART
+
+
+ UART
+
+
+ Se requiere reiniciar
+
+
+ Los cambios en la configuración de Nextion requieren reiniciar el dispositivo para que surtan efecto. Guarde la configuración y reinicie el dispositivo.
+
+
+ Pin del zumbador
+
+
+ Pin GPIO
+
+
+ Utilice 255 para desactivar el PIN
+
+
+ Host / IP
+
+
+ Credenciales
+
+
+ Dejar vacío para ninguno
+
+
+ Introduzca la contraseña para cambiar
+
+
+ Identidad del dispositivo
+
+
+ p. ej. boat_seawolf_01
+
+
+ asistente doméstico
+
+
+ Mantener vivo (segundos)
+
+
+ Avanzado
+
+
+ Guardar todos los ajustes
+
+
+ Sensor externo
+
+
+ Tipo de sensor
+
+
+ Seleccione el tipo de sensor
+
+
+ Nombre MQTT
+
+
+ Slug MQTT
+
+
+ Tipo MQTT
+
+
+ Clase de dispositivo MQTT
+
+
+ Unidad MQTT
+
+
+ Binario
+
+
+ OPCIONES
+
+
+ HABILITADO
+
+
+ Sensor habilitado
+
+
+ Presencia
+
+
+ Nivel
+
+
+ Temperatura
+
+
+ Condensación
+
+
+ Latitud
+
+
+ Longitud
+
+
+ Altitud
+
+
+ Satélites
+
+
+ Memoria RAM libre
+
+
+ Instante
+
+
+ Media móvil
+
+
+ p. ej. 21
+
+
+ p. ej. 22
+
+
+ p. ej. 23
+
+
+ p. ej. 12
+
+
+ p. ej. 11
+
+
+ p. ej. 13
+
+
+ p. ej. 10
+
+
+ p. ej. 9600
+
+
+ MMSI
+
+
+ Indicativo
+
+
+ Puerto base
+
+
+ Pin CS
+
+
+ Clave de API
+
+
+ Clave HMAC
+
+
+ Habilitado
+
+
+ velocidad en baudios
+
+
+ Conexión
+
+
+ Generar nuevas claves
+
+
+ 255 = deshabilitado
+
+
+ p. ej. Bilge
+
+
+ p. ej., bomba de achique
+
+
+ Pin GPIO (en blanco o 255 = deshabilitado)
+
+
+ Presencia
+
+
+ Sensores externos
+
+
+ sensor
+
+
+ Velocidad
+
+
+ Curso
+
+
+ Promedio
+
+
+ Anclar {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.fr-FR.resx b/PowerControlHubApp/Resources/Localization/AppResources.fr-FR.resx
new file mode 100644
index 0000000..27c89f4
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.fr-FR.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Non configuré — appuyez sur ⚙ pour définir l’IP de l’appareil
+
+
+ Appareil injoignable
+
+
+ Aucun avertissement actif
+
+
+ Échec du basculement — consultez le journal
+
+
+ Non connecté
+
+
+ L'adresse IP est requise.
+
+
+ Saisissez un numéro de port valide (1–65535).
+
+
+ Non configuré
+
+
+ OTA : déclenchement de l’installation du micrologiciel…
+
+
+ Échec du déclenchement OTA
+
+
+ Installer le firmware
+
+
+ Installer
+
+
+ Une mise à jour OTA vers {0} est disponible. Télécharger et installer maintenant ?
+
+
+ Mise à jour disponible : {0} (installée : {1})
+
+
+ Vérification de la mise à jour du micrologiciel…
+
+
+ Téléchargement de la mise à jour du micrologiciel…
+
+
+ Application de la mise à jour — redémarrage de l’appareil…
+
+
+ Échec de la mise à jour du firmware. Appuyez pour réessayer.
+
+
+ Le firmware est à jour ({0})
+
+
+ DashboardPoller démarré avec un intervalle de {IntervalMs} ms
+
+
+ DashboardPoller a récupéré l’index à {Time}
+
+
+ DashboardPoller ignore la scrutation : service non configuré
+
+
+ L'appareil a renvoyé un JSON invalide lors de la scrutation de l'index.
+
+
+ Erreur inattendue lors de l'interrogation de l'index
+
+
+ DashboardPoller arrêt
+
+
+ Échec du rafraîchissement du cache de métadonnées du capteur au démarrage
+
+
+ Relais
+
+
+ Relais {0}
+
+
+ Enregistré avec succès
+
+
+ Une ou plusieurs commandes ont échoué
+
+
+ Échec de l'enregistrement — appareil injoignable
+
+
+ Épingler {0}
+
+
+ Code PIN {0}, {1}
+
+
+ Échec de la commande de suppression
+
+
+ Retirer le capteur
+
+
+ Supprimer
+
+
+ Annuler
+
+
+ Enregistrer
+
+
+ Retour
+
+
+ Aucun
+
+
+ OK
+
+
+ Redémarrer
+
+
+ Rafraîchi
+
+
+ Bleu
+
+
+ Vert
+
+
+ Gris
+
+
+ orange
+
+
+ Rouge
+
+
+ Jaune
+
+
+ défaut
+
+
+ Corne
+
+
+ Relais nocturne
+
+
+ Par défaut
+
+
+ Corne
+
+
+ Nuit
+
+
+ Désactivé
+
+
+ Sur
+
+
+ Lumière
+
+
+ Sombre
+
+
+ Paramètres
+
+
+ Adresse IP de l'appareil
+
+
+ Port HTTP
+
+
+ Clé API (X-API-Key)
+
+
+ Clé HMAC (X-Auth-Signature)
+
+
+ Thème de l'application
+
+
+ Enregistrer et connecter
+
+
+ Comment se connecter
+
+
+ 1. Assurez-vous que votre téléphone/PC est sur le même réseau WiFi que la carte ESP32.
+
+
+ 2. Saisissez l'adresse IP affichée sur la sortie série de l'appareil ou dans la table DHCP de votre routeur.
+
+
+ 3. Le port par défaut est 80.
+
+
+ 4. Si l'authentification réseau est activée sur l'appareil (C19:e=1), saisissez la clé API ou la clé HMAC ci-dessus pour correspondre à la configuration de l'appareil.
+
+
+ 5. Appuyez sur Enregistrer et connecter, puis revenez au tableau de bord.
+
+
+ par ex. 192.168.1.100
+
+
+ 80
+
+
+ Facultatif – clé API de l’appareil pour l’authentification
+
+
+ Facultatif – clé HMAC-SHA256 pour l'authentification
+
+
+ Système
+
+
+ temps
+
+
+ RTC
+
+
+ Localisation
+
+
+ MQTT
+
+
+ Carte SD
+
+
+ Sécurité
+
+
+ Nextion
+
+
+ Buzzer
+
+
+ Alertes actives
+
+
+ GPIOs en cours d'utilisation
+
+
+ Restrictions des broches GPIO
+
+
+ {0} broche(s) actuellement affectée(s)
+
+
+ COMMANDES
+
+
+ CAPTEURS
+
+
+ Configuration du relais
+
+
+ Configuration du relais
+
+
+ identité
+
+
+ MATÉRIEL
+
+
+ COMPORTEMENT
+
+
+ LIAISON
+
+
+ Nom court (max 5 caractères)
+
+
+ Nom long (max 20 caractères)
+
+
+ Broche GPIO (vide ou 255 = désactivée)
+
+
+ État par défaut à la mise sous tension
+
+
+ Type d’action
+
+
+ Couleur du bouton
+
+
+ Relais lié
+
+
+ Basculer ce relais basculera également le relais lié.
+
+
+ p. ex. Bilge
+
+
+ p. ex. Pompe de cale
+
+
+ 255 = désactivé
+
+
+ Capteurs locaux
+
+
+ Capteurs externes
+
+
+ Capteurs locaux
+
+
+ Capteurs externes
+
+
+ Capteur
+
+
+ Non configuré
+
+
+ Eau
+
+
+ DHT11
+
+
+ Lumière
+
+
+ GPS
+
+
+ Système
+
+
+ Présence binaire
+
+
+ Tension
+
+
+ Inconnu
+
+
+ Métadonnées du type de capteur indisponibles.
+
+
+ Eau (0)
+
+
+ DHT11 (1)
+
+
+ Lumière (2)
+
+
+ GPS (3)
+
+
+ Système (4)
+
+
+ Présence binaire (5)
+
+
+ Tension (6)
+
+
+ °C
+
+
+ %
+
+
+ ko
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Jour
+
+
+ Nuit
+
+
+ Corriger
+
+
+ Aucune correction
+
+
+ Détecté
+
+
+ Effacer
+
+
+ ajouter/mettre à jour l'entrée du capteur
+
+
+ Modifier l’état d’activation
+
+
+ enregistrer les paramètres sur le disque
+
+
+ Échec de :
+
+
+ Broche GPIO 0 (vide ou 255 = désactivé)
+
+
+ Broche GPIO 1 (vide ou 255 = désactivé)
+
+
+ Option 1 (int8)
+
+
+ Option 2 (int8)
+
+
+ Option 3 (int16)
+
+
+ Option 4 (int16)
+
+
+ Paramètres de l'heure
+
+
+ Paramètres RTC
+
+
+ Paramètres de localisation
+
+
+ Paramètres MQTT
+
+
+ Paramètres de la carte SD
+
+
+ Sécurité des réseaux
+
+
+ Paramètres Nextion
+
+
+ Paramètres du buzzer
+
+
+ Paramètres RTC enregistrés
+
+
+ Paramètres du buzzer enregistrés
+
+
+ Paramètres Nextion enregistrés
+
+
+ Redémarrage requis
+
+
+ Les modifications nécessitent un redémarrage de l'appareil pour prendre effet. Redémarrer l'appareil maintenant ? (Si l'appareil ne possède pas de point de terminaison de redémarrage, vous devrez le mettre hors tension puis sous tension manuellement.)
+
+
+ Paramètres enregistrés. Veuillez redémarrer l'appareil pour appliquer la configuration Nextion.
+
+
+ Impossible d'enregistrer les paramètres avant le redémarrage.
+
+
+ UART1
+
+
+ UART2
+
+
+ Port UART
+
+
+ débit en bauds
+
+
+ Broche RX
+
+
+ Broche TX
+
+
+ Activé
+
+
+ Connecté
+
+
+ Déconnecté
+
+
+ Paramètres MQTT enregistrés
+
+
+ Connexion
+
+
+ MQTT activé
+
+
+ État de la connexion
+
+
+ Courtier
+
+
+ port
+
+
+ Nom d'utilisateur
+
+
+ Mot de passe
+
+
+ ID de l'appareil
+
+
+ Home Assistant Découverte
+
+
+ Maintien de la connexion (s)
+
+
+ Préfixe de découverte
+
+
+ Paramètres de la carte SD enregistrés
+
+
+ Partiellement enregistré — broches SPI rejetées (vérifiez les conflits de broches)
+
+
+ Broches SPI non enregistrées (conflit de broches ou broche invalide)
+
+
+ Broches SPI (SCK/MOSI/MISO)
+
+
+ Vitesse d’initialisation (MHz)
+
+
+ CS Pin
+
+
+ Paramètres de sécurité réseau enregistrés
+
+
+ Nouvelles clés générées et sauvegardées
+
+
+ Échec de la génération de la clé — appareil inaccessible
+
+
+ Authentification activée
+
+
+ Générer de nouvelles clés
+
+
+ Clé API
+
+
+ Clé HMAC
+
+
+ Décalage horaire (heures)
+
+
+ Synchroniser maintenant
+
+
+ Paramètres de l'heure enregistrés
+
+
+ Type de bateau
+
+
+ Renommer
+
+
+ MMSI
+
+
+ Indicatif d'appel
+
+
+ Port d'attache
+
+
+ Paramètres de localisation enregistrés
+
+
+ PowerHubService n'est pas configuré. Appelez d'abord Configure().
+
+
+ ConfigConnection en cours d'exécution : {Description}
+
+
+ ConfigConnection réussie : {Description}
+
+
+ Échec de ConfigConnection : {Description}
+
+
+ L'appareil a renvoyé une réponse d'échec.
+
+
+ Erreur du consommateur ConfigConnection
+
+
+ Échec de la publication du message de succès pour : {Description}
+
+
+ Échec de la publication du message d'échec pour : {Description}
+
+
+ Configuration du relais réussie
+
+
+ ConfigurationCapteurRéussie
+
+
+ ConfigPoller : SensorMetaCache actualisé après connexion.
+
+
+ ConfigPoller : échec du contrôle de santé de la connexion.
+
+
+ TimeSyncService démarré avec intervalle {IntervalMin}min, seuil de dérive {DriftSec}s
+
+
+ TimeSyncService: l'heure de l'appareil est {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService : la dérive de {DeltaSec}s dépasse le seuil, réglage de l'heure de l'appareil sur {LocalTime}
+
+
+ TimeSyncService : l'heure de l'appareil est synchronisée (delta {DeltaSec}s)
+
+
+ TimeSyncService : heure de l'appareil non définie, synchronisation en cours
+
+
+ TimeSyncService : échec de la tentative de synchronisation de l'heure
+
+
+ TimeSyncService en cours d’arrêt
+
+
+ Démarrage : premières données du tableau de bord reçues, récupération des métadonnées des capteurs sur la connexion 2.
+
+
+ Démarrage : cache de métadonnées de capteur rempli.
+
+
+ Démarrage : données du tableau de bord déjà disponibles, récupération des métadonnées des capteurs sur la connexion 2.
+
+
+ intérimaire
+
+
+ Humidité
+
+
+ point de rosée
+
+
+ Confort
+
+
+ Risque de condensation
+
+
+ Niveau de lumière
+
+
+ Lumière du jour
+
+
+ dorsal
+
+
+ Lon
+
+
+ Alt
+
+
+ Vitesse
+
+
+ Cours
+
+
+ Sats
+
+
+ Niveau d'eau
+
+
+ Mémoire libre
+
+
+ CPU
+
+
+ Tension
+
+
+ État
+
+
+ Moy.
+
+
+ Annuler
+
+
+ °C
+
+
+ %
+
+
+ ko
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Tableau de bord
+
+
+ Relais
+
+
+ Capteurs externes
+
+
+ Paramètres
+
+
+ Bonjour, le monde !
+
+
+ Installer
+
+
+ Aucun relais configuré
+
+
+ Aucun capteur configuré
+
+
+ Mémoire :
+
+
+ CPU :
+
+
+ TR:
+
+
+ JOURNAL
+
+
+ Actualiser maintenant
+
+
+ Langue
+
+
+ Restrictions GPIO
+
+
+ Bloqué définitivement :
+
+
+ Avis :
+
+
+ Mise à jour du firmware
+
+
+ Version actuelle :
+
+
+ Version disponible :
+
+
+ Rechercher les mises à jour
+
+
+ broche(s) actuellement affectée(s)
+
+
+ Heure de l'appareil
+
+
+ Synchroniser l’heure maintenant
+
+
+ fuseau horaire
+
+
+ Sélectionner un fuseau horaire...
+
+
+ Enregistrer le fuseau horaire
+
+
+ Nom
+
+
+ Nom de l'emplacement...
+
+
+ Type d'emplacement
+
+
+ Sélectionner le type d’emplacement...
+
+
+ Détails du bateau
+
+
+ Broches RTC
+
+
+ Broche de données
+
+
+ Goupille d'horloge
+
+
+ Réinitialiser le PIN
+
+
+ Utilisez 255 pour désactiver toute broche
+
+
+ Broches SPI
+
+
+ SCK (Horloge)
+
+
+ MOSI (sortie maître)
+
+
+ MISO (Master en)
+
+
+ Utilisez 255 pour désactiver
+
+
+ Sélection de puce
+
+
+ Vitesse initiale
+
+
+ Vitesse (MHz)
+
+
+ Valide : 4, 8, 12, 16, 20, 24 MHz
+
+
+ Activer l'authentification
+
+
+ Saisissez la clé API
+
+
+ Saisissez la clé HMAC
+
+
+ Écran Nextion
+
+
+ Numéro de série matériel
+
+
+ Épingles
+
+
+ Broche RX (vide ou 255 = désactivé)
+
+
+ Broche TX (vide ou 255 = désactivé)
+
+
+ Communication
+
+
+ Numéro UART
+
+
+ UART
+
+
+ Redémarrage requis
+
+
+ Les modifications de la configuration Nextion nécessitent un redémarrage de l'appareil pour prendre effet. Enregistrez les paramètres et redémarrez l'appareil.
+
+
+ Broche du buzzer
+
+
+ Broche GPIO
+
+
+ Utilisez 255 pour désactiver la broche.
+
+
+ Hôte / IP
+
+
+ Identifiants
+
+
+ Laisser vide pour aucun
+
+
+ Entrez le mot de passe pour modifier
+
+
+ Identité de l'appareil
+
+
+ p. ex. boat_seawolf_01
+
+
+ homeassistant
+
+
+ Keep Alive (secondes)
+
+
+ Avancé
+
+
+ Enregistrer tous les paramètres
+
+
+ Capteur externe
+
+
+ Type de capteur
+
+
+ Sélectionner le type de capteur
+
+
+ Nom MQTT
+
+
+ Slug MQTT
+
+
+ Type MQTT
+
+
+ Classe d'appareil MQTT
+
+
+ Unité MQTT
+
+
+ Binaire
+
+
+ OPTIONS
+
+
+ ACTIVÉ
+
+
+ Capteur activé
+
+
+ Présence
+
+
+ Niveau
+
+
+ Température
+
+
+ Condensation
+
+
+ latitude
+
+
+ Longitude
+
+
+ Altitude
+
+
+ Satellites
+
+
+ RAM libre
+
+
+ Instantané
+
+
+ Moyenne mobile
+
+
+ p. ex. 21
+
+
+ p. ex. 22
+
+
+ p. ex. 23
+
+
+ p. ex. 12
+
+
+ p. ex. 11
+
+
+ p. ex. 13
+
+
+ p. ex. 10
+
+
+ p. ex. 9600
+
+
+ MMSI
+
+
+ Indicatif d'appel
+
+
+ Port d'attache
+
+
+ CS Pin
+
+
+ Clé API
+
+
+ Clé HMAC
+
+
+ Activé
+
+
+ Débit en bauds
+
+
+ Connexion
+
+
+ Générer de nouvelles clés
+
+
+ 255 = désactivé
+
+
+ p. ex. Bilge
+
+
+ ex. : Pompe de cale
+
+
+ Broche GPIO (vide ou 255 = désactivé)
+
+
+ Présence
+
+
+ Capteurs ext.
+
+
+ Capteur
+
+
+ Vitesse
+
+
+ Cours
+
+
+ Moy.
+
+
+ Épingler {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.it-IT.resx b/PowerControlHubApp/Resources/Localization/AppResources.it-IT.resx
new file mode 100644
index 0000000..72bf7da
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.it-IT.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Non configurato — tocca ⚙ per impostare l'IP del dispositivo
+
+
+ Dispositivo non raggiungibile
+
+
+ Nessun avviso attivo
+
+
+ Toggle non riuscito — vedi log
+
+
+ Non connesso
+
+
+ L'indirizzo IP è richiesto.
+
+
+ Inserisci un numero di porta valido (1–65535).
+
+
+ Non configurato
+
+
+ OTA: avvio installazione firmware…
+
+
+ Attivazione OTA non riuscita
+
+
+ Installa firmware
+
+
+ Installa
+
+
+ È disponibile un aggiornamento OTA per {0}. Scaricarlo e installarlo ora?
+
+
+ Aggiornamento disponibile: {0} (installato: {1})
+
+
+ Verifica aggiornamento firmware…
+
+
+ Download dell'aggiornamento firmware…
+
+
+ Applicazione dell'aggiornamento — riavvio del dispositivo…
+
+
+ Aggiornamento del firmware non riuscito. Tocca per riprovare.
+
+
+ Il firmware è aggiornato ({0})
+
+
+ DashboardPoller avviato con intervallo {IntervalMs}ms
+
+
+ DashboardPoller ha recuperato l'indice alle {Time}
+
+
+ DashboardPoller salta il polling: servizio non configurato
+
+
+ Il dispositivo ha restituito un JSON non valido durante il polling dell'indice.
+
+
+ Errore imprevisto durante il polling dell'indice
+
+
+ Arresto di DashboardPoller
+
+
+ Impossibile aggiornare la cache dei metadati dei sensori all'avvio
+
+
+ Relè
+
+
+ Relè {0}
+
+
+ Salvato con successo
+
+
+ Uno o più comandi non sono riusciti
+
+
+ Salvataggio non riuscito — dispositivo non raggiungibile
+
+
+ PIN {0}
+
+
+ Fissa {0}, {1}
+
+
+ Comando di rimozione non riuscito
+
+
+ Rimuovi sensore
+
+
+ Rimuovi
+
+
+ Annulla
+
+
+ Salva
+
+
+ Indietro
+
+
+ Nessuno
+
+
+ OK
+
+
+ Riavvia
+
+
+ rinfrescato
+
+
+ Blu
+
+
+ Verde
+
+
+ Grigio
+
+
+ arancione
+
+
+ Rosso
+
+
+ giallo
+
+
+ Predefinito
+
+
+ Corno
+
+
+ Staffetta Notturna
+
+
+ predefinito
+
+
+ Corno
+
+
+ Notte
+
+
+ Spento
+
+
+ Acceso
+
+
+ Luce
+
+
+ Scuro
+
+
+ Impostazioni
+
+
+ Indirizzo IP del dispositivo
+
+
+ Porta HTTP
+
+
+ Chiave API (X-API-Key)
+
+
+ Chiave HMAC (X-Auth-Signature)
+
+
+ Tema dell'app
+
+
+ Salva e connetti
+
+
+ Come connettersi
+
+
+ 1. Assicurati che il tuo telefono/PC sia sulla stessa rete WiFi della scheda ESP32.
+
+
+ 2. Inserisci l'indirizzo IP mostrato sull'output seriale del dispositivo o nella tabella DHCP del tuo router.
+
+
+ 3. La porta predefinita è 80.
+
+
+ 4. Se sul dispositivo è abilitata l'autenticazione di rete (C19:e=1), inserire sopra la chiave API o la chiave HMAC in modo che corrisponda alla configurazione del dispositivo.
+
+
+ 5. Tocca Salva e connetti, quindi torna alla Dashboard.
+
+
+ ad es. 192.168.1.100
+
+
+ 80
+
+
+ Opzionale – chiave API del dispositivo per l'autenticazione
+
+
+ Opzionale – chiave HMAC-SHA256 per l'autenticazione
+
+
+ Sistema
+
+
+ Tempo
+
+
+ RTC
+
+
+ Posizione
+
+
+ MQTT
+
+
+ Scheda SD
+
+
+ Sicurezza
+
+
+ Nextion
+
+
+ Cicalino
+
+
+ Avvisi attivi
+
+
+ GPIO in uso
+
+
+ Restrizioni sui pin GPIO
+
+
+ {0} pin attualmente assegnati
+
+
+ CONTROLLI
+
+
+ SENSORI
+
+
+ Configurazione relè
+
+
+ Configurazione relè
+
+
+ IDENTITÀ
+
+
+ HARDWARE
+
+
+ COMPORTAMENTO
+
+
+ COLLEGAMENTO
+
+
+ Nome breve (max 5 caratteri)
+
+
+ Nome lungo (max 20 caratteri)
+
+
+ GPIO Pin (vuoto o 255 = disabilitato)
+
+
+ Stato predefinito all'accensione
+
+
+ Tipo di azione
+
+
+ Colore pulsante
+
+
+ Relè collegato
+
+
+ Attivando questo relè si attiverà anche il relè collegato.
+
+
+ ad es. Bilge
+
+
+ ad es. pompa di sentina
+
+
+ 255 = disabilitato
+
+
+ Sensori locali
+
+
+ Sensori esterni
+
+
+ Sensori Locali
+
+
+ Sensori Est.
+
+
+ Sensore
+
+
+ Non configurato
+
+
+ Acqua
+
+
+ DHT11
+
+
+ Luce
+
+
+ GPS
+
+
+ Sistema
+
+
+ Presenza Binaria
+
+
+ tensione
+
+
+ Sconosciuto
+
+
+ Metadati del tipo di sensore non disponibili.
+
+
+ Acqua (0)
+
+
+ DHT11 (1)
+
+
+ Luce (2)
+
+
+ GPS (3)
+
+
+ Sistema (4)
+
+
+ Presenza binaria (5)
+
+
+ Tensione (6)
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Giorno
+
+
+ Notte
+
+
+ Correggi
+
+
+ Nessuna correzione
+
+
+ Rilevato
+
+
+ Cancella
+
+
+ aggiungi/aggiorna voce sensore
+
+
+ modifica stato di abilitazione
+
+
+ Salva le impostazioni su disco
+
+
+ Impossibile:
+
+
+ Pin GPIO 0 (vuoto o 255 = disabilitato)
+
+
+ GPIO Pin 1 (vuoto o 255 = disabilitato)
+
+
+ Opzione 1 (int8)
+
+
+ Opzione 2 (int8)
+
+
+ Opzione 3 (int16)
+
+
+ Opzione 4 (int16)
+
+
+ Impostazioni ora
+
+
+ Impostazioni RTC
+
+
+ Impostazioni posizione
+
+
+ Impostazioni MQTT
+
+
+ Impostazioni scheda SD
+
+
+ Sicurezza di rete
+
+
+ Impostazioni Nextion
+
+
+ Impostazioni buzzer
+
+
+ Impostazioni RTC salvate
+
+
+ Impostazioni buzzer salvate
+
+
+ Impostazioni Nextion salvate
+
+
+ Riavvio necessario
+
+
+ Le modifiche richiedono il riavvio del dispositivo per avere effetto. Riavviare il dispositivo adesso? (Se il dispositivo non dispone di un endpoint di riavvio, sarà necessario spegnerlo e riaccenderlo manualmente)
+
+
+ Impostazioni salvate. Spegnere e riaccendere il dispositivo per applicare la configurazione Nextion.
+
+
+ Impossibile salvare le impostazioni prima del riavvio.
+
+
+ UART1
+
+
+ UART2
+
+
+ Porta UART
+
+
+ Velocità in baud
+
+
+ Pin RX
+
+
+ Pin TX
+
+
+ Abilitato
+
+
+ Connesso
+
+
+ Disconnesso
+
+
+ Impostazioni MQTT salvate
+
+
+ Connessione
+
+
+ MQTT abilitato
+
+
+ Stato della connessione
+
+
+ Intermediario
+
+
+ Porto
+
+
+ Nome utente
+
+
+ Password
+
+
+ ID dispositivo
+
+
+ Rilevamento Home Assistant
+
+
+ Mantieni attivo (s)
+
+
+ Prefisso di discovery
+
+
+ Impostazioni scheda SD salvate
+
+
+ Parzialmente salvato — pin SPI rifiutati (verificare conflitti tra i pin)
+
+
+ Pin SPI non salvati (conflitto di pin o pin non valido)
+
+
+ Pin SPI (SCK/MOSI/MISO)
+
+
+ Velocità iniziale (MHz)
+
+
+ Pin CS
+
+
+ Impostazioni di sicurezza di rete salvate
+
+
+ Nuove chiavi generate e salvate
+
+
+ Generazione chiave non riuscita — dispositivo non raggiungibile
+
+
+ Autenticazione abilitata
+
+
+ Genera nuove chiavi
+
+
+ Chiave API
+
+
+ Chiave HMAC
+
+
+ Offset fuso orario (ore)
+
+
+ Sincronizza ora
+
+
+ Impostazioni orario salvate
+
+
+ Tipo di barca
+
+
+ Rinomina
+
+
+ MMSI
+
+
+ Nominativo
+
+
+ Porto di origine
+
+
+ Impostazioni posizione salvate
+
+
+ PowerHubService non è configurato. Chiamare prima Configure().
+
+
+ ConfigConnection in esecuzione: {Description}
+
+
+ ConfigConnection riuscita: {Description}
+
+
+ ConfigConnection non riuscita: {Description}
+
+
+ Il dispositivo ha restituito una risposta di errore.
+
+
+ Errore del consumer ConfigConnection
+
+
+ Impossibile pubblicare il messaggio di successo per: {Description}
+
+
+ Impossibile pubblicare il messaggio di errore per: {Description}
+
+
+ Configurazione relè riuscita
+
+
+ Configurazione sensore riuscita
+
+
+ ConfigPoller: SensorMetaCache aggiornato dopo la connessione.
+
+
+ ConfigPoller: verifica dello stato della connessione non riuscita.
+
+
+ TimeSyncService avviato con intervallo {IntervalMin}min, soglia di deriva {DriftSec}s
+
+
+ TimeSyncService: l'ora del dispositivo è {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService: deriva {DeltaSec}s supera la soglia, impostazione dell'ora del dispositivo su {LocalTime}
+
+
+ TimeSyncService: ora del dispositivo sincronizzata (delta {DeltaSec}s)
+
+
+ TimeSyncService: ora del dispositivo non impostata, sincronizzazione
+
+
+ TimeSyncService: tentativo di sincronizzazione dell'ora non riuscito
+
+
+ TimeSyncService in arresto
+
+
+ Avvio: primi dati dashboard ricevuti, recupero metadati sensore sulla connessione 2.
+
+
+ Avvio: cache dei metadati del sensore popolata.
+
+
+ Avvio: dati della dashboard già disponibili, recupero dei metadati del sensore sulla connessione 2.
+
+
+ Temperatura
+
+
+ Umidità
+
+
+ Punto di rugiada
+
+
+ Comfort
+
+
+ Rischio di condensa
+
+
+ Livello di luce
+
+
+ Luce del giorno
+
+
+ Latino
+
+
+ Lon
+
+
+ Alt
+
+
+ Velocità
+
+
+ Corso
+
+
+ SAT
+
+
+ Livello dell'acqua
+
+
+ Memoria libera
+
+
+ CPU
+
+
+ Tensione
+
+
+ Stato
+
+
+ Media
+
+
+ Annulla
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Cruscotto
+
+
+ Relè
+
+
+ Sensori esterni
+
+
+ Impostazioni
+
+
+ Ciao, mondo!
+
+
+ Installa
+
+
+ Nessun relè configurato
+
+
+ Nessun sensore configurato
+
+
+ Mem:
+
+
+ CPU:
+
+
+ Inoltro:
+
+
+ REGISTRO
+
+
+ Aggiorna ora
+
+
+ Lingua
+
+
+ Restrizioni GPIO
+
+
+ Bloccato in modo rigido:
+
+
+ Avviso:
+
+
+ Aggiornamento firmware
+
+
+ Versione corrente:
+
+
+ Versione disponibile:
+
+
+ Verifica aggiornamenti
+
+
+ PIN attualmente assegnato/i
+
+
+ Ora del dispositivo
+
+
+ Sincronizza ora
+
+
+ Fuso orario
+
+
+ Seleziona fuso orario...
+
+
+ Salva fuso orario
+
+
+ Nome
+
+
+ Nome della località...
+
+
+ Tipo di posizione
+
+
+ Seleziona il tipo di posizione...
+
+
+ Dettagli dell'imbarcazione
+
+
+ Pin RTC
+
+
+ Pin Dati
+
+
+ Pin di clock
+
+
+ Reimposta PIN
+
+
+ Utilizzare 255 per disabilitare qualsiasi pin
+
+
+ Pin SPI
+
+
+ SCK (Clock)
+
+
+ MOSI (Uscita Master)
+
+
+ MISO (Master in)
+
+
+ Usa 255 per disabilitare
+
+
+ Selezione Chip
+
+
+ Velocità iniziale
+
+
+ Velocità (MHz)
+
+
+ Valide: 4, 8, 12, 16, 20, 24 MHz
+
+
+ Abilita autenticazione
+
+
+ Inserisci la chiave API
+
+
+ Inserisci chiave HMAC
+
+
+ Display Nextion
+
+
+ Seriale hardware
+
+
+ Spilli
+
+
+ Pin RX (vuoto o 255 = disabilitato)
+
+
+ Pin TX (vuoto o 255 = disabilitato)
+
+
+ Comunicazione
+
+
+ Numero UART
+
+
+ UART
+
+
+ Riavvio richiesto
+
+
+ Le modifiche alla configurazione di Nextion richiedono il riavvio del dispositivo per avere effetto. Salvare le impostazioni e riavviare il dispositivo.
+
+
+ Pin del Buzzer
+
+
+ pin GPIO
+
+
+ Usa 255 per disabilitare il pin
+
+
+ Host / IP
+
+
+ Credenziali
+
+
+ Lasciare vuoto per nessuno
+
+
+ Inserisci la password per modificare
+
+
+ Identità del dispositivo
+
+
+ ad es. boat_seawolf_01
+
+
+ homeassistant
+
+
+ Keep Alive (secondi)
+
+
+ Avanzato
+
+
+ Salva tutte le impostazioni
+
+
+ Sensore esterno
+
+
+ Tipo di sensore
+
+
+ Seleziona tipo di sensore
+
+
+ Nome MQTT
+
+
+ Slug MQTT
+
+
+ Tipo MQTT
+
+
+ MQTT Classe del dispositivo
+
+
+ Unità MQTT
+
+
+ Binario
+
+
+ OPZIONI
+
+
+ ABILITATO
+
+
+ Sensore abilitato
+
+
+ presenza
+
+
+ Livello
+
+
+ Temperatura
+
+
+ Condensazione
+
+
+ Latitudine
+
+
+ Longitudine
+
+
+ Altitudine
+
+
+ Satelliti
+
+
+ RAM libera
+
+
+ istantaneo
+
+
+ Media mobile
+
+
+ ad es. 21
+
+
+ ad es. 22
+
+
+ ad es. 23
+
+
+ p. es. 12
+
+
+ ad es. 11
+
+
+ ad es. 13
+
+
+ ad es. 10
+
+
+ ad es. 9600
+
+
+ MMSI
+
+
+ Nominativo di chiamata
+
+
+ Porto di origine
+
+
+ Pin CS
+
+
+ Chiave API
+
+
+ Chiave HMAC
+
+
+ Abilitato
+
+
+ Velocità in baud
+
+
+ Connessione
+
+
+ Genera nuove chiavi
+
+
+ 255 = disabilitato
+
+
+ ad es. Bilge
+
+
+ ad es. Pompa di sentina
+
+
+ Pin GPIO (vuoto o 255 = disabilitato)
+
+
+ Presenza
+
+
+ Sensori esterni
+
+
+ Sensore
+
+
+ velocità
+
+
+ Corso
+
+
+ Media
+
+
+ PIN {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.ja-JP.resx b/PowerControlHubApp/Resources/Localization/AppResources.ja-JP.resx
new file mode 100644
index 0000000..7f2cd50
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.ja-JP.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 未設定 — ⚙をタップしてデバイスのIPを設定
+
+
+ デバイスに到達できません
+
+
+ アクティブな警告はありません
+
+
+ 切り替えに失敗しました — ログを参照してください
+
+
+ 未接続
+
+
+ IPアドレスが必要です。
+
+
+ 有効なポート番号を入力してください(1~65535)。
+
+
+ 未設定
+
+
+ OTA: ファームウェアインストールを開始しています…
+
+
+ OTAトリガーに失敗しました
+
+
+ ファームウェアをインストール
+
+
+ インストール
+
+
+ {0}へのOTAアップデートが利用可能です。今すぐダウンロードしてインストールしますか?
+
+
+ 更新が利用可能です: {0} (インストール済み: {1})
+
+
+ ファームウェアの更新を確認中…
+
+
+ ファームウェアアップデートをダウンロードしています…
+
+
+ アップデートを適用しています — デバイスを再起動しています…
+
+
+ ファームウェアの更新に失敗しました。タップして再試行してください。
+
+
+ ファームウェアは最新です({0})
+
+
+ DashboardPoller が間隔 {IntervalMs} ミリ秒で開始されました
+
+
+ DashboardPoller が {Time} にインデックスを取得しました
+
+
+ DashboardPoller がポーリングをスキップしています: サービスが設定されていません
+
+
+ デバイスがインデックスのポーリング中に無効なJSONを返しました
+
+
+ インデックスのポーリング中に予期しないエラーが発生しました
+
+
+ DashboardPoller を停止しています
+
+
+ 起動時にセンサーメタキャッシュの更新に失敗しました
+
+
+ リレー
+
+
+ リレー {0}
+
+
+ 正常に保存されました
+
+
+ 1つ以上のコマンドが失敗しました
+
+
+ 保存に失敗しました — デバイスに到達できません
+
+
+ ピン留め {0}
+
+
+ ピン留め {0}、{1}
+
+
+ 削除コマンドが失敗しました
+
+
+ センサーを取り外す
+
+
+ 削除
+
+
+ キャンセル
+
+
+ 保存
+
+
+ 戻る
+
+
+ なし
+
+
+ オーケー
+
+
+ 再起動
+
+
+ リフレッシュ済み
+
+
+ 青
+
+
+ 緑
+
+
+ グレー
+
+
+ オレンジ
+
+
+ 赤
+
+
+ 黄色
+
+
+ デフォルト
+
+
+ 角
+
+
+ ナイトリレー
+
+
+ デフォルト
+
+
+ ホーン
+
+
+ 夜
+
+
+ オフ
+
+
+ オン
+
+
+ 光
+
+
+ 暗い
+
+
+ 設定
+
+
+ デバイスIPアドレス
+
+
+ HTTPポート
+
+
+ APIキー(X-API-Key)
+
+
+ HMACキー (X-Auth-Signature)
+
+
+ アプリのテーマ
+
+
+ 保存して接続
+
+
+ 接続方法
+
+
+ 1. スマートフォン/PCがESP32ボードと同じWi-Fiネットワークに接続されていることを確認してください。
+
+
+ 2. デバイスのシリアル出力またはルーターのDHCPテーブルに表示されているIPアドレスを入力します。
+
+
+ 3. デフォルトのポートは80です。
+
+
+ 4. デバイスでネットワーク認証が有効になっている場合(C19:e=1)、デバイスの設定に合わせて上記にAPIキーまたはHMACキーを入力してください。
+
+
+ 5. 保存して接続をタップし、ダッシュボードに戻ります。
+
+
+ 例:192.168.1.100
+
+
+ 80
+
+
+ オプション – 認証用のデバイスAPIキー
+
+
+ オプション – 認証用のHMAC-SHA256キー
+
+
+ システム
+
+
+ 時間
+
+
+ リアルタイムクロック
+
+
+ 場所
+
+
+ MQTT
+
+
+ SDカード
+
+
+ セキュリティ
+
+
+ Nextion
+
+
+ ブザー
+
+
+ アクティブな警告
+
+
+ 使用中のGPIO
+
+
+ GPIOピンの制限
+
+
+ 現在 {0} 個のピンが割り当てられています
+
+
+ 操作
+
+
+ センサー
+
+
+ リレー設定
+
+
+ リレー設定
+
+
+ アイデンティティ
+
+
+ ハードウェア
+
+
+ 行動
+
+
+ リンキング
+
+
+ 短縮名(最大5文字)
+
+
+ 長い名前(最大20文字)
+
+
+ GPIOピン(空白または255 = 無効)
+
+
+ 電源投入時のデフォルト状態
+
+
+ アクションタイプ
+
+
+ ボタンの色
+
+
+ 連携リレー
+
+
+ このリレーを切り替えると、連動しているリレーも切り替わります。
+
+
+ 例:ビルジ
+
+
+ 例:ビルジポンプ
+
+
+ 255 = 無効
+
+
+ ローカルセンサー
+
+
+ 外部センサー
+
+
+ ローカルセンサー
+
+
+ 外部センサー
+
+
+ センサー
+
+
+ 未設定
+
+
+ 水
+
+
+ DHT11
+
+
+ 光
+
+
+ GPS
+
+
+ システム
+
+
+ バイナリプレゼンス
+
+
+ 電圧
+
+
+ 不明
+
+
+ センサータイプのメタデータが利用できません。
+
+
+ 水(0)
+
+
+ DHT11 (1)
+
+
+ ライト(2)
+
+
+ GPS(3)
+
+
+ システム(4)
+
+
+ バイナリプレゼンス(5)
+
+
+ 電圧(6)
+
+
+ ℃
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ エム
+
+
+ °
+
+
+ 日
+
+
+ 夜
+
+
+ 修正して
+
+
+ 修正なし
+
+
+ 検出された
+
+
+ クリア
+
+
+ センサー項目の追加/更新
+
+
+ 有効状態を変更
+
+
+ 設定をディスクに保存
+
+
+ 失敗しました:
+
+
+ GPIOピン0(空白または255の場合は無効)
+
+
+ GPIOピン1(空白または255 = 無効)
+
+
+ オプション1 (int8)
+
+
+ オプション2(int8)
+
+
+ オプション3(int16)
+
+
+ オプション4(int16)
+
+
+ 時間設定
+
+
+ RTC設定
+
+
+ 位置情報設定
+
+
+ MQTT設定
+
+
+ SDカード設定
+
+
+ ネットワークセキュリティ
+
+
+ Nextion設定
+
+
+ ブザー設定
+
+
+ RTC設定を保存しました
+
+
+ ブザー設定を保存しました
+
+
+ Nextion設定が保存されました
+
+
+ 再起動が必要です
+
+
+ 変更を有効にするにはデバイスの再起動が必要です。今すぐデバイスを再起動しますか?(デバイスに再起動エンドポイントがない場合は、手動で電源を入れ直す必要があります)
+
+
+ 設定を保存しました。Nextionの設定を適用するために、デバイスの電源を入れ直してください。
+
+
+ 再起動前に設定を保存できませんでした。
+
+
+ UART1
+
+
+ UART2
+
+
+ UARTポート
+
+
+ ボーレート
+
+
+ RXピン
+
+
+ TXピン
+
+
+ 有効
+
+
+ 接続済み
+
+
+ 切断されました
+
+
+ MQTT設定が保存されました
+
+
+ 接続
+
+
+ MQTT 有効
+
+
+ 接続状態
+
+
+ ブローカー
+
+
+ ポート
+
+
+ ユーザー名
+
+
+ パスワード
+
+
+ デバイスID
+
+
+ Home Assistant ディスカバリー
+
+
+ キープアライブ(秒)
+
+
+ ディスカバリープレフィックス
+
+
+ SDカードの設定を保存しました
+
+
+ 部分的に保存されました — SPIピンは拒否されました(ピンの競合を確認してください)
+
+
+ SPIピンが保存されませんでした(ピン競合または無効なピン)
+
+
+ SPIピン(SCK/MOSI/MISO)
+
+
+ 初期速度(MHz)
+
+
+ CSピン
+
+
+ ネットワークセキュリティ設定を保存しました
+
+
+ 新しい鍵が生成され、保存されました
+
+
+ キー生成に失敗しました — デバイスに到達できません
+
+
+ 認証が有効になっています
+
+
+ 新しい鍵を生成
+
+
+ APIキー
+
+
+ HMACキー
+
+
+ タイムゾーンオフセット(時間)
+
+
+ 今すぐ同期
+
+
+ 時刻設定を保存しました
+
+
+ ボートの種類
+
+
+ 名前を変更
+
+
+ MMSI
+
+
+ コールサイン
+
+
+ 母港
+
+
+ 位置情報の設定が保存されました
+
+
+ PowerHubService が構成されていません。最初に Configure() を呼び出してください。
+
+
+ ConfigConnection 実行中: {Description}
+
+
+ ConfigConnection が成功しました: {Description}
+
+
+ ConfigConnectionに失敗しました: {Description}
+
+
+ デバイスが失敗応答を返しました
+
+
+ ConfigConnection コンシューマーエラー
+
+
+ 成功メッセージを公開できませんでした: {Description}
+
+
+ {Description} の失敗メッセージを公開できませんでした
+
+
+ リレー設定が成功しました
+
+
+ センサー設定に成功しました
+
+
+ ConfigPoller: SensorMetaCache は接続後にリフレッシュされました。
+
+
+ ConfigPoller: 接続ヘルスチェックに失敗しました。
+
+
+ TimeSyncService が間隔 {IntervalMin} 分、ドリフトしきい値 {DriftSec} 秒で開始されました。
+
+
+ TimeSyncService: デバイス時刻は {DeviceTime}、差分 {DeltaSec}秒
+
+
+ TimeSyncService: ドリフト {DeltaSec} 秒がしきい値を超えました。デバイス時刻を {LocalTime} に設定します
+
+
+ TimeSyncService: デバイスの時刻は同期しています(差分 {DeltaSec}秒)
+
+
+ TimeSyncService: デバイスの時刻が未設定のため、同期しています
+
+
+ TimeSyncService: 時刻同期の試行に失敗しました
+
+
+ TimeSyncService 停止中
+
+
+ スタートアップ: 最初のダッシュボードデータを受信、接続2でセンサーメタを取得中
+
+
+ 起動時: センサーメタキャッシュが投入されました。
+
+
+ 起動時: ダッシュボードデータは既に利用可能です。接続2でセンサーメタを取得中です。
+
+
+ 温度
+
+
+ 湿度
+
+
+ 露点
+
+
+ 快適さ
+
+
+ 結露リスク
+
+
+ 光レベル
+
+
+ 日光
+
+
+ 緯度
+
+
+ ロン
+
+
+ Alt
+
+
+ スピード
+
+
+ コース
+
+
+ サッツ
+
+
+ 水位
+
+
+ 空きメモリ
+
+
+ CPU
+
+
+ 電圧
+
+
+ 州
+
+
+ 平均
+
+
+ キャンセル
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ エム
+
+
+ °
+
+
+ ダッシュボード
+
+
+ リレー
+
+
+ 外部センサー
+
+
+ 設定
+
+
+ こんにちは、世界!
+
+
+ インストール
+
+
+ リレーは設定されていません
+
+
+ センサーが設定されていません
+
+
+ メモリ:
+
+
+ CPU:
+
+
+ 転送:
+
+
+ ログ
+
+
+ 今すぐ更新
+
+
+ 言語
+
+
+ GPIO制限
+
+
+ ハードブロック済み:
+
+
+ 勧告:
+
+
+ ファームウェアアップデート
+
+
+ 現在のバージョン:
+
+
+ 利用可能なバージョン:
+
+
+ 更新を確認
+
+
+ 現在割り当てられているPIN
+
+
+ デバイス時間
+
+
+ 今すぐ時刻を同期
+
+
+ タイムゾーン
+
+
+ タイムゾーンを選択...
+
+
+ タイムゾーンを保存
+
+
+ 名前
+
+
+ 場所名...
+
+
+ ロケーションタイプ
+
+
+ 場所タイプを選択...
+
+
+ ボート詳細
+
+
+ RTCピン
+
+
+ データピン
+
+
+ クロックピン
+
+
+ PINをリセット
+
+
+ 任意のピンを無効にするには255を使用します。
+
+
+ SPIピン
+
+
+ SCK(クロック)
+
+
+ MOSI(マスター出力)
+
+
+ MISO(マスタ入力)
+
+
+ 無効にするには255を使用してください。
+
+
+ チップセレクト
+
+
+ 初期速度
+
+
+ 速度(MHz)
+
+
+ 有効: 4、8、12、16、20、24 MHz
+
+
+ 認証を有効にする
+
+
+ APIキーを入力
+
+
+ HMACキーを入力
+
+
+ ネクション ディスプレイ
+
+
+ ハードウェアシリアル
+
+
+ ピン
+
+
+ RXピン(空白または255 = 無効)
+
+
+ TXピン(空白または255 = 無効)
+
+
+ コミュニケーション
+
+
+ UART番号
+
+
+ UART
+
+
+ 再起動が必要です
+
+
+ Nextion設定の変更を有効にするには、デバイスの再起動が必要です。設定を保存してデバイスを再起動してください。
+
+
+ ブザーピン
+
+
+ GPIOピン
+
+
+ ピンを無効にするには255を使用してください
+
+
+ ホスト / IP
+
+
+ 資格情報
+
+
+ なしの場合は空欄のままにしてください
+
+
+ 変更するにはパスワードを入力してください
+
+
+ デバイス識別情報
+
+
+ 例:boat_seawolf_01
+
+
+ ホームアシスタント
+
+
+ キープアライブ(秒)
+
+
+ 上級
+
+
+ すべての設定を保存
+
+
+ 外部センサー
+
+
+ センサータイプ
+
+
+ センサータイプを選択
+
+
+ MQTT名
+
+
+ MQTTスラッグ
+
+
+ MQTTタイプ
+
+
+ MQTTデバイスクラス
+
+
+ MQTTユニット
+
+
+ バイナリ
+
+
+ オプション
+
+
+ 有効
+
+
+ センサー有効
+
+
+ 存在
+
+
+ レベル
+
+
+ 温度
+
+
+ 凝縮
+
+
+ 緯度
+
+
+ 経度
+
+
+ 高度
+
+
+ 衛星
+
+
+ 空きRAM
+
+
+ インスタント
+
+
+ 移動平均
+
+
+ 例:21
+
+
+ 例:22
+
+
+ 例:23
+
+
+ 例:12
+
+
+ 例:11
+
+
+ 例:13
+
+
+ 例: 10
+
+
+ 例:9600
+
+
+ MMSI
+
+
+ コールサイン
+
+
+ 母港
+
+
+ CSピン
+
+
+ APIキー
+
+
+ HMACキー
+
+
+ 有効
+
+
+ ボーレート
+
+
+ 接続
+
+
+ 新しいキーを生成
+
+
+ 255 = 無効
+
+
+ 例:ビルジ
+
+
+ 例:ビルジポンプ
+
+
+ GPIOピン(空白または255 = 無効)
+
+
+ 存在
+
+
+ 外部センサー
+
+
+ センサー
+
+
+ 速度
+
+
+ コース
+
+
+ 平均
+
+
+ ピン留め {0}、{1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.ms-MY.resx b/PowerControlHubApp/Resources/Localization/AppResources.ms-MY.resx
new file mode 100644
index 0000000..4d32705
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.ms-MY.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Tidak dikonfigurasi — ketik ⚙ untuk menetapkan IP peranti
+
+
+ Peranti tidak dapat dihubungi
+
+
+ Tiada amaran aktif
+
+
+ Togol gagal — lihat log
+
+
+ Tidak disambungkan
+
+
+ Alamat IP diperlukan.
+
+
+ Masukkan nombor port yang sah (1–65535).
+
+
+ Tidak dikonfigurasi
+
+
+ OTA: mencetuskan pemasangan perisian tegar…
+
+
+ Pencetus OTA gagal
+
+
+ Pasang Perisian Tegar
+
+
+ Pasang
+
+
+ Kemas kini OTA kepada {0} tersedia. Muat turun dan pasang sekarang?
+
+
+ Kemas kini tersedia: {0} (dipasang: {1})
+
+
+ Sedang menyemak kemas kini perisian tegar…
+
+
+ Memuat turun kemas kini perisian tegar…
+
+
+ Memasang kemas kini — peranti sedang but semula…
+
+
+ Kemas kini perisian tegar gagal. Ketik untuk cuba semula.
+
+
+ Firmware adalah terkini ({0})
+
+
+ DashboardPoller dimulakan dengan selang {IntervalMs}ms
+
+
+ DashboardPoller mengambil indeks pada {Time}
+
+
+ DashboardPoller melangkau pengundian: perkhidmatan tidak dikonfigurasikan.
+
+
+ Peranti mengembalikan JSON tidak sah semasa mengundi indeks
+
+
+ Ralat tidak dijangka semasa mengundi indeks.
+
+
+ DashboardPoller sedang berhenti
+
+
+ Gagal menyegarkan cache meta sensor semasa permulaan
+
+
+ Geganti
+
+
+ Geganti {0}
+
+
+ Berjaya disimpan
+
+
+ Satu atau lebih arahan gagal
+
+
+ Simpan gagal — peranti tidak dapat dihubungi
+
+
+ Semat {0}
+
+
+ Semat {0}, {1}
+
+
+ Perintah hapus gagal
+
+
+ Alih keluar penderia
+
+
+ Alih keluar
+
+
+ Batal
+
+
+ Simpan
+
+
+ Kembali
+
+
+ Tiada
+
+
+ OK
+
+
+ But semula
+
+
+ Disegarkan
+
+
+ Biru
+
+
+ Hijau
+
+
+ Kelabu
+
+
+ Oren
+
+
+ Merah
+
+
+ Kuning
+
+
+ Lalai
+
+
+ Tanduk
+
+
+ Relay Malam
+
+
+ Lalai
+
+
+ Tanduk
+
+
+ malam
+
+
+ Mati
+
+
+ Hidup
+
+
+ Cahaya
+
+
+ Gelap
+
+
+ Tetapan
+
+
+ Alamat IP Peranti
+
+
+ Port HTTP
+
+
+ Kunci API (X-API-Key)
+
+
+ Kunci HMAC (X-Auth-Signature)
+
+
+ Tema Aplikasi
+
+
+ Simpan & Sambung
+
+
+ Cara menyambung
+
+
+ 1. Pastikan telefon/PC anda berada pada rangkaian WiFi yang sama dengan papan ESP32.
+
+
+ 2. Masukkan alamat IP yang dipaparkan pada output bersiri peranti atau jadual DHCP penghala anda.
+
+
+ 3. Port lalai ialah 80.
+
+
+ 4. Jika peranti mempunyai pengesahan rangkaian didayakan (C19:e=1), masukkan Kunci API atau Kunci HMAC di atas untuk padan dengan konfigurasi peranti.
+
+
+ 5. Ketik Simpan & Sambung, kemudian kembali ke Papan Pemuka.
+
+
+ cth. 192.168.1.100
+
+
+ 80
+
+
+ Pilihan – kunci API peranti untuk pengesahan
+
+
+ Opsional – kunci HMAC-SHA256 untuk pengesahan
+
+
+ Sistem
+
+
+ Masa
+
+
+ RTC
+
+
+ Lokasi
+
+
+ MQTT
+
+
+ Kad SD
+
+
+ Keselamatan
+
+
+ Nextion
+
+
+ Pembaz
+
+
+ Amaran Aktif
+
+
+ GPIO yang Digunakan
+
+
+ Sekatan Pin GPIO
+
+
+ {0} pin sedang ditugaskan
+
+
+ Kawalan
+
+
+ penderia
+
+
+ Konfigurasi Relay
+
+
+ Konfigurasi Geganti
+
+
+ IDENTITI
+
+
+ Perkakasan
+
+
+ PERILAKU
+
+
+ MENGHUBUNGKAN
+
+
+ Nama Pendek (maks 5 aksara)
+
+
+ Nama Panjang (maks 20 aksara)
+
+
+ Pin GPIO (kosong atau 255 = dilumpuhkan)
+
+
+ Keadaan Lalai Semasa Kuasa Dihidupkan
+
+
+ Jenis Tindakan
+
+
+ Warna Butang
+
+
+ Relay Terhubung
+
+
+ Menogol geganti ini juga akan menogol geganti yang dipautkan.
+
+
+ cth. Bilge
+
+
+ cth. Pam Bilga
+
+
+ 255 = dilumpuhkan
+
+
+ Sensor Tempatan
+
+
+ Penderia Luaran
+
+
+ Sensor Tempatan
+
+
+ Sensor Luaran
+
+
+ Penderia
+
+
+ Tidak dikonfigurasi
+
+
+ Air
+
+
+ DHT11
+
+
+ Cahaya
+
+
+ GPS
+
+
+ Sistem
+
+
+ Kehadiran Binari
+
+
+ Voltan
+
+
+ Tidak diketahui
+
+
+ Metadata jenis sensor tidak tersedia.
+
+
+ Air (0)
+
+
+ DHT11 (1)
+
+
+ Cahaya (2)
+
+
+ GPS (3)
+
+
+ Sistem (4)
+
+
+ Kehadiran Binari (5)
+
+
+ Voltan (6)
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/j
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Hari
+
+
+ Malam
+
+
+ Betulkan
+
+
+ Tiada Pembaikan
+
+
+ Dikesan
+
+
+ Kosongkan
+
+
+ tambah/kemas kini entri penderia
+
+
+ Ubah keadaan didayakan
+
+
+ simpan tetapan ke cakera
+
+
+ Gagal untuk:
+
+
+ Pin GPIO 0 (kosong atau 255 = dilumpuhkan)
+
+
+ Pin GPIO 1 (kosong atau 255 = dilumpuhkan)
+
+
+ Pilihan 1 (int8)
+
+
+ Pilihan 2 (int8)
+
+
+ Pilihan 3 (int16)
+
+
+ Pilihan 4 (int16)
+
+
+ Tetapan Masa
+
+
+ Tetapan RTC
+
+
+ Tetapan Lokasi
+
+
+ Tetapan MQTT
+
+
+ Tetapan Kad SD
+
+
+ Keselamatan Rangkaian
+
+
+ Tetapan Nextion
+
+
+ Tetapan Buzzer
+
+
+ Tetapan RTC disimpan
+
+
+ Tetapan buzzer disimpan
+
+
+ Tetapan Nextion disimpan
+
+
+ But Semula Diperlukan
+
+
+ Perubahan memerlukan but semula peranti untuk berkuat kuasa. But semula peranti sekarang? (Jika peranti tiada titik akhir but semula, anda perlu kitar kuasa secara manual)
+
+
+ Tetapan disimpan. Sila matikan dan hidupkan semula peranti untuk menggunakan konfigurasi Nextion.
+
+
+ Gagal menyimpan tetapan sebelum but semula.
+
+
+ UART1
+
+
+ UART2
+
+
+ Port UART
+
+
+ Kadar Baud
+
+
+ Pin RX
+
+
+ Pin TX
+
+
+ Didayakan
+
+
+ Terhubung
+
+
+ Terputus
+
+
+ Tetapan MQTT disimpan
+
+
+ Sambungan
+
+
+ MQTT Didayakan
+
+
+ Status Sambungan
+
+
+ Broker
+
+
+ Pelabuhan
+
+
+ Nama pengguna
+
+
+ kata laluan
+
+
+ ID Peranti
+
+
+ Penemuan Home Assistant
+
+
+ Kekal Aktif (s)
+
+
+ Awalan Penemuan
+
+
+ Tetapan Kad SD disimpan
+
+
+ Sebahagian disimpan — Pin SPI ditolak (semak konflik pin)
+
+
+ Pin SPI tidak disimpan (konflik pin atau pin tidak sah)
+
+
+ Pin SPI (SCK/MOSI/MISO)
+
+
+ Kelajuan Awal (MHz)
+
+
+ Pin CS
+
+
+ Tetapan keselamatan rangkaian disimpan
+
+
+ Kunci baharu dijana dan disimpan
+
+
+ Penjanaan kunci gagal — peranti tidak dapat dihubungi
+
+
+ Pengesahan Didayakan
+
+
+ Jana Kunci Baharu
+
+
+ Kunci API
+
+
+ Kunci HMAC
+
+
+ Ofset Zon Waktu (jam)
+
+
+ Sync Sekarang
+
+
+ Tetapan masa disimpan
+
+
+ Jenis Bot
+
+
+ Namakan semula
+
+
+ MMSI
+
+
+ Tanda Panggilan
+
+
+ pelabuhan asal
+
+
+ Tetapan lokasi disimpan
+
+
+ PowerHubService tidak dikonfigurasikan. Panggil Configure() dahulu.
+
+
+ ConfigConnection melaksanakan: {Description}
+
+
+ ConfigConnection berjaya: {Description}
+
+
+ ConfigConnection gagal: {Description}
+
+
+ Peranti mengembalikan respons kegagalan
+
+
+ Ralat pengguna ConfigConnection
+
+
+ Gagal menerbitkan mesej kejayaan untuk: {Description}
+
+
+ Gagal menerbitkan mesej kegagalan untuk: {Description}
+
+
+ KonfigurasiGegantiBerjaya
+
+
+ Konfigurasi Sensor Berjaya
+
+
+ ConfigPoller: SensorMetaCache disegarkan selepas sambungan.
+
+
+ ConfigPoller: Pemeriksaan kesihatan sambungan gagal.
+
+
+ TimeSyncService dimulakan dengan selang {IntervalMin}min, ambang hanyut {DriftSec}s
+
+
+ TimeSyncService: masa peranti ialah {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService: hanyutan {DeltaSec}s melebihi ambang, menetapkan masa peranti kepada {LocalTime}
+
+
+ TimeSyncService: masa peranti adalah segerak (delta {DeltaSec}s)
+
+
+ TimeSyncService: masa peranti tidak ditetapkan, sedang menyegerakkan
+
+
+ TimeSyncService: percubaan penyegerakan masa gagal
+
+
+ TimeSyncService sedang berhenti
+
+
+ Permulaan: data papan pemuka pertama diterima, mengambil metadata sensor pada sambungan 2.
+
+
+ Permulaan: cache meta sensor diisi
+
+
+ Permulaan: data papan pemuka sudah tersedia, sedang mengambil metadata sensor pada sambungan 2.
+
+
+ Sementara
+
+
+ Kelembapan
+
+
+ Takat embun
+
+
+ Keselesaan
+
+
+ Risiko Kondensasi
+
+
+ Tahap Cahaya
+
+
+ cahaya siang
+
+
+ Lat
+
+
+ Lon
+
+
+ Alt
+
+
+ Kelajuan
+
+
+ Kursus
+
+
+ Sats
+
+
+ Paras Air
+
+
+ Memori Kosong
+
+
+ CPU
+
+
+ Voltan
+
+
+ Negeri
+
+
+ Purata
+
+
+ Batal
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/j
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Papan pemuka
+
+
+ Geganti
+
+
+ Penderia Luaran
+
+
+ Tetapan
+
+
+ Helo, Dunia!
+
+
+ Pasang
+
+
+ Tiada geganti dikonfigurasikan.
+
+
+ Tiada penderia dikonfigurasikan
+
+
+ Memori:
+
+
+ CPU:
+
+
+ Diteruskan:
+
+
+ log
+
+
+ Muat semula sekarang
+
+
+ Bahasa
+
+
+ Sekatan GPIO
+
+
+ Disekat keras:
+
+
+ Nasihat:
+
+
+ Kemas Kini Perisian Tegar
+
+
+ Versi semasa:
+
+
+ Versi tersedia:
+
+
+ Semak Kemas Kini
+
+
+ pin yang sedang diberikan
+
+
+ Masa Peranti
+
+
+ Segerakkan Masa Sekarang
+
+
+ Zon waktu
+
+
+ Pilih zon waktu...
+
+
+ Simpan Zon Waktu
+
+
+ Nama
+
+
+ Nama lokasi...
+
+
+ Jenis Lokasi
+
+
+ Pilih jenis lokasi...
+
+
+ Butiran Bot
+
+
+ Pin RTC
+
+
+ Pin Data
+
+
+ Pin Jam
+
+
+ Set Semula PIN
+
+
+ Gunakan 255 untuk melumpuhkan sebarang pin
+
+
+ Pin SPI
+
+
+ SCK (Jam)
+
+
+ MOSI (Master Keluar)
+
+
+ MISO (Master Masuk)
+
+
+ Gunakan 255 untuk melumpuhkan
+
+
+ Pilih Cip
+
+
+ Kelajuan Awal
+
+
+ Kelajuan (MHz)
+
+
+ Sah: 4, 8, 12, 16, 20, 24 MHz
+
+
+ Dayakan Pengesahan
+
+
+ Masukkan kunci API
+
+
+ Masukkan kunci HMAC
+
+
+ Paparan Nextion
+
+
+ Siri Perkakasan
+
+
+ Pin
+
+
+ Pin RX (kosong atau 255 = dinyahdayakan)
+
+
+ Pin TX (kosong atau 255 = dinyahdayakan)
+
+
+ Komunikasi
+
+
+ Nombor UART
+
+
+ UART
+
+
+ But semula diperlukan
+
+
+ Perubahan pada konfigurasi Nextion memerlukan but semula peranti untuk berkuat kuasa. Simpan tetapan dan but semula peranti.
+
+
+ Pin Buzzer
+
+
+ Pin GPIO
+
+
+ Gunakan 255 untuk melumpuhkan PIN
+
+
+ Hos / IP
+
+
+ Kelayakan
+
+
+ Biarkan kosong jika tiada
+
+
+ Masukkan kata laluan untuk menukar
+
+
+ Identiti Peranti
+
+
+ mis. boat_seawolf_01
+
+
+ homeassistant
+
+
+ Kekal Hidup (saat)
+
+
+ Lanjutan
+
+
+ Simpan Semua Tetapan
+
+
+ Penderia Luaran
+
+
+ Jenis Sensor
+
+
+ Pilih jenis penderia
+
+
+ Nama MQTT
+
+
+ slug MQTT
+
+
+ Jenis MQTT
+
+
+ Kelas Peranti MQTT
+
+
+ Unit MQTT
+
+
+ Binari
+
+
+ PILIHAN
+
+
+ Didayakan
+
+
+ Sensor Diaktifkan
+
+
+ Kehadiran
+
+
+ Tahap
+
+
+ Suhu
+
+
+ Kondensasi
+
+
+ Latitud
+
+
+ Longitud
+
+
+ Altitud
+
+
+ Satelit
+
+
+ RAM percuma
+
+
+ Segera
+
+
+ Purata bergerak
+
+
+ cth. 21
+
+
+ cth. 22
+
+
+ mis. 23
+
+
+ cth. 12
+
+
+ mis. 11
+
+
+ cth. 13
+
+
+ cth. 10
+
+
+ cth. 9600
+
+
+ MMSI
+
+
+ Tanda panggilan
+
+
+ Pelabuhan Asal
+
+
+ Pin CS
+
+
+ Kunci API
+
+
+ Kunci HMAC
+
+
+ Didayakan
+
+
+ Kadar Baud
+
+
+ Sambungan
+
+
+ Jana Kunci Baharu
+
+
+ 255 = dinyahdayakan
+
+
+ cth. Bilge
+
+
+ cth. Pam Bilga
+
+
+ Pin GPIO (kosong atau 255 = dinyahdayakan)
+
+
+ Kehadiran
+
+
+ Penderia Luaran
+
+
+ Sensor
+
+
+ Kelajuan
+
+
+ Kursus
+
+
+ Purata
+
+
+ Pin {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.resx b/PowerControlHubApp/Resources/Localization/AppResources.resx
new file mode 100644
index 0000000..1e04c39
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.resx
@@ -0,0 +1,1281 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Not configured — tap ⚙ to set device IP
+
+
+ Device unreachable
+
+
+ No active warnings
+
+
+ Toggle failed — see log
+
+
+ Not connected
+
+
+ IP address is required.
+
+
+ Enter a valid port number (1–65535).
+
+
+ Not configured
+
+
+ OTA: triggering firmware install…
+
+
+ OTA trigger failed
+
+
+ Install Firmware
+
+
+ Install
+
+
+ An OTA update to {0} is available. Download and install now?
+
+
+ Update available: {0} (installed: {1})
+
+
+ Checking for firmware update…
+
+
+ Downloading firmware update…
+
+
+ Applying update — device rebooting…
+
+
+ Firmware update failed. Tap to retry.
+
+
+ Firmware is up to date ({0})
+
+
+ DashboardPoller started with interval {IntervalMs}ms
+
+
+ DashboardPoller fetched index at {Time}
+
+
+ DashboardPoller skipping poll: service not configured
+
+
+ Device returned invalid JSON while polling index
+
+
+ Unexpected error while polling index
+
+
+ DashboardPoller stopping
+
+
+ Failed to refresh sensor meta cache at startup
+
+
+ Relay
+
+
+ Relay {0}
+
+
+ Saved successfully
+
+
+ One or more commands failed
+
+
+ Save failed — device unreachable
+
+
+ Pin {0}
+
+
+ Pin {0}, {1}
+
+
+ Remove command failed
+
+
+ Remove Sensor
+
+
+ Remove
+
+
+ Cancel
+
+
+ Save
+
+
+ Back
+
+
+ None
+
+
+ OK
+
+
+ Reboot
+
+
+ Refreshed
+
+
+ Blue
+
+
+ Green
+
+
+ Grey
+
+
+ Orange
+
+
+ Red
+
+
+ Yellow
+
+
+ Default
+
+
+ Horn
+
+
+ Night Relay
+
+
+ Default
+
+
+ Horn
+
+
+ Night
+
+
+ Off
+
+
+ On
+
+
+ Light
+
+
+ Dark
+
+
+ Settings
+
+
+ Device IP Address
+
+
+ HTTP Port
+
+
+ API Key (X-API-Key)
+
+
+ HMAC Key (X-Auth-Signature)
+
+
+ App Theme
+
+
+ Save & Connect
+
+
+ How to connect
+
+
+ 1. Ensure your phone/PC is on the same WiFi network as the ESP32 board.
+
+
+ 2. Enter the IP address shown on the device's serial output or your router's DHCP table.
+
+
+ 3. The default port is 80.
+
+
+ 4. If the device has network authentication enabled (C19:e=1), enter the API Key or HMAC Key above to match the device's configuration.
+
+
+ 5. Tap Save & Connect, then return to the Dashboard.
+
+
+ e.g. 192.168.1.100
+
+
+ 80
+
+
+ Optional – device API key for authentication
+
+
+ Optional – HMAC-SHA256 key for authentication
+
+
+ System
+
+
+ Time
+
+
+ RTC
+
+
+ Location
+
+
+ MQTT
+
+
+ SD Card
+
+
+ Security
+
+
+ Nextion
+
+
+ Buzzer
+
+
+ Active Warnings
+
+
+ GPIOs In Use
+
+
+ GPIO Pin Restrictions
+
+
+ {0} pin(s) currently assigned
+
+
+ CONTROLS
+
+
+ SENSORS
+
+
+ Relay Configuration
+
+
+ Relay Config
+
+
+ IDENTITY
+
+
+ HARDWARE
+
+
+ BEHAVIOUR
+
+
+ LINKING
+
+
+ Short Name (max 5 chars)
+
+
+ Long Name (max 20 chars)
+
+
+ GPIO Pin (blank or 255 = disabled)
+
+
+ Default State at Power-On
+
+
+ Action Type
+
+
+ Button Colour
+
+
+ Linked Relay
+
+
+ Toggling this relay will also toggle the linked relay.
+
+
+ e.g. Bilge
+
+
+ e.g. Bilge Pump
+
+
+ 255 = disabled
+
+
+ Local Sensors
+
+
+ External Sensors
+
+
+ Local Sensors
+
+
+ Ext. Sensors
+
+
+ Sensor
+
+
+ Not configured
+
+
+ Water
+
+
+ DHT11
+
+
+ Light
+
+
+ GPS
+
+
+ System
+
+
+ Binary Presence
+
+
+ Voltage
+
+
+ Unknown
+
+
+ Sensor type metadata unavailable.
+
+
+ Water (0)
+
+
+ DHT11 (1)
+
+
+ Light (2)
+
+
+ GPS (3)
+
+
+ System (4)
+
+
+ Binary Presence (5)
+
+
+ Voltage (6)
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Day
+
+
+ Night
+
+
+ Fix
+
+
+ No Fix
+
+
+ Detected
+
+
+ Clear
+
+
+ add/update sensor entry
+
+
+ change enabled state
+
+
+ save settings to disk
+
+
+ Failed to:
+
+
+ GPIO Pin 0 (blank or 255 = disabled)
+
+
+ GPIO Pin 1 (blank or 255 = disabled)
+
+
+ Option 1 (int8)
+
+
+ Option 2 (int8)
+
+
+ Option 3 (int16)
+
+
+ Option 4 (int16)
+
+
+ Time Settings
+
+
+ RTC Settings
+
+
+ Location Settings
+
+
+ MQTT Settings
+
+
+ SD Card Settings
+
+
+ Network Security
+
+
+ Nextion Settings
+
+
+ Buzzer Settings
+
+
+ RTC settings saved
+
+
+ Buzzer settings saved
+
+
+ Nextion settings saved
+
+
+ Reboot Required
+
+
+ Changes require a device reboot to take effect. Reboot device now? (If the device has no reboot endpoint you will need to power-cycle it manually)
+
+
+ Settings saved. Please power-cycle the device to apply Nextion configuration.
+
+
+ Failed to save settings before reboot.
+
+
+ UART1
+
+
+ UART2
+
+
+ UART Port
+
+
+ Baud Rate
+
+
+ RX Pin
+
+
+ TX Pin
+
+
+ Enabled
+
+
+ Connected
+
+
+ Disconnected
+
+
+ MQTT settings saved
+
+
+ Connection
+
+
+ MQTT Enabled
+
+
+ Connection State
+
+
+ Broker
+
+
+ Port
+
+
+ Username
+
+
+ Password
+
+
+ Device ID
+
+
+ Home Assistant Discovery
+
+
+ Keep Alive (s)
+
+
+ Discovery Prefix
+
+
+ SD Card settings saved
+
+
+ Partially saved — SPI pins rejected (check for pin conflicts)
+
+
+ SPI pins not saved (pin conflict or invalid pin)
+
+
+ SPI Pins (SCK/MOSI/MISO)
+
+
+ Init Speed (MHz)
+
+
+ CS Pin
+
+
+ Network security settings saved
+
+
+ New keys generated and saved
+
+
+ Key generation failed — device unreachable
+
+
+ Authentication Enabled
+
+
+ Generate New Keys
+
+
+ API Key
+
+
+ HMAC Key
+
+
+ Timezone Offset (hours)
+
+
+ Sync Now
+
+
+ Time settings saved
+
+
+ Boat Type
+
+
+ Rename
+
+
+ MMSI
+
+
+ Call Sign
+
+
+ Home Port
+
+
+ Location settings saved
+
+
+ PowerHubService is not configured. Call Configure() first.
+
+
+ ConfigConnection executing: {Description}
+
+
+ ConfigConnection succeeded: {Description}
+
+
+ ConfigConnection failed: {Description}
+
+
+ Device returned failure response
+
+
+ ConfigConnection consumer error
+
+
+ Failed to publish success message for: {Description}
+
+
+ Failed to publish failure message for: {Description}
+
+
+ RelayConfigSucceeded
+
+
+ SensorConfigSucceeded
+
+
+ ConfigPoller: SensorMetaCache refreshed after connection.
+
+
+ ConfigPoller: Connection health check failed.
+
+
+ TimeSyncService started with interval {IntervalMin}min, drift threshold {DriftSec}s
+
+
+ TimeSyncService: device time is {DeviceTime}, delta {DeltaSec}s
+
+
+ TimeSyncService: drift {DeltaSec}s exceeds threshold, setting device time to {LocalTime}
+
+
+ TimeSyncService: device time is in sync (delta {DeltaSec}s)
+
+
+ TimeSyncService: device time not set, synchronizing
+
+
+ TimeSyncService: time sync attempt failed
+
+
+ TimeSyncService stopping
+
+
+ Startup: first dashboard data received, fetching sensor meta on connection 2.
+
+
+ Startup: sensor meta cache populated.
+
+
+ Startup: dashboard data already available, fetching sensor meta on connection 2.
+
+
+ Temp
+
+
+ Humidity
+
+
+ Dew Point
+
+
+ Comfort
+
+
+ Condensation Risk
+
+
+ Light Level
+
+
+ Daylight
+
+
+ Lat
+
+
+ Lon
+
+
+ Alt
+
+
+ Speed
+
+
+ Course
+
+
+ Sats
+
+
+ Water Level
+
+
+ Free Memory
+
+
+ CPU
+
+
+ Voltage
+
+
+ State
+
+
+ Avg
+
+
+ Cancel
+
+
+ °C
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ Dashboard
+
+
+ Relays
+
+
+ External Sensors
+
+
+ Settings
+
+
+ Hello, World!
+
+
+ Install
+
+
+ No relays configured
+
+
+ No sensors configured
+
+
+ Mem:
+
+
+ CPU:
+
+
+ FW:
+
+
+ LOG
+
+
+ Refresh now
+
+
+ Language
+
+
+ GPIO Restrictions
+
+
+ Hard-blocked:
+
+
+ Advisory:
+
+
+ Firmware Update
+
+
+ Current version:
+
+
+ Available version:
+
+
+ Check for Updates
+
+
+ pin(s) currently assigned
+
+
+ Device Time
+
+
+ Sync Time Now
+
+
+ Timezone
+
+
+ Select timezone...
+
+
+ Save Timezone
+
+
+ Name
+
+
+ Location name...
+
+
+ Location Type
+
+
+ Select location type...
+
+
+ Boat Details
+
+
+ RTC Pins
+
+
+ Data Pin
+
+
+ Clock Pin
+
+
+ Reset Pin
+
+
+ Use 255 to disable any pin
+
+
+ SPI Pins
+
+
+ SCK (Clock)
+
+
+ MOSI (Master Out)
+
+
+ MISO (Master In)
+
+
+ Use 255 to disable
+
+
+ Chip Select
+
+
+ Init Speed
+
+
+ Speed (MHz)
+
+
+ Valid: 4, 8, 12, 16, 20, 24 MHz
+
+
+ Enable Authentication
+
+
+ Enter API key
+
+
+ Enter HMAC key
+
+
+ Nextion Display
+
+
+ Hardware Serial
+
+
+ Pins
+
+
+ RX Pin (blank or 255 = disabled)
+
+
+ TX Pin (blank or 255 = disabled)
+
+
+ Communication
+
+
+ UART Number
+
+
+ UART
+
+
+ Reboot required
+
+
+ Changes to Nextion configuration require a device reboot to take effect. Save settings and reboot the device.
+
+
+ Buzzer Pin
+
+
+ GPIO Pin
+
+
+ Use 255 to disable pin
+
+
+ Host / IP
+
+
+ Credentials
+
+
+ Leave empty for none
+
+
+ Enter password to change
+
+
+ Device Identity
+
+
+ e.g. boat_seawolf_01
+
+
+ homeassistant
+
+
+ Keep Alive (seconds)
+
+
+ Advanced
+
+
+ Save All Settings
+
+
+ External Sensor
+
+
+ Sensor Type
+
+
+ Select sensor type
+
+
+ MQTT Name
+
+
+ MQTT Slug
+
+
+ MQTT Type
+
+
+ MQTT Device Class
+
+
+ MQTT Unit
+
+
+ Binary
+
+
+ OPTIONS
+
+
+ ENABLED
+
+
+ Sensor Enabled
+
+
+ Presence
+
+
+ Level
+
+
+ Temperature
+
+
+ Condensation
+
+
+ Latitude
+
+
+ Longitude
+
+
+ Altitude
+
+
+ Satellites
+
+
+ Free RAM
+
+
+ Instant
+
+
+ Rolling avg
+
+
+ e.g. 21
+
+
+ e.g. 22
+
+
+ e.g. 23
+
+
+ e.g. 12
+
+
+ e.g. 11
+
+
+ e.g. 13
+
+
+ e.g. 10
+
+
+ e.g. 9600
+
+
+ MMSI
+
+
+ Call Sign
+
+
+ Home Port
+
+
+ CS Pin
+
+
+ API Key
+
+
+ HMAC Key
+
+
+ Enabled
+
+
+ Baud Rate
+
+
+ Connection
+
+
+ Generate New Keys
+
+
+ 255 = disabled
+
+
+ e.g. Bilge
+
+
+ e.g. Bilge Pump
+
+
+ GPIO Pin (blank or 255 = disabled)
+
+
+ Presence
+
+
+ Ext. Sensors
+
+
+ Sensor
+
+
+ Speed
+
+
+ Course
+
+
+ Avg
+
+
+ Pin {0}, {1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.zh-TW.resx b/PowerControlHubApp/Resources/Localization/AppResources.zh-TW.resx
new file mode 100644
index 0000000..e561f23
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.zh-TW.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 未設定 — 點按 ⚙ 以設定裝置 IP
+
+
+ 裝置無法連線
+
+
+ 無作用中的警告
+
+
+ 切換失敗 — 查看日誌
+
+
+ 未連線
+
+
+ 需要 IP 位址。
+
+
+ 輸入有效的連接埠號碼(1–65535)。
+
+
+ 未設定
+
+
+ OTA:觸發韌體安裝…
+
+
+ OTA 觸發失敗
+
+
+ 安裝韌體
+
+
+ 安裝
+
+
+ 有 {0} 的 OTA 更新可供使用。要立即下載並安裝嗎?
+
+
+ 有可用更新:{0}(已安裝:{1})
+
+
+ 正在檢查韌體更新…
+
+
+ 正在下載韌體更新…
+
+
+ 正在套用更新 — 裝置重新啟動中…
+
+
+ 韌體更新失敗。點按以重試。
+
+
+ 韌體已是最新版本 ({0})
+
+
+ DashboardPoller 已啟動,間隔為 {IntervalMs} 毫秒
+
+
+ DashboardPoller 已於 {Time} 抓取索引
+
+
+ DashboardPoller 略過輪詢:服務未設定
+
+
+ 裝置在輪詢索引時傳回無效的 JSON
+
+
+ 輪詢索引時發生未預期的錯誤
+
+
+ DashboardPoller 正在停止
+
+
+ 啟動時無法重新整理感測器中繼資料快取
+
+
+ 接力
+
+
+ 轉送 {0}
+
+
+ 儲存成功
+
+
+ 一個或多個命令失敗
+
+
+ 儲存失敗 — 裝置無法連線
+
+
+ 釘選 {0}
+
+
+ 釘選 {0},{1}
+
+
+ 移除指令失敗
+
+
+ 移除感應器
+
+
+ 移除
+
+
+ 取消
+
+
+ 儲存
+
+
+ 返回
+
+
+ 無
+
+
+ 好
+
+
+ 重新啟動
+
+
+ 已重新整理
+
+
+ 藍色
+
+
+ 綠色
+
+
+ 灰色
+
+
+ 橙色
+
+
+ 紅色
+
+
+ 黃色
+
+
+ 預設
+
+
+ 角
+
+
+ 夜間接力
+
+
+ 預設
+
+
+ 喇叭
+
+
+ 夜晚
+
+
+ 關
+
+
+ 開啟
+
+
+ 光
+
+
+ 黑暗
+
+
+ 設定
+
+
+ 裝置 IP 位址
+
+
+ HTTP 連接埠
+
+
+ API 金鑰 (X-API-Key)
+
+
+ HMAC 金鑰 (X-Auth-Signature)
+
+
+ 應用程式主題
+
+
+ 儲存並連線
+
+
+ 如何連接
+
+
+ 1. 確保您的手機/電腦與 ESP32 開發板連接到同一個 WiFi 網路。
+
+
+ 2. 輸入裝置序列輸出或路由器 DHCP 表中顯示的 IP 位址。
+
+
+ 3. 預設連接埠是 80。
+
+
+ 4. 若裝置已啟用網路驗證(C19:e=1),請在上方輸入 API 金鑰或 HMAC 金鑰,以符合裝置的設定。
+
+
+ 5. 點選儲存並連線,然後返回儀表板。
+
+
+ 例如 192.168.1.100
+
+
+ 80
+
+
+ 選用 – 用於驗證的裝置 API 金鑰
+
+
+ 選用 – 用於驗證的 HMAC-SHA256 金鑰
+
+
+ 系統
+
+
+ 時間
+
+
+ 即時時鐘
+
+
+ 位置
+
+
+ MQTT
+
+
+ SD卡
+
+
+ 安全
+
+
+ 奈克森
+
+
+ 蜂鳴器
+
+
+ 生效中的警報
+
+
+ GPIO 使用中
+
+
+ GPIO 接腳限制
+
+
+ 目前已指派 {0} 個針腳
+
+
+ 控制
+
+
+ 感測器
+
+
+ 中繼組態
+
+
+ 中繼配置
+
+
+ 身分
+
+
+ 硬體
+
+
+ 行為
+
+
+ 連結
+
+
+ 短名稱(最多5字元)
+
+
+ 長名稱(最多20字元)
+
+
+ GPIO 接腳(空白或 255 = 停用)
+
+
+ 開機預設狀態
+
+
+ 動作類型
+
+
+ 按鈕顏色
+
+
+ 連結繼電器
+
+
+ 切換此繼電器也會切換連結的繼電器。
+
+
+ 例如 Bilge
+
+
+ 例如艙底泵
+
+
+ 255 = 停用
+
+
+ 本地感測器
+
+
+ 外部感測器
+
+
+ 本地感測器
+
+
+ 外部感測器
+
+
+ 感測器
+
+
+ 未設定
+
+
+ 水
+
+
+ DHT11
+
+
+ 光
+
+
+ 全球定位系統
+
+
+ 系統
+
+
+ 二進位存在
+
+
+ 電壓
+
+
+ 未知
+
+
+ 感應器類型中繼資料無法使用。
+
+
+ 水 (0)
+
+
+ DHT11 (1)
+
+
+ 光(2)
+
+
+ GPS(3)
+
+
+ 系統 (4)
+
+
+ 二進位存在 (5)
+
+
+ 電壓 (6)
+
+
+ °C
+
+
+ %
+
+
+ 千位元組
+
+
+ 公里/小時
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ 天
+
+
+ 夜晚
+
+
+ 修正
+
+
+ 不需修正
+
+
+ 已偵測到
+
+
+ 清除
+
+
+ 新增/更新感測器項目
+
+
+ 變更啟用狀態
+
+
+ 將設定儲存到磁碟
+
+
+ 無法:
+
+
+ GPIO 腳位 0(空白或 255 = 停用)
+
+
+ GPIO 接腳 1(空白或 255 = 停用)
+
+
+ 選項 1 (int8)
+
+
+ 選項 2(int8)
+
+
+ 選項 3 (int16)
+
+
+ 選項 4 (int16)
+
+
+ 時間設定
+
+
+ RTC 設定
+
+
+ 位置設定
+
+
+ MQTT 設定
+
+
+ SD 卡設定
+
+
+ 網路安全
+
+
+ Nextion 設定
+
+
+ 蜂鳴器設定
+
+
+ RTC 設定已儲存
+
+
+ 蜂鳴器設定已儲存
+
+
+ Nextion 設定已儲存
+
+
+ 需要重新開機
+
+
+ 變更需要裝置重新啟動才能生效。現在重新啟動裝置嗎?(如果裝置沒有重新啟動端點,您將需要手動重新啟動電源)
+
+
+ 設定已儲存。請重新啟動裝置以套用 Nextion 設定。
+
+
+ 無法在重新啟動前儲存設定。
+
+
+ UART1
+
+
+ UART2
+
+
+ UART 連接埠
+
+
+ 鮑率
+
+
+ RX 接腳
+
+
+ TX 接腳
+
+
+ 已啟用
+
+
+ 已連線
+
+
+ 已中斷連線
+
+
+ MQTT 設定已儲存
+
+
+ 連線
+
+
+ MQTT 已啟用
+
+
+ 連線狀態
+
+
+ 經紀人
+
+
+ 港口
+
+
+ 使用者名稱
+
+
+ 密碼
+
+
+ 裝置 ID
+
+
+ Home Assistant 發現
+
+
+ 保持連線(秒)
+
+
+ 發現前綴
+
+
+ SD卡設定已儲存
+
+
+ 部分已儲存 — SPI 接腳已拒絕(請檢查接腳衝突)
+
+
+ SPI 接腳未儲存(接腳衝突或無效的接腳)
+
+
+ SPI 引腳 (SCK/MOSI/MISO)
+
+
+ 初始速度 (MHz)
+
+
+ CS 接腳
+
+
+ 網路安全性設定已儲存
+
+
+ 新金鑰已產生並儲存
+
+
+ 金鑰產生失敗 — 裝置無法連線
+
+
+ 已啟用驗證
+
+
+ 產生新金鑰
+
+
+ API 金鑰
+
+
+ HMAC 金鑰
+
+
+ 時區偏移(小時)
+
+
+ 立即同步
+
+
+ 時間設定已儲存
+
+
+ 船型
+
+
+ 重新命名
+
+
+ 海事行動業務識別碼
+
+
+ 呼號
+
+
+ 母港
+
+
+ 位置設定已儲存
+
+
+ PowerHubService 尚未設定。請先呼叫 Configure()。
+
+
+ ConfigConnection 正在執行:{Description}
+
+
+ ConfigConnection 成功:{Description}
+
+
+ ConfigConnection 失敗:{Description}
+
+
+ 裝置傳回失敗回應
+
+
+ ConfigConnection 消費者錯誤
+
+
+ 無法針對 {Description} 發佈成功訊息
+
+
+ 無法發佈失敗訊息:{Description}
+
+
+ 中繼設定成功
+
+
+ 感測器設定成功
+
+
+ ConfigPoller:連線後 SensorMetaCache 已重新整理。
+
+
+ ConfigPoller: 連線健康檢查失敗。
+
+
+ TimeSyncService 已啟動,間隔 {IntervalMin} 分鐘,漂移閾值 {DriftSec} 秒
+
+
+ TimeSyncService:裝置時間為 {DeviceTime},差異 {DeltaSec} 秒
+
+
+ TimeSyncService:漂移 {DeltaSec} 秒超過閾值,正在將裝置時間設定為 {LocalTime}
+
+
+ TimeSyncService:裝置時間已同步(時間差 {DeltaSec} 秒)
+
+
+ TimeSyncService:裝置時間未設定,正在同步
+
+
+ TimeSyncService:時間同步嘗試失敗
+
+
+ TimeSyncService 正在停止
+
+
+ 啟動:已收到第一個儀表板資料,正在連線 2 上擷取感測器中繼資料。
+
+
+ 啟動:感測器中繼資料快取已填入。
+
+
+ 啟動:儀表板資料已可用,正在連線 2 上取得感測器中繼資料
+
+
+ 暫存
+
+
+ 濕度
+
+
+ 露點
+
+
+ 舒適
+
+
+ 結露風險
+
+
+ 亮度等級
+
+
+ 日光
+
+
+ 緯度
+
+
+ 隆
+
+
+ Alt
+
+
+ 速度
+
+
+ 課程
+
+
+ 聰
+
+
+ 水位
+
+
+ 可用記憶體
+
+
+ 中央處理器
+
+
+ 電壓
+
+
+ 狀態
+
+
+ 平均
+
+
+ 取消
+
+
+ °C
+
+
+ %
+
+
+ 千位元
+
+
+ 公里/小時
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ 儀表板
+
+
+ 繼電器
+
+
+ 外部感測器
+
+
+ 設定
+
+
+ 你好,世界!
+
+
+ 安裝
+
+
+ 尚未設定任何中繼伺服器
+
+
+ 未設定感測器
+
+
+ 記憶:
+
+
+ CPU:
+
+
+ 轉寄:
+
+
+ 日誌
+
+
+ 立即重新整理
+
+
+ 語言
+
+
+ GPIO 限制
+
+
+ 強制封鎖:
+
+
+ 公告:
+
+
+ 韌體更新
+
+
+ 目前版本:
+
+
+ 可用版本:
+
+
+ 檢查更新
+
+
+ 目前已指派的 PIN 碼
+
+
+ 裝置時間
+
+
+ 立即同步時間
+
+
+ 時區
+
+
+ 選擇時區...
+
+
+ 儲存時區
+
+
+ 名稱
+
+
+ 位置名稱...
+
+
+ 位置類型
+
+
+ 選取位置類型...
+
+
+ 船隻詳情
+
+
+ RTC 接腳
+
+
+ 資料腳位
+
+
+ 時脈接腳
+
+
+ 重設 PIN 碼
+
+
+ 使用 255 來停用任何接腳
+
+
+ SPI 接腳
+
+
+ SCK(時脈)
+
+
+ MOSI(主設備輸出)
+
+
+ MISO(主機輸入)
+
+
+ 使用 255 即可停用
+
+
+ 晶片選擇
+
+
+ 初始速度
+
+
+ 速度 (MHz)
+
+
+ 有效:4、8、12、16、20、24 MHz
+
+
+ 啟用驗證
+
+
+ 輸入 API 金鑰
+
+
+ 輸入 HMAC 金鑰
+
+
+ Nextion 顯示器
+
+
+ 硬體序列
+
+
+ 大頭針
+
+
+ RX 接腳(空白或 255 = 停用)
+
+
+ TX 接腳(空白或 255 = 停用)
+
+
+ 溝通
+
+
+ UART 編號
+
+
+ 通用非同步收發傳輸器
+
+
+ 需要重新開機
+
+
+ 變更 Nextion 設定需要重新啟動裝置才能生效。儲存設定並重新啟動裝置。
+
+
+ 蜂鳴器接腳
+
+
+ GPIO 接腳
+
+
+ 使用 255 來停用接腳
+
+
+ 主機 / IP
+
+
+ 憑證
+
+
+ 若無則留空
+
+
+ 輸入密碼以進行變更
+
+
+ 裝置身分
+
+
+ 例如 boat_seawolf_01
+
+
+ Home Assistant
+
+
+ 保持連線(秒)
+
+
+ 進階
+
+
+ 儲存所有設定
+
+
+ 外部感測器
+
+
+ 感測器類型
+
+
+ 選擇感測器類型
+
+
+ MQTT 名稱
+
+
+ MQTT 別名
+
+
+ MQTT 類型
+
+
+ MQTT 裝置類別
+
+
+ MQTT 單元
+
+
+ 二進位
+
+
+ 選項
+
+
+ 已啟用
+
+
+ 感測器已啟用
+
+
+ 存在
+
+
+ 等級
+
+
+ 溫度
+
+
+ 凝結
+
+
+ 緯度
+
+
+ 經度
+
+
+ 海拔
+
+
+ 衛星
+
+
+ 可用記憶體
+
+
+ 即時
+
+
+ 滾動平均
+
+
+ 例如 21
+
+
+ 例如 22
+
+
+ 例如 23
+
+
+ 例如12
+
+
+ 例如 11
+
+
+ 例如 13
+
+
+ 例如 10
+
+
+ 例如 9600
+
+
+ MMSI
+
+
+ 呼號
+
+
+ 母港
+
+
+ CS 接腳
+
+
+ API 金鑰
+
+
+ HMAC 金鑰
+
+
+ 已啟用
+
+
+ 鮑率
+
+
+ 連接
+
+
+ 產生新金鑰
+
+
+ 255 = 停用
+
+
+ 例如 Bilge
+
+
+ 例如艙底泵
+
+
+ GPIO 接腳(空白或 255 = 停用)
+
+
+ 存在
+
+
+ 外部感測器
+
+
+ 感測器
+
+
+ 速度
+
+
+ 課程
+
+
+ 平均
+
+
+ 釘選 {0},{1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Resources/Localization/AppResources.zh-cn.resx b/PowerControlHubApp/Resources/Localization/AppResources.zh-cn.resx
new file mode 100644
index 0000000..b9d78be
--- /dev/null
+++ b/PowerControlHubApp/Resources/Localization/AppResources.zh-cn.resx
@@ -0,0 +1,1222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 未配置 — 点击 ⚙ 设置设备 IP
+
+
+ 设备不可达
+
+
+ 没有活动警告
+
+
+ 切换失败——请查看日志
+
+
+ 未连接
+
+
+ 需要IP地址。
+
+
+ 请输入有效的端口号(1–65535)。
+
+
+ 未配置
+
+
+ OTA:正在触发固件安装…
+
+
+ OTA触发失败
+
+
+ 安装固件
+
+
+ 安装
+
+
+ 有适用于 {0} 的 OTA 更新。是否立即下载并安装?
+
+
+ 有可用更新:{0}(已安装:{1})
+
+
+ 正在检查固件更新…
+
+
+ 正在下载固件更新…
+
+
+ 正在应用更新——设备正在重启…
+
+
+ 固件更新失败。请点按重试。
+
+
+ 固件已是最新版本({0})
+
+
+ DashboardPoller 已启动,间隔为 {IntervalMs} 毫秒
+
+
+ DashboardPoller 在 {Time} 获取了索引
+
+
+ DashboardPoller 跳过轮询:服务未配置
+
+
+ 设备在轮询索引时返回了无效的JSON
+
+
+ 轮询索引时发生意外错误
+
+
+ DashboardPoller 正在停止
+
+
+ 启动时刷新传感器元数据缓存失败
+
+
+ 继电器
+
+
+ 中继 {0}
+
+
+ 保存成功
+
+
+ 一个或多个命令失败
+
+
+ 保存失败——设备不可达
+
+
+ 固定 {0}
+
+
+ 固定 {0},{1}
+
+
+ 删除命令失败
+
+
+ 移除传感器
+
+
+ 移除
+
+
+ 取消
+
+
+ 保存
+
+
+ 返回
+
+
+ 无
+
+
+ 好的
+
+
+ 重启
+
+
+ 神清气爽
+
+
+ 蓝色
+
+
+ 绿色
+
+
+ 灰色
+
+
+ 橙子
+
+
+ 红色
+
+
+ 黄色
+
+
+ 默认
+
+
+ 喇叭
+
+
+ 夜间接力
+
+
+ 默认
+
+
+ 角
+
+
+ 夜晚
+
+
+ 关
+
+
+ 开
+
+
+ 光
+
+
+ 黑暗
+
+
+ 设置
+
+
+ 设备IP地址
+
+
+ HTTP 端口
+
+
+ API 密钥(X-API-Key)
+
+
+ HMAC 密钥(X-Auth-Signature)
+
+
+ 应用主题
+
+
+ 保存并连接
+
+
+ 如何连接
+
+
+ 1. 确保您的手机/电脑与ESP32开发板连接在同一个WiFi网络上。
+
+
+ 2. 输入设备串口输出或路由器 DHCP 表中显示的 IP 地址。
+
+
+ 3. 默认端口是80。
+
+
+ 4. 如果设备启用了网络认证(C19:e=1),请在上方输入与设备配置匹配的 API 密钥或 HMAC 密钥。
+
+
+ 5. 点击保存并连接,然后返回仪表板。
+
+
+ 例如 192.168.1.100
+
+
+ 八十
+
+
+ 可选 – 用于身份验证的设备 API 密钥
+
+
+ 可选 – 用于身份验证的 HMAC-SHA256 密钥
+
+
+ 系统
+
+
+ 时间
+
+
+ 实时时钟
+
+
+ 位置
+
+
+ MQTT
+
+
+ SD卡
+
+
+ 安全
+
+
+ Nextion
+
+
+ 蜂鸣器
+
+
+ 活动警告
+
+
+ 使用中的 GPIO
+
+
+ GPIO引脚限制
+
+
+ 当前已分配 {0} 个引脚
+
+
+ 控制
+
+
+ 传感器
+
+
+ 继电器配置
+
+
+ 中继配置
+
+
+ 身份
+
+
+ 硬件
+
+
+ 行为
+
+
+ 链接
+
+
+ 短名称(最多5个字符)
+
+
+ 长名称(最多20个字符)
+
+
+ GPIO引脚(空白或255=禁用)
+
+
+ 上电默认状态
+
+
+ 操作类型
+
+
+ 按钮颜色
+
+
+ 链接中继
+
+
+ 切换此继电器也会切换所链接的继电器。
+
+
+ 例如比尔格
+
+
+ 例如:舱底泵
+
+
+ 255 = 已禁用
+
+
+ 本地传感器
+
+
+ 外部传感器
+
+
+ 本地传感器
+
+
+ 外部传感器
+
+
+ 传感器
+
+
+ 未配置
+
+
+ 水
+
+
+ DHT11
+
+
+ 光
+
+
+ 全球定位系统
+
+
+ 系统
+
+
+ 二元存在
+
+
+ 电压
+
+
+ 未知
+
+
+ 传感器类型元数据不可用。
+
+
+ 水(0)
+
+
+ DHT11(1)
+
+
+ 光 (2)
+
+
+ GPS(3)
+
+
+ 系统(4)
+
+
+ 二进制存在(5)
+
+
+ 电压 (6)
+
+
+ 摄氏度
+
+
+ %
+
+
+ 千字节
+
+
+ 公里/小时
+
+
+ V
+
+
+ 艾姆
+
+
+ °
+
+
+ 天
+
+
+ 夜晚
+
+
+ 修复
+
+
+ 无定位
+
+
+ 检测到
+
+
+ 清除
+
+
+ 添加/更新传感器条目
+
+
+ 更改启用状态
+
+
+ 将设置保存到磁盘
+
+
+ 未能:
+
+
+ GPIO 引脚 0(留空或 255 表示禁用)
+
+
+ GPIO 引脚 1(留空或 255 = 禁用)
+
+
+ 选项1(int8)
+
+
+ 选项 2(int8)
+
+
+ 选项3(int16)
+
+
+ 选项 4(int16)
+
+
+ 时间设置
+
+
+ RTC 设置
+
+
+ 位置设置
+
+
+ MQTT 设置
+
+
+ SD卡设置
+
+
+ 网络安全
+
+
+ Nextion 设置
+
+
+ 蜂鸣器设置
+
+
+ RTC设置已保存
+
+
+ 蜂鸣器设置已保存
+
+
+ Nextion 设置已保存
+
+
+ 需要重新启动
+
+
+ 更改需要设备重启才能生效。立即重启设备?(如果设备没有重启端点,您需要手动重新上电)
+
+
+ 设置已保存。请重新上电设备以应用 Nextion 配置。
+
+
+ 重启前保存设置失败。
+
+
+ UART1
+
+
+ UART2
+
+
+ UART端口
+
+
+ 波特率
+
+
+ RX引脚
+
+
+ TX引脚
+
+
+ 已启用
+
+
+ 已连接
+
+
+ 已断开连接
+
+
+ MQTT 设置已保存
+
+
+ 连接
+
+
+ MQTT 已启用
+
+
+ 连接状态
+
+
+ 经纪人
+
+
+ 港口
+
+
+ 用户名
+
+
+ 密码
+
+
+ 设备ID
+
+
+ Home Assistant 发现
+
+
+ 保活(秒)
+
+
+ 发现前缀
+
+
+ SD卡设置已保存
+
+
+ 部分保存 — SPI 引脚被拒绝(检查引脚冲突)
+
+
+ SPI引脚未保存(引脚冲突或无效引脚)
+
+
+ SPI 引脚(SCK/MOSI/MISO)
+
+
+ 初始速度 (MHz)
+
+
+ CS 引脚
+
+
+ 网络安全设置已保存
+
+
+ 新密钥已生成并保存
+
+
+ 密钥生成失败——设备不可达
+
+
+ 身份验证已启用
+
+
+ 生成新密钥
+
+
+ API 密钥
+
+
+ HMAC 密钥
+
+
+ 时区偏移(小时)
+
+
+ 立即同步
+
+
+ 时间设置已保存
+
+
+ 船型
+
+
+ 重命名
+
+
+ 水上移动通信业务标识码
+
+
+ 呼号
+
+
+ 母港
+
+
+ 位置设置已保存
+
+
+ PowerHubService 未配置。请先调用 Configure()。
+
+
+ ConfigConnection 正在执行:{Description}
+
+
+ ConfigConnection 成功:{Description}
+
+
+ ConfigConnection 失败:{Description}
+
+
+ 设备返回了失败响应。
+
+
+ ConfigConnection 消费者错误
+
+
+ 未能发布成功消息:{Description}
+
+
+ 未能发布失败消息:{Description}
+
+
+ 中继配置成功
+
+
+ 传感器配置成功
+
+
+ ConfigPoller:连接后 SensorMetaCache 已刷新。
+
+
+ ConfigPoller:连接健康检查失败。
+
+
+ TimeSyncService已启动,间隔{IntervalMin}分钟,漂移阈值{DriftSec}秒
+
+
+ TimeSyncService:设备时间为 {DeviceTime},差值 {DeltaSec} 秒
+
+
+ TimeSyncService:漂移 {DeltaSec} 秒超过阈值,正在将设备时间设置为 {LocalTime}
+
+
+ TimeSyncService:设备时间已同步(偏差 {DeltaSec} 秒)
+
+
+ TimeSyncService:设备时间未设置,正在同步
+
+
+ TimeSyncService:时间同步尝试失败
+
+
+ TimeSyncService 正在停止
+
+
+ 启动:已收到首批仪表盘数据,正在连接2上获取传感器元数据。
+
+
+ 启动:传感器元数据缓存已填充。
+
+
+ 启动:仪表板数据已可用,正在连接2上获取传感器元数据。
+
+
+ 温度
+
+
+ 湿度
+
+
+ 露点
+
+
+ 舒适
+
+
+ 结露风险
+
+
+ 光照等级
+
+
+ 日光
+
+
+ 纬度
+
+
+ 朗
+
+
+ Alt
+
+
+ 速度
+
+
+ 课程
+
+
+ 聪
+
+
+ 水位
+
+
+ 释放内存
+
+
+ CPU
+
+
+ 电压
+
+
+ 状态
+
+
+ 平均值
+
+
+ 取消
+
+
+ 摄氏度
+
+
+ %
+
+
+ kb
+
+
+ km/h
+
+
+ V
+
+
+ m
+
+
+ °
+
+
+ 仪表板
+
+
+ 继电器
+
+
+ 外部传感器
+
+
+ 设置
+
+
+ 你好,世界!
+
+
+ 安装
+
+
+ 未配置中继
+
+
+ 未配置传感器
+
+
+ 内存:
+
+
+ CPU:
+
+
+ 转发:
+
+
+ 日志
+
+
+ 立即刷新
+
+
+ 语言
+
+
+ GPIO限制
+
+
+ 硬阻断:
+
+
+ 建议:
+
+
+ 固件更新
+
+
+ 当前版本:
+
+
+ 可用版本:
+
+
+ 检查更新
+
+
+ 当前已分配的 PIN 码
+
+
+ 设备时间
+
+
+ 立即同步时间
+
+
+ 时区
+
+
+ 选择时区...
+
+
+ 保存时区
+
+
+ 名称
+
+
+ 位置名称...
+
+
+ 位置类型
+
+
+ 选择位置类型...
+
+
+ 船只详情
+
+
+ RTC引脚
+
+
+ 数据引脚
+
+
+ 时钟引脚
+
+
+ 重置密码
+
+
+ 使用 255 来禁用任何引脚
+
+
+ SPI引脚
+
+
+ SCK(时钟)
+
+
+ MOSI(主输出)
+
+
+ MISO(主机输入)
+
+
+ 使用 255 来禁用
+
+
+ 片选
+
+
+ 初始速度
+
+
+ 速度(MHz)
+
+
+ 有效:4、8、12、16、20、24 MHz
+
+
+ 启用身份验证
+
+
+ 输入 API 密钥
+
+
+ 输入 HMAC 密钥
+
+
+ Nextion 显示屏
+
+
+ 硬件序列号
+
+
+ 图钉
+
+
+ RX 引脚(留空或 255 = 禁用)
+
+
+ TX 引脚(留空或 255 = 禁用)
+
+
+ 沟通
+
+
+ UART 编号
+
+
+ 通用异步收发器
+
+
+ 需要重新启动
+
+
+ Nextion配置的更改需要设备重启才能生效。保存设置并重启设备。
+
+
+ 蜂鸣器引脚
+
+
+ GPIO引脚
+
+
+ 使用255来禁用引脚
+
+
+ 主机 / IP
+
+
+ 凭证
+
+
+ 留空表示无
+
+
+ 输入密码以进行更改
+
+
+ 设备身份
+
+
+ 例如 boat_seawolf_01
+
+
+ 家庭助手
+
+
+ 保活(秒)
+
+
+ 高级
+
+
+ 保存所有设置
+
+
+ 外部传感器
+
+
+ 传感器类型
+
+
+ 选择传感器类型
+
+
+ MQTT 名称
+
+
+ MQTT 别名
+
+
+ MQTT 类型
+
+
+ MQTT 设备类
+
+
+ MQTT 单元
+
+
+ 二进制
+
+
+ 选项
+
+
+ 已启用
+
+
+ 传感器已启用
+
+
+ 存在
+
+
+ 等级
+
+
+ 温度
+
+
+ 凝结
+
+
+ 纬度
+
+
+ 经度
+
+
+ 海拔
+
+
+ 卫星
+
+
+ 可用内存
+
+
+ 即时
+
+
+ 滚动平均
+
+
+ 例如 21
+
+
+ 例如 22
+
+
+ 例如 23
+
+
+ 例如 12
+
+
+ 例如 11
+
+
+ 例如 13
+
+
+ 例如 10
+
+
+ 例如 9600
+
+
+ 水上移动通信业务标识码
+
+
+ 呼号
+
+
+ 母港
+
+
+ CS引脚
+
+
+ API 密钥
+
+
+ HMAC密钥
+
+
+ 已启用
+
+
+ 波特率
+
+
+ 连接
+
+
+ 生成新密钥
+
+
+ 255 = 禁用
+
+
+ 例如:舱底
+
+
+ 例如 舱底泵
+
+
+ GPIO 引脚(留空或 255 = 禁用)
+
+
+ 存在
+
+
+ 外部传感器
+
+
+ 传感器
+
+
+ 速度
+
+
+ 课程
+
+
+ 平均
+
+
+ 引脚 {0},{1}
+
+
+ 1883
+
+
+ 60
+
+
+ 4
+
+
\ No newline at end of file
diff --git a/PowerControlHubApp/Services/ConfigConnection.cs b/PowerControlHubApp/Services/ConfigConnection.cs
index c1695b1..20a650f 100644
--- a/PowerControlHubApp/Services/ConfigConnection.cs
+++ b/PowerControlHubApp/Services/ConfigConnection.cs
@@ -7,6 +7,8 @@
using System.Text.Json.Serialization;
using System.Threading.Channels;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
+
namespace PowerControlHubApp.Services
{
public class ConfigConnection : IConfigConnection, IDisposable
@@ -137,7 +139,7 @@ private void TryPublishFailure(ConfigCommand command, string error)
private static SocketsHttpHandler CreateHandler()
{
- var handler = new SocketsHttpHandler
+ SocketsHttpHandler handler = new SocketsHttpHandler
{
PooledConnectionIdleTimeout = TimeSpan.FromSeconds(SecondsSixty),
PooledConnectionLifetime = Timeout.InfiniteTimeSpan,
@@ -145,7 +147,7 @@ private static SocketsHttpHandler CreateHandler()
MaxConnectionsPerServer = 1,
ConnectCallback = async (context, ct) =>
{
- var socket = new Socket(SocketType.Stream, ProtocolType.Tcp)
+ Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp)
{
NoDelay = true
};
@@ -172,8 +174,8 @@ public async Task> GetSensorMetaAsync(Cancellati
string json = await _client.GetStringAsync($"{RouteLocalSensorConfig}{SensorConfigGetAll}?meta=1", ct);
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(JsonMeta, out var meta) &&
- meta.TryGetProperty(JsonMetaDescriptors, out var descriptors) &&
+ if (doc.RootElement.TryGetProperty(JsonMeta, out JsonElement meta) &&
+ meta.TryGetProperty(JsonMetaDescriptors, out JsonElement descriptors) &&
descriptors.ValueKind == JsonValueKind.Array)
{
return JsonSerializer.Deserialize>(descriptors.GetRawText(), JsonOptions) ?? [];
@@ -187,13 +189,13 @@ public async Task> GetExternalSensorsAsync(Cance
string json = await _client.GetStringAsync(RouteExternalSensor, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- var list = new List();
+ List list = [];
- if (doc.RootElement.TryGetProperty(JsonSensors, out var sensors) && sensors.ValueKind == JsonValueKind.Array)
+ if (doc.RootElement.TryGetProperty(JsonSensors, out JsonElement sensors) && sensors.ValueKind == JsonValueKind.Array)
{
- foreach (var el in sensors.EnumerateArray())
+ foreach (JsonElement el in sensors.EnumerateArray())
{
- var m = new ExternalSensorConfigModel
+ ExternalSensorConfigModel m = new ExternalSensorConfigModel
{
Index = el.GetProperty(JsonSensorIndex).GetInt32(),
SensorId = el.GetProperty(JsonSensorId).GetInt32(),
@@ -246,13 +248,13 @@ public async Task> GetLocalSensorsAsync(Cancellatio
string json = await _client.GetStringAsync(RouteLocalSensorConfig, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- var list = new List();
+ List list = [];
- if (doc.RootElement.TryGetProperty(JsonSensors, out var sensors) && sensors.ValueKind == JsonValueKind.Array)
+ if (doc.RootElement.TryGetProperty(JsonSensors, out JsonElement sensors) && sensors.ValueKind == JsonValueKind.Array)
{
- foreach (var el in sensors.EnumerateArray())
+ foreach (JsonElement el in sensors.EnumerateArray())
{
- var m = new LocalSensorConfigModel
+ LocalSensorConfigModel m = new LocalSensorConfigModel
{
Index = el.GetProperty(JsonLocalSensorIndex).GetInt32(),
SensorType = el.GetProperty(JsonLocalSensorType).GetInt32(),
@@ -416,13 +418,13 @@ public async Task TriggerOtaInstallAsync(CancellationToken ct = default)
string json = await _client.GetStringAsync(RouteSystemGetDateTime, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(ResultSuccess, out var success) &&
+ if (doc.RootElement.TryGetProperty(ResultSuccess, out JsonElement success) &&
success.GetBoolean() &&
- doc.RootElement.TryGetProperty(JsonValueKey, out var v))
+ doc.RootElement.TryGetProperty(JsonValueKey, out JsonElement v))
{
string dtStr = v.GetString();
- if (DateTimeOffset.TryParse(dtStr, out var dt))
+ if (DateTimeOffset.TryParse(dtStr, out DateTimeOffset dt))
return dt;
}
}
@@ -454,9 +456,9 @@ public async Task SetDateTimeAsync(long unixTimestamp, CancellationToken c
string json = await _client.GetStringAsync(RouteConfigTimezoneOffset, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(ResultSuccess, out var success) &&
+ if (doc.RootElement.TryGetProperty(ResultSuccess, out JsonElement success) &&
success.GetBoolean() &&
- doc.RootElement.TryGetProperty(JsonValueKey, out var v))
+ doc.RootElement.TryGetProperty(JsonValueKey, out JsonElement v))
{
if (v.ValueKind == JsonValueKind.Number && v.TryGetInt32(out int val))
return val;
@@ -608,11 +610,11 @@ public async Task SetMqttDiscoveryPrefixAsync(string prefix, CancellationT
string json = await _client.GetStringAsync(RouteConfigSdCardSpiPins, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(ResultSuccess, out var success) &&
+ if (doc.RootElement.TryGetProperty(ResultSuccess, out JsonElement success) &&
success.GetBoolean() &&
- doc.RootElement.TryGetProperty(JsonSpiSckKey, out var sck) &&
- doc.RootElement.TryGetProperty(JsonSpiMosiKey, out var mosi) &&
- doc.RootElement.TryGetProperty(JsonSpiMisoKey, out var miso))
+ doc.RootElement.TryGetProperty(JsonSpiSckKey, out JsonElement sck) &&
+ doc.RootElement.TryGetProperty(JsonSpiMosiKey, out JsonElement mosi) &&
+ doc.RootElement.TryGetProperty(JsonSpiMisoKey, out JsonElement miso))
{
return (sck.GetInt32(), mosi.GetInt32(), miso.GetInt32());
}
@@ -665,20 +667,20 @@ public async Task SetSdCardCsPinAsync(int pin, CancellationToken ct = defa
string json = await _client.GetStringAsync(RouteConfigRtc, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(ResultSuccess, out var success) &&
+ if (doc.RootElement.TryGetProperty(ResultSuccess, out JsonElement success) &&
success.GetBoolean())
{
int? data = null;
int? clock = null;
int? reset = null;
- if (doc.RootElement.TryGetProperty(JsonRtcDataPin, out var d) && d.ValueKind == JsonValueKind.Number && d.TryGetInt32(out int dv))
+ if (doc.RootElement.TryGetProperty(JsonRtcDataPin, out JsonElement d) && d.ValueKind == JsonValueKind.Number && d.TryGetInt32(out int dv))
data = dv;
- if (doc.RootElement.TryGetProperty(JsonRtcClockPin, out var c) && c.ValueKind == JsonValueKind.Number && c.TryGetInt32(out int cv))
+ if (doc.RootElement.TryGetProperty(JsonRtcClockPin, out JsonElement c) && c.ValueKind == JsonValueKind.Number && c.TryGetInt32(out int cv))
clock = cv;
- if (doc.RootElement.TryGetProperty(JsonRtcResetPin, out var r) && r.ValueKind == JsonValueKind.Number && r.TryGetInt32(out int rv))
+ if (doc.RootElement.TryGetProperty(JsonRtcResetPin, out JsonElement r) && r.ValueKind == JsonValueKind.Number && r.TryGetInt32(out int rv))
reset = rv;
if (data.HasValue && clock.HasValue && reset.HasValue)
@@ -817,11 +819,11 @@ public async Task GetNextionConfigAsync(CancellationToken ct
string json = await _client.GetStringAsync(RouteConfigNextionGet, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- var model = new NextionConfigModel();
+ NextionConfigModel model = new NextionConfigModel();
if (doc.RootElement.ValueKind == JsonValueKind.Object)
{
- foreach (var prop in doc.RootElement.EnumerateObject())
+ foreach (JsonProperty prop in doc.RootElement.EnumerateObject())
{
string name = prop.Name.ToLowerInvariant();
@@ -922,9 +924,9 @@ private async Task SyncAuthHandlerFromDeviceAsync(CancellationToken ct)
string json = await _client.GetStringAsync(route, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(ResultSuccess, out var success) &&
+ if (doc.RootElement.TryGetProperty(ResultSuccess, out JsonElement success) &&
success.GetBoolean() &&
- doc.RootElement.TryGetProperty(JsonValueKey, out var v))
+ doc.RootElement.TryGetProperty(JsonValueKey, out JsonElement v))
{
if (v.ValueKind == JsonValueKind.Number && v.TryGetInt32(out int val))
return val;
@@ -976,9 +978,9 @@ private async Task GetMqttStringAsync(string command, CancellationToken
string json = await _client.GetStringAsync(url, ct);
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(ResultSuccess, out var success) &&
+ if (doc.RootElement.TryGetProperty(ResultSuccess, out JsonElement success) &&
success.GetBoolean() &&
- doc.RootElement.TryGetProperty(JsonValueKey, out var v))
+ doc.RootElement.TryGetProperty(JsonValueKey, out JsonElement v))
{
return v.GetString();
}
diff --git a/PowerControlHubApp/Services/ConfigPoller.cs b/PowerControlHubApp/Services/ConfigPoller.cs
index 042eafa..fce6481 100644
--- a/PowerControlHubApp/Services/ConfigPoller.cs
+++ b/PowerControlHubApp/Services/ConfigPoller.cs
@@ -3,6 +3,7 @@
using PowerControlHubApp.Models;
using PowerControlHubApp.Models.Json;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Services;
@@ -81,7 +82,7 @@ private async Task RunLoopAsync(CancellationToken stoppingToken)
try
{
// Use a lightweight health check (e.g. GetSensorMetaAsync)
- var meta = await _connection.GetSensorMetaAsync(stoppingToken);
+ List meta = await _connection.GetSensorMetaAsync(stoppingToken);
isConnected = meta != null;
if (isConnected && !_lastConnected)
diff --git a/PowerControlHubApp/Services/DashboardConnection.cs b/PowerControlHubApp/Services/DashboardConnection.cs
index 283a50d..c3982de 100644
--- a/PowerControlHubApp/Services/DashboardConnection.cs
+++ b/PowerControlHubApp/Services/DashboardConnection.cs
@@ -76,24 +76,24 @@ public async Task GetDashboardDataAsync(CancellationToken ct = defau
using JsonDocument doc = JsonDocument.Parse(json);
- if (doc.RootElement.TryGetProperty(JsonSensors, out var sensorsElement) &&
+ if (doc.RootElement.TryGetProperty(JsonSensors, out JsonElement sensorsElement) &&
sensorsElement.ValueKind == JsonValueKind.Object)
{
- var sensorList = new List();
+ List sensorList = [];
- foreach (var sensorProp in sensorsElement.EnumerateObject())
+ foreach (JsonProperty sensorProp in sensorsElement.EnumerateObject())
{
string sensorName = sensorProp.Name;
// The firmware emits both "idType" (sensor id: Dht11=1, Light=2, ...) and
// "type" (SensorType: Local=0, Remote=1). We must use idType for template selection.
- if (sensorProp.Value.TryGetProperty(JsonSensorIdType, out var idTypeEl) &&
+ if (sensorProp.Value.TryGetProperty(JsonSensorIdType, out JsonElement idTypeEl) &&
idTypeEl.ValueKind == JsonValueKind.Number)
{
byte idType = idTypeEl.GetByte();
int uid = 0;
- if (sensorProp.Value.TryGetProperty(JsonSensorUid, out var uidEl) && uidEl.ValueKind == JsonValueKind.Number)
+ if (sensorProp.Value.TryGetProperty(JsonSensorUid, out JsonElement uidEl) && uidEl.ValueKind == JsonValueKind.Number)
{
uid = uidEl.GetInt32();
}
@@ -127,7 +127,7 @@ public async Task> GetWarningsAsync(CancellationToken ct = default)
private static SocketsHttpHandler CreateHandler()
{
- var handler = new SocketsHttpHandler
+ SocketsHttpHandler handler = new SocketsHttpHandler
{
PooledConnectionIdleTimeout = TimeSpan.FromSeconds(SecondsSixty),
PooledConnectionLifetime = Timeout.InfiniteTimeSpan,
@@ -136,7 +136,7 @@ private static SocketsHttpHandler CreateHandler()
ConnectCallback = async (context, ct) =>
{
- var socket = new Socket(SocketType.Stream, ProtocolType.Tcp)
+ Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp)
{
NoDelay = true
};
diff --git a/PowerControlHubApp/Services/DashboardPoller.cs b/PowerControlHubApp/Services/DashboardPoller.cs
index a9c2516..5655b27 100644
--- a/PowerControlHubApp/Services/DashboardPoller.cs
+++ b/PowerControlHubApp/Services/DashboardPoller.cs
@@ -2,6 +2,7 @@
using PowerControlHubApp.Models.Json;
using System.ComponentModel;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Services;
diff --git a/PowerControlHubApp/Services/DeviceAuthHandler.cs b/PowerControlHubApp/Services/DeviceAuthHandler.cs
index e626425..24a22b4 100644
--- a/PowerControlHubApp/Services/DeviceAuthHandler.cs
+++ b/PowerControlHubApp/Services/DeviceAuthHandler.cs
@@ -106,14 +106,14 @@ protected override async Task SendAsync(HttpRequestMessage
// will use an empty body.
try
{
- using var ms = new MemoryStream();
+ using MemoryStream ms = new MemoryStream();
await request.Content.CopyToAsync(ms, cancellationToken);
ms.Position = 0;
body = Encoding.UTF8.GetString(ms.ToArray());
// Re-buffer the content so the inner handler can read it
- var bufferred = new ByteArrayContent(ms.ToArray());
- foreach (var h in request.Content.Headers)
+ ByteArrayContent bufferred = new ByteArrayContent(ms.ToArray());
+ foreach (KeyValuePair> h in request.Content.Headers)
bufferred.Headers.TryAddWithoutValidation(h.Key, h.Value);
request.Content = bufferred;
}
@@ -128,7 +128,7 @@ protected override async Task SendAsync(HttpRequestMessage
byte[] keyBytes = Encoding.UTF8.GetBytes(hmacKey);
byte[] messageBytes = Encoding.UTF8.GetBytes(signInput);
- using var hmacSha = new HMACSHA256(keyBytes);
+ using HMACSHA256 hmacSha = new HMACSHA256(keyBytes);
byte[] hash = hmacSha.ComputeHash(messageBytes);
string signature = BitConverter.ToString(hash).Replace(HmacHexDash, string.Empty).ToLowerInvariant();
diff --git a/PowerControlHubApp/Services/LanguageService.cs b/PowerControlHubApp/Services/LanguageService.cs
new file mode 100644
index 0000000..4df757d
--- /dev/null
+++ b/PowerControlHubApp/Services/LanguageService.cs
@@ -0,0 +1,136 @@
+using System.Globalization;
+using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
+
+namespace PowerControlHubApp.Services;
+
+///
+/// Discovers the languages installed alongside the app (culture-specific
+/// AppResources satellite resources), applies the selected language
+/// immediately, and persists the choice in Preferences so it survives
+/// restarts — mirroring the ThemeService pattern.
+///
+public class LanguageService
+{
+ private const string ResourceFileNamePrefix = "AppResources.";
+ private const string ResourceFileNameSuffix = ".resources";
+ private static readonly List AvailableCultures = BuildAvailableCultures();
+
+ /// Display options for the language picker, e.g. "Dansk (da-DK)".
+ public static IReadOnlyList LanguageOptions { get; } = BuildLanguageOptions();
+
+ /// Culture code currently saved in Preferences ("en", "da-DK", ...).
+ public static string Current => Preferences.Get(KeyAppLanguage, DefaultAppLanguage);
+
+ /// Display option matching the saved culture, e.g. "English (en)".
+ public static string CurrentOption => OptionForCode(Current);
+
+ /// Applies the saved language at startup without rebuilding the shell.
+ public static void ApplySaved()
+ => ApplyInternal(Current, persist: false, refresh: false);
+
+ /// Applies and persists a language selected from LanguageOptions, refreshing the UI immediately.
+ public static void ApplyOption(string option)
+ => ApplyInternal(ResolveOption(option).Name, persist: true, refresh: true);
+
+ private static void ApplyInternal(string cultureCode, bool persist, bool refresh)
+ {
+ CultureInfo culture = ResolveCulture(cultureCode);
+
+ Culture = culture;
+ CultureInfo.CurrentUICulture = culture;
+ CultureInfo.CurrentCulture = culture;
+
+ if (persist)
+ Preferences.Set(KeyAppLanguage, culture.Name);
+
+ if (refresh)
+ MainThread.BeginInvokeOnMainThread(RefreshShell);
+ }
+
+ private static CultureInfo ResolveCulture(string cultureCode)
+ {
+ if (string.IsNullOrWhiteSpace(cultureCode))
+ return CultureInfo.GetCultureInfo(DefaultAppLanguage);
+
+ try
+ {
+ return CultureInfo.GetCultureInfo(cultureCode);
+ }
+ catch (CultureNotFoundException)
+ {
+ return CultureInfo.GetCultureInfo(DefaultAppLanguage);
+ }
+ }
+
+ private static CultureInfo ResolveOption(string option)
+ {
+ int index = IndexOfOption(option);
+
+ if (index >= 0 && index < AvailableCultures.Count)
+ return AvailableCultures[index];
+
+ return CultureInfo.GetCultureInfo(DefaultAppLanguage);
+ }
+
+ private static int IndexOfOption(string option)
+ {
+ for (int i = 0; i < LanguageOptions.Count; i++)
+ {
+ if (LanguageOptions[i] == option)
+ return i;
+ }
+
+ return -1;
+ }
+
+ private static string OptionForCode(string code)
+ {
+ foreach (CultureInfo culture in AvailableCultures)
+ {
+ if (culture.Name == code)
+ return FormatOption(culture);
+ }
+
+ return FormatOption(AvailableCultures[0]);
+ }
+
+ private static void RefreshShell()
+ {
+ Window window = Application.Current?.Windows.FirstOrDefault();
+
+ if (window?.Page is not null)
+ window.Page = new AppShell();
+ }
+
+ private static List BuildAvailableCultures()
+ {
+ return
+ [
+ CultureInfo.GetCultureInfo("en"),
+ CultureInfo.GetCultureInfo("da-DK"),
+ CultureInfo.GetCultureInfo("de-DE"),
+ CultureInfo.GetCultureInfo("en-US"),
+ CultureInfo.GetCultureInfo("es-ES"),
+ CultureInfo.GetCultureInfo("fr-FR"),
+ CultureInfo.GetCultureInfo("it-IT"),
+ CultureInfo.GetCultureInfo("ja-JP"),
+ CultureInfo.GetCultureInfo("ms-MY"),
+ CultureInfo.GetCultureInfo("zh-CN"),
+ CultureInfo.GetCultureInfo("zh-TW")
+ ];
+ }
+
+ private static IReadOnlyList BuildLanguageOptions()
+ {
+ List options = [];
+
+ foreach (CultureInfo culture in AvailableCultures)
+ options.Add(FormatOption(culture));
+
+ return options;
+ }
+
+ private static string FormatOption(CultureInfo culture)
+ => $"{culture.NativeName} ({culture.Name})";
+}
diff --git a/PowerControlHubApp/Services/LogService.cs b/PowerControlHubApp/Services/LogService.cs
index 74e1c47..0f5ae78 100644
--- a/PowerControlHubApp/Services/LogService.cs
+++ b/PowerControlHubApp/Services/LogService.cs
@@ -21,7 +21,7 @@ public class LogService
public void Log(LogLevel level, string message)
{
- var entry = new LogEntryViewModel
+ LogEntryViewModel entry = new LogEntryViewModel
{
Timestamp = DateTime.Now,
Level = level,
diff --git a/PowerControlHubApp/Services/RelayStore.cs b/PowerControlHubApp/Services/RelayStore.cs
index e5e52ee..c592ae7 100644
--- a/PowerControlHubApp/Services/RelayStore.cs
+++ b/PowerControlHubApp/Services/RelayStore.cs
@@ -25,25 +25,25 @@ public sealed class RelayStore
public void ReplaceAll(IReadOnlyList incoming)
{
// Only consider enabled relays for the dashboard.
- var enabled = incoming.Where(r => r.IsEnabled).ToList();
+ List enabled = incoming.Where(r => r.IsEnabled).ToList();
// Map incoming enabled relays by index for quick lookup.
- var incomingByIndex = enabled.ToDictionary(r => r.Index);
+ Dictionary incomingByIndex = enabled.ToDictionary(r => r.Index);
// Remove any existing relays that are no longer present/enabled.
for (int i = Relays.Count - 1; i >= 0; i--)
{
- var existing = Relays[i];
+ RelayViewModel existing = Relays[i];
if (!incomingByIndex.ContainsKey(existing.Index))
Relays.RemoveAt(i);
}
// Update in-place any existing relays with new values.
- var updatedIndices = new HashSet();
- foreach (var existing in Relays)
+ HashSet updatedIndices = [];
+ foreach (RelayViewModel existing in Relays)
{
- if (incomingByIndex.TryGetValue(existing.Index, out var updated))
+ if (incomingByIndex.TryGetValue(existing.Index, out RelayViewModel updated))
{
existing.ShortName = updated.ShortName;
existing.LongName = updated.LongName;
@@ -58,8 +58,8 @@ public void ReplaceAll(IReadOnlyList incoming)
}
// Add any incoming enabled relays that didn't already exist.
- var toAdd = enabled.Where(r => !updatedIndices.Contains(r.Index)).OrderBy(r => r.Index);
- foreach (var vm in toAdd)
+ IOrderedEnumerable toAdd = enabled.Where(r => !updatedIndices.Contains(r.Index)).OrderBy(r => r.Index);
+ foreach (RelayViewModel vm in toAdd)
Relays.Add(vm);
}
@@ -72,12 +72,12 @@ public static List FromModels(IReadOnlyList models)
if (models == null)
return [];
- var list = new List(models.Count);
+ List list = new List(models.Count);
for (int i = 0; i < models.Count; i++)
{
- var m = models[i];
- var vm = new RelayViewModel
+ RelayModel m = models[i];
+ RelayViewModel vm = new RelayViewModel
{
Index = m.Index,
ShortName = m.ShortName,
@@ -102,7 +102,7 @@ public static List FromModels(IReadOnlyList models)
///
public void UpdateState(int index, int state)
{
- var relay = Relays.FirstOrDefault(r => r.Index == index);
+ RelayViewModel relay = Relays.FirstOrDefault(r => r.Index == index);
if (relay != null)
relay.State = state;
@@ -114,7 +114,7 @@ public void UpdateState(int index, int state)
///
public void UpdateRelay(int index, RelayViewModel updated)
{
- var existing = Relays.FirstOrDefault(r => r.Index == index);
+ RelayViewModel existing = Relays.FirstOrDefault(r => r.Index == index);
if (existing != null)
{
diff --git a/PowerControlHubApp/Services/SensorMetaCache.cs b/PowerControlHubApp/Services/SensorMetaCache.cs
index 481fc8c..65d4ee5 100644
--- a/PowerControlHubApp/Services/SensorMetaCache.cs
+++ b/PowerControlHubApp/Services/SensorMetaCache.cs
@@ -1,5 +1,5 @@
using PowerControlHubApp.Models;
-using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Services;
@@ -37,8 +37,8 @@ private static bool DescriptorsAreIdentical(List curr
if (current.Count != incoming.Count)
return false;
- var currentIds = current.Select(d => d.Id).OrderBy(id => id);
- var incomingIds = incoming.Select(d => d.Id).OrderBy(id => id);
+ IOrderedEnumerable currentIds = current.Select(d => d.Id).OrderBy(id => id);
+ IOrderedEnumerable incomingIds = incoming.Select(d => d.Id).OrderBy(id => id);
return currentIds.SequenceEqual(incomingIds);
}
diff --git a/PowerControlHubApp/Services/ThemeService.cs b/PowerControlHubApp/Services/ThemeService.cs
index c11b618..c366c12 100644
--- a/PowerControlHubApp/Services/ThemeService.cs
+++ b/PowerControlHubApp/Services/ThemeService.cs
@@ -1,4 +1,5 @@
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Services;
@@ -86,12 +87,12 @@ private static void ApplyInternal(string themeName, bool persist)
{
if (Application.Current is null) return;
- var palette = themeName == ThemeDark ? DarkPalette : LightPalette;
- var resources = Application.Current.Resources;
+ Dictionary palette = themeName == ThemeDark ? DarkPalette : LightPalette;
+ ResourceDictionary resources = Application.Current.Resources;
// Overwrite each key in-place. DynamicResource bindings react
// immediately; no MergedDictionaries manipulation needed.
- foreach (var (key, hex) in palette)
+ foreach ((string key, string hex) in palette)
resources[key] = Color.FromArgb(hex);
if (persist)
diff --git a/PowerControlHubApp/Services/TimeSyncService.cs b/PowerControlHubApp/Services/TimeSyncService.cs
index cbe354e..2b2ec45 100644
--- a/PowerControlHubApp/Services/TimeSyncService.cs
+++ b/PowerControlHubApp/Services/TimeSyncService.cs
@@ -1,5 +1,6 @@
using Microsoft.Extensions.Logging;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.Services;
diff --git a/PowerControlHubApp/ViewModels/BaseViewModel.cs b/PowerControlHubApp/ViewModels/BaseViewModel.cs
index bffc28e..6eaff20 100644
--- a/PowerControlHubApp/ViewModels/BaseViewModel.cs
+++ b/PowerControlHubApp/ViewModels/BaseViewModel.cs
@@ -6,6 +6,7 @@
using System.Runtime.CompilerServices;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
diff --git a/PowerControlHubApp/ViewModels/DashboardViewModel.cs b/PowerControlHubApp/ViewModels/DashboardViewModel.cs
index 49fe34e..df2cb02 100644
--- a/PowerControlHubApp/ViewModels/DashboardViewModel.cs
+++ b/PowerControlHubApp/ViewModels/DashboardViewModel.cs
@@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -114,7 +115,7 @@ protected override void OnDataFetched(IndexModel index)
// here can never affect IsConnected, HasSensors, or the IsBusy flag.
_ = Task.Run(async () =>
{
- var ota = await Service.GetOtaStatusAsync();
+ OtaStatusModel ota = await Service.GetOtaStatusAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
OtaSupported = ota != null;
@@ -161,7 +162,7 @@ private async Task InstallUpdateAsync()
// Give the device a moment then poll for updated status
await Task.Delay(TimeSpan.FromSeconds(SecondsTwo));
- var ota = await Service.GetOtaStatusAsync();
+ OtaStatusModel ota = await Service.GetOtaStatusAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
_otaStatus = ota;
@@ -188,7 +189,7 @@ private void NotifyOtaProperties()
private void UpdateRelays(IReadOnlyList incoming)
{
- var vms = RelayStore.FromModels(incoming ?? []);
+ List vms = RelayStore.FromModels(incoming ?? []);
_relayStore.ReplaceAll(vms);
}
diff --git a/PowerControlHubApp/ViewModels/ExternalSensorConfigViewModel.cs b/PowerControlHubApp/ViewModels/ExternalSensorConfigViewModel.cs
index 0637a1c..9587745 100644
--- a/PowerControlHubApp/ViewModels/ExternalSensorConfigViewModel.cs
+++ b/PowerControlHubApp/ViewModels/ExternalSensorConfigViewModel.cs
@@ -4,6 +4,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
diff --git a/PowerControlHubApp/ViewModels/ExternalSensorDetailViewModel.cs b/PowerControlHubApp/ViewModels/ExternalSensorDetailViewModel.cs
index 1905286..ff03c41 100644
--- a/PowerControlHubApp/ViewModels/ExternalSensorDetailViewModel.cs
+++ b/PowerControlHubApp/ViewModels/ExternalSensorDetailViewModel.cs
@@ -4,6 +4,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -183,7 +184,7 @@ private async Task LoadAsync(int index)
try
{
- var list = await Service.GetExternalSensorsAsync();
+ List list = await Service.GetExternalSensorsAsync();
_original = list?.FirstOrDefault(s => s.Index == index);
if (_original != null)
@@ -228,7 +229,7 @@ private async Task SaveAsync()
if (ok)
ok &= await Service.SaveSettingsAsync();
- StatusMessage = ok ? SavedOk : SavedFailed;
+ StatusMessage = ok ? $"{IconCheckMark} {SavedOk}" : $"{IconWarning} {SavedFailed}";
}
catch (Exception ex)
{
@@ -246,10 +247,10 @@ private async Task RemoveAsync()
return;
bool confirmed = await Application.Current.Windows[0].Page.DisplayAlertAsync(
- MsgRemoveSensor,
+ RemoveSensor,
$"Remove sensor at index {_sensorIndex}?\n\nThis cannot be undone.",
- MsgRemove,
- MsgCancel);
+ Remove,
+ Cancel);
if (!confirmed)
return;
@@ -270,7 +271,7 @@ private async Task RemoveAsync()
}
else
{
- StatusMessage = ErrRemoveCommandFailed;
+ StatusMessage = $"{IconWarning}{ErrRemoveCommandFailed}";
}
}
catch (Exception ex)
diff --git a/PowerControlHubApp/ViewModels/LocalSensorConfigViewModel.cs b/PowerControlHubApp/ViewModels/LocalSensorConfigViewModel.cs
index a725180..28134ba 100644
--- a/PowerControlHubApp/ViewModels/LocalSensorConfigViewModel.cs
+++ b/PowerControlHubApp/ViewModels/LocalSensorConfigViewModel.cs
@@ -4,6 +4,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
diff --git a/PowerControlHubApp/ViewModels/LocalSensorDetailViewModel.cs b/PowerControlHubApp/ViewModels/LocalSensorDetailViewModel.cs
index 341fac5..82251ee 100644
--- a/PowerControlHubApp/ViewModels/LocalSensorDetailViewModel.cs
+++ b/PowerControlHubApp/ViewModels/LocalSensorDetailViewModel.cs
@@ -4,6 +4,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -61,7 +62,7 @@ private static string ValidateField(string fieldName, int value, int min, int ma
// Validates all fields against descriptor min/max, returns first error or null
private string ValidateAll()
{
- var desc = _metaCache.GetDescriptor(_sensorType);
+ SensorTypeDescriptorModel desc = _metaCache.GetDescriptor(_sensorType);
if (desc == null)
return SensorTypeMetaDataUnavailable;
@@ -69,8 +70,8 @@ private string ValidateAll()
// Pins
if (desc.Pins.Count > 0)
{
- var pin0 = desc.Pins[0];
- var err = ValidateField(pin0.Label, Pin0, pin0.Min, pin0.Max, isPin: true);
+ SensorFieldDescriptorModel pin0 = desc.Pins[0];
+ string err = ValidateField(pin0.Label, Pin0, pin0.Min, pin0.Max, isPin: true);
if (err != null)
return err;
@@ -78,8 +79,8 @@ private string ValidateAll()
if (desc.Pins.Count > 1)
{
- var pin1 = desc.Pins[1];
- var err = ValidateField(pin1.Label, Pin1, pin1.Min, pin1.Max, isPin: true);
+ SensorFieldDescriptorModel pin1 = desc.Pins[1];
+ string err = ValidateField(pin1.Label, Pin1, pin1.Min, pin1.Max, isPin: true);
if (err != null)
return err;
@@ -88,8 +89,8 @@ private string ValidateAll()
// Options1
if (desc.Options1.Count > 0)
{
- var opt1_0 = desc.Options1[0];
- var err = ValidateField(opt1_0.Label, Opt1_0, opt1_0.Min, opt1_0.Max);
+ SensorFieldDescriptorModel opt1_0 = desc.Options1[0];
+ string err = ValidateField(opt1_0.Label, Opt1_0, opt1_0.Min, opt1_0.Max);
if (err != null)
return err;
@@ -97,8 +98,8 @@ private string ValidateAll()
if (desc.Options1.Count > 1)
{
- var opt1_1 = desc.Options1[1];
- var err = ValidateField(opt1_1.Label, Opt1_1, opt1_1.Min, opt1_1.Max);
+ SensorFieldDescriptorModel opt1_1 = desc.Options1[1];
+ string err = ValidateField(opt1_1.Label, Opt1_1, opt1_1.Min, opt1_1.Max);
if (err != null)
return err;
@@ -107,8 +108,8 @@ private string ValidateAll()
// Options2
if (desc.Options2.Count > 0)
{
- var opt2_0 = desc.Options2[0];
- var err = ValidateField(opt2_0.Label, Opt2_0, opt2_0.Min, opt2_0.Max);
+ SensorFieldDescriptorModel opt2_0 = desc.Options2[0];
+ string err = ValidateField(opt2_0.Label, Opt2_0, opt2_0.Min, opt2_0.Max);
if (err != null)
return err;
@@ -116,8 +117,8 @@ private string ValidateAll()
if (desc.Options2.Count > 1)
{
- var opt2_1 = desc.Options2[1];
- var err = ValidateField(opt2_1.Label, Opt2_1, opt2_1.Min, opt2_1.Max);
+ SensorFieldDescriptorModel opt2_1 = desc.Options2[1];
+ string err = ValidateField(opt2_1.Label, Opt2_1, opt2_1.Min, opt2_1.Max);
if (err != null)
return err;
@@ -518,7 +519,7 @@ public bool IsEnabled
// IsBusy, IsNotBusy, StatusMessage, and HasStatus are provided by BaseViewModel
- public bool IsError => HasStatus && !StatusMessage.StartsWith(CheckMark);
+ public bool IsError => HasStatus && !StatusMessage.StartsWith(IconCheckMark);
public LocalSensorDetailViewModel(PowerHubService service, LogService log, SensorMetaCache metaCache)
: base(service, log)
@@ -800,8 +801,8 @@ private async Task SaveAsync()
}
StatusMessage = failures.Count == 0
- ? SavedOk
- : $"{FailPrefix}{string.Join(FailSeparator, failures)}";
+ ? $"{IconCheckMark} {SavedOk}"
+ : $"{IconWarning} {FailPrefix}{string.Join(FailSeparator, failures)}";
}
catch (Exception ex)
{
@@ -819,10 +820,10 @@ private async Task RemoveAsync()
return;
bool confirmed = await Application.Current.Windows[0].Page.DisplayAlertAsync(
- MsgRemoveSensor,
+ RemoveSensor,
$"Remove local sensor at index {_sensorIndex}?\n\nThis cannot be undone.",
- MsgRemove,
- MsgCancel);
+ Remove,
+ Cancel);
if (!confirmed)
return;
@@ -840,7 +841,7 @@ private async Task RemoveAsync()
if (ok)
await Shell.Current.GoToAsync(NavBack);
else
- StatusMessage = ErrRemoveCommandFailed;
+ StatusMessage = $"{IconWarning}{ErrRemoveCommandFailed}";
}
catch (Exception ex)
{
diff --git a/PowerControlHubApp/ViewModels/LocationSettingsViewModel.cs b/PowerControlHubApp/ViewModels/LocationSettingsViewModel.cs
index 5dac87f..db11138 100644
--- a/PowerControlHubApp/ViewModels/LocationSettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/LocationSettingsViewModel.cs
@@ -1,8 +1,9 @@
-using PowerControlHubApp.Internal;
using PowerControlHubApp.Models.Json;
using PowerControlHubApp.Services;
using System.Collections.ObjectModel;
using System.Windows.Input;
+using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -145,13 +146,13 @@ public async Task RefreshAsync()
_isLoading = true;
try
{
- var locTask = Service.GetSystemLocationTypesAsync();
- var dashTask = Service.GetDashboardDataAsync();
+ Task locTask = Service.GetSystemLocationTypesAsync();
+ Task dashTask = Service.GetDashboardDataAsync();
await Task.WhenAll(locTask, dashTask);
- var resp = locTask.Result;
- var index = dashTask.Result;
+ SystemLocationTypesResponseModel resp = locTask.Result;
+ IndexModel index = dashTask.Result;
MainThread.BeginInvokeOnMainThread(() =>
{
@@ -159,7 +160,7 @@ public async Task RefreshAsync()
if (resp?.Locations != null)
{
- foreach (var l in resp.Locations)
+ foreach (LocationTypeModel l in resp.Locations)
LocationTypes.Add(l);
}
@@ -232,7 +233,7 @@ public async Task SaveAsync()
MainThread.BeginInvokeOnMainThread(() =>
{
- StatusMessage = ok ? Constants.SavedOk : Constants.SaveFailed;
+ StatusMessage = ok ? $"{IconCheckMark} {SavedOk}" : $"{IconWarning} {SavedFailed}";
OnPropertyChanged(nameof(HasStatus));
});
}
@@ -240,7 +241,7 @@ public async Task SaveAsync()
{
MainThread.BeginInvokeOnMainThread(() =>
{
- StatusMessage = Constants.SaveFailed;
+ StatusMessage = SaveFailed;
OnPropertyChanged(nameof(HasStatus));
});
}
diff --git a/PowerControlHubApp/ViewModels/MqttSettingsViewModel.cs b/PowerControlHubApp/ViewModels/MqttSettingsViewModel.cs
index de47867..714bff1 100644
--- a/PowerControlHubApp/ViewModels/MqttSettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/MqttSettingsViewModel.cs
@@ -2,6 +2,7 @@
using PowerControlHubApp.Services;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -124,7 +125,7 @@ public bool MqttConnectionState
}
}
- public string MqttConnectionStateText => _mqttConnectionState ? MqttConnectedLabel : MqttDisconnectedLabel;
+ public string MqttConnectionStateText => _mqttConnectionState ? MqttConnected : MqttDisconnected;
public string MqttDiscoveryPrefix
{
@@ -170,15 +171,15 @@ public async Task RefreshAsync()
try
{
- var enabled = await Service.GetMqttEnabledAsync();
- var broker = await Service.GetMqttBrokerAsync();
- var port = await Service.GetMqttPortAsync();
- var username = await Service.GetMqttUsernameAsync();
- var deviceId = await Service.GetMqttDeviceIdAsync();
- var haDiscovery = await Service.GetMqttHADiscoveryAsync();
- var keepAlive = await Service.GetMqttKeepAliveAsync();
- var connectionState = await Service.GetMqttConnectionStateAsync();
- var discoveryPrefix = await Service.GetMqttDiscoveryPrefixAsync();
+ bool? enabled = await Service.GetMqttEnabledAsync();
+ string broker = await Service.GetMqttBrokerAsync();
+ int? port = await Service.GetMqttPortAsync();
+ string username = await Service.GetMqttUsernameAsync();
+ string deviceId = await Service.GetMqttDeviceIdAsync();
+ bool? haDiscovery = await Service.GetMqttHADiscoveryAsync();
+ int? keepAlive = await Service.GetMqttKeepAliveAsync();
+ bool? connectionState = await Service.GetMqttConnectionStateAsync();
+ string discoveryPrefix = await Service.GetMqttDiscoveryPrefixAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
@@ -223,40 +224,40 @@ public async Task SaveAllAsync()
try
{
- var enabledOk = await Service.SetMqttEnabledAsync(MqttEnabled);
+ bool enabledOk = await Service.SetMqttEnabledAsync(MqttEnabled);
anyFailed |= !enabledOk;
- var brokerOk = await Service.SetMqttBrokerAsync(MqttBroker);
+ bool brokerOk = await Service.SetMqttBrokerAsync(MqttBroker);
anyFailed |= !brokerOk;
if (int.TryParse(MqttPort, out int port) && port >= PortMin && port <= PortMax)
{
- var portOk = await Service.SetMqttPortAsync(port);
+ bool portOk = await Service.SetMqttPortAsync(port);
anyFailed |= !portOk;
}
- var usernameOk = await Service.SetMqttUsernameAsync(MqttUsername);
+ bool usernameOk = await Service.SetMqttUsernameAsync(MqttUsername);
anyFailed |= !usernameOk;
if (!string.IsNullOrEmpty(MqttPassword))
{
- var passwordOk = await Service.SetMqttPasswordAsync(MqttPassword);
+ bool passwordOk = await Service.SetMqttPasswordAsync(MqttPassword);
anyFailed |= !passwordOk;
}
- var deviceIdOk = await Service.SetMqttDeviceIdAsync(MqttDeviceId);
+ bool deviceIdOk = await Service.SetMqttDeviceIdAsync(MqttDeviceId);
anyFailed |= !deviceIdOk;
- var haOk = await Service.SetMqttHADiscoveryAsync(MqttHADiscovery);
+ bool haOk = await Service.SetMqttHADiscoveryAsync(MqttHADiscovery);
anyFailed |= !haOk;
if (int.TryParse(MqttKeepAlive, out int keepAlive) && keepAlive > 0)
{
- var kaOk = await Service.SetMqttKeepAliveAsync(keepAlive);
+ bool kaOk = await Service.SetMqttKeepAliveAsync(keepAlive);
anyFailed |= !kaOk;
}
- var prefixOk = await Service.SetMqttDiscoveryPrefixAsync(MqttDiscoveryPrefix);
+ bool prefixOk = await Service.SetMqttDiscoveryPrefixAsync(MqttDiscoveryPrefix);
anyFailed |= !prefixOk;
await Service.SaveSettingsAsync();
diff --git a/PowerControlHubApp/ViewModels/NetworkSecurityViewModel.cs b/PowerControlHubApp/ViewModels/NetworkSecurityViewModel.cs
index aab1468..883cf5c 100644
--- a/PowerControlHubApp/ViewModels/NetworkSecurityViewModel.cs
+++ b/PowerControlHubApp/ViewModels/NetworkSecurityViewModel.cs
@@ -1,7 +1,7 @@
using PowerControlHubApp.Models.Json;
using PowerControlHubApp.Services;
using System.Windows.Input;
-using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -106,7 +106,7 @@ public async Task RefreshAsync()
try
{
- var config = await Service.GetAuthConfigAsync();
+ AuthConfigModel config = await Service.GetAuthConfigAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
@@ -118,7 +118,7 @@ public async Task RefreshAsync()
}
IsConnected = true;
- StatusMessage = $"{NetworkSecurityMsgRefreshed} {DateTime.Now:HH:mm:ss}";
+ StatusMessage = $"{Refreshed} {DateTime.Now:HH:mm:ss}";
OnPropertyChanged(nameof(HasStatusMessage));
});
}
@@ -149,13 +149,13 @@ public async Task SaveAllAsync()
try
{
- var apiKeyOk = await Service.SetAuthApiKeyAsync(ApiKey);
+ bool apiKeyOk = await Service.SetAuthApiKeyAsync(ApiKey);
apiKeyFailed = !apiKeyOk;
- var hmacKeyOk = await Service.SetAuthHmacKeyAsync(HmacKey);
+ bool hmacKeyOk = await Service.SetAuthHmacKeyAsync(HmacKey);
hmacKeyFailed = !hmacKeyOk;
- var enabledOk = await Service.SetAuthEnabledAsync(IsEnabled);
+ bool enabledOk = await Service.SetAuthEnabledAsync(IsEnabled);
enableFailed = !enabledOk;
await Service.SaveSettingsAsync();
@@ -172,7 +172,7 @@ public async Task SaveAllAsync()
}
else
{
- StatusMessage = NetworkSecurityMsgSaved;
+ StatusMessage = NetworkSecuritySettingsSaved;
}
OnPropertyChanged(nameof(HasStatusMessage));
@@ -201,14 +201,14 @@ public async Task GenerateKeysAsync()
try
{
- var ok = await Service.GenerateAuthKeysAsync();
+ bool ok = await Service.GenerateAuthKeysAsync();
if (ok)
{
await RefreshAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
- StatusMessage = NetworkSecurityMsgKeysGenerated;
+ StatusMessage = NetworkSecurityKeysGenerated;
OnPropertyChanged(nameof(HasStatusMessage));
});
}
@@ -216,7 +216,7 @@ public async Task GenerateKeysAsync()
{
MainThread.BeginInvokeOnMainThread(() =>
{
- StatusMessage = NetworkSecurityMsgGenerateFailed;
+ StatusMessage = NetworkSecurityGenerateFailed;
OnPropertyChanged(nameof(HasStatusMessage));
});
}
@@ -225,7 +225,7 @@ public async Task GenerateKeysAsync()
{
MainThread.BeginInvokeOnMainThread(() =>
{
- StatusMessage = NetworkSecurityMsgGenerateFailed;
+ StatusMessage = NetworkSecurityGenerateFailed;
OnPropertyChanged(nameof(HasStatusMessage));
});
}
diff --git a/PowerControlHubApp/ViewModels/NextionSettingsViewModel.cs b/PowerControlHubApp/ViewModels/NextionSettingsViewModel.cs
index d12151f..0f5fad2 100644
--- a/PowerControlHubApp/ViewModels/NextionSettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/NextionSettingsViewModel.cs
@@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -186,7 +187,7 @@ public async Task RefreshAsync()
try
{
- var cfg = await Service.GetNextionConfigAsync();
+ NextionConfigModel cfg = await Service.GetNextionConfigAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
@@ -200,7 +201,7 @@ public async Task RefreshAsync()
BaudRate = _baudRate == 0 ? string.Empty : _baudRate.ToString();
IsConnected = true;
- StatusMessage = $"{NextionMsgRefreshed} {DateTime.Now:HH:mm:ss}";
+ StatusMessage = $"{Refreshed} {DateTime.Now:HH:mm:ss}";
OnPropertyChanged(nameof(HasStatusMessage));
});
}
@@ -247,7 +248,7 @@ public async Task SaveAllAsync()
if (anyFailed)
StatusMessage = SaveFailed;
else
- StatusMessage = NextionMsgSaved;
+ StatusMessage = NextionSettingsSaved;
OnPropertyChanged(nameof(HasStatusMessage));
});
@@ -268,7 +269,7 @@ public async Task SaveAllAsync()
public async Task RebootAsync()
{
- bool confirmed = await Application.Current.Windows[0].Page.DisplayAlertAsync(NextionRebootTitle, NextionRebootMessage, NextionRebootButton, MsgCancel);
+ bool confirmed = await Application.Current.Windows[0].Page.DisplayAlertAsync(NextionRebootTitle, NextionRebootMessage, Reboot, Cancel);
if (!confirmed)
return;
@@ -276,11 +277,11 @@ public async Task RebootAsync()
try
{
await Service.SaveSettingsAsync();
- await Application.Current.Windows[0].Page.DisplayAlertAsync(NextionRebootButton, NextionRebootSaved, NextionRebootOk);
+ await Application.Current.Windows[0].Page.DisplayAlertAsync(Reboot, NextionRebootSavedMessage, OK);
}
catch
{
- await Application.Current.Windows[0].Page.DisplayAlertAsync(NextionRebootButton, NextionRebootFailed, NextionRebootOk);
+ await Application.Current.Windows[0].Page.DisplayAlertAsync(Reboot, NextionRebootFailed, OK);
}
}
diff --git a/PowerControlHubApp/ViewModels/RelayConfigViewModel.cs b/PowerControlHubApp/ViewModels/RelayConfigViewModel.cs
index e38325c..9196f36 100644
--- a/PowerControlHubApp/ViewModels/RelayConfigViewModel.cs
+++ b/PowerControlHubApp/ViewModels/RelayConfigViewModel.cs
@@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -74,8 +75,8 @@ protected override void OnDataFetched(IndexModel index)
if (!_initialLoadingComplete)
return;
- var incoming = RelayStore.FromModels(index.Relays ?? []);
- var incomingByIndex = incoming.ToDictionary(r => r.Index);
+ List incoming = RelayStore.FromModels(index.Relays ?? []);
+ Dictionary incomingByIndex = incoming.ToDictionary(r => r.Index);
// If our collection hasn't been initialised with the expected slot
// count, populate it once so we have stable instances to update.
@@ -85,7 +86,7 @@ protected override void OnDataFetched(IndexModel index)
for (int i = 0; i < RelayCount; i++)
{
- RelayViewModel relay = incomingByIndex.TryGetValue(i, out var m)
+ RelayViewModel relay = incomingByIndex.TryGetValue(i, out RelayViewModel m)
? m
: new RelayViewModel { Index = i, Pin = UnconfiguredPin };
@@ -97,9 +98,9 @@ protected override void OnDataFetched(IndexModel index)
}
// Update existing RelayViewModel instances in-place.
- foreach (var existing in Relays)
+ foreach (RelayViewModel existing in Relays)
{
- if (incomingByIndex.TryGetValue(existing.Index, out var updated))
+ if (incomingByIndex.TryGetValue(existing.Index, out RelayViewModel updated))
{
existing.ShortName = updated.ShortName;
existing.LongName = updated.LongName;
diff --git a/PowerControlHubApp/ViewModels/RelayDetailViewModel.cs b/PowerControlHubApp/ViewModels/RelayDetailViewModel.cs
index a8829e4..af16900 100644
--- a/PowerControlHubApp/ViewModels/RelayDetailViewModel.cs
+++ b/PowerControlHubApp/ViewModels/RelayDetailViewModel.cs
@@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -23,13 +24,13 @@ public sealed class RelayDetailViewModel : BaseViewModel
private int _actionType;
private int _linkedIndex = UnconfiguredPin;
- public ObservableCollection ColorOptions { get; } = new(ColorOptionNames);
+ public ObservableCollection ColorOptions { get; } = new(new[] { ColorBlue, ColorGreen, ColorGrey, ColorOrange, ColorRed, ColorYellow, None });
- public ObservableCollection ActionOptions { get; } = new(ActionOptionNames);
+ public ObservableCollection ActionOptions { get; } = new(new[] { ActionDefault, ActionHorn, ActionNightRelay });
public ObservableCollection LinkedRelayOptions { get; } = [];
- public ObservableCollection DefaultStateOptions { get; } = new(DefaultStateOptionNames);
+ public ObservableCollection DefaultStateOptions { get; } = new(new[] { StateOff, StateOn });
public ICommand SaveCommand { get; }
@@ -163,7 +164,7 @@ public int SelectedLinkedIndex
// IsBusy, IsNotBusy, StatusMessage, HasStatus, and OnPropertyChanged are provided by BaseViewModel
// Expose an error indicator using the inherited StatusMessage.
- public bool IsError => HasStatus && !StatusMessage.StartsWith(CheckMark);
+ public bool IsError => HasStatus && !StatusMessage.StartsWith(IconCheckMark);
public RelayDetailViewModel(PowerHubService service, LogService log, IDashboardProvider provider, RelayStore relayStore)
: base(service, log)
@@ -207,7 +208,7 @@ private async Task LoadRelayAsync(int index)
{
try
{
- var idx = await Service.GetDashboardDataAsync();
+ IndexModel idx = await Service.GetDashboardDataAsync();
relays = RelayStore.FromModels(idx.Relays ?? []);
}
catch
@@ -258,7 +259,7 @@ private async Task LoadRelayAsync(int index)
private void BuildLinkedRelayOptions(int selfIndex)
{
LinkedRelayOptions.Clear();
- LinkedRelayOptions.Add(NoneString);
+ LinkedRelayOptions.Add(None);
for (int i = 0; i < RelayCount; i++)
{
@@ -304,7 +305,7 @@ private async Task SaveAsync()
if (ok)
ok &= await Service.SaveSettingsAsync();
- StatusMessage = ok ? SavedOk : SavedFailed;
+ StatusMessage = ok ? $"{IconCheckMark} {SavedOk}" : $"{IconWarning} {SavedFailed}";
if (ok && _original != null)
{
diff --git a/PowerControlHubApp/ViewModels/RelayViewModel.cs b/PowerControlHubApp/ViewModels/RelayViewModel.cs
index 19a2c5a..93e9d0a 100644
--- a/PowerControlHubApp/ViewModels/RelayViewModel.cs
+++ b/PowerControlHubApp/ViewModels/RelayViewModel.cs
@@ -2,6 +2,7 @@
using System.ComponentModel;
using System.Runtime.CompilerServices;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels
{
@@ -140,6 +141,12 @@ internal set
///
public string DisplayName => !string.IsNullOrWhiteSpace(LongName) ? LongName : ShortName;
+ ///
+ /// Pin summary for the list sub-label. Falls back to the localized
+ /// "Not configured" text when the relay has no pin assigned.
+ ///
+ public string PinSummary => IsEnabled ? string.Format(PinFormat, Pin) : SensorNotConfigured;
+
///
/// Translates into the corresponding panel accent colour.
/// Accepts both 0-based indices (0-5) and raw Nextion picture IDs (2-7) to
diff --git a/PowerControlHubApp/ViewModels/RtcSettingsViewModel.cs b/PowerControlHubApp/ViewModels/RtcSettingsViewModel.cs
index 1dfcc17..934db8e 100644
--- a/PowerControlHubApp/ViewModels/RtcSettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/RtcSettingsViewModel.cs
@@ -2,6 +2,7 @@
using PowerControlHubApp.Services;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -91,7 +92,7 @@ public async Task RefreshAsync()
try
{
- var index = await Service.GetDashboardDataAsync();
+ IndexModel index = await Service.GetDashboardDataAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
@@ -103,7 +104,7 @@ public async Task RefreshAsync()
}
IsConnected = true;
- StatusMessage = $"{RtcMsgRefreshed} {DateTime.Now:HH:mm:ss}";
+ StatusMessage = $"{Refreshed} {DateTime.Now:HH:mm:ss}";
OnPropertyChanged(nameof(HasStatusMessage));
});
}
@@ -135,7 +136,7 @@ public async Task SaveAllAsync()
if (int.TryParse(DataPin, out int data) && int.TryParse(ClockPin, out int clock) && int.TryParse(ResetPin, out int reset))
{
- var ok = await Service.SetRtcPinsAsync(data, clock, reset);
+ bool ok = await Service.SetRtcPinsAsync(data, clock, reset);
pinsFailed = !ok;
}
@@ -149,7 +150,7 @@ public async Task SaveAllAsync()
}
else
{
- StatusMessage = RtcMsgSaved;
+ StatusMessage = RtcSettingsSaved;
}
OnPropertyChanged(nameof(HasStatusMessage));
diff --git a/PowerControlHubApp/ViewModels/SdCardSettingsViewModel.cs b/PowerControlHubApp/ViewModels/SdCardSettingsViewModel.cs
index f2c638d..532bcbf 100644
--- a/PowerControlHubApp/ViewModels/SdCardSettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/SdCardSettingsViewModel.cs
@@ -2,10 +2,11 @@
using PowerControlHubApp.Services;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
-public sealed class SdCardSettingsViewModel : BaseViewModel
+public sealed partial class SdCardSettingsViewModel : BaseViewModel
{
private string _spiSck = string.Empty;
private string _spiMosi = string.Empty;
@@ -115,21 +116,33 @@ public async Task RefreshAsync()
try
{
- var index = await Service.GetDashboardDataAsync();
+ IndexModel index = await Service.GetDashboardDataAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
if (index?.Config != null)
{
- SpiSck = index.Config.SpiPins?.Sck == SdCardPinDisabled ? string.Empty : index.Config.SpiPins?.Sck.ToString() ?? string.Empty;
- SpiMosi = index.Config.SpiPins?.Mosi == SdCardPinDisabled ? string.Empty : index.Config.SpiPins?.Mosi.ToString() ?? string.Empty;
- SpiMiso = index.Config.SpiPins?.Miso == SdCardPinDisabled ? string.Empty : index.Config.SpiPins?.Miso.ToString() ?? string.Empty;
- CsPin = index.Config.SdCardCsPin == SdCardPinDisabled ? string.Empty : index.Config.SdCardCsPin.ToString();
+ SpiSck = index.Config.SpiPins?.Sck == SdCardPinDisabled ?
+ string.Empty :
+ index.Config.SpiPins?.Sck.ToString() ?? string.Empty;
+
+ SpiMosi = index.Config.SpiPins?.Mosi == SdCardPinDisabled ?
+ string.Empty
+ : index.Config.SpiPins?.Mosi.ToString() ?? string.Empty;
+
+ SpiMiso = index.Config.SpiPins?.Miso == SdCardPinDisabled ?
+ string.Empty :
+ index.Config.SpiPins?.Miso.ToString() ?? string.Empty;
+
+ CsPin = index.Config.SdCardCsPin == SdCardPinDisabled ?
+ string.Empty :
+ index.Config.SdCardCsPin.ToString();
+
InitSpeed = index.Config.SdCardInitializeSpeed.ToString();
}
IsConnected = true;
- StatusMessage = $"{SdCardMsgRefreshed} {DateTime.Now:HH:mm:ss}";
+ StatusMessage = $"{Refreshed} {DateTime.Now:HH:mm:ss}";
OnPropertyChanged(nameof(HasStatusMessage));
});
}
@@ -160,21 +173,23 @@ public async Task SaveAllAsync()
try
{
- if (int.TryParse(SpiSck, out int sck) && int.TryParse(SpiMosi, out int mosi) && int.TryParse(SpiMiso, out int miso))
+ if (int.TryParse(SpiSck, out int sck) &&
+ int.TryParse(SpiMosi, out int mosi) &&
+ int.TryParse(SpiMiso, out int miso))
{
- var spiOk = await Service.SetSdCardSpiPinsAsync(sck, mosi, miso);
+ bool spiOk = await Service.SetSdCardSpiPinsAsync(sck, mosi, miso);
spiFailed = !spiOk;
}
if (int.TryParse(CsPin, out int cs))
{
- var csOk = await Service.SetSdCardCsPinAsync(cs);
+ bool csOk = await Service.SetSdCardCsPinAsync(cs);
csFailed = !csOk;
}
if (int.TryParse(InitSpeed, out int speed))
{
- var speedOk = await Service.SetSdCardInitSpeedAsync(speed);
+ bool speedOk = await Service.SetSdCardInitSpeedAsync(speed);
speedFailed = !speedOk;
}
@@ -184,15 +199,15 @@ public async Task SaveAllAsync()
{
if (spiFailed)
{
- StatusMessage = SdCardMsgSpiFailed;
+ StatusMessage = $"{IconWarning} {SdCardSpiFailed}";
}
else if (!csFailed && !speedFailed)
{
- StatusMessage = SdCardMsgSaved;
+ StatusMessage = SdCardSettingsSaved;
}
else
{
- StatusMessage = SdCardMsgPartiallySaved;
+ StatusMessage = $"{IconWarning} {SdCardPartiallySaved}";
}
OnPropertyChanged(nameof(HasStatusMessage));
@@ -212,7 +227,8 @@ public async Task SaveAllAsync()
}
}
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1822", Justification = "Called polymorphically from OnDisappearing")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1822",
+ Justification = "Called polymorphically from OnDisappearing")]
public void Cleanup()
{
}
diff --git a/PowerControlHubApp/ViewModels/SettingsViewModel.cs b/PowerControlHubApp/ViewModels/SettingsViewModel.cs
index c366d78..3f7763e 100644
--- a/PowerControlHubApp/ViewModels/SettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/SettingsViewModel.cs
@@ -2,6 +2,7 @@
using PowerControlHubApp.Services;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -147,7 +148,7 @@ public async Task RefreshPinsAsync()
try
{
- var result = await Service.GetSystemPinsAsync();
+ SystemPinsResponseModel result = await Service.GetSystemPinsAsync();
if (result?.Success == true && result.Pins?.Count > 0)
{
diff --git a/PowerControlHubApp/ViewModels/SystemViewModel.cs b/PowerControlHubApp/ViewModels/SystemViewModel.cs
index e973ed2..bf38401 100644
--- a/PowerControlHubApp/ViewModels/SystemViewModel.cs
+++ b/PowerControlHubApp/ViewModels/SystemViewModel.cs
@@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -12,6 +13,7 @@ public class SystemViewModel : BaseViewModel
private string _pinsInUseText = string.Empty;
private bool _isPinsRefreshing;
private int _pinsCount;
+ private string _selectedLanguage;
// F16 Pin Restrictions (compile-time — fetched once, never changes)
private string _hardPinsText = string.Empty;
@@ -93,7 +95,21 @@ public bool HasPinRestrictions
}
}
- // StatusMessage, HasStatus, and OnPropertyChanged are provided by BaseViewModel
+ public IReadOnlyList LanguageOptions => LanguageService.LanguageOptions;
+
+ public string SelectedLanguage
+ {
+ get => _selectedLanguage;
+ set
+ {
+ if (_selectedLanguage == value)
+ return;
+
+ _selectedLanguage = value;
+ OnPropertyChanged();
+ LanguageService.ApplyOption(value);
+ }
+ }
public bool HasStatusMessage => !string.IsNullOrEmpty(StatusMessage);
@@ -122,6 +138,7 @@ public bool HasPinRestrictions
public SystemViewModel(PowerHubService service, LogService log)
: base(service, log)
{
+ _selectedLanguage = LanguageService.CurrentOption;
CheckForUpdateCommand = new Command(async () => await CheckForUpdateAsync());
RefreshPinsCommand = new Command(async () => await RefreshPinsAsync());
InstallFirmwareCommand = new Command(async () => await InstallFirmwareAsync(), () => CanInstallFirmware);
@@ -149,7 +166,7 @@ public async Task RefreshPinsAsync()
try
{
- var result = await Service.GetSystemPinsAsync();
+ SystemPinsResponseModel result = await Service.GetSystemPinsAsync();
if (result?.Success == true && result.Pins?.Count > 0)
{
@@ -189,7 +206,7 @@ public async Task RefreshPinRestrictionsAsync()
try
{
- var result = await Service.GetSystemPinRestrictionsAsync();
+ SystemPinRestrictionsResponseModel result = await Service.GetSystemPinRestrictionsAsync();
if (result?.Success == true)
{
@@ -227,14 +244,14 @@ public async Task RefreshAsync()
if (!_pinRestrictionsLoaded)
await RefreshPinRestrictionsAsync();
- var list = await Service.GetWarningsAsync();
+ List list = await Service.GetWarningsAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
Warnings.Clear();
if (list != null && list.Count > 0)
{
- foreach (var w in list) Warnings.Add(w);
+ foreach (string w in list) Warnings.Add(w);
StatusMessage = $"Updated {DateTime.Now:HH:mm:ss}";
}
else
@@ -279,7 +296,7 @@ public async Task CheckForUpdateAsync()
_isCheckingOta = true;
try
{
- var ota = await Service.GetOtaStatusAsync();
+ OtaStatusModel ota = await Service.GetOtaStatusAsync();
_otaStatus = ota;
NotifyOtaProperties();
}
@@ -312,7 +329,7 @@ public async Task InstallFirmwareAsync()
try
{
- var ok = await Service.TriggerOtaInstallAsync();
+ bool ok = await Service.TriggerOtaInstallAsync();
if (ok)
{
diff --git a/PowerControlHubApp/ViewModels/TimeSettingsViewModel.cs b/PowerControlHubApp/ViewModels/TimeSettingsViewModel.cs
index cc8ad33..fdf4868 100644
--- a/PowerControlHubApp/ViewModels/TimeSettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/TimeSettingsViewModel.cs
@@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -129,7 +130,7 @@ public async Task RefreshAsync()
try
{
- var index = await Service.GetDashboardDataAsync();
+ IndexModel index = await Service.GetDashboardDataAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
@@ -177,7 +178,7 @@ private void MatchTimezoneIndexByOffset(int offsetHours)
{
try
{
- var tz = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneOptionsList[i].TimeZoneId);
+ TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneOptionsList[i].TimeZoneId);
int currentOffset = (int)tz.GetUtcOffset(new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc)).TotalHours;
if (currentOffset == offsetHours)
@@ -231,7 +232,7 @@ private int GetSelectedTimezoneOffset()
try
{
- var tz = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneOptionsList[SelectedTimezoneIndex].TimeZoneId);
+ TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneOptionsList[SelectedTimezoneIndex].TimeZoneId);
return (int)tz.GetUtcOffset(new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc)).TotalHours;
}
catch
@@ -245,12 +246,12 @@ public async Task SaveTimezoneAsync()
if (!Service.IsConfigured || SelectedTimezoneIndex < 0 || SelectedTimezoneIndex >= TimeZoneOptionsList.Count)
return;
- var option = TimeZoneOptionsList[SelectedTimezoneIndex];
+ TimeZoneOption option = TimeZoneOptionsList[SelectedTimezoneIndex];
try
{
- var tz = TimeZoneInfo.FindSystemTimeZoneById(option.TimeZoneId);
- var offset = tz.GetUtcOffset(new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc));
+ TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(option.TimeZoneId);
+ TimeSpan offset = tz.GetUtcOffset(new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc));
int offsetHours = (int)offset.TotalHours;
bool ok = await Service.SetTimezoneOffsetAsync(offsetHours);
@@ -282,7 +283,7 @@ private void StartClock()
StopClock();
_clockCts = new CancellationTokenSource();
- var ct = _clockCts.Token;
+ CancellationToken ct = _clockCts.Token;
_clockTimer = new PeriodicTimer(ClockTickInterval);
_ = RunClockLoopAsync(ct);
@@ -327,7 +328,7 @@ private void StartDstAutoAdjust(string timeZoneId)
StopDstAutoAdjust();
_dstCts = new CancellationTokenSource();
- var ct = _dstCts.Token;
+ CancellationToken ct = _dstCts.Token;
_dstTimer = new PeriodicTimer(DstCheckInterval);
_ = RunDstLoopAsync(timeZoneId, ct);
@@ -339,7 +340,7 @@ private async Task RunDstLoopAsync(string timeZoneId, CancellationToken ct)
try
{
- var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
+ TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
lastOffset = (int)tz.GetUtcOffset(new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc)).TotalHours;
}
catch
@@ -351,7 +352,7 @@ private async Task RunDstLoopAsync(string timeZoneId, CancellationToken ct)
{
try
{
- var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
+ TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
int currentOffset = (int)tz.GetUtcOffset(new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc)).TotalHours;
if (currentOffset != lastOffset)
diff --git a/PowerControlHubApp/ViewModels/XpdzToneSettingsViewModel.cs b/PowerControlHubApp/ViewModels/XpdzToneSettingsViewModel.cs
index f79f0ff..c15bd67 100644
--- a/PowerControlHubApp/ViewModels/XpdzToneSettingsViewModel.cs
+++ b/PowerControlHubApp/ViewModels/XpdzToneSettingsViewModel.cs
@@ -2,6 +2,7 @@
using PowerControlHubApp.Services;
using System.Windows.Input;
using static PowerControlHubApp.Internal.Constants;
+using static PowerControlHubApp.Resources.Localization.AppResources;
namespace PowerControlHubApp.ViewModels;
@@ -67,7 +68,7 @@ public async Task RefreshAsync()
try
{
- var index = await Service.GetDashboardDataAsync();
+ IndexModel index = await Service.GetDashboardDataAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
@@ -77,7 +78,7 @@ public async Task RefreshAsync()
}
IsConnected = true;
- StatusMessage = $"{XpdzToneMsgRefreshed} {DateTime.Now:HH:mm:ss}";
+ StatusMessage = $"{Refreshed} {DateTime.Now:HH:mm:ss}";
OnPropertyChanged(nameof(HasStatusMessage));
});
}
@@ -109,7 +110,7 @@ public async Task SaveAllAsync()
if (int.TryParse(Pin, out int pin))
{
- var ok = await Service.SetXpdzTonePinAsync(pin);
+ bool ok = await Service.SetXpdzTonePinAsync(pin);
pinFailed = !ok;
}
@@ -123,7 +124,7 @@ public async Task SaveAllAsync()
}
else
{
- StatusMessage = XpdzToneMsgSaved;
+ StatusMessage = BuzzerSettingsSaved;
}
OnPropertyChanged(nameof(HasStatusMessage));
diff --git a/PowerControlHubApp/Views/DashboardPage.xaml b/PowerControlHubApp/Views/DashboardPage.xaml
index 24ef234..e8f36bd 100644
--- a/PowerControlHubApp/Views/DashboardPage.xaml
+++ b/PowerControlHubApp/Views/DashboardPage.xaml
@@ -5,8 +5,9 @@
xmlns:models="clr-namespace:PowerControlHubApp.Models"
xmlns:templates="clr-namespace:PowerControlHubApp.Views.Templates"
xmlns:views="clr-namespace:PowerControlHubApp.Views"
+ xmlns:localization="clr-namespace:PowerControlHubApp.Resources.Localization"
x:Class="PowerControlHubApp.Views.DashboardPage"
- Title="Dashboard">
+ Title="{x:Static localization:AppResources.Dashboard}">
@@ -126,7 +127,7 @@
-
+
-
@@ -204,7 +205,7 @@
-
-
@@ -225,7 +226,7 @@
-
diff --git a/PowerControlHubApp/Views/ExternalSensorDetailPage.xaml b/PowerControlHubApp/Views/ExternalSensorDetailPage.xaml
index d9f24d1..d50cdf0 100644
--- a/PowerControlHubApp/Views/ExternalSensorDetailPage.xaml
+++ b/PowerControlHubApp/Views/ExternalSensorDetailPage.xaml
@@ -3,32 +3,34 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:PowerControlHubApp.Views"
xmlns:vm="clr-namespace:PowerControlHubApp.ViewModels"
+ xmlns:localization="clr-namespace:PowerControlHubApp.Resources.Localization"
+ xmlns:internal="clr-namespace:PowerControlHubApp.Internal"
x:Class="PowerControlHubApp.Views.ExternalSensorDetailPage"
- Title="External Sensor"
+ Title="{x:Static localization:AppResources.ExternalSensorTitle}"
BackgroundColor="{DynamicResource AppPageBg}">
-
+
-
-
-
+
+
+
+ Title="{x:Static localization:AppResources.SelectSensorType}" />
-
-
-
-
-
+
+
+
+
+
-
+
@@ -36,8 +38,8 @@
-
-
+
+
diff --git a/PowerControlHubApp/Views/LocalSensorConfigPage.xaml b/PowerControlHubApp/Views/LocalSensorConfigPage.xaml
index 05a79c2..d96e0d0 100644
--- a/PowerControlHubApp/Views/LocalSensorConfigPage.xaml
+++ b/PowerControlHubApp/Views/LocalSensorConfigPage.xaml
@@ -5,8 +5,10 @@
xmlns:models="clr-namespace:PowerControlHubApp.Models"
xmlns:converters="clr-namespace:PowerControlHubApp.Converters"
xmlns:views="clr-namespace:PowerControlHubApp.Views"
+ xmlns:localization="clr-namespace:PowerControlHubApp.Resources.Localization"
+ xmlns:internal="clr-namespace:PowerControlHubApp.Internal"
x:Class="PowerControlHubApp.Views.LocalSensorConfigPage"
- Title="Local Sensors"
+ Title="{x:Static localization:AppResources.LocalSensorsPageTitle}"
BackgroundColor="{DynamicResource AppPageBg}">
@@ -46,10 +48,11 @@
-
+
@@ -100,7 +103,7 @@
-
+
@@ -141,30 +144,30 @@
TextColor="{DynamicResource AppLabelMuted}">
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/PowerControlHubApp/Views/LocalSensorDetailPage.xaml b/PowerControlHubApp/Views/LocalSensorDetailPage.xaml
index 87d9223..935c8b4 100644
--- a/PowerControlHubApp/Views/LocalSensorDetailPage.xaml
+++ b/PowerControlHubApp/Views/LocalSensorDetailPage.xaml
@@ -3,8 +3,10 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:PowerControlHubApp.Views"
xmlns:vm="clr-namespace:PowerControlHubApp.ViewModels"
+ xmlns:localization="clr-namespace:PowerControlHubApp.Resources.Localization"
+ xmlns:internal="clr-namespace:PowerControlHubApp.Internal"
x:Class="PowerControlHubApp.Views.LocalSensorDetailPage"
- Title="Sensor"
+ Title="{x:Static localization:AppResources.SensorTitle}"
BackgroundColor="{DynamicResource AppPageBg}">
@@ -68,21 +70,21 @@
-
+
-
+
-
+
-
+
@@ -126,7 +128,7 @@
-
+
-
+
-
+
@@ -217,10 +219,11 @@
-
-
+
diff --git a/PowerControlHubApp/Views/LocationSettingsPage.xaml b/PowerControlHubApp/Views/LocationSettingsPage.xaml
index b626c83..044ed3f 100644
--- a/PowerControlHubApp/Views/LocationSettingsPage.xaml
+++ b/PowerControlHubApp/Views/LocationSettingsPage.xaml
@@ -3,13 +3,14 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:PowerControlHubApp.Views"
xmlns:vm="clr-namespace:PowerControlHubApp.ViewModels"
+ xmlns:localization="clr-namespace:PowerControlHubApp.Resources.Localization"
x:Class="PowerControlHubApp.Views.LocationSettingsPage"
- Title="Location Settings"
+ Title="{x:Static localization:AppResources.LocationSettingsTitle}"
BackgroundColor="{DynamicResource AppPageBg}">
-
+
@@ -21,13 +22,13 @@
Stroke="{DynamicResource AppHelpCardStroke}"
StrokeShape="RoundRectangle 8" Padding="14">
-
-
@@ -48,7 +49,7 @@
@@ -60,14 +61,14 @@
Margin="0,8,0,0"
IsVisible="{Binding IsBoat}">
-
-
-
-
-