
O Janus MQTT Proxy é um serviço que escrevi no Go como um projeto de hobby. Ele se conecta ao broker MQTT e assina todos os eventos, e os clientes, por sua vez, se conectam ao proxy e se comunicam com ele como com um broker MQTT.
Ele permite que você:
- restringir o acesso do cliente a vários tópicos. Incluindo restringir separadamente o acesso de leitura e gravação;
- Substitua nomes de tópicos e conteúdo do evento por regexp s.
Por que isso é necessário?
MQTT . , - 1 /my/lamp/on, - On /my/lamp. , , . , .
Janus MQTT : , , MQTT- . / , .
. , /light/main. «, — , — , , ». , .
, , , . Janus MQTT / , . , , , — .
Janus MQTT
, , — , .
Janus MQTT , . — :
broker_to_client: #       
  #    MQTT discovery.
  - topic: ^/devices/wb-gpio/controls/LIGHT_([^/]*)/meta/type$
    template: /homeassistant/light/{{.f1}}/config
    val_map:
      switch: >-
        {
        "command_topic":"/light/{{.f1}}/state",
        "state_topic":"/light/{{.f1}}/state",
        "name":"{{.f1}}"
        }
  - topic: ^/devices/wb-gpio/controls/LIGHT_([^/]*)$
    template: /light/{{.f1}}/state
    val_map: {0: OFF, 1: ON}
client_to_broker: #       
  - topic: ^/light/([^/]*)/state$
    template: /devices/wb-gpio/controls/LIGHT_{{.f1}}/on
    val_map: {OFF: 0, ON: 1}
, . .
, Home Assistant , .
MQTT discovery : Wiren Board , . , . switch. retained — . JSON-, , MQTT discovery .
Janus MQTT
Go paho.mqtt.golang. MQTT- . , , MQTT-.
: , , . . .. MITM.
:
- QoS — 2 1 , ;
- - QoS message_id, uint16 ;
- Janus MQTT . , ;
- , in-memory retained-.
MQTT- client.serveIncoming, TCP-. MQTT- :
- ConnectPacket — Connack ;
- SubscribePacket — Suback retained-;
- UnsubscribePacket — Unsuback ;
- PingreqPacket — Pingresp;
- PublishPacket — ;
- PubackPacket, PubrelPacket, PubcompPacket ;
- DisconnectPacket — .
QoS. MQTT QoS:
, 1 2 , , , ( 2 , QoS 1, ).
publish- QOS=2

publish- QOS=2

Janus MQTT :
- Wiren Board — ;
- Home Assistant — ( );
- Yandex2mqtt — .
Wiren Board
. . MQTT-.
Yandex2mqtt
oAuth API . . munrexio, bawdiest , .
, :
$ mosquitto_sub -h localhost -u yandex2mqtt -P yandex2mqtt -t '#' -v
/light/LIVING_TABLE/state 1

Home Assistant
. . , .
Home Assistant , , .
, Home Assistant MQTT Discovery — , Home Assistant MQTT. JSON-, .
Home Assistant :
mqtt:
  username: !env_var MQTT_USER
  password: !env_var MQTT_PASS
  broker: !env_var MQTT_HOST
  discovery: true
  discovery_prefix: /homeassistant
Janus MQTT
Janus MQTT Home Assistant . 100 , 17 , 6 (/) 5 . . .
Docker
NanoPi docker-compose.yml.

, , , .
10 M. Golang!
/ :
https://github.com/phoenix-mstu/janus-mqtt-proxy.
docker-compose :
https://github.com/phoenix-mstu/smart_home/tree/master/raspberry.
, : 52.59.242.204:26927 ( ), / — habr/habr, — MQTT, . . , :
- ( ).
- .
- — , . , , . , DoS- — . .