DEMON
30.Сентябрь.2021 07:28:33
1
Приветствую всех!
Постарался поискать на форуме, но точного решения своего вопроса не нашёл.
Имеется WB 6.7
Есть оборудование Wi-Fi от бренда Shelly которые при подключении к брокеру MQTT работают через жёстко заданный первый топик shellies, да и вообще имеют свою структуру топиков.
Например:
The following topics can be used to read and set output channels 0
and 1
:
shellies/shellyuni-<deviceid>/relay/<i>
to report status: on
, off
or overpower
shellies/shellyuni-<deviceid>/relay/<i>/command
accepts on
, off
or toggle
Каким способом мне лучше всего обрабатывать не стандартные для WB топики?
Добрый день. Советую использовать как пример Tasmota
Но вообще - в wb-rules есть trackMqtt для обработки произвольных топиков.
UPD: Исправил
DEMON
30.Сентябрь.2021 13:18:38
3
trackMqtt видимо имелось ввиду.
Не стал плодить темы, но такая проблема возникла с веб-интерфейсом при установке пароля на брокер.
Файл: /mnt/data/etc/mosquitto/conf.d/auth.conf
acl_file /etc/mosquitto/acl.conf
password_file /etc/mosquitto/passwd.conf
allow_anonymous false
allow_anonymous_localhost true
Советую в настройках интерфейса поставить 80 порт. То есть чтобы браузер обращался не “напрямую” к брокеру а через nginx прокси.
DEMON
01.Октябрь.2021 14:37:23
6
Может кому пригодиться. Накидал правило (драйвер MQTT) для ShellyUNI
ShellyUNI MQTT
// MQTT driever ShellyUNI
var deviceName = "ShellyUNI";
var deviceAddr = "AABBCCDDEEFF";
defineVirtualDevice(deviceName, {
title: deviceName,
cells: {
"input0": {
type: "switch",
value: false,
readonly: true
},
"input1": {
type: "switch",
value: false,
readonly: true
},
"inputCnt0": {
type: "value",
value: 0,
readonly: true
},
"inputCnt1": {
type: "value",
value: 0,
readonly: true
},
"relay0": {
type: "switch",
value: false
},
"relay1": {
type: "switch",
value: false
},
"adc": {
type: "voltage",
value: 0,
readonly: true
}
}
});
defineRule("relay0_change", {
whenChanged: deviceName+"/relay0",
then: function (newValue, devName, cellName) {
var state = (newValue == true) ? "on" : "off";
publish("shellies/shellyuni-"+deviceAddr+"/relay/0/command", state);
}
});
defineRule("relay1_change", {
whenChanged: deviceName+"/relay1",
then: function (newValue, devName, cellName) {
var state = (newValue == true) ? "on" : "off";
publish("shellies/shellyuni-"+deviceAddr+"/relay/1/command", state);
}
});
trackMqtt("shellies/shellyuni-"+deviceAddr+"/input_event/0", function(message){
var obj = JSON.parse(message.value);
dev[deviceName+"/inputCnt0"] = parseInt(obj.event_cnt);
});
trackMqtt("shellies/shellyuni-"+deviceAddr+"/input_event/1", function(message){
var obj = JSON.parse(message.value);
dev[deviceName+"/inputCnt1"] = parseInt(obj.event_cnt);
});
trackMqtt("shellies/shellyuni-"+deviceAddr+"/input/0", function(message){ dev[deviceName+"/input0"] = (message.value == "1") ? true : false; });
trackMqtt("shellies/shellyuni-"+deviceAddr+"/input/1", function(message){ dev[deviceName+"/input1"] = (message.value == "1") ? true : false; });
trackMqtt("shellies/shellyuni-"+deviceAddr+"/relay/0", function(message){ dev[deviceName+"/relay0"] = (message.value == "on") ? true : false; });
trackMqtt("shellies/shellyuni-"+deviceAddr+"/relay/1", function(message){ dev[deviceName+"/relay1"] = (message.value == "on") ? true : false; });
trackMqtt("shellies/shellyuni-"+deviceAddr+"/adc/0", function(message){ dev[deviceName+"/adc"] = parseFloat(message.value) });
3 лайка
Благодарю, лаконично и понятно написан - наверняка будет полезен.
Shanay
10.Январь.2024 19:00:16
8
Приветствую.
Подскажите куда лучше добавить данный драйвер если есть похожее устройство?
Добрый день.
Т.е. вы сделали шаблон для другого устройства Shelly?
Присылайте сюда и на данной странице документации можем добавить упоминание и про ваше устройство.