Добрый день! Не устанавливается пакет. Можете поправить зависимости? Контроллер WB6, прошивка установлена отсюда с полным сбросом.
The following packages have unmet dependencies:
wb-mqtt-timestamper : Depends: libjsoncpp0 but it is not installable
Добрый день! Не устанавливается пакет. Можете поправить зависимости? Контроллер WB6, прошивка установлена отсюда с полным сбросом.
The following packages have unmet dependencies:
wb-mqtt-timestamper : Depends: libjsoncpp0 but it is not installable
это что-то древнее и ненужное. Экспериментировали когда-то, но в стандартную прошивку не пошло.
это что-то древнее и ненужное. Экспериментировали когда-то, но в стандартную прошивку не пошло.
К сожалению, любое ПО не защищено от ошибок и подвисаний. Поэтому, дополнительная телеметрия просто необходима. И ее так не хватает в софте WB.
Приходится “рисовать” свои костыли
К счастью, в модбас устройствах от WirenBoard есть регистр показывающий uptime девайса. Я добавил сооттвествующий канал:
{
"slave_id": "63",
"device_type": "WB-MR6C",
"name": "MR6C",
"id": "MR6C",
"enabled": true,
"poll_interval": 1000,
"channels": [
{
"name": "Uptime",
"type": "value",
"reg_type": "input",
"address": 104,
"format": "u32",
"channel_readonly": true,
"poll_interval": 60000
}
]
}
По таймеру отслеживаю, изменения этого регистра. Если значение не меняется - “пинаю” wb-mqtt-serial и шлю оповещение.
Добрый вечер. Я правильно понял, сейчас нет возможности добавить timestamp в пакет mqtt ? Если только брать из mqtt-db?
А для чего это нужно? В правилах, где нужно что-то делать в зависимости от даты и времени, просто создаю вирт. девайс и пихаю в него текущую дату.
Например, вот кусок кода, где отслеживается актуальность показаний счетчика воды (он опрашивается через BLE и случается что bluetooth в контоллере зависает).
// Проверка актуальности показаний
var now = new Date(); // дата и время сейчас
var timestamp_cold = new Date(dev["water_meter_cold"]["timestamp"]);
timestamp_cold.setHours(timestamp_cold.getHours() - 3); // TimeZone fix
var timestamp_age_cold = parseFloat((now - timestamp_cold)/1000/3600).toFixed(0);
if (timestamp_age_cold > 24) { // Нет данных больше 24 часов
var message_short = "Cold water meter - values " + timestamp_age_cold + " hours old!";
var message_long = "Показания счетчика холодной воды не обновлялись больше " + timestamp_age_cold + " часов!";
log (message_short);
if (dev["alarm_level"]["email_enable"] == true) {
Notify.sendEmail (me_email, message_short, message_long);
}
if (dev["alarm_level"]["sms_enable"] == true) {
Notify.sendSMS (me_phone, message_short);
}
}
Данные передаются на сервер, и бывает связь теряется, а при восстановление он присылает последнее значение
У себя я не пробрасываю все топики через мост mosquitto, а упаковываю новые значения в json добавляя поле получения сообщения. И отправляю на сервер уже обработанные данные.
а можете расписать по подробнее, а то мне кажется я не до понял. И если не секрет как это делается
А зачем?
ну, путь возможный, но довольно сложный. Ведь есть же
Также предусмотрен доступ к топкам /devices/.../controls/.../meta/... как внешних устройств (только чтение), так и локально определённых виртуальных (чтение и запись).
Синтаксис получения доступа к значению мета-топика выглядит следующим образом: dev["wb-mr3_48/K1#error"] или dev["wb-mr3_48/K1#readonly"]
Синтаксис для установки значений локальных устройств аналогичен: dev["virDev1/cell1#error"] = "some error" или dev["virDev1/cell2#max"] = 255
Эти значения можно аналогично значениям самих контролов использовать в правилах как триггеры. Например, можно отслеживать когда теряется связь с устройством и каким-либо образом на это реагировать.
Пример, будет отправлено смс каждый раз, когда первое реле на модуле WB-MR3 станет недоступно
defineRule("onRelayLost", {
asSoonAs: function () { // также возможно использовать параметр when
return (dev["wb-mr3_48/K1#error"]);
},
then: function () {
log("!!!!!!!!!!!!!! when fired !!!!!!!!!!!!!!");
log("ERROR: " + dev["wb-mr3_48/K1#error"]);
Notify.sendSMS(...);
}
});
Написал отдельный модуль, который подписан на топики, которые нужно прокинуть на сервер.
При получении нового значения формирую JSON с меткой времени и отправляю в топик, который прокинут на сервер.
Ваш путь не сработает, в случае “подвисания” службы wb-mqtt-serial - в мета error просто не кому будет сигнализировать.