diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..5cc3f7f --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +github: [zivillian] +custom: ['https://paypal.me/zivillian'] diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..aaa9c82 --- /dev/null +++ b/.github/workflows/docker.yml @@ -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 }} \ No newline at end of file diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 0000000..30ea535 --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -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 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b0b98ac --- /dev/null +++ b/Dockerfile @@ -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"] \ No newline at end of file diff --git a/README.md b/README.md index 2c4ae5d..8962711 100644 --- a/README.md +++ b/README.md @@ -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: @@ -31,7 +31,7 @@ vehicles: timeout: 1m range: source: mqtt - topic: GWM//status/items/2011007/value + topic: GWM//status/items/2011501/value timeout: 1m odometer: source: mqtt @@ -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... diff --git a/openssl.cnf b/openssl.cnf new file mode 100644 index 0000000..cd9f4f6 --- /dev/null +++ b/openssl.cnf @@ -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 \ No newline at end of file diff --git a/ora2mqtt/Program.cs b/ora2mqtt/Program.cs index 952ed03..69319ee 100644 --- a/ora2mqtt/Program.cs +++ b/ora2mqtt/Program.cs @@ -28,6 +28,6 @@ } catch (Exception ex) { - Console.WriteLine(ex.Message); + Console.WriteLine(ex); return -1; } \ No newline at end of file