{"id":25917154,"url":"https://github.com/lostincompilation/prettyota","last_synced_at":"2025-03-03T13:20:17.965Z","repository":{"id":280236191,"uuid":"937358461","full_name":"LostInCompilation/PrettyOTA","owner":"LostInCompilation","description":"A better looking Web OTA updater for ESP32","archived":false,"fork":false,"pushed_at":"2025-03-02T06:29:42.000Z","size":349,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T07:24:04.118Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"zlib","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LostInCompilation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-22T22:02:31.000Z","updated_at":"2025-03-02T06:29:45.000Z","dependencies_parsed_at":"2025-03-02T07:24:06.487Z","dependency_job_id":"4ad4f345-8996-47a9-b94d-e0ebe42d5924","html_url":"https://github.com/LostInCompilation/PrettyOTA","commit_stats":null,"previous_names":["lostincompilation/prettyota"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LostInCompilation%2FPrettyOTA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LostInCompilation%2FPrettyOTA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LostInCompilation%2FPrettyOTA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LostInCompilation%2FPrettyOTA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LostInCompilation","download_url":"https://codeload.github.com/LostInCompilation/PrettyOTA/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241670099,"owners_count":20000327,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-03T13:20:17.124Z","updated_at":"2025-03-03T13:20:17.960Z","avatar_url":"https://github.com/LostInCompilation.png","language":"C++","readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"img/logo.svg\" alt=\"Screenshot\" style=\"height:100px;\"/\u003e\n\u003c/p\u003e\n\n### \u003ccenter\u003eA modern looking OTA update server with easy rollback\u003c/center\u003e\n\n## Features\n- ***Drag and drop*** firmware or filesystem .bin file to start updating\n- ***Rollback*** to previous firmware with one button click\n- ***Show info*** about board (Firmware version, build time)\n- Automatic ***reboot*** after update/rollback\n- If needed enable **authentication** (username and password login)\n\n## Usage\n```cpp\n#include \u003cWiFi.h\u003e\n#include \"PrettyOTA.hpp\"\n\nconst char* WIFI_SSID     = \"YOUR_SSID\";\nconst char* WIFI_PASSWORD = \"YOUR_WIFI_PASSWORD\";\n\nAsyncWebServer  server(80);\nPrettyOTA       OTA;\n\nvoid setup() {\n    // Initialize WiFi\n    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);\n    \n    // Initialize OTA\n    OTA.Begin(\u0026server);\n    \n    // Start web server\n    server.begin();\n}\n\nvoid loop() {\n}\n```\n\n## Demo\n![Screen Recording 2025-03-02 at 08 26 48](https://github.com/user-attachments/assets/77b92946-ed00-470f-ad9b-a70e98503e44)\n\n## The Begin function\n```cpp\nPrettyOTA::Begin(Server, Username, Password, IsPasswordMD5Hash);\n```\n- Server: `AsyncWebServer*`\n- Username: `const char*` *(Optional)*\n- Password: `const char*` *(Optional)* - Can be normal text or an MD5 hash of the password\n- IsPasswordMD5Hash: `bool` *(Optional) Default: false* - Set to `true` if the password is a MD5 hash\n\n## Callbacks\nYou can define your own callbacks which get called by PrettyOTA:\n\n```cpp\n#include \u003cWiFi.h\u003e\n#include \"PrettyOTA.hpp\"\n\nconst char* WIFI_SSID     = \"YOUR_SSID\";\nconst char* WIFI_PASSWORD = \"YOUR_WIFI_PASSWORD\";\n\nAsyncWebServer  server(80);\nPrettyOTA       OTA;\n\nvoid OnOTAStart()\n{\n    Serial.println(\"OTA update started\");\n}\n\nvoid OnOTAProgress(uint32_t currentSize, uint32_t totalSize)\n{\n    Serial.printf(\"OTA Progress Current: %u bytes, Total: %u bytes\\n\", currentSize, totalSize);\n}\n\nvoid OnOTAEnd(bool successful)\n{\n    if (successful)\n        Serial.println(\"OTA update finished successfully\");\n    else\n        Serial.println(\"OTA update failed\");\n}\n\nvoid setup() {\n    Serial.begin(9600);\n    \n    // Initialize WiFi here\n    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);\n    \n    // Initialize OTA\n    OTAUpdates.Begin(\u0026server, \"admin\", \"123\");\n    \n    // Set callbacks\n    OTAUpdates.OnStart(OnOTAStart);\n    OTAUpdates.OnProgress(OnOTAProgress);\n    OTAUpdates.OnEnd(OnOTAEnd);\n    \n    // Start web server\n    server.begin();\n}\n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostincompilation%2Fprettyota","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flostincompilation%2Fprettyota","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostincompilation%2Fprettyota/lists"}