⬆️ zigbee2mqtt app template v2

This commit is contained in:
auricom
2023-10-28 16:20:49 +02:00
parent 7ce1a9b5ca
commit b0d53bed08
9 changed files with 96 additions and 175 deletions

View File

@@ -10,7 +10,7 @@ spec:
chart: chart:
spec: spec:
chart: app-template chart: app-template
version: 1.5.1 version: 2.0.3
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: bjw-s name: bjw-s
@@ -27,67 +27,81 @@ spec:
uninstall: uninstall:
keepHistory: false keepHistory: false
values: values:
fullnameOverride: *app controllers:
image: main:
repository: koenkk/zigbee2mqtt type: statefulset
tag: 1.33.1 annotations:
env: reloader.stakater.com/auto: "true"
TZ: "${TIMEZONE}" containers:
ZIGBEE2MQTT_DATA: /data main:
ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_DISCOVERY_TOPIC: homeassistant image:
ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_LEGACY_ENTITY_ATTRIBUTES: "true" repository: ghcr.io/koenkk/zigbee2mqtt
ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_LEGACY_TRIGGERS: "true" tag: 1.33.1
ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_STATUS_TOPIC: homeassistant/status pullPolicy: IfNotPresent
ZIGBEE2MQTT_CONFIG_ADVANCED_LAST_SEEN: ISO_8601 env:
ZIGBEE2MQTT_CONFIG_ADVANCED_LEGACY_API: "false" TZ: "${TIMEZONE}"
ZIGBEE2MQTT_CONFIG_ADVANCED_LEGACY_AVAILABILITY_PAYLOAD: "false" ZIGBEE2MQTT_DATA: /config
ZIGBEE2MQTT_CONFIG_ADVANCED_LOG_LEVEL: warn ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_DISCOVERY_TOPIC: homeassistant
ZIGBEE2MQTT_CONFIG_ADVANCED_LOG_OUTPUT: '["console"]' ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_LEGACY_ENTITY_ATTRIBUTES: "true"
ZIGBEE2MQTT_CONFIG_ADVANCED_NETWORK_KEY: "[204, 61, 75, 23, 44, 230, 24, 203, 53, 5, 248, 32, 50, 84, 44, 159]" ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_LEGACY_TRIGGERS: "true"
ZIGBEE2MQTT_CONFIG_AVAILABILITY_ACTIVE_TIMEOUT: 60 ZIGBEE2MQTT_CONFIG_ADVANCED_HOMEASSISTANT_STATUS_TOPIC: homeassistant/status
ZIGBEE2MQTT_CONFIG_AVAILABILITY_PASSIVE_TIMEOUT: 2000 ZIGBEE2MQTT_CONFIG_ADVANCED_LAST_SEEN: ISO_8601
ZIGBEE2MQTT_CONFIG_DEVICE_OPTIONS_LEGACY: "false" ZIGBEE2MQTT_CONFIG_ADVANCED_LEGACY_API: "false"
ZIGBEE2MQTT_CONFIG_DEVICE_OPTIONS_RETAIN: "true" ZIGBEE2MQTT_CONFIG_ADVANCED_LEGACY_AVAILABILITY_PAYLOAD: "false"
ZIGBEE2MQTT_CONFIG_EXPERIMENTAL_NEW_API: "true" ZIGBEE2MQTT_CONFIG_ADVANCED_LOG_LEVEL: warn
ZIGBEE2MQTT_CONFIG_FRONTEND_PORT: 8080 ZIGBEE2MQTT_CONFIG_ADVANCED_LOG_OUTPUT: '["console"]'
ZIGBEE2MQTT_CONFIG_FRONTEND_URL: "https://zigbee.${SECRET_CLUSTER_DOMAIN}" ZIGBEE2MQTT_CONFIG_ADVANCED_NETWORK_KEY: "[204, 61, 75, 23, 44, 230, 24, 203, 53, 5, 248, 32, 50, 84, 44, 159]"
ZIGBEE2MQTT_CONFIG_HOMEASSISTANT: "true" ZIGBEE2MQTT_CONFIG_AVAILABILITY_ACTIVE_TIMEOUT: 60
ZIGBEE2MQTT_CONFIG_MQTT_INCLUDE_DEVICE_INFORMATION: "true" ZIGBEE2MQTT_CONFIG_AVAILABILITY_PASSIVE_TIMEOUT: 2000
ZIGBEE2MQTT_CONFIG_MQTT_KEEPALIVE: 60 ZIGBEE2MQTT_CONFIG_DEVICE_OPTIONS_LEGACY: "false"
ZIGBEE2MQTT_CONFIG_MQTT_REJECT_UNAUTHORIZED: "true" ZIGBEE2MQTT_CONFIG_DEVICE_OPTIONS_RETAIN: "true"
ZIGBEE2MQTT_CONFIG_MQTT_SERVER: "mqtt://emqx.default.svc.cluster.local." ZIGBEE2MQTT_CONFIG_EXPERIMENTAL_NEW_API: "true"
ZIGBEE2MQTT_CONFIG_MQTT_VERSION: 5 ZIGBEE2MQTT_CONFIG_FRONTEND_PORT: 8080
ZIGBEE2MQTT_CONFIG_MQTT_USER: ZIGBEE2MQTT_CONFIG_FRONTEND_URL: "https://zigbee.${SECRET_CLUSTER_DOMAIN}"
valueFrom: ZIGBEE2MQTT_CONFIG_HOMEASSISTANT: "true"
secretKeyRef: ZIGBEE2MQTT_CONFIG_MQTT_INCLUDE_DEVICE_INFORMATION: "true"
name: emqx-secret ZIGBEE2MQTT_CONFIG_MQTT_KEEPALIVE: 60
key: user_1_username ZIGBEE2MQTT_CONFIG_MQTT_REJECT_UNAUTHORIZED: "true"
ZIGBEE2MQTT_CONFIG_MQTT_PASSWORD: ZIGBEE2MQTT_CONFIG_MQTT_SERVER: "mqtt://emqx.default.svc.cluster.local."
valueFrom: ZIGBEE2MQTT_CONFIG_MQTT_VERSION: 5
secretKeyRef: ZIGBEE2MQTT_CONFIG_MQTT_USER:
name: emqx-secret valueFrom:
key: user_1_password secretKeyRef:
ZIGBEE2MQTT_CONFIG_PERMIT_JOIN: "false" name: emqx-secret
ZIGBEE2MQTT_CONFIG_SERIAL_PORT: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 key: user_1_username
# ZIGBEE2MQTT_CONFIG_DEVICES: devices.yaml ZIGBEE2MQTT_CONFIG_MQTT_PASSWORD:
# ZIGBEE2MQTT_CONFIG_GROUPS: groups.yaml valueFrom:
secretKeyRef:
name: emqx-secret
key: user_1_password
ZIGBEE2MQTT_CONFIG_PERMIT_JOIN: "false"
ZIGBEE2MQTT_CONFIG_SERIAL_PORT: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
# ZIGBEE2MQTT_CONFIG_DEVICES: devices.yaml
# ZIGBEE2MQTT_CONFIG_GROUPS: groups.yaml
securityContext:
privileged: true
resources:
requests:
cpu: 10m
memory: 128Mi
limits:
memory: 512Mi
pod:
nodeSelector:
zzh.feature.node.kubernetes.io/zigbee: "true"
statefulset:
volumeClaimTemplates:
- name: config
accessMode: ReadWriteOnce
size: 1Gi
storageClass: rook-ceph-block
globalMounts:
- path: /config
service: service:
main: main:
ports: ports:
http: http:
port: &port 8080 port: &port 8080
metrics:
enabled: true
port: 80
serviceMonitor:
main:
enabled: true
endpoints:
- port: metrics
scheme: http
path: /metrics
interval: 1m
scrapeTimeout: 10s
ingress: ingress:
main: main:
enabled: true enabled: true
@@ -99,27 +113,17 @@ spec:
- host: &host "zigbee.${SECRET_CLUSTER_DOMAIN}" - host: &host "zigbee.${SECRET_CLUSTER_DOMAIN}"
paths: paths:
- path: / - path: /
pathType: Prefix service:
name: main
port: http
tls: tls:
- hosts: - hosts:
- *host - *host
securityContext:
privileged: true
persistence: persistence:
config:
enabled: true
existingClaim: zigbee2mqtt-config
mountPath: "/data"
usb: usb:
enabled: true enabled: true
type: hostPath type: hostPath
hostPath: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 hostPath: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
hostPathType: CharDevice hostPathType: CharDevice
nodeSelector: globalMounts:
feature.node.kubernetes.io/custom-zigbee: "true" - path: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
resources:
requests:
memory: 100Mi
cpu: 100m
limits:
memory: 700Mi

