From 54c1050fedcbd01f0453aa9bea852d5fe2326983 Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Wed, 29 Jan 2025 11:08:55 +0100 Subject: [PATCH] Software title: Domoticz Home Automation System Domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device. --- tools/include/images/DOM002.png | Bin 0 -> 26381 bytes tools/include/markdown/DOM001-header.md | 17 +++++ tools/json/config.software.json | 33 ++++++++ tools/modules/runtime/config.runtime.sh | 1 + tools/modules/software/module_domoticz.sh | 87 ++++++++++++++++++++++ 5 files changed, 138 insertions(+) create mode 100644 tools/include/images/DOM002.png create mode 100644 tools/include/markdown/DOM001-header.md create mode 100644 tools/modules/software/module_domoticz.sh diff --git a/tools/include/images/DOM002.png b/tools/include/images/DOM002.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d5eca6d937204be9285eb4e908bcb09d702ed9 GIT binary patch literal 26381 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 literal 0 HcmV?d00001 diff --git a/tools/include/markdown/DOM001-header.md b/tools/include/markdown/DOM001-header.md new file mode 100644 index 000000000..edc4c5abb --- /dev/null +++ b/tools/include/markdown/DOM001-header.md @@ -0,0 +1,17 @@ +Domoticz is an open-source home automation platform that allows you to control and monitor smart devices in your home. It supports a wide range of devices, including lights, sensors, thermostats, and cameras. Through its web interface or mobile app, you can set up automation rules and schedules, providing greater convenience and energy efficiency. It’s customizable, flexible, and can be run on a variety of hardware platforms supported by Armbian. + +=== "Access to the web interface" + + The web interface is accessible via port **8080**: + + - URL: `https://:8080` + - Username/Password: admin / domoticz + +=== "Directories" + + - Config directory: `/armbian/domoticz` + +=== "Advanced setup" + + - Primary USB device passing through (`/dev/ttyUSB0`) to Docker container is enabled by default + - For more complex setup, please follow this comprehensive guide: diff --git a/tools/json/config.software.json b/tools/json/config.software.json index 0eaef4d36..e0ff72848 100644 --- a/tools/json/config.software.json +++ b/tools/json/config.software.json @@ -120,6 +120,39 @@ "status": "Preview", "author": "@igorpecovnik", "condition": "module_haos status" + }, + { + "id": "DOM001", + "description": "Domoticz open source home automation", + "about": "This operation will install Domoticz.", + "command": [ + "module_domoticz install" + ], + "status": "Preview", + "author": "@igorpecovnik", + "condition": "! module_domoticz status" + }, + { + "id": "DOM002", + "description": "Domoticz remove", + "about": "This operation will remove Domoticz.", + "command": [ + "module_domoticz remove" + ], + "status": "Preview", + "author": "@igorpecovnik", + "condition": "module_domoticz status" + }, + { + "id": "DOM003", + "description": "Domoticz purge with data folder", + "about": "This operation will purge Domoticz.", + "command": [ + "module_domoticz purge" + ], + "status": "Preview", + "author": "@igorpecovnik", + "condition": "module_domoticz status" } ] }, diff --git a/tools/modules/runtime/config.runtime.sh b/tools/modules/runtime/config.runtime.sh index 122305fa1..3185390d7 100644 --- a/tools/modules/runtime/config.runtime.sh +++ b/tools/modules/runtime/config.runtime.sh @@ -120,6 +120,7 @@ update_sub_submenu_data "Software" "Printing" "OCT002" "http://$LOCALIPADD:${mod # Home automation update_sub_submenu_data "Software" "HomeAutomation" "HAB002" "http://$LOCALIPADD:${module_options["module_openhab,port"]}" update_sub_submenu_data "Software" "HomeAutomation" "HAS002" "http://$LOCALIPADD:${module_options["module_haos,port"]}" +update_sub_submenu_data "Software" "HomeAutomation" "DOM002" "http://$LOCALIPADD:${module_options["module_domoticz,port"]}" # DNS update_sub_submenu_data "Software" "DNS" "DNS003" "http://$LOCALIPADD:${module_options["module_pi_hole,port"]%% *}" # removing second port from url diff --git a/tools/modules/software/module_domoticz.sh b/tools/modules/software/module_domoticz.sh new file mode 100644 index 000000000..4ea357b96 --- /dev/null +++ b/tools/modules/software/module_domoticz.sh @@ -0,0 +1,87 @@ +module_options+=( + ["module_domoticz,author"]="@armbian" + ["module_domoticz,maintainer"]="@igorpecovnik" + ["module_domoticz,feature"]="module_domoticz" + ["module_domoticz,example"]="install remove purge status help" + ["module_domoticz,desc"]="Install domoticz container" + ["module_domoticz,status"]="Active" + ["module_domoticz,doc_link"]="https://domoticz.com/docs/" + ["module_domoticz,group"]="Monitoring" + ["module_domoticz,port"]="8080" + ["module_domoticz,arch"]="x86-64 arm64" +) +# +# Module domoticz +# +function module_domoticz () { + local title="domoticz" + local condition=$(which "$title" 2>/dev/null) + + if pkg_installed docker-ce; then + local container=$(docker container ls -a | mawk '/domoticz?( |$)/{print $1}') + local image=$(docker image ls -a | mawk '/domoticz?( |$)/{print $3}') + fi + + local commands + IFS=' ' read -r -a commands <<< "${module_options["module_domoticz,example"]}" + + DOMOTICZ_BASE="${SOFTWARE_FOLDER}/domoticz" + + case "$1" in + "${commands[0]}") + pkg_installed docker-ce || module_docker install + [[ -d "$DOMOTICZ_BASE" ]] || mkdir -p "$DOMOTICZ_BASE" || { echo "Couldn't create storage directory: $DOMOTICZ_BASE"; exit 1; } + docker run -d \ + --name=domoticz \ + --pid=host \ + --net=lsio \ + --device /dev/ttyUSB0:/dev/ttyUSB0 \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ="$(cat /etc/timezone)" \ + -p 8080:8080 \ + -p 8443:443 \ + -v "${DOMOTICZ_BASE}:/opt/domoticz/userdata" \ + --restart unless-stopped \ + domoticz/domoticz:stable + for i in $(seq 1 20); do + if docker inspect -f '{{ index .Config.Labels "build_version" }}' domoticz >/dev/null 2>&1 ; then + break + else + sleep 3 + fi + if [ $i -eq 20 ] ; then + echo -e "\nTimed out waiting for ${title} to start, consult your container logs for more info (\`docker logs domoticz\`)" + exit 1 + fi + done + ;; + "${commands[1]}") + [[ "${container}" ]] && docker container rm -f "$container" >/dev/null + [[ "${image}" ]] && docker image rm "$image" >/dev/null + ;; + "${commands[2]}") + ${module_options["module_domoticz,feature"]} ${commands[1]} + [[ -n "${DOMOTICZ_BASE}" && "${DOMOTICZ_BASE}" != "/" ]] && rm -rf "${DOMOTICZ_BASE}" + ;; + "${commands[3]}") + if [[ "${container}" && "${image}" ]]; then + return 0 + else + return 1 + fi + ;; + "${commands[4]}") + echo -e "\nUsage: ${module_options["module_domoticz,feature"]} " + echo -e "Commands: ${module_options["module_domoticz,example"]}" + echo "Available commands:" + echo -e "\tinstall\t- Install $title." + echo -e "\tstatus\t- Installation status $title." + echo -e "\tremove\t- Remove $title." + echo + ;; + *) + ${module_options["module_domoticz,feature"]} ${commands[4]} + ;; + esac +}