Найти тему
Антон Волохов

OpenHab2+zigbee2mqtt maps

Про установку и настройку zigbee2mqtt написана очень хорошая статья на https://www.zigbee2mqtt.io/ . По поводу yandex2mqtt хорошая статья тут.

Для себя сделал несколько, так сказать «лайф хаков», в /etc/openhab2 создал папку system. в ней у меня 4 папки: yandex2mqtt, zigbee2mqtt, nginx и scripts. Так сдалано потому что в openhab есть собственная реализация backup-a, да и хранить удобнее все в одном месте.
ЗЫ. nginx симлинк в /etc

Приступим. Для начала нужно установить пакет graphviz. Скачать файл svg-pan-zoom.min.js и положить его в /etc/openhab2/html/zigbee/

Для того чтобы zigbee2mqtt мог красиво рисовать карту, нужно в configuration.yaml добавить строчки:

map_options:
graphviz:
colors:
fill:
enddevice: '[решетка]fff8ce'
coordinator: ' [решетка] e04e5d'
router: ' [решетка] 4ea3e0'
font:
coordinator: ' [решетка] ffffff'
router: ' [решетка] ffffff'
enddevice: ' [решетка] 000000'
line:
active: ' [решетка] 009900'
inactive: ' [решетка] 994444'

В каталоге /etc/openhab2/system/script создать файл get_maps с содержимым:

#!/bin/bash
# additional dependencies: graphviz imagemagick
# put temporal files in ram filesystem
file="/etc/openhab2/html/zigbee/zigbee"
fechahora=$(date '+%F-%H:%M')
#~ echo $fechahora
mosquitto_sub -t zigbee2mqtt/bridge/networkmap/graphviz -C 1 >${file}.dot &
mosquitto_pub -t zigbee2mqtt/bridge/networkmap -m graphviz
# wait until mosquitto_sub ends
wait
# generate graphic with graphviz (change to short texts with sed)
/usr/bin/sfdp -Nfontname=ComicSans -Nfontsize=9 -Ncolor= [решетка] 666666 -Nstyle=filled -Nfillcolor= [решетка] eeeeee -Efontname=ComicSans -Efontsize=8 -Efontcolor= [решетка] cc0000 -Ecolor= [решетка] cccccc -Tsvg -o ${file}.svg ${file}.dot

Создать файл /etc/openhab2/html/zigbee/zigbee-maps.html с кодом:

<html>
<head>
<script src="svg-pan-zoom.min.js"></script>
</head>
<body style="margin: 0; padding: 0">
<embed type="image/svg+xml" src="zigbee.svg" id="map" width="100%" height="100%"/>
<script language="JavaScript"> document.getElementById('map').addEventListener('load', function(){ // Will get called after embed element was loaded svgPanZoom(document.getElementById('map'), { controlIconsEnabled: true
});
})
var panZoomMap = svgPanZoom(' [решетка] map');
</script>
</body>
</html>

Создать правило /etc/openhab2/rules/zigbee.rules :

rule "Request ZigBee Network Map in Graphviz format" when Time cron "0 0 */4 * * ?" then executeCommandLine("/etc/openhab2/system/script/get_maps")end

Ну и добавить в ваш sitemap строку:

Group item=zigbee_NetworkMap_Webview { Webview url="/static/zigbee/zigbee.html" height=16 icon="network" }

По тексту замените [решетка] на решетку.

Ну и получаем желаемый результат))

http://blog.yorulez.ru/2020/04/22/openhabzigbee2mqtt-maps/

-2