View File

@@ -5,8 +5,5 @@ namespace: default
resources: resources:
- ./gatus.yaml - ./gatus.yaml
- ./helmrelease.yaml - ./helmrelease.yaml
- ./prometheusrule.yaml
- ./volsync.yaml - ./volsync.yaml
- ./volume.yaml - ./volume.yaml
patches:
- path: ./patches/exporter.yaml

View File

@@ -1,40 +0,0 @@
---
# yaml-language-server: $schema=https://raw.githubusercontent.com/fluxcd-community/flux2-schemas/main/helmrelease-helm-v2beta1.json
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: &app zigbee2mqtt
namespace: default
spec:
values:
additionalContainers:
exporter:
name: exporter
image: docker.io/kpetrem/mqtt-exporter:latest@sha256:fbff8472a18239297e699955b43695f714e4fa6fdd7a36875a65375e2dfa8e67
env:
- name: LOG_LEVEL
value: DEBUG
- name: LOG_MQTT_MESSAGE
value: "True"
- name: MQTT_ADDRESS
value: emqx.default.svc.cluster.local
- name: MQTT_TOPIC
value: "zigbee2mqtt/#"
- name: MQTT_V5_PROTOCOL
value: "True"
- name: MQTT_USERNAME
valueFrom:
secretKeyRef:
name: emqx-secret
key: user_1_username
- name: MQTT_PASSWORD
valueFrom:
secretKeyRef:
name: emqx-secret
key: user_1_password
- name: PROMETHEUS_PORT
value: &port 80
- name: PROMETHEUS_PREFIX
value: zigbee2mqtt_
- name: ZIGBEE2MQTT_AVAILABILITY
value: "True"

