Vad innebär MQTT broker?

Currently One är förberedd för att integreras med ditt Home Automation System, t.ex. Home Assistant. Ett av sätten att integrera är att Currently One skickar sin data till din egna MQTT broker (t.ex. Mosquitto), och att HomeAssistant också är konfigurerad mot samma broker.

Mosquitto med docker-compose

Ett bra sätt att få upp en egen broker är att köra Mosquitto i en docker container.
Med docker-compose kan det se ut så här:

version: '3'
services:

  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto
    ports:
      - 1883:1883
      - 9001:9001
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/log:/mosquitto/log
    restart: unless-stopped

I din fil ./mosquitto/config/mosquitto.conf kan du ha:

persistence true
persistence_location /mosquitto/data/
listener 1883
password_file /mosquitto/config/passwd.txt
allow_anonymous false
log_dest file /mosquitto/log/mosquitto.log

Med ovan får du sedan med htpass lägga till användare i filen ./mosquitto/config/passwd.txt

Home Assistant

Här använder du “Integration” som heter MQTT för att peka ut din broker.

Currently One appen

Till sist konfigurerar du din enhet i appen, och anger hostname, port, username och password för din broker.

1 Like

Hej! En fråga gällande MQTT-broker ifall den stödjer mTLS ?

MQTT-klienten stödjer endast username / password authentication, så inte mTLS vad jag kan förstå.
Så här ser inställningarna ut i appen:

Går det möjligen att lösa med en separat tunnel som du sätter upp nånstans på ditt lokala nätverk?

Jag fyller i alla MQTT broker data i appen, Currently enheten försvinner ett tag (startar om ?), men när jag sedan går tillbaka till MQTT konfigurationen är alla fält tomma igen.
Vad gör jag för fel?

I Home Assistant MQTT under log ser jag logen nedan, men tror inte det är relevant då 172.30.32.2 måste vara en intern docker address, kör 192.168.x.x på mitt “vanliga” nätverk

2023-11-02 07:41:40: New connection from 172.30.32.2:32956 on port 1883.
2023-11-02 07:41:40: Client closed its connection.
2023-11-02 07:43:40: New connection from 172.30.32.2:46746 on port 1883.
2023-11-02 07:43:40: Client closed its connection.
2023-11-02 07:45:40: New connection from 172.30.32.2:50198 on port 1883.
2023-11-02 07:45:40: Client closed its connection.
2023-11-02 07:47:40: New connection from 172.30.32.2:44754 on port 1883.
2023-11-02 07:47:40: Client closed its connection.
2023-11-02 07:49:40: New connection from 172.30.32.2:38426 on port 1883.
2023-11-02 07:49:40: Client closed its connection.
2023-11-02 07:51:40: New connection from 172.30.32.2:33240 on port 1883.
2023-11-02 07:51:40: Client closed its connection.
2023-11-02 07:53:40: New connection from 172.30.32.2:37564 on port 1883.
2023-11-02 07:53:40: Client closed its connection.
2023-11-02 07:55:40: New connection from 172.30.32.2:41578 on port 1883.
2023-11-02 07:55:40: Client closed its connection.
2023-11-02 07:57:40: New connection from 172.30.32.2:33080 on port 1883.
2023-11-02 07:57:40: Client closed its connection.
2023-11-02 07:59:40: New connection from 172.30.32.2:47176 on port 1883.
2023-11-02 07:59:40: Client closed its connection.

Hej,

Nämnde förr att ni inte hade några planer på att stödja mTLS. Har det skett ngn förändring i den fronten ?

Med vänliga hälsningar Reza

Hej,
TLDR: starta om appen och se om dina inställningar syns då?

Hypoteser:
Eftersom det ser ut som du har appen på en iPhone (?), så är det väl inte att du trycker på Back-knappen på Android när du är nöjd med dina inställningar?
Man måste nämligen trycka på vänster-pilen i övre vänstra hörnet när man backar ur för att inställningarna ska sparas, vilket kan vara förvirrande på Android.

Då är nästa hypotes att appen/mobilen inte har direktuppkoppling med enheten på det lokala nätverket när du försöker göra inställningen. Detta syns på lite olika ställen:

  1. Den lilla pricken på enheten i settings är röd, istället för grön när direktuppkoppling finns.
  2. Texten just now säger not connected när direktuppkoppling saknas.

Men återigen, du säger att enheten försvinner ett tag då den mycket riktigt startar om.

