{"id":22139061,"url":"https://github.com/kcsoft/arduzombieos","last_synced_at":"2025-03-24T10:41:34.491Z","repository":{"id":142302960,"uuid":"288696798","full_name":"kcsoft/ArduZombieOS","owner":"kcsoft","description":null,"archived":false,"fork":false,"pushed_at":"2024-03-22T04:50:40.000Z","size":524,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-29T16:08:52.065Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kcsoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2020-08-19T10:02:05.000Z","updated_at":"2024-01-06T15:05:53.000Z","dependencies_parsed_at":"2024-03-22T05:43:31.467Z","dependency_job_id":null,"html_url":"https://github.com/kcsoft/ArduZombieOS","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kcsoft%2FArduZombieOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kcsoft%2FArduZombieOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kcsoft%2FArduZombieOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kcsoft%2FArduZombieOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kcsoft","download_url":"https://codeload.github.com/kcsoft/ArduZombieOS/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245256781,"owners_count":20585968,"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":"2024-12-01T20:13:27.381Z","updated_at":"2025-03-24T10:41:34.467Z","avatar_url":"https://github.com/kcsoft.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ArduZombieOS\n\n* read up to 16 push buttons\n* blink up to 16 LEDs (push button LEDs)\n* up to 16 outputs\n* connect to ethernet (DHCP)\n* connect to MQTT server\n* send mqtt message on output state change or state query\n* subscribe to mqtt and output changes\n* output state can be 0 = off, 1 = on, \u003e1 = seconds till stop\n\nUses [FreeRTOS](https://github.com/feilipu/Arduino_FreeRTOS_Library) port for Arduino.\n\n### Requirements\n- Arduino MEGA 2560 board with W5100 ethernet shield\n- Arduino AVR Boards version 1.8.6\n- FreeRTOS version 11.0.1\n\n### Operation mode\n\n#### Startup\n- when connecing to MQTT server, send mqtt message `house/:id/start` with payload `1` (online)\n\n#### Outputs\n- can be set/toggled by mqtt message on `house/:id/light/:output` with payload `0`, `1` or number of seconds to keep output on\n- can be set/toggled by button press (actions)\n- on change, send mqtt message `house/:id/light/state/:output` with payload `0`, `1` or number of seconds to keep output on\n\n\n#### Button has 3 functions, each can have a different action:\n- short press (default action is toggle output for light X)\n- medium press - 1.5 seconds (default action is toggle blink mode for button LED)\n- long press - 6 seconds (default action is mqtt publish button number)\n\n\n#### Actions that can be assigned to button short, medium and long press\n\nCan be set by sending mqtt message `house/:id/set` with payload\n- `asXYZ` - set action short for button X (0-F), action Y (0-5), param Z (0-F)\n- `amXYZ` - set action medium for button X, action Y, param Z\n- `alXYZ` - set action long for button X, action Y, param Z\n\neg: `as01F` - set action short for button 0 to toggle output 15 (will set output 16)\n\n##### Actions:\n\n- `0`: no action\n- `1`: toggle output for light X\n- `2`: toggle blink mode for button LED\n- `3`: mqtt publish `1` on button number topic: `house/:id/button/:button`\n- `4`: mqtt publish `2` on button number topic\n- `5`: mqtt publish `3` on button number topic\n\n##### On MQTT message:\n  - `house/:id/light/:output` with payload `0` or `1`: set output on or off. If `:output` is `0`, turn off all outputs. If payload is a number \u003e 1, set output on for that many seconds.\n  - `house/:id` send status for all outputs that are on\n  - `house/:id/reset` reset the device\n  - `house/:id/set` update setting, when payload\n    - `0` - reset settings to default\n    - `?X` - send current settings via mqtt `house/:id/settings`, X can be i = id, h = hostname, a[sml] = actions, b = blink modes\n    - `iX` - set id to `X` eg: `i1`\n    - `hHOSTNAME` - set hostname to `HOSTNAME` eg: `hArdu`\n    - `asXYZ` - set action short for button X (0-F), action Y (0-5), param Z (0-F)\n    - `amXYZ` - set action medium for button X, action Y, param Z\n    - `alXYZ` - set action long for button X, action Y, param Z\n    - `bX`, X=0..4 - set blink mode\n\n\n### Pinout\n\n#### Inputs (Buttons) from 1 to 16 (PORTA, PORTC)\n\n- multiplexed with button LED:\n  - LED+ = 5V\n  - LED- = pin\n  - ButtonNO1 = pin\n  - ButtonNO2 = GND\n\n- Arduino PINS: 22 - 29, 37 - 30\n\n#### Outputs (Relays) from 1 to 16 (ADC/PORTK, PORTL)\n\n- Arduino PINS: A8 - A15, 42 - 49\n\n### Using Timer3 as a RTOS tick timer\n\n##### FreeRTOS library changes are need, add to FreeRTOSVariant.h at LINE 66\n\n```C\n#undef portUSE_WDTO\n#undef configTICK_RATE_HZ\n#undef portTICK_PERIOD_MS\n\n#define portTICK_PERIOD_MS 15\n#define configTICK_RATE_HZ  ( (TickType_t) ( 1000 / portTICK_PERIOD_MS ) )\n#define portSCHEDULER_ISR    TIMER3_COMPA_vect\nextern void prvSetupTimerInterrupt( void );\n```\n\n\n### Arduino MEGA 2560 Pinout\n\n![Arduino MEGA 2560 Pinout](/assets/arduino-mega-pinout.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkcsoft%2Farduzombieos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkcsoft%2Farduzombieos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkcsoft%2Farduzombieos/lists"}