View File

@@ -1,34 +0,0 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.devbu.io/prometheusrule_v1.json
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: zigbee2mqtt-exporter
namespace: default
spec:
groups:
- name: zigbee2mqtt-exporter.rules
rules:
- alert: Zigbee2MqttExporterAbsent
annotations:
summary: Zigbee2Mqtt Exporter has disappeared from Prometheus target discovery.
expr: absent(up{job="zigbee2mqtt"} == 1)
for: 15m
labels:
severity: critical
# - alert: Zigbee2MqttUnavailable
# annotations:
# summary: The zigbee device connection is lost,
# connection on topic {{$labels.topic}} is down.
# expr: zigbee2mqtt_zigbee_availability == 0
# for: 60m
# labels:
# severity: critical
- alert: Zigbee2MqttBatteryLow
annotations:
summary: The zigbee device battery level is low,
battery level on topic {{$labels.topic}} is at {{$value}}%.
expr: zigbee2mqtt_battery < 10
for: 60m
labels:
severity: warning

View File

@@ -30,7 +30,7 @@ metadata:
name: zigbee2mqtt name: zigbee2mqtt
namespace: default namespace: default
spec: spec:
sourcePVC: zigbee2mqtt-config sourcePVC: config-zigbee2mqtt-0
trigger: trigger:
schedule: "0 7 * * *" schedule: "0 7 * * *"
restic: restic:

View File

@@ -101,19 +101,6 @@ spec:
tls: tls:
- hosts: - hosts:
- *host - *host
pod:
nodeSelector:
aeotec.feature.node.kubernetes.io/zwave: "true"
statefulset:
volumeClaimTemplates:
- name: config
accessMode: ReadWriteOnce
size: 1Gi
storageClass: ceph-block
globalMounts:
- path: /usr/src/app/store
securityContext:
privileged: true
persistence: persistence:
usb: usb:
type: hostPath type: hostPath

View File

@@ -52,18 +52,6 @@ spec:
- vendor - vendor
- device - device
custom: custom:
- name: "zwave"
matchOn:
- usbId:
class: ["02"]
vendor: ["0658"]
device: ["0200"]
- name: "zigbee"
matchOn:
- usbId:
class: ["ff"]
vendor: ["1a86"]
device: ["7523"]
- name: "rflink" - name: "rflink"
matchOn: matchOn:
- usbId: - usbId:

View File

@@ -6,3 +6,4 @@ namespace: kube-system
resources: resources:
- ./aeotec-zwave-device.yaml - ./aeotec-zwave-device.yaml
- ./google-coral-device.yaml - ./google-coral-device.yaml
- ./zzh-zigbee-device.yaml

View File

@@ -0,0 +1,18 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.devbu.io/nfd.k8s-sigs.io/nodefeaturerule_v1alpha1.json
apiVersion: nfd.k8s-sigs.io/v1alpha1
kind: NodeFeatureRule
metadata:
name: zzh-zigbee-device
spec:
rules:
- # zzh! CC2652R Multiprotocol RF Stick
name: zzh.zigbee
labels:
zzh.feature.node.kubernetes.io/zigbee: "true"
matchFeatures:
- feature: usb.device
matchExpressions:
class: { op: In, value: ["ff"] }
vendor: { op: In, value: ["1a86"] }
device: { op: In, value: ["7523"] }