Skip to content

Commit 9a3d30c

Browse files
authored
Add vwsfriend (#78)
* Add vwsfriend docker-compose
1 parent 3578492 commit 9a3d30c

10 files changed

Lines changed: 168 additions & 16 deletions

File tree

defaults/main.yml

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,8 @@ homestack_ha_base_domain: example.com
5252
homestack_ha_mosquitto_image_version: 2.0.21
5353
# homestack_ha_mosquitto_base_path: "" # must be set
5454
homestack_ha_mosquitto_users: {}
55-
5655
# renovate: image=evcc/evcc
57-
homestack_ha_evcc_image_version: 0.203.4
56+
homestack_ha_evcc_image_version: 0.203.6
5857
# homestack_ha_evcc_base_path: "" # must be set
5958
# homestack_ha_evcc_installation_id: "" # must be set
6059
homestack_ha_evcc_mqtt_user: evcc
@@ -63,8 +62,28 @@ homestack_ha_evcc_vw_user: mail@example.com
6362
homestack_ha_evcc_vw_password: supersafe
6463
homestack_ha_evcc_vw_vin: WVWZZZAAZJD000000
6564
homestack_ha_evcc_ntfy_uri: https://ntfy.sh/abcdefghijklmnopqrstuvwxyz012345
66-
homestack_ha_evcc_grid_costs: 0.30 # €/kWh
67-
homestack_ha_evcc_feedin_revenue: 0.082 # €/kWh
65+
homestack_ha_evcc_grid_costs: 0.30 # €/kWh
66+
homestack_ha_evcc_feedin_revenue: 0.082 # €/kWh
67+
68+
# vwsfriend
69+
homestack_vwsfriend_active: true
70+
homestack_vwsfriend_base_domain: example.com
71+
72+
# renovate: image=tillsteinbach/vwsfriend
73+
homestack_vwsfriend_image_version: 0.24.7
74+
# homestack_vwsfriend_base_path: "" # must be set
75+
homestack_vwsfriend_username: admin
76+
# homestack_vwsfriend_password: secret # must be set
77+
# homestack_vwsfriend_weconnect_user: "" # must be set
78+
# homestack_vwsfriend_weconnect_password: "" # must be set
79+
# homestack_vwsfriend_weconnect_spin: "" # must be set
80+
homestack_vwsfriend_weconnect_interval: 120
81+
homestack_vwsfriend_postgres_image_version: 13.21
82+
homestack_vwsfriend_db_user: vwsfriend
83+
# homestack_vwsfriend_db_password: secret # must be set
84+
homestack_vwsfriend_db_name: vwsfriend
85+
homestack_vwsfriend_additional_parameters: ""
86+
homestack_vwsfriend_grafana_version: 0.24.7
6887

6988
homestack_backup: true
7089
homestack_backup_script_path: /usr/local/bin

files/backup/evcc_container_backup.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ log_message() {
3333
curl -H "X-Priority: ${priority}" -d "$1" "$NTFY_TOPIC"
3434
}
3535

36-
# Function to disable maintenance mode and exit
36+
# Log before exiting
3737
cleanup() {
3838
local exit_code=$?
3939
if [ $exit_code -ne 0 ]; then
@@ -73,7 +73,7 @@ before() {
7373
exit 1
7474
fi
7575

76-
log_message "Local evcc backup successful" low
76+
log_message "Local evcc backup snapshot created" low
7777
}
7878

7979
success() {

tasks/ha.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
mode: "{{ item.mode }}"
99
with_items:
1010
- name: config
11-
mode: '0750'
11+
mode: "0750"
1212
- name: data
13-
mode: '0750'
13+
mode: "0750"
1414
- name: log
15-
mode: '0750'
15+
mode: "0750"
1616

1717
- name: ha | Copy mosquitto config files
1818
ansible.builtin.template:
@@ -36,7 +36,7 @@
3636
mode: "{{ item.mode }}"
3737
with_items:
3838
- name: data
39-
mode: '0750'
39+
mode: "0750"
4040

4141
- name: ha | Copy evcc configuration
4242
ansible.builtin.template:

tasks/main.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828
ansible.builtin.include_tasks: ha.yml
2929
when: homestack_ha_active
3030

31+
- name: Include vwsfriend stack tasks
32+
ansible.builtin.include_tasks: vwsfriend.yml
33+
when: homestack_vwsfriend_active
34+
3135
- name: Include backup tasks
3236
ansible.builtin.include_tasks: backup.yml
3337
when: homestack_backup

tasks/monitoring.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
mode: "{{ item.mode }}"
99
with_items:
1010
- name: data
11-
mode: '0750'
11+
mode: "0750"
1212

1313
- name: monitoring | Copy prometheus specific files to their respective directories
1414
ansible.builtin.copy:

tasks/nextcloud.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
mode: "{{ item.mode }}"
99
with_items:
1010
- name: custom_apps
11-
mode: '0750'
11+
mode: "0750"
1212
- name: data
13-
mode: '0770'
13+
mode: "0770"
1414
- name: config
15-
mode: '0750'
15+
mode: "0750"
1616

1717
- name: nextcloud | Copy nextcloud specific files to their respective directories
1818
ansible.builtin.copy:

tasks/vwsfriend.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
- name: vwsfriend | Ensure vwsfriend directories exist
3+
ansible.builtin.file:
4+
path: "{{ homestack_vwsfriend_base_path }}/{{ item.name }}"
5+
state: directory
6+
owner: "{{ homestack_uid }}"
7+
group: "{{ homestack_gid }}"
8+
mode: "{{ item.mode }}"
9+
with_items:
10+
- name: config
11+
mode: "0750"
12+
- name: db
13+
mode: "0750"
14+
- name: grafana
15+
mode: "0750"
16+
17+
- name: vwsfriend | Write docker-compose file
18+
ansible.builtin.template:
19+
src: "docker-compose-vwsfriend.yml.j2"
20+
dest: "{{ homestack_output_path }}/docker-compose-vwsfriend.yml"
21+
owner: "{{ homestack_uid }}"
22+
group: "{{ homestack_gid }}"
23+
mode: "0600"
24+
backup: true

templates/backup/evcc_env_vars.sh.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ fi
77

88
readonly ZPOOL_EVCC="{{ zfs_pools[0].name }}"
99

10-
readonly EVCC_DIR="{{ appdata_path }}/evcc"
10+
readonly EVCC_DIR="{{ homestack_ha_evcc_base_path }}"
1111

1212
readonly NTFY_TOPIC="{{ autorestic_ntfy_topic }}"

templates/backup/nextcloud_env_vars.sh.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ readonly NEXTCLOUD_UID="{{ nextcloud_uid }}"
99
readonly MYSQL_ROOT_PASSWORD="{{ homestack_nextcloud_mysql_root_password }}"
1010
readonly ZPOOL_NC="{{ zfs_pools[0].name }}"
1111

12-
readonly NEXTCLOUD_DIR="{{ appdata_path }}/nextcloud"
12+
readonly NEXTCLOUD_DIR="{{ homestack_nextcloud_base_path }}/nextcloud"
1313

1414
readonly NTFY_TOPIC="{{ autorestic_ntfy_topic }}"
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
{{ ansible_managed | comment }}
2+
---
3+
services:
4+
vwsfriend:
5+
container_name: vwsfriend
6+
depends_on:
7+
vwsfriend-db:
8+
condition: service_healthy
9+
environment:
10+
VWSFRIEND_USERNAME: "{{ homestack_vwsfriend_username }}"
11+
VWSFRIEND_PASSWORD: "{{ homestack_vwsfriend_password }}"
12+
WECONNECT_USER: "{{ homestack_vwsfriend_weconnect_user }}"
13+
WECONNECT_PASSWORD: "{{ homestack_vwsfriend_weconnect_password | replace('$', '$$') }}"
14+
WECONNECT_SPIN: "{{ homestack_vwsfriend_weconnect_spin }}"
15+
WECONNECT_INTERVAL: "{{ homestack_vwsfriend_weconnect_interval }}"
16+
DATABASE_URL: "postgresql://{{ homestack_vwsfriend_db_user }}:{{ homestack_vwsfriend_db_password }}@vwsfriend-db:5432/{{ homestack_vwsfriend_db_name }}"
17+
ADDITIONAL_PARAMETERS: "--with-database --with-abrp {{ homestack_vwsfriend_additional_parameters }}"
18+
healthcheck:
19+
test: (wget -qO- http://localhost:4000/healthcheck | grep "ok" -q) || exit 1
20+
interval: 10s
21+
timeout: 3s
22+
retries: 3
23+
image: tillsteinbach/vwsfriend:{{ homestack_vwsfriend_image_version }}
24+
labels:
25+
traefik.enable: true
26+
traefik.docker.network: traefik-net
27+
traefik.http.routers.vwsfriend.rule: "Host(`vwsfriend.{{ homestack_vwsfriend_base_domain }}`)"
28+
traefik.http.routers.vwsfriend.entrypoints: websecure
29+
traefik.http.routers.vwsfriend.tls.options: modern@file
30+
networks:
31+
- traefik
32+
- vwsfriend
33+
restart: unless-stopped
34+
user: "{{ homestack_uid }}:{{ homestack_gid }}"
35+
volumes:
36+
- "{{ homestack_vwsfriend_base_path }}/config:/config"
37+
38+
vwsfriend-db:
39+
container_name: vwsfriend-db
40+
environment:
41+
POSTGRES_USER: "{{ homestack_vwsfriend_db_user }}"
42+
POSTGRES_PASSWORD: "{{ homestack_vwsfriend_db_password }}"
43+
POSTGRES_DB: "{{ homestack_vwsfriend_db_name }}"
44+
TZ: "UTC"
45+
PGTZ: "UTC"
46+
healthcheck:
47+
test: ["CMD-SHELL", "pg_isready -p 5432 --username={{ homestack_vwsfriend_db_user }} --dbname={{ homestack_vwsfriend_db_name }}"]
48+
interval: 10s
49+
timeout: 5s
50+
retries: 5
51+
image: postgres:{{ homestack_vwsfriend_postgres_image_version }}
52+
networks:
53+
- vwsfriend
54+
user: "{{ homestack_uid }}:{{ homestack_gid }}"
55+
restart: unless-stopped
56+
volumes:
57+
- "{{ homestack_vwsfriend_base_path }}/db:/var/lib/postgresql/data"
58+
59+
grafana:
60+
container_name: vwsfriend-grafana
61+
environment:
62+
GF_SECURITY_ADMIN_USER: "{{ homestack_vwsfriend_username }}"
63+
GF_SECURITY_ADMIN_PASSWORD: "{{ homestack_vwsfriend_password }}"
64+
GF_LOG_LEVEL: info
65+
GF_LOG_MODE: console
66+
DB_USER: "{{ homestack_vwsfriend_db_user }}"
67+
DB_PASSWORD: "{{ homestack_vwsfriend_db_password }}"
68+
DB_HOSTNAME: "vwsfriend-db"
69+
DB_PORT: "5432"
70+
DB_NAME: "{{ homestack_vwsfriend_db_name }}"
71+
VWSFRIEND_USERNAME: "{{ homestack_vwsfriend_username }}"
72+
VWSFRIEND_PASSWORD: "{{ homestack_vwsfriend_password }}"
73+
VWSFRIEND_HOSTNAME: "vwsfriend"
74+
VWSFRIEND_PORT: 4000
75+
healthcheck:
76+
test: ["CMD", "wget", "-O", "/dev/null", "http://localhost:3000"]
77+
interval: 10s
78+
timeout: 15s
79+
retries: 10
80+
start_period: 30s
81+
image: tillsteinbach/vwsfriend-grafana:{{ homestack_vwsfriend_grafana_version }}
82+
labels:
83+
traefik.enable: true
84+
traefik.docker.network: traefik-net
85+
traefik.http.routers.vwsfriend-grafana.rule: "Host(`vwsfriend-grafana.{{ homestack_vwsfriend_base_domain }}`)"
86+
traefik.http.routers.vwsfriend-grafana.entrypoints: websecure
87+
traefik.http.routers.vwsfriend-grafana.tls.options: modern@file
88+
networks:
89+
- traefik
90+
- vwsfriend
91+
restart: unless-stopped
92+
user: "{{ homestack_uid }}:{{ homestack_gid }}"
93+
volumes:
94+
- "{{ homestack_vwsfriend_base_path }}/grafana:/var/lib/grafana"
95+
96+
networks:
97+
traefik:
98+
name: traefik-net
99+
external: true
100+
vwsfriend:
101+
name: ha-net
102+
internal: true
103+
ipam:
104+
config:
105+
- subnet: 172.20.5.0/24

0 commit comments

Comments
 (0)