Sista hypotesen är att de nya inställningarna inte syns i appen förrän man startar om den. Bekräfta gärna om det gäller din situation, så skapar jag en buggrapport i vårt system.

Hej Reza,
nej, det har inte efterfrågats sen dess och därför inte diskuterats.

En fråga är hur du ser framför dig att serverns cert ska kunna valideras; ska man ladda upp certet lokalt i enheten, eller tycker du man kan strunta i verifieringen?

Hälsningar
Ola på Currently

Helst auto provisionering under tillverkning. Men ja det går borde gå ladda upp cert lokalt också. Men helst vill man inte skicka private key & cert till vem som helst. Det tappar hela syftet med zero trust.

Aha, du menar att man provisionerar ett antal vanliga root-cert redan vid tillverkningen?

ja det skulle vara säkrast. Men då vet jag. Jag ska kolla om det kanske skulle kunna räcka user/password.

Kör iPhone 11 med ios 17.1. Currently 1.11.4(197)
Har provat med både grön och röd prick (feedback; För mig innebär allt rött att något är dåligt, så jag hade gissat att röd prick innebar avsaknad av uppkoppling)
Startat om både app och Currently i diverse olika kombinationer, men MQTT inställningen försvinner och kommer inte tillbaka.
Går det att ange brokern via http://ip och custom MQTT broker istället?

Ja, det går bra via webbgränssnittet.

Ska nog tilläggas att formatet i webbinterfacet är
[user:pass@]host[:port]
där user:pass har default ingen autentisering, och port defaultar till 1883.

Jag la in värdena för några dagar sedan i webinterfacet och då verkar allt fungera och värdena kommer in till Home Assistant

1 Like

Hej, Jag satt och pillrade med detta till Home Assistant och har inte riktigt fått till det.
Hur ser en rätt specad aress ut i fältet custom MQTT broker ?
Jag har fyllt i som nedan

mqtt://mqtt_currently:pw01@192.168.86.99, där IP adressen går till min Home assistant server, jag
gissar att problemet ligger där någonstans.

I loggen för currently one ser jag en massa meddelande som dessa:

MQTT.connect(one_3128_fcdd1e79cf58, mqtt, **28)=0, lastError()=
ERROR localMQTT: -3 LWMQTT_NETWORK_FAILED_CONNECT
returnCode localMQTT: 0

MQTT.connect(one_65124_fcdd1e79cf58, mqtt, **28)=0, lastError()
ERROR localMQTT: -3 LWMQTT_NETWORK_FAILED_CONNECT
returnCode localMQTT: 0
_onReceiveError 2
_onReceiveError 3
_onReceiveError 3
_onReceiveError 3
read=000008A5, write=000008AC, t=2023-11-25T17:05:50+0100
CRC mismatch, calculated !9DBF != !4ADD

Jag gjorde om några inställningar och skapade ett nytt ID i Home Assistant, samt ändrade i konfigurationen MQTT brokerns till
mqtt://current01:current01@192.168.86.99

nu får jag detta i loggen till Currently one
MQTT.connect(one_6656_fcdd1e79cf58, mqtt, **21)=0, lastError()=
ERROR localMQTT: -10 LWMQTT_CONNECTION_DENIED
returnCode localMQTT: 5
_onReceiveError 2
_onReceiveError 3
_onReceiveError 3
_onReceiveError 3
read=000009E2, write=000009E9, t=2023-11-25T22:35:10+0100
CRC mismatch, calculated !C885 != !D4AB

MQTT.connect(one_3084_fcdd1e79cf58, mqtt, **21)=0, lastError()=
ERROR localMQTT: -10 LWMQTT_CONNECTION_DENIED
returnCode localMQTT: 5

Om du skippar mqtt:// så borde det funka, givet att din broker lyssnar på default port 1883

Formatet är
username:password@host:port
t.ex.
C1:fjc37Euru@192.168.3.101:9883

Med defaults synliggjorda är formatet
[username:password@]host[:port]
så man kan som exempel ha endast
mosquitto.local

Funkade klockrent, tack för hjälpen
/Frank

1 Like

Nu börjar det röra sig här,
planen är att ha med följande trusted root CA Certs:

  • GTS Root R1 (Google)
  • ISRG Root X1 (t.ex. Let’s Encrypt)
  • DigiCert Global Root G2 (t.ex. Azure)

men också att man ska kunna slå av verifieringen men ändå få krypteringen.

Hur låter det?

1 Like