{"id":49949503,"url":"https://github.com/alriachi/industrial-alarm-panel","last_synced_at":"2026-05-21T22:01:21.605Z","repository":{"id":358487494,"uuid":"1239837929","full_name":"AlRiachi/industrial-alarm-panel","owner":"AlRiachi","description":"DCS-style alarm annunciator custom integration for Home Assistant","archived":false,"fork":false,"pushed_at":"2026-05-17T16:36:33.000Z","size":212,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-17T17:45:08.335Z","etag":null,"topics":["alarm-panel","annunciator","custom-integration","dcs","energy-monitoring","hacs","hacs-integration","home-assistant","industrial-automation","solar"],"latest_commit_sha":null,"homepage":"https://github.com/AlRiachi/industrial-alarm-panel","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlRiachi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2026-05-15T13:48:24.000Z","updated_at":"2026-05-17T16:36:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AlRiachi/industrial-alarm-panel","commit_stats":null,"previous_names":["alriachi/industrial-alarm-panel"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/AlRiachi/industrial-alarm-panel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlRiachi%2Findustrial-alarm-panel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlRiachi%2Findustrial-alarm-panel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlRiachi%2Findustrial-alarm-panel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlRiachi%2Findustrial-alarm-panel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlRiachi","download_url":"https://codeload.github.com/AlRiachi/industrial-alarm-panel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlRiachi%2Findustrial-alarm-panel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33149519,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["alarm-panel","annunciator","custom-integration","dcs","energy-monitoring","hacs","hacs-integration","home-assistant","industrial-automation","solar"],"created_at":"2026-05-17T18:04:04.610Z","updated_at":"2026-05-17T18:04:05.710Z","avatar_url":"https://github.com/AlRiachi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Industrial Alarm Panel\n\n[![HACS Custom](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://www.hacs.xyz/)\n[![GitHub release](https://img.shields.io/github/v/release/AlRiachi/industrial-alarm-panel?display_name=tag)](https://github.com/AlRiachi/industrial-alarm-panel/releases)\n[![Home Assistant](https://img.shields.io/badge/Home%20Assistant-2025.1%2B-41BDF5.svg)](https://www.home-assistant.io/)\n[![License](https://img.shields.io/github/license/AlRiachi/industrial-alarm-panel)](LICENSE)\n\nIndustrial Alarm Panel is a Home Assistant custom integration that provides a DCS-style alarm annunciator for industrial, energy, and equipment monitoring.\n\nIt creates Home Assistant entities, exposes services and a websocket API, persists alarm rules and runtime state, stores alarm history in SQLite, and serves a dedicated sidebar panel at `/industrial-alarms`.\n\nCurrent release: `v1.0.12`\n\n![Industrial Alarm Panel preview](docs/images/industrial-alarm-panel-preview.png)\n\n## Highlights\n\n- Dedicated Home Assistant sidebar panel at `/industrial-alarms`\n- DCS-style alarm lifecycle: active, acknowledged, cleared, shelved, disabled\n- Priority levels with horn behavior: `critical`, `high`, `medium`, `low`, `info`, `status`\n- Per-rule binary sensors and operator action buttons\n- Rule storage, runtime state persistence, and SQLite alarm history\n- Browser horn and optional media-player sound output\n- Suggested alarm rule generator for PowerTag/electrical/solar-water sensors\n- Event-driven panel refresh with a polling fallback\n- HACS-ready repository layout with local Home Assistant brand images\n\n## What's New in v1.0.12\n\n- Added panel presets for shelving alarms for 1 hour, 4 hours, 8 hours, 1 day, 3 days, or 7 days.\n- Added a **Shelved Until** alarm table column so operators can see the current `shelve_expiry`.\n- Kept the Home Assistant `shelve_alarm` service duration-based with `duration_minutes`; use `1440` for 1 day, `4320` for 3 days, or `10080` for 7 days.\n- Bumped the frontend cache-busting version and package metadata for the new release.\n\n## What's New in v1.0.11\n\n- Added **Select All** and **Deselect All** controls to Suggested Rules previews.\n- Added a mobile panel menu button so operators can open the Home Assistant sidebar when edge-swipe is blocked by the panel.\n- Preserved horizontal table scroll during alarm, history, rules, and suggested-rule refreshes so wide tables stay on the inspected columns.\n- Bumped the frontend cache-busting version and package metadata for the new release.\n\n## What's New in v1.0.9\n\n- Added resizable columns to the alarm, history, rules, and suggested-rule listings.\n- Added a 2-second delay before new unacknowledged alarms receive full DCS row coloring, reducing transient visual noise.\n- Throttled browser and media-player horn output so repeated Home Assistant refreshes or alarm floods do not stack noisy tones.\n- Bumped the frontend cache-busting version and package metadata for the new release.\n\n## What's New in v1.0.8\n\n- Added **Suggested Rules** in the panel Rules tab.\n- Suggested rules can create high-consumption, low-voltage, high-voltage, high solar-water temperature, and unavailable-sensor alarms.\n- Added full-row DCS-style alarm colors, with acknowledged alarms shown in neutral gray.\n- Added event-driven alarm refresh so new alarms appear faster than the polling fallback.\n- Fixed Rules tab form inputs being cleared by automatic refresh while an operator is typing.\n- Bumped the frontend cache-busting version to force Home Assistant browsers to load the new panel bundle.\n\n## Installation\n\n[![Open your Home Assistant instance and open this repository inside HACS.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=AlRiachi\u0026repository=industrial-alarm-panel\u0026category=integration)\n\n### HACS\n\n1. Add this repository as a HACS custom repository with category `Integration`:\n\n   ```text\n   https://github.com/AlRiachi/industrial-alarm-panel\n   ```\n\n2. Install **Industrial Alarm Panel** from HACS.\n3. Restart Home Assistant.\n4. Go to **Settings \u003e Devices \u0026 services \u003e Add integration** and search for **Industrial Alarm Panel**.\n\nAfter upgrading through HACS, restart Home Assistant again. If the sidebar panel was already open, hard refresh the browser with `Ctrl+Shift+R`.\n\nThe repository follows HACS integration layout rules: all runtime files are under `custom_components/industrial_alarm_panel`, with a root `hacs.json`, GitHub releases, and one integration directory under `custom_components`.\n\nSee [INSTALLATION.md](INSTALLATION.md) for manual installation, media-player sound setup, and a test rule.\n\n## Brand Assets\n\nThis repository includes local Home Assistant brand assets in `custom_components/industrial_alarm_panel/brand/`:\n\n- `icon.png` and `dark_icon.png`\n- `logo.png` and `dark_logo.png`\n\nHome Assistant 2026.3 and newer can serve local brand assets for custom integrations. Older Home Assistant versions still run the integration, but may not show the local icon/logo in all UI surfaces.\n\n## Entities\n\nGlobal entities include:\n\n- `sensor.industrial_alarm_panel_active_count`\n- `sensor.industrial_alarm_panel_unacknowledged_count`\n- `sensor.industrial_alarm_panel_critical_count`\n- `sensor.industrial_alarm_panel_high_count`\n- `sensor.industrial_alarm_panel_last_alarm`\n- `sensor.industrial_alarm_panel_last_event`\n- `binary_sensor.industrial_alarm_panel_any_active`\n- `binary_sensor.industrial_alarm_panel_any_unacknowledged`\n- `binary_sensor.industrial_alarm_panel_horn_active`\n- `switch.industrial_alarm_panel_sound_enabled`\n- `button.industrial_alarm_panel_acknowledge_all`\n- `button.industrial_alarm_panel_silence_horn`\n- `button.industrial_alarm_panel_unsilence_horn`\n- `button.industrial_alarm_panel_test_sound`\n- `select.industrial_alarm_panel_filter_priority`\n- `number.industrial_alarm_panel_history_retention_days`\n\nEvery stored rule also gets a binary alarm sensor and action buttons after the integration reloads.\n\n## Rule Creation\n\nCreate and manage rules from **Developer Tools \u003e Services**, automations, scripts, or the panel's rule editor.\n\nRules use stable Home Assistant `entity_id` values. For numeric range alarms, create two rules: one `below` rule and one `above` rule.\n\n### Suggested Rules\n\nOpen **Industrial Alarms \u003e Rules \u003e Suggested Rules** and click **Preview Suggested Rules** to scan current Home Assistant `sensor.*` entities before creating anything. Select the suggestions you want, then click **Create Selected**. **Create All** is still available after preview, but it asks for confirmation and shows the estimated Home Assistant entity count.\n\nDefault suggested thresholds:\n\n- `High W`: `2000 W` for power/high-consumption sensors\n- `Low V`: `207 V`\n- `High V`: `253 V`\n- `Solar C`: `75 C` for solar water/tank/boiler temperature sensors\n\nThe generator detects candidates from `device_class`, unit of measurement, entity ID, and friendly name. It skips generated rule IDs that already exist so repeated previews or creates do not duplicate rules. Generated suggested rules use IDs beginning with `auto_`.\n\nIf too many suggested rules were created, use **Remove Auto-Generated Rules** in the same section. It removes stored `auto_` rules and the per-rule alarm/button entities created by this integration, but it does not remove the original source sensors. For manual cleanup, select rows in the Rules table and click **Delete Selected**.\n\n### Rule Fields\n\nCommon fields:\n\n- `id`: stable rule ID. Keep it lowercase and unique.\n- `entity_id`: source entity to monitor.\n- `name`: operator-facing alarm name.\n- `tag`: short DCS-style tag.\n- `area`: room, plant area, or system area.\n- `system`: equipment group, such as `SOFAR Inverter`, `Grid`, or `Electric Heater`.\n- `condition`: one of `above`, `below`, `equal`, `not_equal`, `contains`, `is_on`, `is_off`, `state_changed`, `unavailable`, `unavailable_for`, `unknown_for`, `manual`.\n- `threshold`: numeric value for `above` and `below`, or expected text for text conditions.\n- `deadband`: hysteresis for numeric alarms.\n- `priority`: `critical`, `high`, `medium`, `low`, `info`, or `status`.\n- `instructions`: short operator guidance shown in the panel.\n\nOptional fields include `requires_ack`, `audible`, `delay_on_seconds`, `delay_off_seconds`, `show_when_cleared`, and `shelving_allowed`.\n\n### High Temperature Rule\n\nCreate a rule from Developer Tools \u003e Services:\n\n```yaml\nservice: industrial_alarm_panel.create_rule\ndata:\n  rule:\n    id: inverter_high_temp\n    entity_id: sensor.inverter_temperature\n    name: Inverter High Temperature\n    tag: INV-TEMP-HH\n    area: Solar Inverter\n    system: PV\n    condition: above\n    threshold: 75\n    deadband: 2\n    priority: critical\n    requires_ack: true\n    audible: true\n    delay_on_seconds: 5\n    delay_off_seconds: 10\n    instructions: Check inverter ventilation, fans, ambient temperature, and loading.\n```\n\n### Voltage Range Rules\n\n```yaml\nservice: industrial_alarm_panel.create_rule\ndata:\n  rule:\n    id: grid_phase_a_voltage_low\n    entity_id: sensor.shellyem3_e8db84d68e3c_channel_a_voltage\n    name: Grid Phase A Voltage Low\n    tag: GRID-A-V-LOW\n    area: Electrical\n    system: Grid Meter\n    condition: below\n    threshold: 207\n    deadband: 3\n    priority: high\n    instructions: Check Phase A supply voltage and upstream breaker or utility condition.\n```\n\n```yaml\nservice: industrial_alarm_panel.create_rule\ndata:\n  rule:\n    id: grid_phase_a_voltage_high\n    entity_id: sensor.shellyem3_e8db84d68e3c_channel_a_voltage\n    name: Grid Phase A Voltage High\n    tag: GRID-A-V-HIGH\n    area: Electrical\n    system: Grid Meter\n    condition: above\n    threshold: 253\n    deadband: 3\n    priority: high\n    instructions: Check Phase A supply voltage and utility condition.\n```\n\n### Binary Problem Rule\n\n```yaml\nservice: industrial_alarm_panel.create_rule\ndata:\n  rule:\n    id: electric_heater_overheating\n    entity_id: binary_sensor.shellyplus1pm_c4d8d55505a0_switch_0_overheating\n    name: Electric Heater Overheating\n    tag: EHEATER-OVERTEMP\n    area: Electrical\n    system: Electric Heater\n    condition: is_on\n    priority: critical\n    instructions: Turn off heater circuit if safe and inspect the load before re-enabling.\n```\n\n### Starter Alarm Ideas\n\nGood first rules usually monitor:\n\n- inverter native fault words, for example SOFAR fault registers `\u003e 0`\n- grid voltage low/high, for example `\u003c 207 V` and `\u003e 253 V` on 230 V nominal systems\n- grid frequency low/high, for example `\u003c 49.5 Hz` and `\u003e 50.5 Hz`\n- inverter heatsink or cabinet temperature high\n- PV insulation resistance low\n- solar heater water temperature high\n- built-in problem binary sensors such as overheating, overcurrent, overpower, or overvoltage\n- Home Assistant host power problem sensors\n- internet connectivity loss if cloud/mobile notification delivery matters\n\n## Services\n\nThe integration registers:\n\n- `industrial_alarm_panel.acknowledge_alarm`\n- `industrial_alarm_panel.acknowledge_all`\n- `industrial_alarm_panel.silence_horn`\n- `industrial_alarm_panel.unsilence_horn`\n- `industrial_alarm_panel.shelve_alarm`\n- `industrial_alarm_panel.unshelve_alarm`\n- `industrial_alarm_panel.disable_alarm`\n- `industrial_alarm_panel.enable_alarm`\n- `industrial_alarm_panel.create_rule`\n- `industrial_alarm_panel.update_rule`\n- `industrial_alarm_panel.delete_rule`\n- `industrial_alarm_panel.test_sound`\n- `industrial_alarm_panel.export_history`\n\nSilence only stops horn output. Acknowledgement changes the alarm lifecycle state.\nShelving is temporary. In the panel, choose a **Shelve for** preset before clicking a row's **Shelve** button. In service calls, set `duration_minutes`; day-based shelves use minute values such as `1440` for 1 day and `10080` for 7 days.\n\n## Sound\n\nBrowser sound is generated in the panel with Web Audio after the operator clicks **Enable Alarm Sound**. Media-player output uses Home Assistant `media_player.play_media` with files expected at:\n\n```text\n/config/www/industrial_alarm_panel/sounds/\n```\n\nDefault filenames are `critical.mp3`, `high.mp3`, `medium.mp3`, `low.mp3`, and `info.mp3`.\n\n## Storage\n\nRules are stored in Home Assistant storage with key `industrial_alarm_panel.rules`.\nRuntime alarm states are stored with key `industrial_alarm_panel.state`.\nHistory is stored in `/config/industrial_alarm_panel_history.db`.\n\n## Troubleshooting\n\n- If `/industrial-alarms` is blank after an update, restart Home Assistant and hard refresh the browser with `Ctrl+Shift+R`.\n- If a newly created rule does not show as an entity yet, wait for the integration reload to finish or restart Home Assistant.\n- If the horn does not play in the browser, click **Enable Alarm Sound** in the panel. Browsers block audio until a user gesture.\n- If media-player sound does not play, confirm your MP3 files exist under `/config/www/industrial_alarm_panel/sounds/`.\n- Check **Settings \u003e System \u003e Logs** for `industrial_alarm_panel` errors.\n\n## Reporting Issues\n\nBefore opening an issue:\n\n1. Update to the latest release.\n2. Restart Home Assistant.\n3. Reproduce the problem.\n4. Check Home Assistant logs for `industrial_alarm_panel`.\n\nOpen a GitHub issue here:\n\n```text\nhttps://github.com/AlRiachi/industrial-alarm-panel/issues/new/choose\n```\n\nPlease include:\n\n- Home Assistant version\n- Industrial Alarm Panel version\n- install method, usually HACS custom repository\n- browser and device if the issue is panel-related\n- exact rule YAML or service data if the issue is rule-related\n- relevant log lines and screenshots\n\nSecurity issues should not be reported in public issues. See [SECURITY.md](SECURITY.md).\n\n## Contributing\n\nPull requests are welcome. Keep changes focused, include tests for behavioral changes, and run:\n\n```bash\npython3 -m unittest discover -s tests -v\nnode --check custom_components/industrial_alarm_panel/frontend/dist/industrial-alarm-panel.js\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for repository workflow and support expectations.\n\n## Development\n\nRuntime dependencies are provided by Home Assistant. The root `requirements.txt` documents that there are no extra runtime Python packages.\n\nRun the pure core tests without Home Assistant installed:\n\n```bash\npython3 -m unittest discover -s tests -v\n```\n\nFor full Home Assistant integration tests, install `requirements_test.txt` in a virtual environment and run pytest.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falriachi%2Findustrial-alarm-panel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falriachi%2Findustrial-alarm-panel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falriachi%2Findustrial-alarm-panel/lists"}