diff --git a/homeassistant.yml b/homeassistant.yml index 4e103dd..ac45efd 100644 --- a/homeassistant.yml +++ b/homeassistant.yml @@ -5,6 +5,8 @@ tags: homeassistant - role: mosquitto tags: mosquitto + - role: zwavejs2mqtt + tags: zwavejs2mqtt tasks: - name: ensure homeassistant is running service: diff --git a/roles/zwavejs2mqtt/defaults/main.yml b/roles/zwavejs2mqtt/defaults/main.yml new file mode 100644 index 0000000..3269c8b --- /dev/null +++ b/roles/zwavejs2mqtt/defaults/main.yml @@ -0,0 +1 @@ +zwavejs_device_container: /dev/ttyUSB0 diff --git a/roles/zwavejs2mqtt/handlers/main.yml b/roles/zwavejs2mqtt/handlers/main.yml new file mode 100644 index 0000000..4acfeae --- /dev/null +++ b/roles/zwavejs2mqtt/handlers/main.yml @@ -0,0 +1,6 @@ +- name: reload systemd + command: systemctl daemon-reload +- name: restart zwavejs2mqtt + service: + name: zwavejs2mqtt + state: restarted diff --git a/roles/zwavejs2mqtt/tasks/main.yml b/roles/zwavejs2mqtt/tasks/main.yml new file mode 100644 index 0000000..40eab68 --- /dev/null +++ b/roles/zwavejs2mqtt/tasks/main.yml @@ -0,0 +1,57 @@ +- name: ensure podman is installed + package: + name: '{{ zwavejs_podman_packages }}' + state: present + tags: + - install + +- name: ensure zwavejs user exists + user: + name: zwavejs + system: true + home: /var/lib/zwavejs + groups: + - dialout + createhome: false + register: zwavejs_user + tags: + - user + +- name: ensure zwavejs data directory exists + file: + path: /var/lib/zwavejs + owner: zwavejs + group: zwavejs + mode: '0755' + state: directory + tags: + - datadir + +- name: ensure zwavejs2mqtt container image is available + podman_image: + name: docker.io/zwavejs/zwavejs2mqtt + tag: latest + state: present + notify: + - restart zwavejs2mqtt + tags: + - container-image + - container + +- name: ensure zwavejs2mqtt systemd unit is installed + template: + src: zwavejs2mqtt.service.j2 + dest: /etc/systemd/system/zwavejs2mqtt.service + mode: '0644' + notify: + - reload systemd + - restart zwavejs2mqtt + tags: + - service + - systemd +- name: ensure zwavejs2mqtt starts at boot + service: + name: zwavejs2mqtt + enabled: true + tags: + - service diff --git a/roles/zwavejs2mqtt/templates/zwavejs2mqtt.service.j2 b/roles/zwavejs2mqtt/templates/zwavejs2mqtt.service.j2 new file mode 100644 index 0000000..633e98f --- /dev/null +++ b/roles/zwavejs2mqtt/templates/zwavejs2mqtt.service.j2 @@ -0,0 +1,26 @@ +[Unit] +Description=Zwavejs2Mqtt + +[Service] +Type=notify +NotifyAccess=all +ExecStartPre=/usr/bin/setfacl -m zwavejs:rw {{ zwavejs_device }} +ExecStartPre=-/usr/bin/podman container rm --ignore -f zwavejs2mqtt +ExecStart=/usr/bin/podman run \ + --pull never \ + --sdnotify=conmon --cgroups=no-conmon \ + --rm \ + --network=host \ + --name zwavejs2mqtt \ + -v /var/lib/zwavejs:/usr/src/app/store:Z \ + --uidmap 0:{{ zwavejs_user.uid }}:1 \ + --gidmap 0:{{ zwavejs_user.group }}:1 \ + --uidmap 1:5000001:1024 \ + --gidmap 1:5000001:1024 \ + --device {{ zwavejs_device }}:{{ zwavejs_device_container}}:rw \ + docker.io/zwavejs/zwavejs2mqtt:latest +ProtectSystem=full +UMask=0077 + +[Install] +WantedBy=multi-user.target diff --git a/roles/zwavejs2mqtt/vars/main.yml b/roles/zwavejs2mqtt/vars/main.yml new file mode 100644 index 0000000..4f7cf67 --- /dev/null +++ b/roles/zwavejs2mqtt/vars/main.yml @@ -0,0 +1,2 @@ +zwavejs_podman_packages: +- podman