Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deconz: Add LEDVANCE / OSRAM otau firmware downloader #983

Merged
merged 18 commits into from Jan 11, 2020
Merged
4 changes: 4 additions & 0 deletions deconz/CHANGELOG.md
@@ -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
Expand Down
1 change: 1 addition & 0 deletions deconz/Dockerfile
Expand Up @@ -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 /

Expand Down
2 changes: 1 addition & 1 deletion deconz/config.json
@@ -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"],
Expand Down
42 changes: 42 additions & 0 deletions deconz/data/ledvance-otau-dl.sh
@@ -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
4 changes: 4 additions & 0 deletions deconz/data/run.sh
Expand Up @@ -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[@]}"