MQTT топик от внешнего устройства

Да можно, но лень и хочется феншуя :slight_smile:

Нет счастья в жизни.
Если я начинаю проверять топик /zoneminder#, то время от времени:

ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x9e1380 } [/zoneminder#] map[] 1325})

и постоянно:

WARNING: [wbgo_mqtt] MQTT connection lost: write tcp 127.0.0.1:38904->127.0.0.1:1883: write: broken pipe

Если /devices/3, например, то просто тишина в эфире. Что-то я делаю не так…

Со стороны брокер вот такой:

А чем проверяете? TrackMqtt?

Верно будет /devices/3/#

Привет!

  1. MQTTexplorer в данном скриншоте под Ubuntu
  2. Варнинги и другие ахтунги цитировал из messages в /var/log/
  3. За тройкой никакого ветвления нет с точки зрения публикующего устройства…

Надо в конфиге /etc/mosquitto/mosquitto.conf поменять persistence true на persistence false
Затем перезапустить контроллер.
Ну и для полного порядка после перезагрузки удалить /mnt/data/var/lib/mosquitto/mosquitto.db

А оно ж есть…

Да, в скриншоте есть, факт :slight_smile:
Завтра дотерзаю

Доброе утро!
Заклинание

Надо в конфиге /etc/mosquitto/mosquitto.conf поменять persistence true на persistence false
Затем перезапустить контроллер.
Ну и для полного порядка после перезагрузки удалить /mnt/data/var/lib/mosquitto/mosquitto.db

Ни на что не повлияло. Как только

trackMqtt("/devices/3/controls/#"

совпадает с тем, что прилетает от ZM, начинается Ошибка записи файла: MQTT RPC request timed out MqttTimeoutError в вэб-интерфейся и всякие спецэффекты, описанные ранее.

Значит, предположение неверно, восстанавливать настройки в конфиге брокера не надо.

Тут слегка непонятно… trackMqtt как хук, создается один раз.
пример можно посмотреть тут: Сообщение при отключении или неисправности в Telegram - #3 от пользователя BrainRoot

Спасибо, сработало. Парсить строку, или есть путь проще?

> 2022-04-07 18:42:40name: /devices/3/controls, value: {"eventtype":"event_start","hookvalue":"0","detection":{"boxes":[[340,128,628,448],[411,147,467,204]],"frame_id":"snapshot","labels":["person","Pavel"],"confidences":[0.936543047428131,1],"image_dimensions":{"original":[1080,1920],"resized":[450,800]}},"monitor":"3","state":"alarm","name":"TR-D8123ZIR3:(7944) [s] detected:person:94% Pavel:100% Motion All","eventid":"7944"} 
> 2022-04-07 18:42:45name: /devices/3/controls, value: {"eventid":"7944","detection":[],"hookvalue":0,"eventtype":"event_end","monitor":"3","name":"Ended:TR-D8123ZIR3:(7944) Motion: All","state":"alarm"}

Самому парсить - не надо:

//https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
var text = '{"eventtype": "event_start", "hookvalue": 0}'
log.info (JSON.parse(text))

Возвращается объект, к его элементам можно по именам обращаться.

ЗЫ движок форма кавычки испортил, поэтому для примера пару элементов взял.

1 лайк

В общем, работает это так:

> trackMqtt("Zoneminder/#", function(message){	//Эта фигня самостоятельна и работает без всяких возбудителей типа whenChanged и таймеров
> foo = JSON.parse(message.value)					//Распарсиваем содержимое в содержательной части и пихаем в некий 'foo'
>     dev["ZM/topic"] = message.topic;			//Часть содержимого, где про топик (помним, что путь к топику заканчивается #)
>     dev["ZM/monitor"] = foo["monitor"];			//Достаём из message.value значение 'monitor'
>     dev["ZM/eventtype"] = foo["eventtype"];		// -**- 'eventtype'
>     dev["ZM/eventid"] = foo["eventid"];
>     dev["ZM/detection"] = foo["name"];
>     dev["ZM/detected"] = foo["detection"]["labels"][((foo["detection"]["labels"].length)-1)]; //ZM отдаёт результаты опознания в виде массива, см. начало темы. Мы получаем кол-во элементов вещественным числом, а нумерация начинается с нуля. Поэтому вычитаем 1 и вынимаем последний элемент.
> });

Вот. Отчитался.
Но с точки зрения контроля доступа -лажа.
Потому, что выходя нельзя поворачиваться к вызывной панели лицом. Оно тут же откроет дверь…
Придётся добавлять голос.

1 лайк

Хм. Запретить правилом открывать дверь если она только что была открыта разве что?

Просто добавлю голос. Вызывная панель в режиме камеры отдаёт серверу звук тоже. Раз уж всё равно пришлось GPU в ZM втыкать - пусть анализирует. По результатам могу доложиться.

1 лайк

Так, голос - понятно, можно завести на ZM, хотя я давненько не обновлял его, не испоьзовал аудио. А как наличие голоса тут поможет, не пойму.

Планирую прикрутить что-то типа vosk для распознавания голоса. Ну и открывать, если совпала узнаваемая морда и голосовая команда.

Ну, это прямо хорошо. То есть распознавать голос - уже после того как отработает распознавание картинки?

Я думаю, внутри одного события. Еще не вник в тему голоса, но по-идее, это идентификатор не хуже физиономии. Ни кто не мешает в промежутке пару секунд, получив из конкретного источника опознанную биометрию, проверить и наличие второго фактора.
Только вот времени на это нет совсем :frowning:

Вот да, время - это самое ценное. Когда-то мог сутками сидеть и впиливать в том же ZM протоколы управления PTZ камерами китайскими…

Вспомнила бабка, как девкой была! :rofl:

1 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.