deconz: Add LEDVANCE / OSRAM otau firmware downloader (#983)

* Update config.json

* Create ledvance-otau-dl.sh

* Update run.sh

* Update Dockerfile

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update ledvance-otau-dl.sh

Fix lint issues:
  https://www.shellcheck.net/wiki/SC2046 -- Quote this to prevent word splitt...
  https://www.shellcheck.net/wiki/SC2003 -- expr is antiquated. Consider rewr...

* Update ledvance-otau-dl.sh

Fix lint issue:
  https://www.shellcheck.net/wiki/SC2004 -- $/${} is unnecessary on arithmeti...

* Update Dockerfile

Adressing @pvizeli comment : The script have the correct permission of a+x?

Add CMD to set a+x permission on ledvance-otau-dl.sh script

* Update Dockerfile

* Add exec permissions

* revert oups bad multiple cmdlines in CMD[]

* revert oups bad multiple cmdlines in CMD[]

* dummy commit

* Update Dockerfile

remove dummy comment

* Update ledvance-otau-dl.sh

remove dummy comment

* fix bug

Co-authored-by: Pascal Vizeli <pascal.vizeli@syshack.ch>
This commit is contained in:
olijouve
2020-01-11 13:26:36 +01:00
committed by Pascal Vizeli
parent 66a41c96af
commit 6847f767cd
5 changed files with 52 additions and 1 deletions

View File

@@ -1,5 +1,9 @@
# Changelog
## 5.1
- Add LEDVANCE / OSRAM otau firmware downloader, respecting max 10 DL per minute Ratelimits
## 5.0
- Fix additional gateway visible on Phoscon login on Ingress

View File

@@ -56,6 +56,7 @@ RUN if [ "${BUILD_ARCH}" = "armhf" ]; \
&& sed -i 's/\/root/\/data/' /etc/passwd
COPY data/ika-otau-dl.sh /bin/
COPY data/ledvance-otau-dl.sh /bin/
COPY data/nginx.conf /etc/nginx/nginx.conf
COPY data/run.sh data/discovery.sh /

View File

@@ -1,6 +1,6 @@
{
"name": "deCONZ",
"version": "5.0",
"version": "5.1",
"slug": "deconz",
"description": "Control a Zigbee network with ConBee or RaspBee by Dresden Elektronik",
"arch": ["amd64", "armhf", "aarch64"],

42
deconz/data/ledvance-otau-dl.sh Executable file
View File

@@ -0,0 +1,42 @@
#!/bin/bash
URL_OSRAM="https://api.update.ledvance.com/v1/zigbee/firmwares"
while true
do
# fetch data
if ! OSRAM_DATA="$(curl -sL ${URL_OSRAM})"; then
echo "[Info] Can't fetch data from osram!"
sleep 18000
continue
fi
OSRAM_DATA_SIZE="$(echo "${OSRAM_DATA}" | jq --raw-output '.firmwares | length')"
DL_DONE=0
for (( i=0; i < "${OSRAM_DATA_SIZE}"; i++ )); do
OSRAM_COMPANY=$( echo "${OSRAM_DATA}" | jq --raw-output ".firmwares[$i].identity.company // empty" 2>/dev/null)
OSRAM_PRODUCT=$( echo "${OSRAM_DATA}" | jq --raw-output ".firmwares[$i].identity.product // empty" 2>/dev/null)
OTAU_FILENAME=$( echo "${OSRAM_DATA}" | jq --raw-output ".firmwares[$i].name // empty" 2>/dev/null)
OTAU_URL="$URL_OSRAM/download/${OSRAM_COMPANY}/${OSRAM_PRODUCT}/latest"
if [ -z "${OTAU_URL}" ]; then
continue
fi
OTAU_FILE="/data/otau/${OTAU_FILENAME}"
if [ -f "${OTAU_FILE}" ] && [[ $(file --mime-type -b "${OTAU_FILE}") == "application/octet-stream" ]] ; then
continue
fi
curl -s -L -o "${OTAU_FILE}" "${OTAU_URL}"
((DL_DONE++))
if [ "$((DL_DONE % 10))" == "0" ]; then
# LEDVANCE/OSRAM API RateLimits : The rate limit 10 calls per 60 seconds or quota 100 MB per month.
DL_DONE=0
sleep 65
fi
done
sleep 259200
done

View File

@@ -123,6 +123,10 @@ deCONZ-otau-dl.sh &> /dev/null &
bashio::log.info "Running the IKEA OTA updater..."
ika-otau-dl.sh &> /dev/null &
# Start OTA updates for LEDVANCE/OSRAM
bashio::log.info "Running the LEDVANCE/OSRAM OTA updater..."
ledvance-otau-dl.sh &> /dev/null &
# Wait until all is done
bashio::log.info "deCONZ is set up and running!"
wait "${WAIT_PIDS[@]}"