From 4c87928ca811716f4cff40fb04caf000de8224e4 Mon Sep 17 00:00:00 2001 From: Sean McGrath Date: Thu, 28 Jul 2022 17:11:29 +1200 Subject: [PATCH] Add paradoxalarminterface chart Signed-off-by: Sean McGrath --- .../stable/paradoxalarminterface/.helmignore | 26 ++ .../stable/paradoxalarminterface/Chart.yaml | 27 ++ charts/stable/paradoxalarminterface/README.md | 247 ++++++++++++ .../README_CONFIG.md.gotmpl | 9 + .../paradoxalarminterface/templates/NOTES.txt | 1 + .../templates/common.yaml | 16 + .../templates/configmap.yaml | 65 ++++ .../stable/paradoxalarminterface/values.yaml | 359 ++++++++++++++++++ 8 files changed, 750 insertions(+) create mode 100644 charts/stable/paradoxalarminterface/.helmignore create mode 100644 charts/stable/paradoxalarminterface/Chart.yaml create mode 100644 charts/stable/paradoxalarminterface/README.md create mode 100644 charts/stable/paradoxalarminterface/README_CONFIG.md.gotmpl create mode 100644 charts/stable/paradoxalarminterface/templates/NOTES.txt create mode 100644 charts/stable/paradoxalarminterface/templates/common.yaml create mode 100644 charts/stable/paradoxalarminterface/templates/configmap.yaml create mode 100644 charts/stable/paradoxalarminterface/values.yaml diff --git a/charts/stable/paradoxalarminterface/.helmignore b/charts/stable/paradoxalarminterface/.helmignore new file mode 100644 index 00000000..4379e2b3 --- /dev/null +++ b/charts/stable/paradoxalarminterface/.helmignore @@ -0,0 +1,26 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl diff --git a/charts/stable/paradoxalarminterface/Chart.yaml b/charts/stable/paradoxalarminterface/Chart.yaml new file mode 100644 index 00000000..75db1a2b --- /dev/null +++ b/charts/stable/paradoxalarminterface/Chart.yaml @@ -0,0 +1,27 @@ +apiVersion: v2 +appVersion: 3.0.1 +description: Middleware that aims to connect to a Paradox Alarm panel, exposing the interface for monitoring and control via several technologies. +name: paradoxalarminterface +version: 1.0.9 +kubeVersion: ">=1.16.0-0" +keywords: + - paradox + - pai + - alarm + - home-assistant + - mqtt +home: https://github.com/k8s-at-home/charts/tree/master/charts/stable/paradoxalarminterface +icon: https://raw.githubusercontent.com/ParadoxAlarmInterface/pai/master/docs/pai_logo.png +sources: + - https://github.com/ParadoxAlarmInterface/pai +maintainers: + - name: wipash + email: paichart@dont.ltd +dependencies: + - name: common + repository: https://library-charts.k8s-at-home.com + version: 4.4.2 +annotations: + artifacthub.io/changes: | + - kind: added + description: Initial version diff --git a/charts/stable/paradoxalarminterface/README.md b/charts/stable/paradoxalarminterface/README.md new file mode 100644 index 00000000..8c133574 --- /dev/null +++ b/charts/stable/paradoxalarminterface/README.md @@ -0,0 +1,247 @@ +# paradoxalarminterface + +![Version: 1.0.9](https://img.shields.io/badge/Version-1.0.9-informational?style=flat-square) ![AppVersion: 3.0.1](https://img.shields.io/badge/AppVersion-3.0.1-informational?style=flat-square) + +Middleware that aims to connect to a Paradox Alarm panel, exposing the interface for monitoring and control via several technologies. + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/k8s-at-home/charts/issues/new/choose)** + +## Source Code + +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://library-charts.k8s-at-home.com | common | 4.4.2 | + +## TL;DR + +```console +helm repo add k8s-at-home https://k8s-at-home.com/charts/ +helm repo update +helm install paradoxalarminterface k8s-at-home/paradoxalarminterface +``` + +## Installing the Chart + +To install the chart with the release name `paradoxalarminterface` + +```console +helm install paradoxalarminterface k8s-at-home/paradoxalarminterface +``` + +## Uninstalling the Chart + +To uninstall the `paradoxalarminterface` deployment + +```console +helm uninstall paradoxalarminterface +``` + +The command removes all the Kubernetes components associated with the chart **including persistent volumes** and deletes the release. + +## Configuration + +Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install paradoxalarminterface \ + --set env.TZ="America/New York" \ + k8s-at-home/paradoxalarminterface +``` + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install paradoxalarminterface k8s-at-home/paradoxalarminterface -f values.yaml +``` + +## Custom configuration + +N/A + +## Values + +**Important**: When deploying an application Helm chart you can add more values from our common library chart [here](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common) + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| config.commandAlias | object | `{"arm":"partition all arm","disarm":"partition all disarm"}` | alias for commands through text based interfaces | +| config.connectionType | string | `"Serial"` | Serial or IP Connection Type | +| config.developmentDumpMemory | bool | `false` | Development | +| config.dummyEventFilters | list | `[]` | | +| config.dummyInterfaceEnable | bool | `false` | Dummy Interface for testing | +| config.dummyMinEventLevel | string | `"DEBUG"` | | +| config.gsmAllowEvents | list | `[]` | Event filtering using regexp. Cannot be used together with gsmEventFilters List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] eg r".*" | +| config.gsmContacts | list | `[]` | Contacts that are allowed to control the panel and receive notifications through SMS | +| config.gsmEnable | bool | `false` | | +| config.gsmEventFilters | list | `[]` | Event filtering by tags: list of tags to include or exclude see hardware event.py for tag list eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" | +| config.gsmIgnoreEvents | list | `[]` | Same as gsmAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" | +| config.gsmMinEventLevel | string | `"CRITICAL"` | | +| config.gsmModemBaudrate | int | `115200` | Baudrate of the GSM modem | +| config.gsmModemPort | string | `""` | Pathname of the serial port | +| config.homeassistantNotificationsAllowEvents | list | `[]` | Event filtering using regexp. Cannot be used together with homeassistantNotificationsEventFilters List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] eg r".*" | +| config.homeassistantNotificationsEnable | bool | `false` | Home Assistant Notifications (HASS.io required) | +| config.homeassistantNotificationsEventFilters | list | `[]` | Event filtering by tags: list of tags to include or exclude see hardware event.py for tag list eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" | +| config.homeassistantNotificationsIgnoreEvents | list | `[]` | Same as homeassistantNotificationsAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" | +| config.homeassistantNotificationsMinEventLevel | string | `"INFO"` | | +| config.homeassistantNotificationsNotifierName | string | `"notify"` | | +| config.homeassistantPublishPartitionProperties[0] | string | `"target_state"` | | +| config.homeassistantPublishPartitionProperties[1] | string | `"current_state"` | | +| config.homeassistantPublishZoneProperties[0] | string | `"open"` | | +| config.homeassistantPublishZoneProperties[1] | string | `"tamper"` | | +| config.ipConnectionBare | bool | `false` | No not expect an IP150 module. Used this for base Serial over TCP tunnels | +| config.ipConnectionEmail | string | `nil` | Email registered in the site | +| config.ipConnectionHost | string | `"127.0.0.1"` | IP Module address when using direct IP Connection | +| config.ipConnectionPanelSerial | string | `nil` | Use a specific panel. Set it to None to use the first | +| config.ipConnectionPassword | string | `"paradox"` | IP Module password. "paradox" is default. | +| config.ipConnectionPort | int | `10000` | IP Module port when using direct IP Connection | +| config.ipConnectionSiteid | string | `nil` | SITE ID. IF defined, connection will be made through this method. | +| config.ipInterfaceBindAddress | string | `"0.0.0.0"` | | +| config.ipInterfaceBindPort | int | `10000` | | +| config.ipInterfaceEnable | bool | `false` | IP Socket Interface for remote PAI instance or Babyware | +| config.ipInterfacePassword | string | `"paradox"` | | +| config.keepAliveInterval | int | `10` | Interval between status updates in seconds | +| config.labelEncoding | string | `"paradox-en"` | Encoding to use when decoding labels. paradox-* or https://docs.python.org/3/library/codecs.html#standard-encodings | +| config.labelRefreshInterval | int | `900` | Interval between refresh of labels in seconds | +| config.limits.door | list | `[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]` | Doors to consider | +| config.limits.keypad | list | `[1,2,3,4,5,6,7,8,9]` | Keypads to monitor | +| config.limits.module | list | `[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]` | Buses to monitor | +| config.limits.partition | list | `[1,2]` | Partitions to monitor and control | +| config.limits.pgm | list | `[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]` | PGMs to monitor and control | +| config.limits.repeater | list | `[1,2,3,4,5,6,7,8,9]` | Repeaters to monitor | +| config.limits.user | list | `[1,2,3,4]` | Users to consider | +| config.limits.zone | list | `[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]` | Zones to monitor and control | +| config.loggingDumpEvents | bool | `false` | Dump Event details to log | +| config.loggingDumpMessages | bool | `false` | Dump Messages to log | +| config.loggingDumpPackets | bool | `false` | Dump RAW Packets to log | +| config.loggingDumpStatus | bool | `false` | Dump Status to log | +| config.loggingFile | string | `nil` | Log file path | +| config.loggingFileMaxFiles | int | `2` | Max old log files to keep | +| config.loggingFileMaxSize | int | `10` | Max log file size in MB | +| config.loggingLevelConsole | int | `20` | Console logging level; CRITICAL: 50, ERROR: 40, WARNING: 30, INFO: 20, DEBUG: 10 | +| config.loggingLevelFile | int | `40` | File logging level; CRITICAL: 50, ERROR: 40, WARNING: 30, INFO: 20, DEBUG: 10 | +| config.mqttBaseTopic | string | `"paradox"` | Root of all topics | +| config.mqttBindAddress | string | `""` | MQTT Client bind address. Default: "" - pick automatically | +| config.mqttBindPort | int | `0` | MQTT Client bind port. Default: 0 - pick automatically | +| config.mqttBusTopic | string | `"buses"` | Base for buses states | +| config.mqttCommandAlias | object | `{"armed_away":"arm","armed_home":"arm_stay","armed_night":"arm_sleep","disarmed":"disarm"}` | For homebridge | +| config.mqttCommandStatusTopic | string | `"command_status"` | Topic for command statuses | +| config.mqttControlTopic | string | `"control"` | Base for control of other elements (ROOT/CONTROL/TYPE) | +| config.mqttDashPublish | bool | `false` | Publish dashboard app | +| config.mqttDashTemplate | string | `"/etc/pai/mqtt_dash.txt"` | | +| config.mqttDashTopic | string | `"metrics/exchange/pai"` | | +| config.mqttDefinitionsTopic | string | `"control"` | Base for definitions | +| config.mqttDoorTopic | string | `"doors"` | Topic for door events | +| config.mqttEnable | bool | `false` | Enable MQTT Interface | +| config.mqttEventsTopic | string | `"events"` | Base for events | +| config.mqttHomeassistantAutodiscoveryEnable | bool | `false` | MQTT Home Assistant Auto Discovery | +| config.mqttHomeassistantCode | string | `nil` | | +| config.mqttHomeassistantDiscoveryPrefix | string | `"homeassistant"` | Prefix for Holme Assistant discovery | +| config.mqttHost | string | `"127.0.0.1"` | Hostname or address | +| config.mqttInterfaceTopic | string | `"interface"` | Topic for interfaces | +| config.mqttKeepalive | int | `60` | Keep alive | +| config.mqttKeypadTopic | string | `"keypads"` | Topic for keypad events | +| config.mqttModuleTopic | string | `"bus-module"` | Base for bus module states | +| config.mqttNotificationsTopic | string | `"notifications"` | Topic for notifications | +| config.mqttOutputTopic | string | `"outputs"` | Topic for output events | +| config.mqttPartitionTopic | string | `"partitions"` | Base for partition states | +| config.mqttPassword | string | `nil` | MQTT Password | +| config.mqttPort | int | `1883` | TCP Port (TLS port if mqttTlsCertPath is set) | +| config.mqttProtocol | string | `"3.1.1"` | Protocol to use ("3.1", "3.1.1" or "5") | +| config.mqttPublishCommandStatus | bool | `false` | Publish command statuses to MQTT | +| config.mqttPublishDefinitions | bool | `false` | Publish definitions of partitions/zones/users to MQTT. Not required in most cases. | +| config.mqttPublishRawEvents | bool | `true` | | +| config.mqttQos | int | `0` | Publish messages with QOS level (0 - fire and forget, 1 - at least once, 2 - exactly once) | +| config.mqttRawTopic | string | `"raw"` | Topic for raw events | +| config.mqttRepeaterTopic | string | `"repeaters"` | Base for repeater states | +| config.mqttRepublishInterval | int | `43200` | Interval for republishing all data | +| config.mqttRetain | bool | `true` | Publish messages with Retain | +| config.mqttSendPanicTopic | string | `"panic"` | | +| config.mqttStatesTopic | string | `"states"` | Topic for state events | +| config.mqttSystemTopic | string | `"system"` | Base for panel states | +| config.mqttTlsCertPath | string | `nil` | Path to ca cert (/etc/pai/certs/ca.pem), if you want TLS | +| config.mqttToggleCodes | object | `{}` | | +| config.mqttTransport | string | `"tcp"` | Transport to use ("tcp" or "websockets") | +| config.mqttUseNumericStates | bool | `false` | use 0 and 1 instead of true and false | +| config.mqttUserTopic | string | `"users"` | Base for user states | +| config.mqttUsername | string | `nil` | MQTT Username for authentication | +| config.mqttZoneTopic | string | `"zones"` | Base for zone states | +| config.outputPulseDuration | int | `1` | Duration of a PGM pulse in seconds | +| config.password | string | `"0000"` | PC Password. Set to None if Panel has no Password. In Babyware: Right click on your panel -> Properties -> PC Communication (Babyware) -> PC Communication (Babyware) Tab. | +| config.powerUpdateInterval | int | `60` | Interval between updates of the battery, DC and VDC voltages | +| config.pushPowerUpdateWithoutChange | bool | `true` | Always notify interfaces of power changes | +| config.pushUpdateWithoutChange | bool | `false` | Always notify interfaces of all changes | +| config.pushbulletAllowEvents | list | `[]` | Event filtering using regexp. Cannot be used together with pushbulletEventFilters List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] eg r".*" | +| config.pushbulletContacts | list | `[]` | Pushbullet user identifiers for notifications and interaction | +| config.pushbulletEnable | bool | `false` | | +| config.pushbulletEventFilters | list | `[]` | Event filtering by tags list of tags to include or exclude see hardware event.py for tag list eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" | +| config.pushbulletIgnoreEvents | list | `[]` | Same as previous but to ignore some specific events that matched in _ALLOW_EVENTS eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" | +| config.pushbulletKey | string | `""` | Authentication key used for Pushbullet | +| config.pushbulletMinEventLevel | string | `"INFO"` | | +| config.pushoverAllowEvents | list | `[]` | Event filtering using regexp. Cannot be used together with pushoverEventFilters List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] eg r".*" | +| config.pushoverBroadcastKeys | list | `[]` | Pushover user or group keys to broadcast notifications to @default [{user_key: "", devices: "*"}] | +| config.pushoverEnable | bool | `false` | | +| config.pushoverEventFilters | list | `[]` | Event filtering by tags: list of tags to include or exclude see hardware event.py for tag list eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" | +| config.pushoverIgnoreEvents | list | `[]` | Same as pushoverAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" | +| config.pushoverKey | string | `""` | Application token for Pushover | +| config.pushoverMinEventLevel | string | `"INFO"` | | +| config.serialBaud | int | `9600` | 9600 for SP/MG. For EVO: Use 38400(default setting) or 57600 | +| config.serialPort | string | `"/dev/ttyS1"` | Pathname of the Serial Port | +| config.signalAllowEvents | list | `[]` | Event filtering using regexp. Cannot be used together with signalEventFilters List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] eg r".*" | +| config.signalContacts | list | `[]` | Contacts that are allowed to control the panel and receive notifications through Signal | +| config.signalEnable | bool | `false` | | +| config.signalEventFilters | list | `[]` | Event filtering by tags: list of tags to include or exclude see hardware event.py for tag list eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" | +| config.signalIgnoreEvents | list | `[]` | Same as signalAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" | +| config.signalMinEventLevel | string | `"INFO"` | | +| config.syncTime | bool | `false` | Update panel time periodically when time drifts more than SYNC_TIME_MIN_DRIFT | +| config.syncTimeMinDrift | int | `60` | Minimum time drift in seconds to initiate time sync | +| env | object | See below | environment variables. See more environment variables in the [paradoxalarminterface documentation](https://paradoxalarminterface.org/docs). | +| env.TZ | string | `"UTC"` | Set the container timezone | +| image.pullPolicy | string | `"IfNotPresent"` | image pull policy | +| image.repository | string | `"paradoxalarminterface/pai"` | image repository | +| image.tag | string | chart.appVersion | image tag | +| ingress.main | object | See values.yaml | Enable and configure ingress settings for the chart under this key. | +| persistence | object | See values.yaml | Configure persistence settings for the chart under this key. | +| service | object | See values.yaml | Configures service settings for the chart. | +| service.main.enabled | bool | `false` | Main service is disabled, only enable if you want to connect Babyware | +| service.main.ports.babyware | object | `{"enabled":true,"port":10000,"protocol":"TCP"}` | Port for Babyware connection. Set config.ipInterfaceEnable to true if you enable this | + +## Changelog + +### Version 1.0.9 + +#### Added + +* Initial version + +#### Changed + +N/A + +#### Fixed + +N/A + +### Older versions + +A historical overview of changes can be found on [ArtifactHUB](https://artifacthub.io/packages/helm/k8s-at-home/paradoxalarminterface?modal=changelog) + +## Support + +- See the [Docs](https://docs.k8s-at-home.com/our-helm-charts/getting-started/) +- Open an [issue](https://github.com/k8s-at-home/charts/issues/new/choose) +- Ask a [question](https://github.com/k8s-at-home/organization/discussions) +- Join our [Discord](https://discord.gg/sTMX7Vh) community + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v0.1.1](https://github.com/k8s-at-home/helm-docs/releases/v0.1.1) diff --git a/charts/stable/paradoxalarminterface/README_CONFIG.md.gotmpl b/charts/stable/paradoxalarminterface/README_CONFIG.md.gotmpl new file mode 100644 index 00000000..e93d80bf --- /dev/null +++ b/charts/stable/paradoxalarminterface/README_CONFIG.md.gotmpl @@ -0,0 +1,9 @@ +{{- define "custom.custom.configuration.header" -}} +## Custom configuration +{{- end -}} + +{{- define "custom.custom.configuration" -}} +{{ template "custom.custom.configuration.header" . }} + +N/A +{{- end -}} diff --git a/charts/stable/paradoxalarminterface/templates/NOTES.txt b/charts/stable/paradoxalarminterface/templates/NOTES.txt new file mode 100644 index 00000000..90f7b653 --- /dev/null +++ b/charts/stable/paradoxalarminterface/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "common.notes.defaultNotes" . -}} diff --git a/charts/stable/paradoxalarminterface/templates/common.yaml b/charts/stable/paradoxalarminterface/templates/common.yaml new file mode 100644 index 00000000..05c645aa --- /dev/null +++ b/charts/stable/paradoxalarminterface/templates/common.yaml @@ -0,0 +1,16 @@ +{{/* Make sure all variables are set properly */}} +{{- include "common.values.setup" . }} + +{{/* Append the configMap volume to the volumes */}} +{{- define "paradoxalarminterface.configVolume" -}} +enabled: "true" +mountPath: "/etc/pai" +type: "custom" +volumeSpec: + configMap: + name: {{ include "common.names.fullname" . }}-config +{{- end -}} +{{- $_ := set .Values.persistence "paradoxalarminterface-config" (include "paradoxalarminterface.configVolume" . | fromYaml) -}} + +{{/* Render the templates */}} +{{ include "common.all" . }} diff --git a/charts/stable/paradoxalarminterface/templates/configmap.yaml b/charts/stable/paradoxalarminterface/templates/configmap.yaml new file mode 100644 index 00000000..8dc266c1 --- /dev/null +++ b/charts/stable/paradoxalarminterface/templates/configmap.yaml @@ -0,0 +1,65 @@ +{{- include "common.values.setup" . -}} + +{{- define "paradoxalarminterface.configValueFormat" }} + {{- $value := . }} + {{- if or (kindIs "bool" $value) (eq "none" ($value | toString | lower)) -}} + {{ $value | toString | title }} + {{- else if or (kindIs "float64" $value) (hasPrefix "r\"" ($value | toString)) -}} + {{ $value }} + {{- else -}} + {{ $value | squote }} + {{- end -}} +{{- end }} + +{{- define "paradoxalarminterface.mapFormat" }} + {{- $value := index . 0 }} + {{- $ind := index . 1 }} + {{- range $key, $value := $value }} + {{- if $value }} +{{ $key | squote | indent ($ind | int) }}: {{ include "paradoxalarminterface.configFormat" (list $value (add $ind 4)) }}, + {{- end }} + {{- end }} +{{- end }} + +{{- define "paradoxalarminterface.sliceFormat" }} + {{- $value := index . 0 }} + {{- $ind := index . 1 }} + {{- range $i, $value := $value }} + {{- if $i }},{{ end }}{{- include "paradoxalarminterface.configFormat" (list $value (add $ind 4)) }} + {{- end }} +{{- end }} + +{{- define "paradoxalarminterface.configFormat" }} +{{- $value := index . 0 }} +{{- $ind := index . 1 }} +{{- if kindIs "map" $value -}} + {{ "{" }} + {{- include "paradoxalarminterface.mapFormat" (list $value (add $ind 4)) }} + {{- "}" | nindent ($ind | int) }} +{{- else if kindIs "slice" $value -}} + {{ "[" }} + {{- include "paradoxalarminterface.sliceFormat" (list $value 4) }} + {{- "]" }} +{{- else }} + {{- include "paradoxalarminterface.configValueFormat" $value }} +{{- end }} +{{- end }} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "common.names.fullname" . }}-config + labels: + {{- include "common.labels" . | nindent 4 }} +data: + pai.conf: | + ### + import logging + ### +{{- range $key := (keys $.Values.config | uniq | sortAlpha) }} + {{- $value := index $.Values.config $key }} + {{- if $value }} + {{ $key | snakecase | upper }} = {{ include "paradoxalarminterface.configFormat" (list $value 4) }} + {{- end }} +{{- end }} diff --git a/charts/stable/paradoxalarminterface/values.yaml b/charts/stable/paradoxalarminterface/values.yaml new file mode 100644 index 00000000..ac963f09 --- /dev/null +++ b/charts/stable/paradoxalarminterface/values.yaml @@ -0,0 +1,359 @@ +# +# -- IMPORTANT NOTE +# +# -- This chart inherits from our common library chart. You can check the default values/options here: +# -- https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml +# + +image: + # -- image repository + repository: paradoxalarminterface/pai + # -- image tag + # @default -- chart.appVersion + tag: + # -- image pull policy + pullPolicy: IfNotPresent + +# -- environment variables. See more environment variables in the [paradoxalarminterface documentation](https://paradoxalarminterface.org/docs). +# @default -- See below +env: + # -- Set the container timezone + TZ: UTC + +# -- Configures service settings for the chart. +# @default -- See values.yaml +service: + main: + # -- Main service is disabled, only enable if you want to connect Babyware + enabled: false + ports: + # -- Port for Babyware connection. Set config.ipInterfaceEnable to true if you enable this + babyware: + enabled: true + port: 10000 + protocol: TCP + http: + enabled: false + +ingress: + # -- Enable and configure ingress settings for the chart under this key. + # @default -- See values.yaml + main: + enabled: false + +# -- Configure persistence settings for the chart under this key. +# @default -- See values.yaml +persistence: + {} + # -- data: + # enabled: false + # mountPath: /data + +config: + # -- Console logging level; CRITICAL: 50, ERROR: 40, WARNING: 30, INFO: 20, DEBUG: 10 + loggingLevelConsole: 20 + # -- File logging level; CRITICAL: 50, ERROR: 40, WARNING: 30, INFO: 20, DEBUG: 10 + loggingLevelFile: 40 + # -- Log file path + loggingFile: + # -- Max log file size in MB + loggingFileMaxSize: 10 + # -- Max old log files to keep + loggingFileMaxFiles: 2 + # -- Dump RAW Packets to log + loggingDumpPackets: false + # -- Dump Messages to log + loggingDumpMessages: false + # -- Dump Status to log + loggingDumpStatus: false + # -- Dump Event details to log + loggingDumpEvents: false + + # -- Development + developmentDumpMemory: false + + # -- Serial or IP Connection Type + connectionType: "Serial" + + # -- Pathname of the Serial Port + serialPort: "/dev/ttyS1" + # -- 9600 for SP/MG. For EVO: Use 38400(default setting) or 57600 + serialBaud: 9600 + + # -- IP Module address when using direct IP Connection + ipConnectionHost: "127.0.0.1" + # -- IP Module port when using direct IP Connection + ipConnectionPort: 10000 + # -- IP Module password. "paradox" is default. + ipConnectionPassword: "paradox" + # -- SITE ID. IF defined, connection will be made through this method. + ipConnectionSiteid: + # -- Email registered in the site + ipConnectionEmail: + # -- Use a specific panel. Set it to None to use the first + ipConnectionPanelSerial: + # -- No not expect an IP150 module. Used this for base Serial over TCP tunnels + ipConnectionBare: false + + # -- Interval between status updates in seconds + keepAliveInterval: 10 + + limits: + # -- Zones to monitor and control + zone: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] + # -- Users to consider + user: [1, 2, 3, 4] + # -- Doors to consider + door: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32] + # -- PGMs to monitor and control + pgm: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] + # -- Partitions to monitor and control + partition: [1, 2] + # -- Buses to monitor + module: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] + # -- Repeaters to monitor + repeater: [1, 2, 3, 4, 5, 6, 7, 8, 9] + # -- Keypads to monitor + keypad: [1, 2, 3, 4, 5, 6, 7, 8, 9] + + # -- Encoding to use when decoding labels. paradox-* or https://docs.python.org/3/library/codecs.html#standard-encodings + labelEncoding: "paradox-en" + # -- Interval between refresh of labels in seconds + labelRefreshInterval: 900 + # -- Duration of a PGM pulse in seconds + outputPulseDuration: 1 + # -- Update panel time periodically when time drifts more than SYNC_TIME_MIN_DRIFT + syncTime: false + # -- Minimum time drift in seconds to initiate time sync + syncTimeMinDrift: 60 + # -- PC Password. Set to None if Panel has no Password. + # In Babyware: Right click on your panel -> Properties -> PC Communication (Babyware) -> + # PC Communication (Babyware) Tab. + password: "0000" + + # -- Interval between updates of the battery, DC and VDC voltages + powerUpdateInterval: 60 + # -- Always notify interfaces of power changes + pushPowerUpdateWithoutChange: true + # -- Always notify interfaces of all changes + pushUpdateWithoutChange: false + + # -- Enable MQTT Interface + mqttEnable: false + # -- Hostname or address + mqttHost: "127.0.0.1" + # -- TCP Port (TLS port if mqttTlsCertPath is set) + mqttPort: 1883 + # -- Transport to use ("tcp" or "websockets") + mqttTransport: "tcp" + # -- Protocol to use ("3.1", "3.1.1" or "5") + mqttProtocol: "3.1.1" + # -- Publish messages with QOS level (0 - fire and forget, 1 - at least once, 2 - exactly once) + mqttQos: 0 + # -- Path to ca cert (/etc/pai/certs/ca.pem), if you want TLS + mqttTlsCertPath: + # -- Keep alive + mqttKeepalive: 60 + # -- MQTT Username for authentication + mqttUsername: + # -- MQTT Password + mqttPassword: + # -- Publish messages with Retain + mqttRetain: true + # -- MQTT Client bind address. Default: "" - pick automatically + mqttBindAddress: "" + # -- MQTT Client bind port. Default: 0 - pick automatically + mqttBindPort: 0 + # -- Interval for republishing all data + mqttRepublishInterval: 43200 + # -- Publish definitions of partitions/zones/users to MQTT. Not required in most cases. + mqttPublishDefinitions: false + + # -- Root of all topics + mqttBaseTopic: "paradox" + # -- Base for zone states + mqttZoneTopic: "zones" + # -- Base for partition states + mqttPartitionTopic: "partitions" + # -- Base for buses states + mqttBusTopic: "buses" + # -- Base for bus module states + mqttModuleTopic: "bus-module" + # -- Base for panel states + mqttSystemTopic: "system" + # -- Base for repeater states + mqttRepeaterTopic: "repeaters" + # -- Base for user states + mqttUserTopic: "users" + # -- Base for events + mqttEventsTopic: "events" + # -- Base for control of other elements (ROOT/CONTROL/TYPE) + mqttControlTopic: "control" + # -- Base for definitions + mqttDefinitionsTopic: "control" + # -- Prefix for Holme Assistant discovery + mqttHomeassistantDiscoveryPrefix: "homeassistant" + # -- Topic for output events + mqttOutputTopic: "outputs" + # -- Topic for door events + mqttDoorTopic: "doors" + # -- Topic for keypad events + mqttKeypadTopic: "keypads" + # -- Topic for state events + mqttStatesTopic: "states" + # -- Topic for raw events + mqttRawTopic: "raw" + + # -- Topic for notifications + mqttNotificationsTopic: "notifications" + mqttSendPanicTopic: "panic" + mqttPublishRawEvents: true + # -- Topic for interfaces + mqttInterfaceTopic: "interface" + mqttToggleCodes: {} + # -- use 0 and 1 instead of true and false + mqttUseNumericStates: false + + # -- Publish command statuses to MQTT + mqttPublishCommandStatus: false + # -- Topic for command statuses + mqttCommandStatusTopic: "command_status" + + # -- MQTT Home Assistant Auto Discovery + mqttHomeassistantAutodiscoveryEnable: false + mqttHomeassistantCode: + + # -- Publish dashboard app + mqttDashPublish: false + mqttDashTopic: "metrics/exchange/pai" + mqttDashTemplate: "/etc/pai/mqtt_dash.txt" + + # -- alias for commands through text based interfaces + commandAlias: + arm: "partition all arm" + disarm: "partition all disarm" + + # -- For homebridge + mqttCommandAlias: + armed_home: "arm_stay" + armed_night: "arm_sleep" + armed_away: "arm" + disarmed: "disarm" + + # -- Home Assistant Notifications (HASS.io required) + homeassistantNotificationsEnable: false + homeassistantNotificationsNotifierName: "notify" + homeassistantNotificationsMinEventLevel: "INFO" + homeassistantPublishPartitionProperties: + - "target_state" + - "current_state" + homeassistantPublishZoneProperties: + - "open" + - "tamper" + # -- Event filtering by tags: + # list of tags to include or exclude see hardware event.py for tag list + # eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" + homeassistantNotificationsEventFilters: [] + + # -- Event filtering using regexp. Cannot be used together with homeassistantNotificationsEventFilters + # List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] + # eg r".*" + homeassistantNotificationsAllowEvents: [] + # -- Same as homeassistantNotificationsAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS + # eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" + homeassistantNotificationsIgnoreEvents: [] + + ## -- Pushbullet + pushbulletEnable: false + # -- Authentication key used for Pushbullet + pushbulletKey: "" + # -- Pushbullet user identifiers for notifications and interaction + pushbulletContacts: [] + pushbulletMinEventLevel: "INFO" + # -- Event filtering by tags + # list of tags to include or exclude see hardware event.py for tag list + # eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" + pushbulletEventFilters: [] + + # -- Event filtering using regexp. Cannot be used together with pushbulletEventFilters + # List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] + # eg r".*" + pushbulletAllowEvents: [] + # -- Same as previous but to ignore some specific events that matched in _ALLOW_EVENTS + # eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" + pushbulletIgnoreEvents: [] + + ## -- Pushover + pushoverEnable: false + # -- Application token for Pushover + pushoverKey: "" + # -- Pushover user or group keys to broadcast notifications to + # @default [{user_key: "", devices: "*"}] + pushoverBroadcastKeys: [] + + pushoverMinEventLevel: "INFO" + # -- Event filtering by tags: + # list of tags to include or exclude see hardware event.py for tag list + # eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" + pushoverEventFilters: [] + + # -- Event filtering using regexp. Cannot be used together with pushoverEventFilters + # List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] + # eg r".*" + pushoverAllowEvents: [] + + # -- Same as pushoverAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS + # eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" + pushoverIgnoreEvents: [] + + ## -- Signal + signalEnable: false + # -- Contacts that are allowed to control the panel and receive notifications through Signal + signalContacts: [] + signalMinEventLevel: "INFO" + # -- Event filtering by tags: + # list of tags to include or exclude see hardware event.py for tag list + # eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" + signalEventFilters: [] + # -- Event filtering using regexp. Cannot be used together with signalEventFilters + # List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] + # eg r".*" + signalAllowEvents: [] + + # -- Same as signalAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS + # eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" + signalIgnoreEvents: [] + + ## -- GSM + gsmEnable: false + # -- Baudrate of the GSM modem + gsmModemBaudrate: 115200 + # -- Pathname of the serial port + gsmModemPort: "" + # -- Contacts that are allowed to control the panel and receive notifications through SMS + gsmContacts: [] + gsmMinEventLevel: "CRITICAL" + # -- Event filtering by tags: + # list of tags to include or exclude see hardware event.py for tag list + # eg "live,alarm,-restore" or "live,trouble,-clock" or "live,tamper" + gsmEventFilters: [] + + # -- Event filtering using regexp. Cannot be used together with gsmEventFilters + # List of tuples or regexp matching "type,label,property=value,property2=value" eg. [(major, minor), "zone:HOME:entry_delay=true", ...] + # eg r".*" + gsmAllowEvents: [] + + # -- Same as gsmAllowEvents but to ignore some specific events that matched in _ALLOW_EVENTS + # eg r"zone,[\w]+,no_delay=true" or r"zone,[\w]+,exit_delay=.*" + gsmIgnoreEvents: [] + + # -- IP Socket Interface for remote PAI instance or Babyware + ipInterfaceEnable: false + ipInterfaceBindAddress: "0.0.0.0" + ipInterfaceBindPort: 10000 + ipInterfacePassword: "paradox" + + # -- Dummy Interface for testing + dummyInterfaceEnable: false + dummyEventFilters: [] + dummyMinEventLevel: "DEBUG"