From b866d6dc57d3efe3104daa5faab68708c9b86fdd Mon Sep 17 00:00:00 2001 From: Zefek Date: Sat, 9 May 2026 10:06:55 +0200 Subject: [PATCH 1/4] Migrace na V6 --- .github/workflows/build.yml | 3 ++- .github/workflows/deployment.yml | 3 ++- Garage.ino | 23 +++++++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5d7d7ab..fb5ab38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,7 @@ jobs: - name: Initialize Arduino CLI run: | arduino-cli config init + arduino-cli config set library.enable_unsafe_install true arduino-cli core update-index - name: Install required board core @@ -31,7 +32,7 @@ jobs: - name: Install libraries run: | arduino-cli lib install "AM2302-Sensor@1.4.0" - arduino-cli lib install "MQTTESP8266@5.1.2" + arduino-cli lib install --git-url https://github.com/Zefek/MQTTESP8266.git#6.0 - name: Set configs run: | diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index f4778ea..c94be3d 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -20,6 +20,7 @@ jobs: - name: Initialize Arduino CLI run: | & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml core update-index + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" config set library.enable_unsafe_install true - name: Install required board core run: | @@ -28,7 +29,7 @@ jobs: - name: Install custom Arduino libraries (Windows) shell: powershell run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml lib install "MQTTESP8266@5.1.2" + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml lib install --git-url https://github.com/Zefek/MQTTESP8266.git#6.0 & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml lib install "AM2302-Sensor@1.4.0" - name: Generate configs from secrets repo diff --git a/Garage.ino b/Garage.ino index c23095e..0e687a2 100644 --- a/Garage.ino +++ b/Garage.ino @@ -14,6 +14,8 @@ #define TEMPERATURE_SENSOR_PIN 7 void MQTTMessageReceive(char* topic, uint8_t* payload, uint16_t length); +void OnBusy(uint8_t count); +void DataTimeout(); unsigned long doorChangeTime = 0; int doorState = LOW; @@ -30,6 +32,7 @@ unsigned long temperatureHumidityReadMillis = 0; AM2302::AM2302_Sensor am2302{ TEMPERATURE_SENSOR_PIN }; char temperatureData[10]; bool doorMoveDetected = false; +bool closeRequired = false; void MQTTMessageReceive(char* topic, uint8_t* payload, uint16_t length) { @@ -39,6 +42,19 @@ void MQTTMessageReceive(char* topic, uint8_t* payload, uint16_t length) } } +void DataTimeout() +{ + closeRequired = true; +} + +void OnBusy(uint8_t count) +{ + if(count > 10) + { + closeRequired = true; + } +} + void PublishDoorState(int state, int movement) { //state - HIGH (door closed), LOW (door open) @@ -110,6 +126,8 @@ void setup() { Serial.begin(57600); serial.begin(57600); espDrv.Init(32); + espDrv.OnBusy = OnBusy; + espDrv.DataTimeout = DataTimeout; espDrv.Connect(WifiSSID, WifiPassword); doorState = digitalRead(DOORSWITCH_PIN); if (am2302.begin()) @@ -123,6 +141,11 @@ void setup() { void loop() { wdt_reset(); currentMillis = millis(); + if(closeRequired) + { + espDrv.Close(); + closeRequired = false; + } if(!mqttClient.Loop()) { Connect(); From f5fbba5b81d11623533a05c47b93ce1e2784ff86 Mon Sep 17 00:00:00 2001 From: Zefek <32429493+Zefek@users.noreply.github.com> Date: Sat, 9 May 2026 10:34:28 +0200 Subject: [PATCH 2/4] Diagnostika (#11) * Diagnostika * Konfigurace --- .gitignore | 2 +- Garage.ino | 62 +++++++++++++++++++++++++++++++++++++++++++++++- config_default.h | 9 +------ 3 files changed, 63 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 0e56cf2..a7fbec4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -config.h +secret.h diff --git a/Garage.ino b/Garage.ino index 0e687a2..d7ba556 100644 --- a/Garage.ino +++ b/Garage.ino @@ -17,6 +17,19 @@ void MQTTMessageReceive(char* topic, uint8_t* payload, uint16_t length); void OnBusy(uint8_t count); void DataTimeout(); +#pragma pack(push, 1) +struct DiagData { + uint32_t uptime; + uint16_t freeRam; + uint16_t wifiReconn; + uint16_t mqttReconn; + uint8_t sensorErr; + uint8_t resetReason; + uint16_t loopMaxMs; + uint16_t doorCycles; +}; +#pragma pack(pop) + unsigned long doorChangeTime = 0; int doorState = LOW; int moveState = HIGH; @@ -24,7 +37,7 @@ bool doorSignal = false; SoftwareSerial serial(RX_PIN, TX_PIN); EspDrv espDrv(&serial); MQTTClient mqttClient(&espDrv, MQTTMessageReceive); -MQTTConnectData mqttConnectData = { MQTTHost, 1883, "Garage", MQTTUsername, MQTTPassword, "", 0, false, "", false, 0x0 }; +MQTTConnectData mqttConnectData = { MQTTHost, 1883, "Garage", MQTTUsername, MQTTPassword, "", 0, false, "", false, 0x0 }; unsigned long mqttConnectionTimeout = 0; unsigned long mqttLastConnectionTry = 0; unsigned long currentMillis = 0; @@ -33,6 +46,14 @@ AM2302::AM2302_Sensor am2302{ TEMPERATURE_SENSOR_PIN }; char temperatureData[10]; bool doorMoveDetected = false; bool closeRequired = false; +DiagData currentDiagData = { 0, 0, 0, 0, 0, 0, 0, 0 }; +unsigned long lastDiagSendMillis = 0; + +extern int __heap_start, *__brkval; +int freeRam() { + int v; + return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval); +} void MQTTMessageReceive(char* topic, uint8_t* payload, uint16_t length) { @@ -87,6 +108,10 @@ void Connect() bool wifiConnected = wifiStatus == WL_CONNECTED; if(wifiStatus == WL_DISCONNECTED || wifiStatus == WL_IDLE_STATUS) { + if(currentDiagData.wifiReconn < 0xFFFF) + { + currentDiagData.wifiReconn++; + } wifiConnected = espDrv.Connect(WifiSSID, WifiPassword); } if(wifiConnected) @@ -94,6 +119,10 @@ void Connect() bool isConnected = mqttClient.IsConnected(); if(!isConnected) { + if(currentDiagData.mqttReconn < 0xFFFF) + { + currentDiagData.mqttReconn++; + } if(mqttClient.Connect(mqttConnectData)) { PublishDoorState(doorState, moveState); @@ -117,7 +146,20 @@ void Connect() } } +void sendDiag() +{ + currentDiagData.uptime = currentMillis / 60000; + currentDiagData.freeRam = freeRam(); + uint8_t buffer[sizeof(DiagData)]; + memcpy(buffer, ¤tDiagData, sizeof(DiagData)); + mqttClient.Publish(GARAGE_DIAG, buffer, sizeof(DiagData), false); + currentDiagData.loopMaxMs = 0; + currentDiagData.sensorErr = 0; +} + void setup() { + currentDiagData.resetReason = MCUSR; + MCUSR = 0; pinMode(DOORSWITCH_PIN, INPUT_PULLUP); pinMode(DOORBUTTON_PIN, OUTPUT); pinMode(DOORFLASH_PIN, INPUT_PULLUP); @@ -159,6 +201,10 @@ void loop() { int doorValue = digitalRead(DOORSWITCH_PIN); if(doorValue != doorState || (doorMoveDetected && moveState == HIGH) || (!doorMoveDetected && moveState == LOW)) { + if(doorState == HIGH && doorValue == LOW && currentDiagData.doorCycles < 0xFFFF) + { + currentDiagData.doorCycles++; + } doorState = doorValue; moveState = doorMoveDetected? LOW : HIGH; PublishDoorState(doorState, moveState); @@ -176,10 +222,24 @@ void loop() { if(currentMillis - temperatureHumidityReadMillis > 60000) { uint8_t status = am2302.read(); + if(status != AM2302::AM2302_READ_OK) + { + currentDiagData.sensorErr |= 0x01; + } int temperature = (int)(am2302.get_Temperature() * 10); int humidity = (int)am2302.get_Humidity(); sprintf(temperatureData, "%d;%d", temperature, humidity); mqttClient.Publish(GARAGE_TEMPERATURE, temperatureData); temperatureHumidityReadMillis = currentMillis; } + if(currentMillis - lastDiagSendMillis > 900000UL) + { + sendDiag(); + lastDiagSendMillis = currentMillis; + } + uint16_t loopDuration = (uint16_t)(millis() - currentMillis); + if(loopDuration > currentDiagData.loopMaxMs) + { + currentDiagData.loopMaxMs = loopDuration; + } } diff --git a/config_default.h b/config_default.h index e172de7..e915df6 100644 --- a/config_default.h +++ b/config_default.h @@ -1,11 +1,4 @@ -#define WifiSSID "WifiSSID" -#define WifiPassword "WifiPassword" -#define MQTTUsername "MQTTUsername" - -#define MQTTPassword "*MQTTPassword" - -#define MQTTHost "MQTTHost" - #define GARAGE_STATE "GARAGE_STATE" #define GARAGE_CMD "GARAGE_CMD" #define GARAGE_TEMPERATURE "GARAGE_TEMPERATURE" +#define GARAGE_DIAG "GARAGE_DIAG" From b8af5ff2e77908837f5ef740e8a976120ca9b257 Mon Sep 17 00:00:00 2001 From: Zefek Date: Sat, 9 May 2026 11:05:21 +0200 Subject: [PATCH 3/4] Arduino config --- .github/workflows/deployment.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index c94be3d..0b5cd7a 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -19,18 +19,18 @@ jobs: - name: Initialize Arduino CLI run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml core update-index + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" core update-index & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" config set library.enable_unsafe_install true - name: Install required board core run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml core install arduino:avr@1.8.7 + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" core install arduino:avr@1.8.7 - name: Install custom Arduino libraries (Windows) shell: powershell run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml lib install --git-url https://github.com/Zefek/MQTTESP8266.git#6.0 - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml lib install "AM2302-Sensor@1.4.0" + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" lib install --git-url https://github.com/Zefek/MQTTESP8266.git#6.0 + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" lib install "AM2302-Sensor@1.4.0" - name: Generate configs from secrets repo shell: powershell @@ -78,7 +78,7 @@ jobs: - name: Compile Arduino project run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml compile --fqbn arduino:avr:uno ./ --output-dir build + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" compile --fqbn arduino:avr:uno ./ --output-dir build - name: Upload firmware to Arduino env: @@ -88,4 +88,4 @@ jobs: Write-Error "Invalid serial port format: $env:SERIAL_PORT" exit 1 } - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file config.yaml upload --fqbn arduino:avr:uno --port $env:SERIAL_PORT --input-dir build + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" upload --fqbn arduino:avr:uno --port $env:SERIAL_PORT --input-dir build From d8132586f0d3ede886b2de3e1ed2ca5e032a4147 Mon Sep 17 00:00:00 2001 From: Zefek <32429493+Zefek@users.noreply.github.com> Date: Sat, 9 May 2026 13:07:16 +0200 Subject: [PATCH 4/4] Submodule a sketch (#12) --- .github/workflows/build.yml | 15 ++++----------- .github/workflows/deployment.yml | 17 ++++------------- .gitmodules | 4 ++++ MQTTESP8266 | 1 + sketch.yaml | 9 +++++++++ 5 files changed, 22 insertions(+), 24 deletions(-) create mode 100644 .gitmodules create mode 160000 MQTTESP8266 create mode 100644 sketch.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fb5ab38..cc4654b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,8 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + submodules: true - name: Install Arduino CLI uses: arduino/setup-arduino-cli@81d310742121c928ea9c8bbd407b4217b432ae02 # v2.0.0 @@ -23,17 +25,8 @@ jobs: - name: Initialize Arduino CLI run: | arduino-cli config init - arduino-cli config set library.enable_unsafe_install true arduino-cli core update-index - - - name: Install required board core - run: arduino-cli core install arduino:avr@1.8.7 - - - name: Install libraries - run: | - arduino-cli lib install "AM2302-Sensor@1.4.0" - arduino-cli lib install --git-url https://github.com/Zefek/MQTTESP8266.git#6.0 - + - name: Set configs run: | cp config_default.h config.h @@ -41,4 +34,4 @@ jobs: - name: Compile Arduino project run: | - arduino-cli compile --fqbn arduino:avr:uno ./ + arduino-cli compile --profile Garage_UNO ./ diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 0b5cd7a..6867e51 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -16,21 +16,12 @@ jobs: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + submodules: true - name: Initialize Arduino CLI run: | & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" core update-index - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" config set library.enable_unsafe_install true - - - name: Install required board core - run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" core install arduino:avr@1.8.7 - - - name: Install custom Arduino libraries (Windows) - shell: powershell - run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" lib install --git-url https://github.com/Zefek/MQTTESP8266.git#6.0 - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" lib install "AM2302-Sensor@1.4.0" - name: Generate configs from secrets repo shell: powershell @@ -78,7 +69,7 @@ jobs: - name: Compile Arduino project run: | - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" compile --fqbn arduino:avr:uno ./ --output-dir build + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" compile --profile Garage_UNO ./ --output-dir build - name: Upload firmware to Arduino env: @@ -88,4 +79,4 @@ jobs: Write-Error "Invalid serial port format: $env:SERIAL_PORT" exit 1 } - & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" upload --fqbn arduino:avr:uno --port $env:SERIAL_PORT --input-dir build + & "$Env:RUNNER_TOOL_CACHE\arduino-cli\arduino-cli.exe" --config-file "$Env:RUNNER_TOOL_CACHE\arduino-cli\config.yaml" upload --profile Garage_UNO --port $env:SERIAL_PORT --input-dir build diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f2db511 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "MQTTESP8266"] + path = MQTTESP8266 + url = https://github.com/Zefek/MQTTESP8266.git + branch = 6.0 diff --git a/MQTTESP8266 b/MQTTESP8266 new file mode 160000 index 0000000..0fc63a7 --- /dev/null +++ b/MQTTESP8266 @@ -0,0 +1 @@ +Subproject commit 0fc63a725df0f208de012f7cbcc4f4243d4a72ad diff --git a/sketch.yaml b/sketch.yaml new file mode 100644 index 0000000..687fc4f --- /dev/null +++ b/sketch.yaml @@ -0,0 +1,9 @@ +profiles: + Garage_UNO: + fqbn: arduino:avr:uno + platforms: + - platform: arduino:avr (1.8.7) + libraries: + - AM2302-Sensor (1.4.0) + - dir: MQTTESP8266 +default_profile: Garage_UNO