|
|
|
@ -1,59 +1,98 @@
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
#
|
|
|
|
|
# Функция configure() устанавливает Zigbee2MQTT
|
|
|
|
|
#
|
|
|
|
|
# Параметры:
|
|
|
|
|
# $1 = check - проверка обновлений, в противном случае установка или обновление
|
|
|
|
|
# $2 - возвращает имя модуля для перезагрузки в случае выполненного обновления
|
|
|
|
|
#
|
|
|
|
|
# Guide: https://www.zigbee2mqtt.io/guide/installation/07_python_virtual_environment.html
|
|
|
|
|
|
|
|
|
|
set -ueo pipefail
|
|
|
|
|
export PATH="/lib/rc/bin:$PATH"
|
|
|
|
|
|
|
|
|
|
test -e ~/zigbee2mqtt-live && exit
|
|
|
|
|
|
|
|
|
|
SCRIPT=$(readlink -f $0)
|
|
|
|
|
[[ $UID == 0 ]] && exec su - zigbee2mqtt -c "$SCRIPT"
|
|
|
|
|
|
|
|
|
|
. /var/db/repos/container/scripts/functions.sh
|
|
|
|
|
. /var/db/repos/calculate/scripts/ini.sh
|
|
|
|
|
|
|
|
|
|
cd
|
|
|
|
|
ver=$(curl -s https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Zigbee2MQTT version is ${ver}"
|
|
|
|
|
[[ -z $ver ]] && eerror 'The latest version of zigbee2mqtt is not defined!'
|
|
|
|
|
|
|
|
|
|
wget -q https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${ver}.zip -O zigbee2mqtt-${ver}.zip
|
|
|
|
|
einfo 'Extract the archive'
|
|
|
|
|
unzip -q -d versions zigbee2mqtt-${ver}.zip
|
|
|
|
|
rm zigbee2mqtt-${ver}.zip
|
|
|
|
|
ln -sf versions/zigbee2mqtt-${ver} zigbee2mqtt-live
|
|
|
|
|
|
|
|
|
|
if [[ -z "$(ls -A /var/calculate/zigbee2mqtt)" ]]; then
|
|
|
|
|
mv versions/zigbee2mqtt-${ver}/data/* /var/calculate/zigbee2mqtt
|
|
|
|
|
rmdir versions/zigbee2mqtt-${ver}/data
|
|
|
|
|
ln -s /var/calculate/zigbee2mqtt versions/zigbee2mqtt-${ver}/data
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
einfo 'Install python env'
|
|
|
|
|
python -m venv zigbee2mqtt-live/.venv
|
|
|
|
|
|
|
|
|
|
einfo 'Activate environment'
|
|
|
|
|
. zigbee2mqtt-live/.venv/bin/activate
|
|
|
|
|
|
|
|
|
|
einfo 'Upgrade pip, wheel and setuptools'
|
|
|
|
|
pip install --upgrade pip wheel setuptools
|
|
|
|
|
|
|
|
|
|
einfo 'Install node environment'
|
|
|
|
|
pip install nodeenv
|
|
|
|
|
|
|
|
|
|
einfo 'Init node environment'
|
|
|
|
|
nodeenv -p -n ${ini[zigbee2mqtt.nodeenv]}
|
|
|
|
|
|
|
|
|
|
einfo 'Install dependencies'
|
|
|
|
|
cd zigbee2mqtt-live
|
|
|
|
|
npm ci
|
|
|
|
|
cd
|
|
|
|
|
|
|
|
|
|
echo '. ~/zigbee2mqtt-live/.venv/bin/activate' >> .bashrc
|
|
|
|
|
echo '. ~/zigbee2mqtt-live/.venv/bin/activate' >> .bash_profile
|
|
|
|
|
|
|
|
|
|
ebegin 'Setup zigbee2mqtt'
|
|
|
|
|
mv /etc/zigbee2mqtt/configuration.yaml /etc/zigbee2mqtt/configuration.yaml.old
|
|
|
|
|
cat > /etc/zigbee2mqtt/configuration.yaml << EOF
|
|
|
|
|
configure() {
|
|
|
|
|
local action=$1
|
|
|
|
|
local __result=$2
|
|
|
|
|
|
|
|
|
|
local home_dir=/var/calculate/www/zigbee2mqtt
|
|
|
|
|
local last_ver="$(get_last_ver Koenkk/zigbee2mqtt github)"
|
|
|
|
|
local work_dir="$home_dir/versions/zigbee2mqtt-$last_ver"
|
|
|
|
|
local live_dir="$home_dir/zigbee2mqtt-live"
|
|
|
|
|
local live_ver="$(get_live_ver $live_dir)"
|
|
|
|
|
|
|
|
|
|
if [[ $action == 'check' ]]; then
|
|
|
|
|
if [[ $live_ver == $last_ver ]]; then
|
|
|
|
|
einfo "zigbee2mqtt: the latest version is installed $live_ver"
|
|
|
|
|
else
|
|
|
|
|
einfo "zigbee2mqtt: $last_ver update available, $live_ver installed"
|
|
|
|
|
eval $__result=1 # наличие обновления
|
|
|
|
|
fi
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ ! -e $home_dir ]]; then
|
|
|
|
|
mkdir -p $home_dir
|
|
|
|
|
chmod 700 $home_dir/versions
|
|
|
|
|
chown zigbee2mqtt: $home_dir
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ $live_ver != $last_ver ]]; then
|
|
|
|
|
if [[ $live_ver != '' ]]; then
|
|
|
|
|
echo Update Zigbee2MQTT
|
|
|
|
|
else
|
|
|
|
|
echo Install Zigbee2MQTT
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
su - zigbee2mqtt -s /bin/bash -c "$(cat <<- EOF
|
|
|
|
|
set -ueo pipefail
|
|
|
|
|
export PATH="/lib/rc/bin:$PATH"
|
|
|
|
|
|
|
|
|
|
ebegin Download zigbee2mqtt ${last_ver}
|
|
|
|
|
test -e $work_dir && rm -rf $work_dir
|
|
|
|
|
wget -q https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${last_ver}.zip \
|
|
|
|
|
-O zigbee2mqtt-${last_ver}.zip
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
ebegin 'Extract the archive'
|
|
|
|
|
unzip -q -d versions zigbee2mqtt-${last_ver}.zip
|
|
|
|
|
rm zigbee2mqtt-${last_ver}.zip
|
|
|
|
|
ln -sf versions/zigbee2mqtt-${last_ver} zigbee2mqtt-live
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
# вынесем настройки
|
|
|
|
|
if [[ -z "$(ls -A /var/calculate/zigbee2mqtt)" ]]; then
|
|
|
|
|
mv versions/zigbee2mqtt-${last_ver}/data/* /var/calculate/zigbee2mqtt
|
|
|
|
|
fi
|
|
|
|
|
rm -rf versions/zigbee2mqtt-${last_ver}/data
|
|
|
|
|
ln -s /var/calculate/zigbee2mqtt versions/zigbee2mqtt-${last_ver}/data
|
|
|
|
|
|
|
|
|
|
ebegin 'Create a virtualenv'
|
|
|
|
|
python -m venv zigbee2mqtt-live/.venv
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
ebegin 'Activate environment'
|
|
|
|
|
source zigbee2mqtt-live/.venv/bin/activate
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
ebegin 'Upgrade pip, wheel and setuptools'
|
|
|
|
|
pip install --upgrade pip wheel setuptools &>>/tmp/zigbee2mqtt.log
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
ebegin 'Install node environment'
|
|
|
|
|
pip install nodeenv &>>/tmp/zigbee2mqtt.log
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
ebegin 'Init node environment ${ini[zigbee2mqtt.nodeenv]}'
|
|
|
|
|
nodeenv -p -n ${ini[zigbee2mqtt.nodeenv]} &>>/tmp/zigbee2mqtt.log
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
einfo 'Install dependencies'
|
|
|
|
|
cd zigbee2mqtt-live
|
|
|
|
|
npm ci &>>/tmp/zigbee2mqtt.log
|
|
|
|
|
cd
|
|
|
|
|
EOF
|
|
|
|
|
)"
|
|
|
|
|
|
|
|
|
|
if [[ $live_ver == '' ]]; then
|
|
|
|
|
ebegin 'Setup zigbee2mqtt'
|
|
|
|
|
mv /etc/zigbee2mqtt/configuration.yaml /etc/zigbee2mqtt/configuration.yaml.old
|
|
|
|
|
cat > /etc/zigbee2mqtt/configuration.yaml << EOF
|
|
|
|
|
# Home Assistant integration (MQTT discovery)
|
|
|
|
|
homeassistant: true
|
|
|
|
|
|
|
|
|
@ -78,4 +117,10 @@ frontend:
|
|
|
|
|
port: 8080
|
|
|
|
|
host: 127.0.0.1
|
|
|
|
|
EOF
|
|
|
|
|
eend
|
|
|
|
|
chown zigbee2mqtt: /etc/zigbee2mqtt/configuration.yaml
|
|
|
|
|
eend
|
|
|
|
|
|
|
|
|
|
eval $__result=zigbee2mqtt # демон который следует перезагрузить
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|