From d5dc992a628de02e201a39f54b9d207da9f4db47 Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 09:07:06 +1000 Subject: [PATCH 1/9] remove duplicate battery voltage arg --- config/inverter.conf | 4 ++-- sources/inverter-mqtt/mqtt-push.sh | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/config/inverter.conf b/config/inverter.conf index 3b8ecb7..21e6a2f 100644 --- a/config/inverter.conf +++ b/config/inverter.conf @@ -30,7 +30,7 @@ watt_factor=1.01 # mentioned in https://github.com/ned-kelly/docker-voltronic-homeassistant/issues/5 # This allows you to modify the buffersize for the qpiri command -qpiri=97 +qpiri=98 # This allows you to modify the buffersize for the qpiws command qpiws=36 @@ -39,4 +39,4 @@ qpiws=36 qmod=5 # This allows you to modify the buffersize for the qpigs command -qpigs=110 \ No newline at end of file +qpigs=110 diff --git a/sources/inverter-mqtt/mqtt-push.sh b/sources/inverter-mqtt/mqtt-push.sh index 6fa8d9f..5b28cae 100755 --- a/sources/inverter-mqtt/mqtt-push.sh +++ b/sources/inverter-mqtt/mqtt-push.sh @@ -100,9 +100,6 @@ Battery_recharge_voltage=`echo $INVERTER_DATA | jq '.Battery_recharge_voltage' - Battery_under_voltage=`echo $INVERTER_DATA | jq '.Battery_under_voltage' -r` [ ! -z "$Battery_under_voltage" ] && pushMQTTData "Battery_under_voltage" "$Battery_under_voltage" -Battery_under_voltage=`echo $INVERTER_DATA | jq '.Battery_under_voltage' -r` -[ ! -z "$Battery_under_voltage" ] && pushMQTTData "Battery_under_voltage" "$Battery_under_voltage" - Battery_bulk_voltage=`echo $INVERTER_DATA | jq '.Battery_bulk_voltage' -r` [ ! -z "$Battery_bulk_voltage" ] && pushMQTTData "Battery_bulk_voltage" "$Battery_bulk_voltage" From 141829f722f5c264d019b42e633043b095c5afa0 Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 09:32:19 +1000 Subject: [PATCH 2/9] initial support for docker actions --- .github/workflows/build-workflow.yml | 77 ++++++++++++++++++++++++++++ Dockerfile | 14 ++++- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build-workflow.yml diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml new file mode 100644 index 0000000..be74b2a --- /dev/null +++ b/.github/workflows/build-workflow.yml @@ -0,0 +1,77 @@ +- name: Docker Buildx + uses: crazy-max/ghaction-docker-buildx@v1.2.1 + +# Docker Hub CI/CD for Multi Arch Images... +name: buildx + +on: + pull_request: + branches: master + push: + branches: master + tags: + +jobs: + buildx: + runs-on: ubuntu-latest + steps: + - + name: Prepare + id: prepare + run: | + if [[ $GITHUB_REF == refs/tags/* ]]; then + echo ::set-output name=version::${GITHUB_REF#refs/tags/v} + else + echo ::set-output name=version::snapshot + fi + echo ::set-output name=build_date::$(date -u +'%Y-%m-%dT%H:%M:%SZ') + echo ::set-output name=docker_platforms::linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386 + - + name: Checkout + uses: actions/checkout@v1 + - + name: Set up Docker Buildx + id: buildx + uses: crazy-max/ghaction-docker-buildx@v1 + with: + version: latest + - + name: Available platforms + run: echo ${{ steps.buildx.outputs.platforms }} + - + name: Run Buildx (Build only - Won't push if build fails...) + run: | + docker buildx build \ + --platform ${{ steps.prepare.outputs.docker_platforms }} \ + --build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \ + --build-arg "VCS_REF=${GITHUB_SHA::8}" \ + --build-arg "VERSION=${{ steps.prepare.outputs.version }}" \ + + --output "type=image,push=false" \ + --file Dockerfile . + - + name: Docker Login + if: success() + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin + - + name: Run Buildx (Push to Docker Hub) + run: | + docker buildx build \ + --platform ${{ steps.prepare.outputs.docker_platforms }} \ + --build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \ + --build-arg "VCS_REF=${GITHUB_SHA::8}" \ + --build-arg "VERSION=${{ steps.prepare.outputs.version }}" \ + + --output "type=image,push=true" \ + --file Dockerfile . + - + name: Clear + if: always() + run: | + rm -f ${HOME}/.docker/config.json + + diff --git a/Dockerfile b/Dockerfile index 9f81a23..4f817a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,16 @@ -FROM debian:stretch +# Uncomment if building locally... +# FROM debian:stretch + +FROM --platform=${TARGETPLATFORM:-linux/amd64} debian:stretch + +ARG BUILD_DATE +ARG VERSION +ARG VCS_REF +ARG TARGETPLATFORM + +LABEL org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.version=$VERSION \ + org.label-schema.vcs-ref=$VCS_REF \ RUN apt update && apt install -y \ curl \ From 6000d93e84309c5bc572334eafa1712504e05281 Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 09:33:45 +1000 Subject: [PATCH 3/9] initial support for docker actions --- .github/workflows/build-workflow.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index be74b2a..58b4770 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -1,6 +1,3 @@ -- name: Docker Buildx - uses: crazy-max/ghaction-docker-buildx@v1.2.1 - # Docker Hub CI/CD for Multi Arch Images... name: buildx From a83f79fc7ea99aeb5af6330b83f1b8e357a07cd3 Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 09:37:18 +1000 Subject: [PATCH 4/9] add actions branch triggers for testing --- .github/workflows/build-workflow.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index 58b4770..9bce409 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -3,9 +3,15 @@ name: buildx on: pull_request: - branches: master + branches: + - master + - releases/* + - actions push: - branches: master + branches: + - master + - releases/* + - actions tags: jobs: From 1d87c1cc6d8d3e90efd9549107e19195be02c6f2 Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 09:39:29 +1000 Subject: [PATCH 5/9] restructure dockerfile --- .github/workflows/build-workflow.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index 9bce409..dc15b8a 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -44,13 +44,11 @@ jobs: - name: Run Buildx (Build only - Won't push if build fails...) run: | - docker buildx build \ - --platform ${{ steps.prepare.outputs.docker_platforms }} \ + docker buildx build --platform ${{ steps.prepare.outputs.docker_platforms }} \ + --output "type=image,push=false" \ --build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \ --build-arg "VCS_REF=${GITHUB_SHA::8}" \ --build-arg "VERSION=${{ steps.prepare.outputs.version }}" \ - - --output "type=image,push=false" \ --file Dockerfile . - name: Docker Login @@ -63,13 +61,11 @@ jobs: - name: Run Buildx (Push to Docker Hub) run: | - docker buildx build \ - --platform ${{ steps.prepare.outputs.docker_platforms }} \ + docker buildx build --platform ${{ steps.prepare.outputs.docker_platforms }} \ + --output "type=image,push=true" \ --build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \ --build-arg "VCS_REF=${GITHUB_SHA::8}" \ --build-arg "VERSION=${{ steps.prepare.outputs.version }}" \ - - --output "type=image,push=true" \ --file Dockerfile . - name: Clear From 2aa7edd04b04d1c52d28c07ee9204f0256a36dfb Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 09:40:40 +1000 Subject: [PATCH 6/9] remove line break slash from tags in dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4f817a6..8031483 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ ARG TARGETPLATFORM LABEL org.label-schema.build-date=$BUILD_DATE \ org.label-schema.version=$VERSION \ - org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-ref=$VCS_REF RUN apt update && apt install -y \ curl \ From 0ea9fa29b66ff95448521d890e5dc19ae4b97ef9 Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 10:43:49 +1000 Subject: [PATCH 7/9] test with lest arch options --- .github/workflows/build-workflow.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index dc15b8a..b38df6d 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -25,10 +25,10 @@ jobs: if [[ $GITHUB_REF == refs/tags/* ]]; then echo ::set-output name=version::${GITHUB_REF#refs/tags/v} else - echo ::set-output name=version::snapshot + echo ::set-output name=version::${GITHUB_SHA::8} fi echo ::set-output name=build_date::$(date -u +'%Y-%m-%dT%H:%M:%SZ') - echo ::set-output name=docker_platforms::linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386 + echo ::set-output name=docker_platforms::linux/amd64,linux/arm/v6 - name: Checkout uses: actions/checkout@v1 @@ -41,15 +41,6 @@ jobs: - name: Available platforms run: echo ${{ steps.buildx.outputs.platforms }} - - - name: Run Buildx (Build only - Won't push if build fails...) - run: | - docker buildx build --platform ${{ steps.prepare.outputs.docker_platforms }} \ - --output "type=image,push=false" \ - --build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \ - --build-arg "VCS_REF=${GITHUB_SHA::8}" \ - --build-arg "VERSION=${{ steps.prepare.outputs.version }}" \ - --file Dockerfile . - name: Docker Login if: success() @@ -66,6 +57,8 @@ jobs: --build-arg "BUILD_DATE=${{ steps.prepare.outputs.build_date }}" \ --build-arg "VCS_REF=${GITHUB_SHA::8}" \ --build-arg "VERSION=${{ steps.prepare.outputs.version }}" \ + --tag "${{ steps.prepare.outputs.docker_image }}:latest" \ + --tag "${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}" \ --file Dockerfile . - name: Clear From a30d4019fde3467017ce84b373cfd2a8d21fd16c Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 10:47:05 +1000 Subject: [PATCH 8/9] add docker image name as environment --- .github/workflows/build-workflow.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index b38df6d..23971d3 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -29,6 +29,7 @@ jobs: fi echo ::set-output name=build_date::$(date -u +'%Y-%m-%dT%H:%M:%SZ') echo ::set-output name=docker_platforms::linux/amd64,linux/arm/v6 + echo ::set-output name=docker_image::bushrangers/ha-voltronic-mqtt - name: Checkout uses: actions/checkout@v1 From b8e9d8ad337fbe719b9d39e479d453e5b7f255ac Mon Sep 17 00:00:00 2001 From: David Nedved Date: Wed, 1 Apr 2020 11:42:35 +1000 Subject: [PATCH 9/9] include healthcheck in default actions --- .github/workflows/build-workflow.yml | 4 ++-- Dockerfile.dev | 25 +++++++++++++++++++++++++ Dockerfile => Dockerfile.multiarch | 7 +++++++ README.md | 8 ++++++-- docker-compose.yml | 28 +++++++++++++++++++++++++--- sources/healthcheck | 9 +++++++++ 6 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 Dockerfile.dev rename Dockerfile => Dockerfile.multiarch (84%) create mode 100755 sources/healthcheck diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index 23971d3..3dedba0 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -28,7 +28,7 @@ jobs: echo ::set-output name=version::${GITHUB_SHA::8} fi echo ::set-output name=build_date::$(date -u +'%Y-%m-%dT%H:%M:%SZ') - echo ::set-output name=docker_platforms::linux/amd64,linux/arm/v6 + echo ::set-output name=docker_platforms::linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386 echo ::set-output name=docker_image::bushrangers/ha-voltronic-mqtt - name: Checkout @@ -60,7 +60,7 @@ jobs: --build-arg "VERSION=${{ steps.prepare.outputs.version }}" \ --tag "${{ steps.prepare.outputs.docker_image }}:latest" \ --tag "${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}" \ - --file Dockerfile . + --file Dockerfile.multiarch . - name: Clear if: always() diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..aecf7ae --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,25 @@ +FROM debian:stretch + +RUN apt update && apt install -y \ + curl \ + git \ + build-essential \ + cmake \ + jq \ + mosquitto-clients + +ADD sources/ /opt/ +ADD config/ /etc/inverter/ + +RUN cd /opt/inverter-cli && \ + mkdir bin && cmake . && make && mv inverter_poller bin/ + +HEALTHCHECK \ + --interval=30s \ + --timeout=10s \ + --start-period=1m \ + --retries=3 \ + CMD /opt/healthcheck + +WORKDIR /opt +ENTRYPOINT ["/bin/bash", "/opt/inverter-mqtt/entrypoint.sh"] diff --git a/Dockerfile b/Dockerfile.multiarch similarity index 84% rename from Dockerfile rename to Dockerfile.multiarch index 8031483..49a1c80 100644 --- a/Dockerfile +++ b/Dockerfile.multiarch @@ -26,5 +26,12 @@ ADD config/ /etc/inverter/ RUN cd /opt/inverter-cli && \ mkdir bin && cmake . && make && mv inverter_poller bin/ +HEALTHCHECK \ + --interval=30s \ + --timeout=10s \ + --start-period=1m \ + --retries=3 \ + CMD /opt/healthcheck + WORKDIR /opt ENTRYPOINT ["/bin/bash", "/opt/inverter-mqtt/entrypoint.sh"] \ No newline at end of file diff --git a/README.md b/README.md index c0981d4..75b4e46 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ grafana-example.jpg **Docker Hub:** [`bushrangers/ha-voltronic-mqtt`](https://hub.docker.com/r/bushrangers/ha-voltronic-mqtt/) -![License](https://img.shields.io/github/license/ned-kelly/docker-voltronic-homeassistant.svg) ![Docker Pulls](https://img.shields.io/docker/pulls/bushrangers/ha-voltronic-mqtt.png) +![License](https://img.shields.io/github/license/ned-kelly/docker-voltronic-homeassistant.svg) ![Docker Pulls](https://img.shields.io/docker/pulls/bushrangers/ha-voltronic-mqtt.png) ![buildx](https://github.com/ned-kelly/docker-voltronic-homeassistant/workflows/buildx/badge.svg) ## Prerequisites @@ -64,7 +64,11 @@ docker-compose up -d ``` -_**Note:** builds on docker hub are currently for x64 -- If you have issues standing up the image on your Linux distribution (i.e. Your Raspberry Pi/ARM device) you will need to manually build the image - This can be done by uncommenting the build flag in your docker-compose.yml file._ +_**Note:**_ + + - builds on docker hub are currently for `linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386` -- If you have issues standing up the image on your Linux distribution (i.e. An old Pi/ARM device) you may need to manually build the image to support your local device architecture - This can be done by uncommenting the build flag in your docker-compose.yml file. + + - The default `docker-compose.yml` file includes Watchtower, which can be configured to auto-update this image when we push new changes to github - Please **uncomment if you wish to auto-update to the latest builds of this project**. ## Integrating into Home Assistant. diff --git a/docker-compose.yml b/docker-compose.yml index 23e3977..7d49ad3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,16 @@ -version: '2' +version: '3' services: voltronic-mqtt: - build: . - #image: bushrangers/ha-voltronic-mqtt + # We're now (finally) supporting Multi-Arch builds (via Github actions) on Docker Hub! + # image: bushrangers/ha-voltronic-mqtt + + # Uncomment if you want to build your own local version. + build: + context: . + dockerfile: Dockerfile.dev + container_name: voltronic-mqtt @@ -26,3 +32,19 @@ services: - /dev/ttyS0:/dev/ttyS0 - /dev/ttyS1:/dev/ttyS1 - /dev/ttyS2:/dev/ttyS2 + + # Used to auto-update images as we release new versions... + watchtower: + # Please see the following for configuration options: + # https://containrrr.github.io/watchtower/container-selection/ + image: containrrr/watchtower + container_name: watchtower + + restart: always + privileged: true + + volumes: + - /var/run/docker.sock:/var/run/docker.sock + + command: --interval 500 + diff --git a/sources/healthcheck b/sources/healthcheck new file mode 100755 index 0000000..476093f --- /dev/null +++ b/sources/healthcheck @@ -0,0 +1,9 @@ +#!/bin/bash + +PROC=`ps cax | grep -E "mqtt-subscriber|mosquitto_sub|watch" | awk '{print $5}' | sort -u | wc -l` + +if [ "$PROC" -eq "3" ] ; then + exit 0 +else + exit 99 +fi \ No newline at end of file