Skip to content

Commit

Permalink
Merge pull request #7 from zivillian/docker
Browse files Browse the repository at this point in the history
add linux and docker support
  • Loading branch information
zivillian authored Apr 7, 2024
2 parents 8a3632a + fedda5e commit a1a0d6f
Show file tree
Hide file tree
Showing 7 changed files with 180 additions and 3 deletions.
4 changes: 4 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# These are supported funding model platforms

github: [zivillian]
custom: ['https://paypal.me/zivillian']
40 changes: 40 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Docker

on:
push:
branches: [ main ]
tags:
- '*'

jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get tag
id: repository
run: echo "tag=$(git describe --tags HEAD)" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4
with:
images: zivillian/ora2mqtt
- name: Build
uses: docker/build-push-action@v3
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
tags: zivillian/ora2mqtt:main
labels: ${{ steps.meta.outputs.labels }}
47 changes: 47 additions & 0 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: .NET

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup .NET
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x
- name: Restore dependencies
run: dotnet restore
- name: Publish ora2mqtt Windows
run: dotnet publish -c release -r win-x64 --sc ora2mqtt/ora2mqtt.csproj
- name: Publish ora2mqtt Linux
run: dotnet publish -c release -r linux-x64 --sc ora2mqtt/ora2mqtt.csproj
- name: Publish ora2mqtt Linux ARM
run: dotnet publish -c release -r linux-arm --sc ora2mqtt/ora2mqtt.csproj
- name: Publish ora2mqtt Linux ARM64
run: dotnet publish -c release -r linux-arm64 --sc ora2mqtt/ora2mqtt.csproj
- uses: actions/upload-artifact@v2
with:
name: ora2mqtt-win-x64
path: ora2mqtt/bin/release/net6.0/win-x64/publish
- uses: actions/upload-artifact@v2
with:
name: ora2mqtt-linux-x64
path: ora2mqtt/bin/release/net6.0/linux-x64/publish
- uses: actions/upload-artifact@v2
with:
name: ora2mqtt-linux-arm
path: ora2mqtt/bin/release/net6.0/linux-arm/publish
- uses: actions/upload-artifact@v2
with:
name: ora2mqtt-linux-arm64
path: ora2mqtt/bin/release/net6.0/linux-arm64/publish
23 changes: 23 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app

COPY libgwmapi/ ./libgwmapi/
COPY ora2mqtt/ ./ora2mqtt/
ARG TARGETARCH
RUN if [ "$TARGETARCH" = "amd64" ]; then \
RID=linux-musl-x64 ; \
elif [ "$TARGETARCH" = "arm64" ]; then \
RID=linux-musl-arm64 ; \
elif [ "$TARGETARCH" = "arm" ]; then \
RID=linux-musl-arm ; \
fi \
&& dotnet publish -c Release -o out -r $RID --sc ora2mqtt/ora2mqtt.csproj
COPY openssl.cnf ./out/

FROM mcr.microsoft.com/dotnet/runtime-deps:6.0-alpine
WORKDIR /app
COPY --from=build-env /app/out .
COPY libgwmapi/Resources/gwm_root.pem /etc/ssl/certs/.
ENV OPENSSL_CONF=/app/openssl.cnf

ENTRYPOINT ["/app/ora2mqtt", "-c", "/config/ora2mqtt.yml"]
57 changes: 55 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Falls du dabei Hilfe brauchst, kannst du auch einfach [einen Issue aufmachst](ht

Es gibt eine Kommandozeilenanwendung die unter Windows läuft und die aktuellen Werte auslesen und per MQTT veröffentlichen kann.

Im ersten Schritt muss die Konfigurationsdatei mit `ora2mqtt configure` erstellt werden. Anschließend kann die Anwendung mit `ora2mqtt run` oder einfach `ora2mqtt` gestartet werden. Damit sollten die aktuellen Werte im MQTT zu sehen sein.
Im ersten Schritt muss die Konfigurationsdatei mit `ora2mqtt configure` erstellt werden. Dafür am besten einen zusätzlichen Account anlegen und das Auto für diesen Account freigeben. Anschließend kann die Anwendung mit `ora2mqtt run` oder einfach `ora2mqtt` gestartet werden. Damit sollten die aktuellen Werte im MQTT zu sehen sein.

Die Werte (SOC, Range und Odometer) können in [evcc](https://github.com/evcc-io/evcc/) mit der folgenden Konfiguration eingebunden werden:

Expand All @@ -31,7 +31,7 @@ vehicles:
timeout: 1m
range:
source: mqtt
topic: GWM/<vin>/status/items/2011007/value
topic: GWM/<vin>/status/items/2011501/value
timeout: 1m
odometer:
source: mqtt
Expand All @@ -41,6 +41,59 @@ vehicles:
Ich habe das inzwischen auch ein paar Stunden laufen lassen, während ich mit dem Auto unterwegs war. Die Daten werden auch dann übermittelt, wenn die offizielle App nicht genutzt wird. Auch der Token Refresh war erfolgreich.
## Docker
Inzwischen gibt es auch einen Docker Container. Die config muss vorher mit `ora2mqtt configure` erstellt werden:

```bash
docker run -d --restart=unless-stopped -v ./ora2mqtt.yml:/config/ora2mqtt.yml zivillian/ora2mqtt:latest
```

# Datenpunkte

Folgende Datenpunkte kann ich auslesen:

| Datenpunkt | Beschreibung
| ---------- | ------------
| 2011501 | Reichweite in km
| 2013021 | SOC
| 2013022 |
| 2013023 |
| 2041142 | Ladevorgang aktiv
| 2042071 |
| 2042082 | bool Flag, nur aktiv wenn geladen wird (aber nicht immer)
| 2078020 |
| 2101001 | Reifendruck vl in kPa
| 2101002 | Reifendruck vr in kPa
| 2101003 | Reifendruck hl in kPa
| 2101004 | Reifendruck hr in kPa
| 2101005 | Reifentemperatur vl in °C
| 2101006 | Reifentemperatur vr in °C
| 2101007 | Reifentemperatur hl in °C
| 2101008 | Reifentemperatur hr in °C
| 2102001 |
| 2102002 |
| 2102003 |
| 2102004 |
| 2102007 |
| 2102008 |
| 2102009 |
| 2102010 |
| 2103010 | Kilometerstand in km
| 2201001 | Innenraumtemperatur in zehntel °C
| 2202001 | Klimaanlage an
| 2208001 | Schloss offen
| 2210001 | Fenster geschlossen vl
| 2210002 | Fenster geschlossen vr
| 2210003 | Fenster geschlossen hl
| 2210004 | Fenster geschlossen hr
| 2210010 |
| 2210011 |
| 2210012 |
| 2210013 |
| 2222001 |
| 2310001 |

# How it started?

Bei evcc hat [jemand vorgeschlagen](https://github.com/evcc-io/evcc/discussions/9524#discussioncomment-6832420), dass man sich die App mal anschauen müsste...
Expand Down
10 changes: 10 additions & 0 deletions openssl.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
openssl_conf = openssl_init

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = DEFAULT@SECLEVEL=0
2 changes: 1 addition & 1 deletion ora2mqtt/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex);
return -1;
}

0 comments on commit a1a0d6f

Please sign in to comment.