Compare commits

...
17 Commits
Author SHA1 Message Date
Colin Seymour 33d50cce75 Document and enforce the Grafana datasource name should be TeslaMate (#65)
* Document that the Grafana datasource must be TeslaMate

* Check datasource name TeslaMate is available
2025-01-27 18:21:43 +00:00
renovate[bot] b5ab114562 Update softprops/action-gh-release action to v2.2.1 (#61)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 11:00:56 +00:00
renovate[bot] b17ded97f6 Update softprops/action-gh-release action to v2.2.0 (#60) 2024-12-11 07:52:24 +00:00
renovate[bot] 3a9e27e9ac Update TeslaMate to v1.32.0 (#57)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-23 18:23:33 +00:00
renovate[bot] fb4eff6570 Update softprops/action-gh-release action to v2.1.0 (#56) 2024-11-12 08:00:04 +00:00
renovate[bot] d54d94a480 Update softprops/action-gh-release action to v2.0.9 (#55)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 20:18:25 +00:00
renovate[bot] a979b4fdf6 Update TeslaMate to v1.31.1 (#54)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-29 18:55:48 +00:00
Colin Seymour 86fe972431 Switch to new S6 service configuration (#40)
* Add new service files

* Remove moved file

* Move files

* Add exec perm

* Update for new services

* Remove xz-utils after use

* Check labels

* Move labels to build

* Typo

* List images

* Fixit

* Add super lint

* Update labels

* Whoops

* Remove superlint

* Add teslamate dependency

* Fix url
2024-10-27 16:43:53 +00:00
renovate[bot]andColin Seymour 3d167fc6ee Update TeslaMate to v1.31.0 (#51)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Colin Seymour <colin@symr.io>
2024-10-27 16:02:40 +00:00
renovate[bot] 0013f5605b Update actions/checkout action to v4.2.2 (#49)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-27 15:56:16 +00:00
Colin Seymour 826c07ace9 Consolidate versions and Renovate config to a single file (#48)
* Consolidate versions and renovate config to a single file

* Remove unneeded lint check

* Add BUILD_FROM
2024-10-27 15:55:21 +00:00
renovate[bot] 7bfa32be3f Update actions/checkout action to v4.2.1 (#47)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 08:51:44 +01:00
renovate[bot] b9e37e9f32 Update actions/checkout action to v4.2.0 (#46)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-26 10:14:52 +01:00
Colin Seymour 945a7c4822 Fix release note gathering (#44)
Parse json
2024-09-22 12:27:00 +01:00
Colin Seymour 4567555071 Quote DB name in existance check (#43)
Quote DB name
2024-09-13 09:56:26 +01:00
Colin Seymour 694b43eb93 Only include Teslamate release notes if updated since last release (#38) 2024-08-30 13:10:24 +01:00
Colin Seymour 04e01df081 Make startup scripts robust (#37)
* Clean up file if exists and mkdir -p

* Make importing dashboards more robust

* Update info msgs
2024-08-30 12:45:36 +01:00
21 changed files with 91 additions and 69 deletions
+2 -1
View File
@@ -8,12 +8,13 @@
"prBodyTemplate": "{{{table}}}{{{warnings}}}{{{notes}}}{{{changelogs}}}", "prBodyTemplate": "{{{table}}}{{{warnings}}}{{{notes}}}{{{changelogs}}}",
"semanticCommits": "disabled", "semanticCommits": "disabled",
"commitMessageTopic": "{{#if (containsString depName 'teslamate')}}TeslaMate{{else}}{{depName}}{{/if}}", "commitMessageTopic": "{{#if (containsString depName 'teslamate')}}TeslaMate{{else}}{{depName}}{{/if}}",
"enabledManagers": ["custom.regex", "github-actions", "dockerfile"], "enabledManagers": ["custom.regex", "github-actions"],
"customManagers": [ "customManagers": [
{ {
"customType": "regex", "customType": "regex",
"fileMatch": "^build.json$", "fileMatch": "^build.json$",
"matchStrings": [ "matchStrings": [
"\"teslamate/teslamate:(?<currentValue>\\d+\\.\\d+\\.\\d+)\"",
"\"teslamate_version\": \"(?<currentValue>\\d+\\.\\d+\\.\\d+)\"" "\"teslamate_version\": \"(?<currentValue>\\d+\\.\\d+\\.\\d+)\""
], ],
"datasourceTemplate": "github-releases", "datasourceTemplate": "github-releases",
+1 -11
View File
@@ -14,19 +14,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: ⤵️ Check out code from GitHub - name: ⤵️ Check out code from GitHub
uses: actions/checkout@v4.1.7 uses: actions/checkout@v4.2.2
- name: 🚀 Run Home Assistant Add-on Lint - name: 🚀 Run Home Assistant Add-on Lint
uses: frenck/action-addon-linter@v2 uses: frenck/action-addon-linter@v2
with: with:
path: "./" path: "./"
- name: Check versions match
run: |
docker_ver=$(grep "FROM teslamate/teslamate" Dockerfile | cut -d':' -f2)
build_ver=$(jq -r ".args.teslamate_version" build.json)
if [ "$docker_ver" != "$build_ver" ]; then
echo -e "\033[31;1mTeslaMate versions don't match: Dockerfile => ${docker_ver} | build.json => ${build_ver}\033[0m"
exit 1
fi
echo -e "\033[32;1mTeslaMate versions match: Dockerfile => ${docker_ver} | build.json => ${build_ver}\033[0m"
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@v4.1.7 uses: actions/checkout@v4.2.2
- name: Get version - name: Get version
run: | run: |
+5 -4
View File
@@ -35,12 +35,13 @@ jobs:
- name: Get TeslaMate release notes - name: Get TeslaMate release notes
run: | run: |
touch CHANGELOG.txt touch CHANGELOG.txt
gh pr list --repo lildude/ha-addon-teslamate --state=merged --search="Update TeslaMate" --limit=1 --json=body --jq '.[].body' | sed -n "/<\/summary>/,/<\/details>/p" | sed '1d;$d' > changelog.tmp last_release_date=$(gh release list --repo lildude/ha-addon-teslamate --limit=1 --json=publishedAt | jq -r '.[].publishedAt')
gh pr list --repo lildude/ha-addon-teslamate --state=merged --search="Update TeslaMate in:title closed:>$last_release_date" --limit=1 --json=body --jq '.[].body' | sed -n "/<\/summary>/,/<\/details>/p" | sed '1d;$d' > changelog.tmp
if [ -s changelog.tmp ]; then if [ -s changelog.tmp ]; then
echo "## TeslaMate Release Notes" > CHANGELOG.txt echo "## TeslaMate Release Notes" > CHANGELOG.txt
cat changelog.tmp >> CHANGELOG.txt cat changelog.tmp >> CHANGELOG.txt
echo -e "---\n\n## Add-on Release Notes\n\n" >> CHANGELOG.txt
fi fi
echo -e "---\n\n## Add-on Release Notes\n\n" >> CHANGELOG.txt
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create tag - name: Create tag
@@ -51,7 +52,7 @@ jobs:
git push --tags git push --tags
working-directory: ${{ github.workspace }}/teslamate working-directory: ${{ github.workspace }}/teslamate
- name: Create release - name: Create release
uses: softprops/action-gh-release@v2.0.8 uses: softprops/action-gh-release@v2.2.1
with: with:
tag_name: v${{ steps.semver.outputs.semver }} tag_name: v${{ steps.semver.outputs.semver }}
body_path: CHANGELOG.txt body_path: CHANGELOG.txt
@@ -60,7 +61,7 @@ jobs:
prerelease: false prerelease: false
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout addon repo - name: Checkout addon repo
uses: actions/checkout@v4.1.7 uses: actions/checkout@v4.2.2
with: with:
path: repo path: repo
repository: lildude/ha-addons repository: lildude/ha-addons
+5 -1
View File
@@ -32,7 +32,7 @@ jobs:
steps: steps:
- name: Check out repository - name: Check out repository
uses: actions/checkout@v4.1.7 uses: actions/checkout@v4.2.2
- name: Build add-on - name: Build add-on
uses: home-assistant/builder@2024.08.2 uses: home-assistant/builder@2024.08.2
@@ -42,3 +42,7 @@ jobs:
--${{ matrix.arch }} \ --${{ matrix.arch }} \
--target /data/ \ --target /data/ \
--addon --addon
- name: Image labels
run: |
docker inspect ghcr.io/lildude/ha-addon-teslamate-${{ matrix.arch }} --format='{{json .Config.Labels}}' | jq
+2
View File
@@ -105,6 +105,8 @@ _Note_ that the security admin password and usernames can only be set on the fir
Once you have Grafana up and running, you'll need to configure a data source to read data from the PostgreSQL database: Once you have Grafana up and running, you'll need to configure a data source to read data from the PostgreSQL database:
‼️ **Note**: The name must be `TeslaMate` as all the dashboards expect the datasource to use this name.
![Grafana Postgres data source][grafana-datasource] ![Grafana Postgres data source][grafana-datasource]
#### Other Options #### Other Options
+10 -26
View File
@@ -1,8 +1,11 @@
FROM teslamate/grafana:1.30.1 as grafana ARG BUILD_FROM
ARG teslamate_version
FROM teslamate/grafana:${teslamate_version} as grafana
#--- #---
FROM teslamate/teslamate:1.30.1 ARG BUILD_FROM
FROM $BUILD_FROM
ARG BUILD_ARCH ARG BUILD_ARCH
ARG BASHIO_VERSION=0.16.2 ARG BASHIO_VERSION=0.16.2
@@ -22,7 +25,6 @@ RUN \
set -x \ set -x \
&& apt-get update && apt-get install -y --no-install-recommends \ && apt-get update && apt-get install -y --no-install-recommends \
bash \ bash \
bind9utils \
ca-certificates \ ca-certificates \
curl \ curl \
jq \ jq \
@@ -30,7 +32,6 @@ RUN \
postgresql-client \ postgresql-client \
tzdata \ tzdata \
xz-utils \ xz-utils \
&& rm -rf /var/lib/apt/lists/* \
&& S6_ARCH="${BUILD_ARCH}" \ && S6_ARCH="${BUILD_ARCH}" \
&& if [ "${BUILD_ARCH}" = "amd64" ]; then S6_ARCH="x86_64"; \ && if [ "${BUILD_ARCH}" = "amd64" ]; then S6_ARCH="x86_64"; \
elif [ "${BUILD_ARCH}" = "armv7" ]; then S6_ARCH="arm"; fi \ elif [ "${BUILD_ARCH}" = "armv7" ]; then S6_ARCH="arm"; fi \
@@ -38,33 +39,16 @@ RUN \
&& curl -Ls "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" | tar xpJ -C / \ && curl -Ls "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" | tar xpJ -C / \
&& curl -Ls "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz" | tar Jxp -C / \ && curl -Ls "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz" | tar Jxp -C / \
&& curl -Ls "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz" | tar Jxp -C / \ && curl -Ls "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz" | tar Jxp -C / \
&& mkdir -p /etc/fix-attrs.d \
&& mkdir -p /etc/services.d \
&& mkdir -p /tmp/bashio \ && mkdir -p /tmp/bashio \
&& curl -Ls "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" | tar xz --strip 1 -C /tmp/bashio \ && curl -Ls "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" | tar xz --strip 1 -C /tmp/bashio \
&& mv /tmp/bashio/lib /usr/lib/bashio \ && mv /tmp/bashio/lib /usr/lib/bashio \
&& apt purge -y xz-utils \
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \ && ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
&& rm -rf /tmp/bashio && rm -rf /var/lib/apt/lists/* /tmp/*
COPY --chown=root scripts/*.sh / COPY rootfs /
RUN chmod a+x /*.sh COPY --from=grafana /dashboards /dashboards
COPY --from=grafana /dashboards_internal /dashboards
COPY --chown=root services/teslamate/run services/teslamate/finish /etc/services.d/teslamate/
RUN chmod a+x /etc/services.d/teslamate/*
COPY --chown=root services/nginx/run services/nginx/finish /etc/services.d/nginx/
RUN chmod a+x /etc/services.d/nginx/*
COPY --chown=root services/nginx/teslamate.conf /etc/nginx/conf.d/
COPY --from=grafana --chown=root /dashboards /dashboards
COPY --from=grafana --chown=root /dashboards_internal /dashboards
# S6-Overlay # S6-Overlay
ENTRYPOINT ["/init"] ENTRYPOINT ["/init"]
LABEL \
org.opencontainers.image.title="Home Assistant Add-on: TeslaMate" \
org.opencontainers.image.description="A self-hosted data logger for your Tesla." \
org.opencontainers.image.source="https://github.com/lildude/ha-addon-ghostfolio/" \
org.opencontainers.image.licenses="MIT"
+13 -4
View File
@@ -1,13 +1,22 @@
{ {
"build_from": { "build_from": {
"aarch64": "teslamate/teslamate:not-used", "aarch64": "teslamate/teslamate:1.32.0",
"amd64": "teslamate/teslamate:not-used", "amd64": "teslamate/teslamate:1.32.0",
"armv7": "teslamate/teslamate:not-used" "armv7": "teslamate/teslamate:1.32.0"
}, },
"args": { "args": {
"teslamate_version": "1.30.1" "teslamate_version": "1.32.0"
}, },
"codenotary": { "codenotary": {
"signer": "colin@symr.io" "signer": "colin@symr.io"
},
"labels":{
"maintainer": "Colin Seymour (https://github.com/lildude)",
"org.opencontainers.image.authors": "Colin Seymour (https://github.com/lildude)",
"org.opencontainers.image.description": "A self-hosted data logger for your Tesla.",
"org.opencontainers.image.documentation": "https://github.com/lildude/ha-addon-teslamate/blob/main/DOCS.md",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.source": "https://github.com/lildude/ha-addon-teslamate/",
"org.opencontainers.image.title": "Home Assistant Add-on: TeslaMate"
} }
} }
+40 -17
View File
@@ -11,13 +11,14 @@
set -o errexit set -o errexit
readonly HOST=$(bashio::config 'grafana_host') HOST=$(bashio::config 'grafana_host')
readonly PORT=$(bashio::config 'grafana_port') PORT=$(bashio::config 'grafana_port')
readonly USER=$(bashio::config 'grafana_user') USER=$(bashio::config 'grafana_user')
readonly PASS=$(bashio::config 'grafana_pass') PASS=$(bashio::config 'grafana_pass')
readonly DASHBOARDS_DIRECTORY="/dashboards" DASHBOARDS_DIRECTORY="/dashboards"
readonly FOLDER_NAME=$(bashio::config 'grafana_folder_name') FOLDER_NAME=$(bashio::config 'grafana_folder_name')
readonly HOST PORT USER PASS DASHBOARDS_DIRECTORY FOLDER_NAME
main() { main() {
@@ -25,13 +26,12 @@ main() {
URL="http://$HOST:$PORT" URL="http://$HOST:$PORT"
LOGIN="$USER:$PASS" LOGIN="$USER:$PASS"
case $task in case $task in
backup) backup;; backup) backup;;
restore) restore;; restore) restore;;
*) exit 1;; *) exit 1;;
esac esac
} }
@@ -42,9 +42,7 @@ backup() {
dashboard_json=$(get_dashboard "$dashboard") dashboard_json=$(get_dashboard "$dashboard")
if [[ -z "$dashboard_json" ]]; then if [[ -z "$dashboard_json" ]]; then
echo "ERROR: echo "ERROR: Couldn't retrieve dashboard $dashboard."
Couldn't retrieve dashboard $dashboard.
"
exit 1 exit 1
fi fi
@@ -56,11 +54,37 @@ backup() {
restore() { restore() {
bashio::log.info "Checking for Grafana folder: $FOLDER_NAME" bashio::log.info "Checking for Grafana datasource: TeslaMate"
FLD=$(curl --silent --show-error \ datasources=$(curl --silent --show-error \
--user "$LOGIN" -H "Content-Type: application/json" \ --user "$LOGIN" -H "Content-Type: application/json" \
$URL/api/folders | jq ".[] | select(.title==\"$FOLDER_NAME\")") "$URL/api/datasources")
if [[ $datasources == *"statusCode"* ]]; then
bashio::log.error "Error getting Grafana datasources: $(echo "$datasources" | jq -r .message)"
bashio::log.debug "$datasources"
exit 1
fi
DS=$(echo "$datasources" | jq ".[] | select(.name==\"TeslaMate\")")
if [[ -z "$DS" ]]; then
bashio::log.error "'TeslaMate' datasource not found. Please create or rename your datasource. It must be named 'TeslaMate'."
exit 1
fi
bashio::log.info "Checking for Grafana folder: $FOLDER_NAME"
folders=$(curl --silent --show-error \
--user "$LOGIN" -H "Content-Type: application/json" \
"$URL/api/folders")
if [[ $folders == *"statusCode"* ]]; then
bashio::log.error "Error getting Grafana folders: $(echo "$folders" | jq -r .message)"
bashio::log.debug "$folders"
exit 1
fi
FLD=$(echo "$folders" | jq ".[] | select(.title==\"$FOLDER_NAME\")")
if [[ -z "$FLD" ]]; then if [[ -z "$FLD" ]]; then
bashio::log.info "Not found... creating" bashio::log.info "Not found... creating"
FLD=$(curl \ FLD=$(curl \
@@ -72,7 +96,7 @@ restore() {
"$URL/api/folders") "$URL/api/folders")
fi fi
FOLDER_ID=$(echo $FLD | jq -r .id) FOLDER_ID=$(echo "$FLD" | jq -r .id)
if [[ -z "$FOLDER_ID" ]]; then if [[ -z "$FOLDER_ID" ]]; then
bashio::log.error "Could not determine Grafana folder id" bashio::log.error "Could not determine Grafana folder id"
@@ -123,5 +147,4 @@ list_dashboards() {
cut -d '/' -f2 cut -d '/' -f2
} }
main "$@" main "$@"
View File
+7 -1
View File
@@ -1,5 +1,11 @@
#!/command/with-contenv bashio #!/command/with-contenv bashio
# -*- bash -*- # -*- bash -*-
# shellcheck shell=bash # shellcheck shell=bash
mkdir /run/nginx
bashio::log.info "Starting NGINX..."
if [ -f /run/nginx ]; then
rm -f /run/nginx
fi
mkdir -p /run/nginx
exec nginx -g 'daemon off;error_log /proc/1/fd/1 error;' exec nginx -g 'daemon off;error_log /proc/1/fd/1 error;'
+1
View File
@@ -0,0 +1 @@
longrun
+3 -3
View File
@@ -54,14 +54,14 @@ done
# Import dashboards # Import dashboards
if bashio::config.true 'grafana_import_dashboards'; then if bashio::config.true 'grafana_import_dashboards'; then
/dashboards.sh restore /dashboards.sh restore || bashio::log.error "Failed to import dashboards"
fi fi
# Create the PostgreSQL database if it doesn't exist # Create the PostgreSQL database if it doesn't exist
if pg_isready -h "$DATABASE_HOST" -p "$DATABASE_PORT" > /dev/null 2>&1; then if pg_isready -h "$DATABASE_HOST" -p "$DATABASE_PORT" > /dev/null 2>&1; then
bashio::log.info "Creating database '$DATABASE_NAME' on $DATABASE_HOST" bashio::log.info "Creating database '$DATABASE_NAME' on $DATABASE_HOST"
if [[ -n $(PGPASSWORD="$DATABASE_PASS" psql -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER" postgres -Atqc "\list $DATABASE_NAME") ]]; then if [[ -n $(PGPASSWORD="$DATABASE_PASS" psql -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER" postgres -Atqc "\list \"$DATABASE_NAME\"") ]]; then
bashio::log.info "Database $DATABASE_NAME already exists" bashio::log.info "Database $DATABASE_NAME already exists"
else else
if PGPASSWORD="$DATABASE_PASS" psql -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER" postgres -qc "CREATE DATABASE \"$DATABASE_NAME\""; then if PGPASSWORD="$DATABASE_PASS" psql -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER" postgres -qc "CREATE DATABASE \"$DATABASE_NAME\""; then
@@ -78,7 +78,7 @@ fi
ulimit -n 1048576 ulimit -n 1048576
bashio::log.info "Starting TeslaMate" bashio::log.info "Starting TeslaMate..."
cd /opt/app cd /opt/app
exec $(/usr/bin/env sh) /entrypoint.sh bin/teslamate start exec $(/usr/bin/env sh) /entrypoint.sh bin/teslamate start
@@ -0,0 +1 @@
longrun