diff --git a/apps/smarthome/Dockerfile b/apps/smarthome/Dockerfile new file mode 100644 index 0000000..1c87d75 --- /dev/null +++ b/apps/smarthome/Dockerfile @@ -0,0 +1,98 @@ +# ---------------- +# STEP 1: +# https://lobradov.github.io/Building-docker-multiarch-images/ +# Build Openzwave and Zwave2Mqtt pkg +# All result files will be put in /dist folder +FROM node:8.15.1-alpine AS build + +# Set the commit of Zwave2Mqtt to checkout when cloning the repo +ENV Z2M_VERSION=9cc3740740b57f1e896139b5ffdb25be7576ad58 + +# Install required dependencies +RUN apk update && apk --no-cache add \ + gnutls \ + gnutls-dev \ + libusb \ + eudev \ + # Install build dependencies + && apk --no-cache --virtual .build-deps add \ + coreutils \ + eudev-dev \ + build-base \ + git \ + python \ + bash \ + libusb-dev \ + linux-headers \ + wget \ + tar \ + openssl \ + make \ + socat + +# Build binaries and move them to /dist/lib +RUN cd /root \ + && wget http://old.openzwave.com/downloads/openzwave-1.4.1.tar.gz \ + && tar zxvf openzwave-*.gz \ + && cd openzwave-* && make && make install \ + && mkdir -p /dist/lib \ + && mv libopenzwave.so* /dist/lib/ + +COPY bin/package.sh /root/package.sh + +# Clone Zwave2Mqtt build pkg files and move them to /dist/pkg +RUN npm config set unsafe-perm true && npm install -g pkg \ + && cd /root \ + && git clone https://github.com/OpenZWave/Zwave2Mqtt.git \ + && cd Zwave2Mqtt \ + && git checkout ${Z2M_VERSION} \ + && npm install \ + && npm run build + +RUN cd /root \ + && chmod +x package.sh && ./package.sh \ + && mkdir -p /dist/pkg \ + && mv /root/Zwave2Mqtt/pkg/* /dist/pkg + +# Get last config DB from main repo and move files to /dist/db +RUN cd /root \ + && git clone https://github.com/OpenZWave/open-zwave.git \ + && cd open-zwave \ + && mkdir -p /dist/db \ + && mv config/* /dist/db + +# Clean up +RUN rm -R /root/* && apk del .build-deps + +# ---------------- +# STEP 2: +# Run a minimal alpine image +FROM alpine:latest + +LABEL maintainer="zoide" + +RUN apk update && apk add --no-cache \ + libstdc++ \ + libgcc \ + libusb \ + eudev + +# Copy files from previous build stage +COPY --from=build /dist/lib/ /lib/ +COPY --from=build /dist/db/ /usr/local/etc/openzwave/ +COPY --from=build /dist/pkg /usr/src/app + +# supervisor base configuration +ADD supervisor.conf /etc/supervisor.conf + +# Set enviroment +ENV LD_LIBRARY_PATH /lib + +EXPOSE 8091 + +CMD ["supervisord", "-c", "/etc/supervisor.conf"] +#CMD ["/usr/src/app/zwave2mqtt"] + + + + diff --git a/apps/home-assistant.yaml b/apps/smarthome/home-assistant.yaml similarity index 100% rename from apps/home-assistant.yaml rename to apps/smarthome/home-assistant.yaml diff --git a/apps/smarthome/socat/Dockerfile b/apps/smarthome/socat/Dockerfile new file mode 100644 index 0000000..ce3162f --- /dev/null +++ b/apps/smarthome/socat/Dockerfile @@ -0,0 +1,8 @@ +FROM alpine:latest + +ARG VERSION=1.7.3.2 + +RUN apk --no-cache add socat +#=${VERSION} + +ENTRYPOINT ["socat"] \ No newline at end of file diff --git a/apps/smarthome/supervisor.conf b/apps/smarthome/supervisor.conf new file mode 100644 index 0000000..e7f11b6 --- /dev/null +++ b/apps/smarthome/supervisor.conf @@ -0,0 +1,13 @@ +[supervisord] +nodaemon=true + +[program:socat] +command=/usr/bin/socat -d -d -d pty,link=/dev/ttySER2NET0,raw,user=root,group=root,mode=660 tcp:auto:3333 +killasgroup=true +stopasgroup=true +redirect_stderr=true + +[program:zwave2mqtt] +directory=/usr/src/app +command=/usr/src/app/zwave2mqtt +redirect_stderr=true \ No newline at end of file diff --git a/apps/smarthome/zwave2mqtt.yaml b/apps/smarthome/zwave2mqtt.yaml new file mode 100644 index 0000000..71b67a3 --- /dev/null +++ b/apps/smarthome/zwave2mqtt.yaml @@ -0,0 +1,120 @@ +## FROM: https://github.com/OpenZWave/Zwave2Mqtt +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: zwave2mqtt +spec: + replicas: 1 + selector: + matchLabels: + name: zwave2mqtt + template: + metadata: + labels: + name: zwave2mqtt + spec: + containers: + - name: zwave2mqtt + image: docker-registry.lan/zwave2mqtt:arm64 + livenessProbe: + failureThreshold: 12 + httpGet: + httpHeaders: + - name: Accept + value: text/plain + path: / + port: http + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 2 + ports: + - containerPort: 8091 + name: http + protocol: TCP + resources: + limits: + cpu: '1' + memory: 512Mi + requests: + cpu: '1' + memory: 200Mi + securityContext: + allowPrivilegeEscalation: true + privileged: true + volumeMounts: + - mountPath: /usr/src/app/store + name: data +# - mountPath: /usr/local/etc/openzwave +# name: ozwdatabase +# - mountPath: /usr/src/app/store/settings.json <-- if putting your settings.json in a secret +# name: config +# readOnly: true +# subPath: settings.json +# nodeSelector: +# kubernetes.io/hostname: stick1 #<--- the name of your cluster node that the zwave usb stick in +# - name: socat +# image: docker-registry.lan/socat:arm64 +# args: +# - pty,link=/dev/ttySER2NET0,raw,user=root,group=root,mode=660 +# - tcp:auto:3333 +# securityContext: +# allowPrivilegeEscalation: true +# privileged: true + volumes: +# - name: config <-- if putting your settings.json in a secret +# secret: +# defaultMode: 420 +# secretName: zwave2mqtt + #- name: zwavestick + # hostPath: + # path: /dev/ttyACM0 + # type: File + - name: data + persistentVolumeClaim: + claimName: zwave2mqtt-storage +# - name: ozwdatabase +# hostPath: +# path: /zwave2mqtt/database + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: zwave2mqtt-storage + labels: + app: zwave2mqtt +spec: + storageClassName: nfs-ssd + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Mi +--- +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: zwave2mqtt +spec: + rules: + - host: zwave.lan + http: + paths: + - backend: + serviceName: zwave2mqtt + servicePort: http + +--- +apiVersion: v1 +kind: Service +metadata: + name: zwave2mqtt +spec: + ports: + - name: http + port: 80 + targetPort: http + selector: + name: zwave2mqtt \ No newline at end of file