{"id":48690189,"url":"https://github.com/djuntgen/firewalla-home-assistant","last_synced_at":"2026-04-11T05:01:01.030Z","repository":{"id":318661561,"uuid":"1066811627","full_name":"djuntgen/firewalla-home-assistant","owner":"djuntgen","description":"A comprehensive Home Assistant integration for Firewalla firewall devices using the MSP (Managed Service Provider) API. Control device internet access, manage gaming pause rules, and monitor device status directly from Home Assistant.","archived":false,"fork":false,"pushed_at":"2026-04-05T12:57:57.000Z","size":272,"stargazers_count":14,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-05T14:32:17.615Z","etag":null,"topics":["custom-component","firewall","firewalla","hacs","home-assistant"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/djuntgen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-30T01:52:46.000Z","updated_at":"2026-04-04T04:43:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"e749d342-6b1e-4334-862e-d7a7124f820d","html_url":"https://github.com/djuntgen/firewalla-home-assistant","commit_stats":null,"previous_names":["djuntgen/firewalla-home-assistant"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/djuntgen/firewalla-home-assistant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djuntgen%2Ffirewalla-home-assistant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djuntgen%2Ffirewalla-home-assistant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djuntgen%2Ffirewalla-home-assistant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djuntgen%2Ffirewalla-home-assistant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djuntgen","download_url":"https://codeload.github.com/djuntgen/firewalla-home-assistant/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djuntgen%2Ffirewalla-home-assistant/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31669117,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["custom-component","firewall","firewalla","hacs","home-assistant"],"created_at":"2026-04-11T05:00:47.876Z","updated_at":"2026-04-11T05:01:01.012Z","avatar_url":"https://github.com/djuntgen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"custom_components/firewalla/icon.png\" alt=\"Firewalla for Home Assistant\" width=\"200\"\u003e\n\u003c/p\u003e\n\n\u003c!-- # Firewalla Home Assistant Integration --\u003e\n\u003ch1 align=\"center\"\u003eFirewalla Home Assistant Integration\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/custom-components/hacs\"\u003e\u003cimg src=\"https://img.shields.io/badge/HACS-Custom-orange.svg\" alt=\"HACS\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/djuntgen/firewalla-home-assistant/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release/djuntgen/firewalla-home-assistant.svg\" alt=\"GitHub release\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/djuntgen/firewalla-home-assistant.svg\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nA Home Assistant custom integration for managing Firewalla firewall rules, parental controls, and device monitoring via the MSP (Managed Service Provider) API v2.\n\n## Why This Exists\n\nFirewalla is great at managing your network, but checking time limits and toggling rules means opening the Firewalla app. This integration brings it all into Home Assistant so that:\n\n- **Kids can see their own usage** — log into HA to check remaining screen time and internet limits, no parental app access needed\n- **Parents can manage controls from any device** — toggle internet, app blocks, and time limits from the HA dashboard without opening the Firewalla app\n- **It works with Apple HomeKit** — HA's HomeKit bridge exposes Firewalla switches to the Home app on every iPhone. No extra apps to install, no explanations needed. If your spouse has to ask how it works, it doesn't work.\n\n## Features\n\n- **Rule switches** — each Firewalla rule becomes an HA switch (toggle pause/resume)\n- **Group internet switches** — \"Block On\" / \"Block Off\" matching the Firewalla app UX\n- **Per-group rule switches** — category/app block rules per group\n- **Time limit sensors** — per-user app and internet time limits with remaining minutes, quota, usage percentage\n- **Per-user bandwidth sensors** — 24h download/upload in GB per user group\n- **Per-device online sensors** — online/offline status with IP, MAC vendor, network, last seen\n- **User activity sensors** — binary sensors detecting active internet usage per user\n- **Rules summary sensor** — overview of total/active/paused rules with breakdown by type\n- **Manual refresh button** — on-demand full data refresh from the Firewalla device page\n- **Auto-generated dashboard** — enter user names, get a per-user parental control dashboard with progress bars, bandwidth graphs, device lists, and block toggles\n- **Dynamic entity lifecycle** — entities auto-add/remove when Firewalla rules, groups, or devices change\n- **Optimistic state updates** — UI reflects toggles immediately, confirmed on next poll\n- **Split-polling** — time-sensitive data polled frequently; bulk data less often\n- **Configurable polling intervals** — tune API call frequency via integration options\n- **Dynamic naming** — all entity names derived from API data, no hardcoded strings\n- **Reconfigure flow** — update MSP credentials without deleting the integration\n- **HomeKit compatible** — all switches are exposed via HA's HomeKit bridge, controllable from the Home app on any iPhone/iPad\n\n## Prerequisites\n\n- Firewalla device (Gold, Gold SE, Purple, Purple SE, Blue, Red)\n- Firewalla MSP account with API access enabled\n- Personal Access Token from MSP settings\n- Home Assistant 2024.1+\n\n## Installation\n\n### HACS (Recommended)\n\n1. Open HACS in Home Assistant\n2. Go to **Integrations** \u003e three-dot menu \u003e **Custom repositories**\n3. Add this repository URL: `https://github.com/djuntgen/firewalla-home-assistant`\n4. Select **Integration** as the category and click **Add**\n5. Find \"Firewalla\" in the integration list and install it\n6. Restart Home Assistant\n\n### Manual\n\n1. Copy the `custom_components/firewalla/` directory to your Home Assistant `config/custom_components/` directory\n2. Restart Home Assistant\n\n## Configuration\n\n### Initial Setup\n\n1. Go to **Settings \u003e Devices \u0026 Services \u003e Add Integration**\n2. Search for \"Firewalla\"\n3. Enter your MSP domain (e.g., `mydomain.firewalla.net`)\n4. Enter your Personal Access Token\n5. Select your Firewalla box (auto-selected if you only have one)\n\n### Updating Credentials\n\nGo to **Settings \u003e Integrations \u003e Firewalla \u003e 3-dot menu \u003e Reconfigure** to update your MSP domain or access token without deleting the integration.\n\n### Polling Intervals (Settings \u003e Integrations \u003e Firewalla \u003e Configure)\n\nThe integration polls the Firewalla API at configurable intervals. Lower values give faster updates but consume more of your API rate limit budget.\n\n| Option | Default | Range | What it controls |\n|--------|---------|-------|------------------|\n| Base Poll Interval | 45s | 30-300s | How often the integration calls the Firewalla API. Each poll fetches **time limit data** (~5 KB) — minutes remaining, usage percentage. All other data types refresh at their own intervals below. A manual **Refresh** button is also available on the Firewalla device page. |\n| Full Rules Refresh | 300s | 60-900s | How often to fetch **all firewall rules** — block/allow status, hit counts, schedules (~55 KB). Between full refreshes, only lightweight time limit data is fetched. |\n| Devices Refresh | 600s | 60-600s | How often to fetch **device data** — online/offline status, IP addresses, bandwidth usage, activity detection (~45 KB). Higher values reduce API calls but delay device status updates. |\n| Users Cache Duration | 1800s | 60-3600s | How long to cache **user and group names** (~2 KB). Names rarely change, so this can be set high. |\n\n**API calls per minute at defaults:** ~1.7 (well within Firewalla's rate limits).\n\n### Rule Filters (Settings \u003e Integrations \u003e Firewalla \u003e Configure)\n\n| Option | Description |\n|--------|-------------|\n| Include Filters | Only show rules matching these filters (one per line, OR logic). **Each filter adds an extra API call per full rules refresh.** |\n| Exclude Filters | Hide rules matching these filters (one per line). **Each filter adds an extra API call per full rules refresh.** |\n\nFilters use Firewalla's query syntax:\n\n```\nstatus:active           # Only active rules\naction:block            # Only block rules\ntarget.type:app         # Only app rules\ntarget.type:category    # Only category rules\ntarget.type:internet    # Only internet rules\nscope.type:group        # Only group-scoped rules\n```\n\n## Entities\n\nAll entity names are derived from API data. Users can override display names via **Settings \u003e Entities \u003e friendly_name**.\n\n### Switches\n\n| Entity | Name Source | Description |\n|--------|------------|-------------|\n| Per-rule switch | Rule description/target | ON = rule active, OFF = rule paused |\n| Group internet switch | \"Internet\" | ON = Block On (internet blocked), OFF = Block Off (internet allowed) — matches Firewalla app |\n| Group rule switch | `{action} {target.value}` | ON = block active, OFF = block paused |\n\n### Sensors\n\n| Entity | Name Source | State | Key Attributes |\n|--------|------------|-------|----------------|\n| Rules summary | Static | Total rule count | active, paused, by_type |\n| Time limit | `{target.value}` (e.g., \"Internet\", \"Youtube\") | Minutes remaining | quota_minutes, used_minutes, usage_percent, reached |\n| Bandwidth (download) | \"Download\" | GB (24h) | bytes, mb |\n| Bandwidth (upload) | \"Upload\" | GB (24h) | bytes, mb |\n\n### Binary Sensors\n\n| Entity | Name Source | State | Key Attributes |\n|--------|------------|-------|----------------|\n| User activity | \"Active\" | ON = traffic flowing | online_devices, active_devices, download_delta_bytes |\n| Device online | Device name from API | ON = online | ip, mac_vendor, network, last_seen, download_24h_mb, upload_24h_mb |\n\n### Buttons\n\n| Entity | Description |\n|--------|-------------|\n| Refresh | Triggers an immediate full data refresh from the Firewalla API. Clears cached data so the next poll fetches everything fresh. |\n\n### Device Grouping\n\nEach Firewalla user group becomes an HA **device** named after the user (e.g., \"Alice\", \"Bob\"). All entities for that user are grouped under their device. The main Firewalla box is also a device, hosting the rules summary sensor and refresh button.\n\n## Architecture\n\n```mermaid\ngraph TD\n    subgraph Home Assistant\n        subgraph Platforms\n            SW[\"switch.py\u003cbr/\u003eRuleSwitch · GroupInet · GroupRule\"]\n            SE[\"sensor.py\u003cbr/\u003eSummary · TimeLimit · Bandwidth\"]\n            BS[\"binary_sensor.py\u003cbr/\u003eUserActivity · DeviceOnline\"]\n            BT[\"button.py\u003cbr/\u003eRefresh\"]\n        end\n        CO[\"coordinator.py\u003cbr/\u003eDataUpdateCoordinator + MSP API Client\"]\n    end\n\n    SW --\u003e CO\n    SE --\u003e CO\n    BS --\u003e CO\n    BT --\u003e CO\n\n    CO --\u003e|\"HTTPS (split-polling)\"| API\n\n    subgraph Firewalla Cloud\n        API[\"MSP API v2\"]\n        R[\"/v2/rules\"]\n        D[\"/v2/devices\"]\n        U[\"/v2/users\"]\n        P[\"/v2/rules/{id}/pause\"]\n        RE[\"/v2/rules/{id}/resume\"]\n    end\n\n    API --- R\n    API --- D\n    API --- U\n    API --- P\n    API --- RE\n```\n\n### Split-Polling Strategy\n\nThe integration uses split-polling to minimize API calls while keeping time-sensitive data fresh:\n\n| Data | Refresh Rate | Payload | What it provides |\n|------|-------------|---------|------------------|\n| App time limits | Every base poll (default 45s) | ~5.5 KB | Minutes remaining, usage percentage for `action:timelimit` rules |\n| Internet time limits | Full rules refresh (default 5 min) | included in full rules | Block rules with `timeUsage` data — updated with all rules |\n| All rules | Configurable (default 5 min) | ~55 KB | Block/allow status, hit counts, schedules — changes rarely |\n| Devices | Configurable (default 10 min) | ~45 KB | Online/offline, IPs, bandwidth, activity detection |\n| Users | Configurable (default 30 min) | ~2 KB | User/group names — almost never changes |\n\n### Time Limit Detection\n\nFirewalla represents time limits in two ways:\n- `action: timelimit` + `scope: user` — app-specific limits (e.g., YouTube 60 min/day)\n- `action: block` + `target: internet` + `scope: group` with `timeUsage` — Internet time limits (e.g., 2 hr/day)\n\nBoth are detected and surfaced as time limit sensors with `usage_percent` (capped at 100%).\n\n## Usage\n\n### Parental Control Dashboard\n\nThe integration auto-generates a per-user parental control dashboard. Each user gets their own column with activity, internet, bandwidth, time limits, devices, and blocks — all auto-discovered.\n\n#### Prerequisites\n\nInstall from HACS:\n1. **auto-entities** (required) — auto-discovers entities by pattern\n2. **entity-progress-card** (required) — color-coded progress bars for time limits\n\nThen create an empty dashboard in HA:\n- Go to **Settings \u003e Dashboards \u003e Add Dashboard**\n- Name it `dashboard-firewalla`, choose \"New dashboard from scratch\"\n\n#### Setup\n\n1. Go to **Settings \u003e Integrations \u003e Firewalla \u003e Configure**\n2. In the **Dashboard Users** field, enter your Firewalla user names, comma-separated:\n   ```\n   Alice, Bob, Carol\n   ```\n   Names must match your Firewalla group names exactly (case-sensitive).\n3. Click **Submit** — the integration generates the dashboard automatically\n\nThe dashboard is regenerated each time the integration reloads (e.g., after changing options or restarting HA). To add or remove users, just update the comma-separated list and save.\n\n#### What's Generated\n\nEach user column includes:\n\n| Section | What it shows |\n|---------|--------------|\n| **Activity** | Tile card — online/offline with green accent |\n| **Internet** | Tile card — internet block toggle with red accent (Block On / Block Off) |\n| **Bandwidth** | History graph — 8h download and upload trend |\n| **Time Limits** | Progress bars — green (0-50%), yellow (50-80%), red (80-100%) using `usage_percent` |\n| **Devices** | Entity list — per-device online/offline with last-changed |\n| **Blocks** | Entity list — all block rule switches (apps, categories, content) |\n\nAll entities within each section are auto-discovered using `auto-entities` glob patterns. New rules, time limits, and devices appear automatically without editing the dashboard.\n\n#### Notes\n\n- The dashboard URL path must be `dashboard-firewalla` — create this dashboard in HA before configuring users\n- If the dashboard doesn't exist yet, the integration logs a warning and skips generation\n- Leave the **Dashboard Users** field empty to skip dashboard generation entirely\n- You can still edit the generated dashboard manually in the HA UI after it's created\n\n### HomeKit Integration\n\nAll Firewalla switches are automatically exposed to Apple HomeKit via HA's [HomeKit Bridge](https://www.home-assistant.io/integrations/homekit/). This means:\n\n- **Internet block toggles** appear in the Home app on every iPhone and iPad\n- **App and category block switches** can be toggled from Control Center\n- **No extra apps** to install — it just works with the built-in Home app\n- **Siri** can toggle rules: \"Hey Siri, turn on Alice Internet\"\n\nTo set this up, configure the HA HomeKit bridge integration and include the Firewalla switch entities you want exposed.\n\n### Automation Examples\n\n#### Block Gaming During School Hours\n```yaml\nautomation:\n  - alias: \"Block Gaming During School Hours\"\n    trigger:\n      - platform: time\n        at: \"08:00:00\"\n    condition:\n      - condition: time\n        weekday: [mon, tue, wed, thu, fri]\n    action:\n      - service: switch.turn_on\n        target:\n          entity_id: switch.firewalla_rule_gaming_category\n```\n\n#### Notify When Time Limit Almost Reached\n```yaml\nautomation:\n  - alias: \"Warn When Time Limit Almost Reached\"\n    trigger:\n      - platform: numeric_state\n        entity_id: sensor.matt_internet_time\n        attribute: usage_percent\n        above: 80\n    action:\n      - service: notify.mobile_app\n        data:\n          message: \"Internet time is at {{ state_attr('sensor.matt_internet_time', 'usage_percent') }}% — {{ state_attr('sensor.matt_internet_time', 'remaining_minutes') }} minutes left\"\n```\n\n#### Auto-Block Internet at Bedtime\n```yaml\nautomation:\n  - alias: \"Bedtime Internet Block\"\n    trigger:\n      - platform: time\n        at: \"21:00:00\"\n    action:\n      - service: switch.turn_on\n        target:\n          entity_id:\n            - switch.firewalla_group_matt_matt_internet_access\n            - switch.firewalla_group_harvey_harvey_internet_access\n```\n\n## FAQ\n\n### What is the MSP API?\n\nThe MSP (Managed Service Provider) API is Firewalla's cloud API for managing devices and rules. It's separate from the local API on the box. You need an MSP account and a Personal Access Token to use it.\n\n### What are the API rate limits?\n\nFirewalla enforces two rate limits:\n- **Short-term:** 100 requests per 5 minutes per token\n- **Long-term:** 3,000 requests per day per token\n\nAt default settings, this integration uses ~1.7 calls/min (~2,448/day), which is 82% of the daily budget. This leaves room for manual refreshes, filter queries, and rule toggles.\n\n### How do I avoid hitting rate limits?\n\n- Increase the **Base Poll Interval** and **Devices Refresh** in integration options\n- Remove include/exclude filters you don't need — each filter adds an API call per full rules refresh\n- Use the **Refresh** button for on-demand updates instead of lowering poll intervals\n- If you see HTTP 429 errors, the integration retries automatically with exponential backoff (1s, 2s, 4s)\n\n### How do I update my API token?\n\nGo to **Settings \u003e Integrations \u003e Firewalla \u003e 3-dot menu \u003e Reconfigure**. Enter your new token and save. The integration reloads automatically. Personal Access Tokens are long-lived until revoked.\n\n### Can my kids see their own time limits?\n\nYes. Create an HA user account for each child and set up the parental control dashboard. They can log in and see their remaining time, usage percentage, and which apps are blocked — but they can't toggle switches unless you grant them permission. HA user permissions control what they can change.\n\n### Can I control Firewalla from my iPhone without an app?\n\nYes. Set up the [HomeKit Bridge](https://www.home-assistant.io/integrations/homekit/) in HA and include the Firewalla switch entities. They'll appear in the built-in Home app on every iPhone and iPad — no extra apps to install. Your spouse can toggle internet blocks from Control Center without knowing what Firewalla is.\n\n### Why don't I see time limit sensors?\n\nTime limit sensors only appear for:\n- Active (non-paused) time limits\n- Rules with `quota \u003e 0`\n- App time limits (`action: timelimit` + `scope: user`) or Internet time limits (`action: block` + `scope: group` with `timeUsage` data)\n\n### Why are my device sensors slow to update?\n\nDevice data (online/offline, bandwidth) refreshes at the **Devices Refresh** interval (default 10 min). This is intentional to reduce API calls — device data is ~45 KB per fetch. Lower this interval if you need faster updates, but watch your daily API budget.\n\n### How do I rename entities?\n\nAll entity names come from the Firewalla API. To customize display names, go to **Settings \u003e Entities**, find the entity, and set a **friendly_name**. This doesn't affect the entity ID.\n\n### Can I create new Firewalla rules from Home Assistant?\n\nNo. This integration manages existing rules only (pause/resume). Rule creation must be done in the Firewalla app.\n\n### How do I trigger a manual refresh?\n\nPress the **Refresh** button on the Firewalla device page, or call the `button.press` service on `button.firewalla_refresh`. This clears all cached data and triggers an immediate full fetch.\n\n### What happens if I have multiple Firewalla boxes?\n\nEach box is set up as a separate integration instance. During setup, you'll be prompted to select which box to manage. Each box has its own coordinator, entities, and polling intervals.\n\n### What HACS cards does the dashboard need?\n\nThe auto-generated dashboard requires two custom cards from HACS:\n- **auto-entities** — dynamically discovers entities matching glob patterns\n- **entity-progress-card** — renders time limit usage as color-coded progress bars (green/yellow/red)\n\nBoth are free and available in the default HACS repository.\n\n## Troubleshooting\n\n### \"Failed to pause/resume rule\" errors\n\n- Check that your Personal Access Token has write permissions\n- Verify the Firewalla box is online and reachable\n\n### Authentication failed\n\n- Go to **Settings \u003e Integrations \u003e Firewalla \u003e 3-dot menu \u003e Reconfigure**\n- Generate a new Personal Access Token from your Firewalla MSP portal\n- PATs are long-lived until revoked — if auth fails, the token may have been revoked or regenerated\n\n### Entities not appearing\n\n- Check **Settings \u003e Devices \u0026 Services \u003e Firewalla** for error messages\n- Enable debug logging: add `custom_components.firewalla: debug` to `configuration.yaml`\n\n### Rate limiting (HTTP 429)\n\n- Increase polling intervals in the integration options\n- The integration retries with exponential backoff (1s, 2s, 4s)\n\n### Dashboard shows \"Configuration error\"\n\n- Make sure **auto-entities** and **entity-progress-card** are installed from HACS\n- Verify the dashboard exists at URL path `dashboard-firewalla`\n- Check that user names in the **Dashboard Users** field exactly match your Firewalla group names\n\n### Debug Logging\n\n```yaml\nlogger:\n  default: warning\n  logs:\n    custom_components.firewalla: debug\n```\n\n## Development\n\n```bash\n# Install test dependencies\npip install -r tests/requirements.txt\n\n# Run all tests\npytest tests/ -v --tb=short\n\n# Run a single test file\npytest tests/test_coordinator.py -v\n\n# Run tests matching a pattern\npytest tests/ -k \"test_split_polling\" -v\n```\n\n## API Reference\n\n- [Firewalla MSP API Docs](https://docs.firewalla.net)\n- [MSP API Examples](https://github.com/firewalla/msp-api-examples)\n\n## Changelog\n\nSee [CHANGELOG.md](docs/CHANGELOG.md) for version history.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjuntgen%2Ffirewalla-home-assistant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjuntgen%2Ffirewalla-home-assistant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjuntgen%2Ffirewalla-home-assistant/lists"}