Initial commit.
This commit is contained in:
commit
99a9c367ad
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
roles/role*
|
2
README.md
Normal file
2
README.md
Normal file
@ -0,0 +1,2 @@
|
||||
# deploy
|
||||
$ SECRETS_ARCHIVE_PASSPHRASE=XXXXXX ansible-playbook -e target_name=host.domain -e SECRET_HOST=host2.domain2 deploy.yml
|
4
ansible.cfg
Normal file
4
ansible.cfg
Normal file
@ -0,0 +1,4 @@
|
||||
[defaults]
|
||||
inventory = inventory.yml
|
||||
host_key_checking = accept-new
|
||||
callback_whitelist=ansible.posix.profile_tasks, ansible.posix.timer
|
116
deploy.yml
Normal file
116
deploy.yml
Normal file
@ -0,0 +1,116 @@
|
||||
- name: Construct inventory
|
||||
hosts: localhost
|
||||
tasks:
|
||||
- name: add new instance to host group at runtime
|
||||
ansible.builtin.add_host:
|
||||
name: "{{ target_name }}"
|
||||
groups: target
|
||||
changed_when: false
|
||||
|
||||
- name: Configure Modane server
|
||||
hosts: target
|
||||
gather_facts: false
|
||||
tasks:
|
||||
- name: Gather facts
|
||||
ansible.builtin.setup:
|
||||
|
||||
- name: Include role_unpack_secrets
|
||||
ansible.builtin.include_role:
|
||||
name: role_unpack_secrets
|
||||
vars:
|
||||
LOCAL_AND_REMOTE: true
|
||||
|
||||
- name: Include secrets from yml db
|
||||
ansible.builtin.include_vars: "{{ local_workdir }}/secrets/secrets.yml"
|
||||
|
||||
- name: Create homeassistant container
|
||||
containers.podman.podman_container:
|
||||
name: homeassistant
|
||||
image: ghcr.io/home-assistant/home-assistant:2024.3
|
||||
network:
|
||||
- host
|
||||
env:
|
||||
TZ: "Europe/Paris"
|
||||
privileged: true
|
||||
restart_policy: always
|
||||
volume:
|
||||
- /mnt/apps/volumes/homeassistant_conf:/config
|
||||
become: true
|
||||
|
||||
- name: create docker-mounted-files directory
|
||||
ansible.builtin.file:
|
||||
path: "/usr/local/docker-mounted-files/docker-thermostat"
|
||||
state: directory
|
||||
become: true
|
||||
|
||||
- name: Template thermostat conf.yml
|
||||
ansible.builtin.template:
|
||||
src: templates/conf.yml.j2
|
||||
dest: /usr/local/docker-mounted-files/docker-thermostat/conf.yml
|
||||
become: true
|
||||
|
||||
- name: Build thermostat image
|
||||
ansible.builtin.include_role:
|
||||
name: role_build_container_image
|
||||
vars:
|
||||
image: "{{ item }}"
|
||||
with_items:
|
||||
- repo_url: https://git.scimetis.net/yohan/docker-thermostat.git
|
||||
repo_name: docker-thermostat
|
||||
name: thermostat
|
||||
result_var: build_result
|
||||
|
||||
- debug: var=build_result
|
||||
when: build_result.changed
|
||||
|
||||
- name: Gather facts on thermostat container
|
||||
containers.podman.podman_container_info:
|
||||
name: thermostat
|
||||
register: container_info
|
||||
become: true
|
||||
|
||||
- debug: var=container_info.containers[0].Config.Annotations.git_commit
|
||||
when: container_info.containers | length == 1
|
||||
|
||||
- name: Set fact bool_recreate to true
|
||||
set_fact:
|
||||
bool_recreate: true
|
||||
when:
|
||||
- container_info.containers | length == 1
|
||||
- container_info.containers[0].Config.Annotations.git_commit != commit
|
||||
|
||||
- name: create thermostat volume
|
||||
ansible.builtin.file:
|
||||
path: "/mnt/apps/volumes/thermostat"
|
||||
state: directory
|
||||
become: true
|
||||
|
||||
- name: Delete thermostat container
|
||||
containers.podman.podman_container:
|
||||
name: thermostat
|
||||
state: absent
|
||||
become: true
|
||||
when: bool_recreate | default(false)
|
||||
|
||||
- name: Create thermostat container
|
||||
containers.podman.podman_container:
|
||||
name: thermostat
|
||||
image: localhost/thermostat:latest
|
||||
network:
|
||||
- host
|
||||
env:
|
||||
TZ: "Europe/Paris"
|
||||
GUNICORN_CMD_ARGS: "--bind=0.0.0.0:3002"
|
||||
privileged: true
|
||||
restart_policy: always
|
||||
volume:
|
||||
- /usr/local/docker-mounted-files/docker-thermostat/conf.yml:/root/conf.yml
|
||||
- /mnt/apps/volumes/thermostat:/root/instance
|
||||
- /run/udev:/run/udev
|
||||
become: true
|
||||
when: bool_recreate | default(false) or container_info.containers | length == 0
|
||||
|
||||
- name: Prune images
|
||||
containers.podman.podman_prune:
|
||||
image: true
|
||||
become: true
|
9
install_requirements.sh
Executable file
9
install_requirements.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
#Absolute path to this script
|
||||
SCRIPT=$(readlink -f $0)
|
||||
#Absolute path this script is in
|
||||
SCRIPTPATH=$(dirname $SCRIPT)
|
||||
|
||||
cd $SCRIPTPATH
|
||||
ansible-galaxy role install -r roles/requirements.yml -p roles/
|
||||
|
4
inventory.yml
Normal file
4
inventory.yml
Normal file
@ -0,0 +1,4 @@
|
||||
target:
|
||||
vars:
|
||||
ansible_user: yohan
|
||||
|
9
roles/requirements.yml
Normal file
9
roles/requirements.yml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
- name : role_unpack_secrets
|
||||
src : ssh://git@git.scimetis.net:2222/yohan/role_unpack_secrets.git
|
||||
scm: git
|
||||
|
||||
- name : role_build_container_image
|
||||
src : ssh://git@git.scimetis.net:2222/yohan/role_build_container_image.git
|
||||
scm: git
|
||||
|
77
templates/conf.yml.j2
Normal file
77
templates/conf.yml.j2
Normal file
@ -0,0 +1,77 @@
|
||||
api_key: "{{ modane_server_thermostat_api_key }}"
|
||||
|
||||
debug: False
|
||||
|
||||
targets:
|
||||
- target_awake_temperature
|
||||
- target_sleep_temperature
|
||||
- target_frost_protection
|
||||
|
||||
modes:
|
||||
- short_absence
|
||||
- long_absence
|
||||
|
||||
rooms_settings:
|
||||
"double bedroom":
|
||||
target_awake_temperature: 19
|
||||
target_unconfirmed_awake_temperature: 18
|
||||
target_sleep_temperature: 18
|
||||
target_unconfirmed_sleep_temperature: 18
|
||||
target_frost_protection: 6
|
||||
metric: Modane_temperature_double_bedroom
|
||||
relays: "1"
|
||||
enabled: True
|
||||
"single bedroom":
|
||||
target_awake_temperature: 17
|
||||
target_unconfirmed_awake_temperature: 16
|
||||
target_sleep_temperature: 16
|
||||
target_unconfirmed_sleep_temperature: 16
|
||||
target_frost_protection: 6
|
||||
metric: Modane_temperature_single_bedroom
|
||||
relays: "3"
|
||||
enabled: True
|
||||
"living room":
|
||||
target_awake_temperature: 21
|
||||
target_unconfirmed_awake_temperature: 21
|
||||
target_sleep_temperature: 18
|
||||
target_unconfirmed_sleep_temperature: 18
|
||||
target_frost_protection: 6
|
||||
metric: Modane_temperature_living_room
|
||||
relays: "4"
|
||||
enabled: True
|
||||
"bathroom":
|
||||
target_awake_temperature: 21
|
||||
target_unconfirmed_awake_temperature: 21
|
||||
target_sleep_temperature: 19
|
||||
target_unconfirmed_sleep_temperature: 19
|
||||
target_frost_protection: 6
|
||||
metric: Modane_temperature_bathroom
|
||||
relays: ""
|
||||
enabled: False
|
||||
|
||||
# If there is too much load, it most likely means someone is cooking and nobody is in the bedrooms.
|
||||
shedding_order:
|
||||
- double bedroom
|
||||
- single bedroom
|
||||
- living room
|
||||
|
||||
default_target: target_frost_protection
|
||||
|
||||
# Load in VA
|
||||
relays_load:
|
||||
"1": 1500
|
||||
"3": 1500
|
||||
"4": 2000
|
||||
|
||||
awake_hour: "7:30"
|
||||
sleep_hour: "23:30"
|
||||
forced_mode_duration: 7200.0
|
||||
load_shedder_interval: 10.0
|
||||
relay_control_interval: 300.0
|
||||
hysteresis: 0.5
|
||||
|
||||
# Puissance souscrite : 6kVA
|
||||
# Puissance max avant coupure (marge 30%) : 7,8kVA
|
||||
max_load: 7800
|
||||
load_margin: 100
|
||||
|
Loading…
Reference in New Issue
Block a user