Hoppa till huvudinnehåll

MQTT

Yggio värdar en MQTT-broker. Den kan användas för att prenumerera på iotnod-uppdateringar och uppdatera vissa typer av enheter.

Som en datakonsument

Varje nod som har åtminstone en MQTT-kanal ansluten till den kommer att publicera värden under ämnet: yggio/output/v2/[ID]/iotnode/[iotnodeId]. Där [iotnodeId] är ID för iotnoden och [ID] är en av följande: användar-ID för Yggio-användare, clientAppId eller basicCredentialsSetId. Det är möjligt att prenumerera på yggio/output/v2/[ID]/# för att få data för alla iotnoder. Du kan hitta mer information om hur du skapar en kanal här.

Användar-ID och clientAppId (Keycloak)

Autentisering görs antingen genom att använda användar-ID och token eller Client App ID (OpenId Relying Party client_id) och token (klientuppgifter).

En användaråtkomsttoken kan erhållas genom den normala inloggningsbegäran. Den kan hittas i vår Swagger-dokumentation.

Ett klientappåtkomsttoken, även kallat klientuppgifter, hämtas genom att ringa vår auktorisationsserver (Keycloak) direkt. Nedan är en curl-kommando som du kan ändra och använda. Dessutom kan du hitta mer information om begäran i Keycloaks dokumentation här.

curl -sS --location --request POST 'http://public.yggio.net/auth/realms/yggio/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "client_id=[YOUR CLIENT_ID]" \
--data-urlencode "client_secret=[YOUR CLIENT_SECRET]" \
--data-urlencode 'grant_type=client_credentials'

Nu kan du prenumerera på ditt ämne med ditt ID och token. Ett exempel på mosquitto-kommando skulle se ut så här:

mosquitto_sub -h mqtt.public.yggio.net -t "yggio/output/v2/675fc0dd-9e9f-4e9e-b041-827eefcd46a0/#" -u 675fc0dd-9e9f-4e9e-b041-827eefcd46a0 \
-P eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJOWTJZVE9tSVBXekRWT1pTT2k2RXBUaEhfMlVmcVJtRko2R1NkTUYwTENrIn0.eyJleHAiOjE2MjIxMjYyODcsImlhdCI6MTYyMjEyMjY4NywiYXV0aF90aW1lIjowLCJqdGkiOiI3YjM5M2I5MC1hMTg5LTQ0M2MtOTk0My05NTI4MjYzZTVkZGMiLCJpc3MiOiJodHRwOi8va2V5Y2xvYWsubG9jYWwueWdnaW8vYXV0aC9yZWFsbXMveWdnaW8iLCJhdWQiOiJ5Z2dpby1zZXJ2aWNlcyIsInN1YiI6IjY3NWZjMGRkLTllOWYtNGU5ZS1iMDQxLTgyN2VlZmNkNDZhMCIsInR5cCI6IklEIiwiYXpwIjoieWdnaW8tc2VydmljZXMiLCJzZXNzaW9uX3N0YXRlIjoiZDliZTA4MjMtNDU5MS00MWMwLTk4N2UtZjNiNWRmMTlkN2NiIiwiYXRfaGFzaCI6Ik4tdjNaNjNtWjZhbTlrelRJUENwMXciLCJhY3IiOiIxIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsIm5hbWUiOiJGaWxpcCBIYXJhbGQiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0ZXN0IiwiZ2l2ZW5fbmFtZSI6IkZpbGlwIiwiZmFtaWx5X25hbWUiOiJIYXJhbGQiLCJlbWFpbCI6ImZpbGlwLmhhcmFsZEBnbWFpbC5jb20ifQ.ZyiVA88RGZ0dWGkjJA3_9UvbK-oeUoes2xciWpYEc1rmOnd7W39QypMM1yGcdPqGLXmxBAn-hBguQjVKSwtRNqfaCiLVGufppJsHB1AsMrWj7_HIht0DoyIAX6G62ePAF4ifaEDMYVlBih5c330OBWJGnlVtVGvEEmDNJ1DKU_zfQ77F8krN8yEobUHxPAPuRch0Dqi7_YBFlUoOGfcO-ovPG7lltOmCX1oW7zFrDcITrLPAJuhRMPLsx6B9Af2i0nAMQSgVTFNVpKuH54chvZYj_3MbraeLrIPXNPkLUImq4qdHfnU1z6KWfu4FQ9nakX_lS6qI2ttW5_yh625ryQ

basicCredentialsSetId

Ibland är det inte möjligt för klienten att uppdatera token vid prenumeration, då kan du istället ansluta kanalen till en "basic credentials set". Nedan följer ett exempel med en basicCredentialsSet och en fungerande mosquitto_sub.

// basicCredentialsSet
{
_id: '123456789abcdefg'
username: 'my-device-name',
password: 'very-very-super-secret-password'
}
mosquitto_sub -h mqtt.public.yggio.net -t "yggio/output/v2/123456789abcdef/#" -u my-device-name -P very-very-super-secret-password 

Som en dataleverantör

Yggio har en MQTT-integration som möjliggör för enheter eller molntjänster att publicera data till Yggio. För att detta ska vara säkert krävs det att både en "basic credentials set" och en "reserved mqtt topic" är konfigurerade. När du har det kan du börja publicera data på yggio/generic/v2/[din-under-ämne-här]/[valfritt-annat-under-ämne-här]*. Payloaden måste vara JSON.

Den reserverade MQTT-ämnet används som identifierare för den skapade enheten i Yggio. Beroende på om det finns en integration för enhetsprotokollet eller inte kan denna identifierare användas på olika sätt.

*Om du vill ansluta en MQTT-enhet som redan stöds av Yggio. Gå till delen "Yggio Stödda MQTT-enheter" nedan. Eller klicka här.

Generisk

För generiska enheter används det reserverade MQTT-ämnet som identifierare för den skapade enheten i Yggio. Och identifieraren kommer att lagras på entity.secret. En användare kan, innan eller efter att dataströmmen har startat, "ta över" enheten i Yggio UI. Genom att ange secret, dvs. reservedMqttTopic.topic vid ombordning av enheten. Entiteten kommer ha samma åtkomsträttigheter som basicCredentialsSet.

Exempel

Nedan hittar du exempel på basicCredentialsSets, reservedMqttTopics och deras resulterande giltiga MQTT-publikationer.

Ex 1 - one simple device
DB-entities
// basicCredentialsSet
{
_id: '123456789abcdefg'
username: 'my-device-name',
password: 'very-very-super-secret-password'
}
// reservedMqttTopic
{
topic: 'yggio/generic/v2/any/unique/topic/321',
basicCredentialsSetId: '123456789abcdefg'
}
valid publishes (mosquitto-syntax)
mosquitto_pub -h mqtt.public.yggio.net -u "my-device-name" -P "very-very-super-secret-password" -t "yggio/generic/v2/any/unique/topic/321" -m '{"health":"running"}'
mosquitto_pub -h mqtt.public.yggio.net -u "my-device-name" -P "very-very-super-secret-password" -t "yggio/generic/v2/any/unique/topic/321/stats" -m '{"battery":100, "antennaStatus": "sending"}'
mosquitto_pub -h mqtt.public.yggio.net -u "my-device-name" -P "very-very-super-secret-password" -t "yggio/generic/v2/any/unique/topic/321/temperature" -m '{"value":22}'

Alla tre ovanstående publiceringar kommer att resultera i uppdateringen eller skapandet av följande iotnod. Det är viktigt att notera att publicering till en underämne inte skapar en ny iotnod.

{
_id: 'abababababa1212121212'
secret: 'yggio/generic/v2/any/unique/topic/321',
health: "running",
stats: {
antennaStatus: "sending",
battery: 100
},
temperature: {
value: 22
}
}
Ex 2 - gateway- or "cloud"- with sub-nodes
DB-entities
// basicCredentialsSet
{
_id: '123456789abcdefg'
username: 'my-gateway-name',
password: 'very-very-super-secret-password'
}
// reservedMqttTopic
[
{
topic: 'yggio/generic/v2/any/unique/gatewaytopic/4321',
basicCredentialsSetId: '123456789abcdefg'
},
{
topic: 'yggio/generic/v2/any/unique/gatewaytopic/4321/devices/1',
basicCredentialsSetId: '123456789abcdefg'
},
{
topic: 'yggio/generic/v2/any/unique/gatewaytopic/4321/devices/2',
basicCredentialsSetId: '123456789abcdefg'
}
]
valid publishes (mosquitto-syntax)
mosquitto_pub -h mqtt.public.yggio.net -u "my-gateway-name" -P "very-very-super-secret-password" -t "yggio/generic/v2/any/unique/gatewaytopic/4321" -m '{"health":"running"}'
mosquitto_pub -h mqtt.public.yggio.net -u "my-gateway-name" -P "very-very-super-secret-password" -t "yggio/generic/v2/any/unique/gatewaytopic/4321/devices/1" -m '{"lightSwitch":on}'
mosquitto_pub -h mqtt.public.yggio.net -u "my-gateway-name" -P "very-very-super-secret-password" -t "yggio/generic/v2/any/unique/gatewaytopic/4321/devices/2" -m '{"lightSwitch":off}'

Alla tre ovanstående publiceringar kommer att resultera i uppdateringen eller skapandet av följande enheter.

{
_id: 'aaaaaaaaaaa111111111111'
secret: 'yggio/generic/v2/any/unique/gatewaytopic/4321',
health: "running",
}
{
_id: 'bbbbbbbbbbbb22222222222'
secret: 'yggio/generic/v2/any/unique/gatewaytopic/4321/devices/1',
lightSwitch: "on",
}
{
_id: 'cccccccccccc33333333333'
secret: 'yggio/generic/v2/any/unique/gatewaytopic/4321/devices/2',
lightSwitch: "off",
}

Det är värt att nämna att en publicering till t.ex. .../../devices/3 inte skulle skapa en ny enhet. Istället skulle den uppdatera gatewayen, i detta fall. Detta beror på att det inte har gjorts en "reservation" för det ämnet, dvs. ingen reservedMqttTopic finns.

Så en publicering som detta...

mosquitto_pub -h mqtt.public.yggio.net -u "my-gateway-name" -P "very-very-super-secret-password" -t "yggio/generic/v2/any/unique/gatewaytopic/4321/devices/3" -m '{"lightSwitch": "on"}'

... skulle uppdatera enheten från följande...

{
secret: 'yggio/generic/v2/any/unique/gatewaytopic/4321',
health: "running",
}

...till detta...

{
_id: 'aaaaaaaaaaa111111111111'
secret: 'yggio/generic/v2/any/unique/gatewaytopic/4321',
health: "running",
devices: {
3: {
lightSwitch: "on"
}
}
}

Vi är medvetna om att detta kan vara problematiskt när du integrerar din gateway/molntjänst med Yggio. Eventuellt kan någon form av wildcard-lösning, från vår sida, vara bra här. Kontakta oss gärna om denna "brist" hindrar din integration med Yggio! (yggio@sensative.com).

Yggio Stödda MQTT-enheter

När du ansluter enheter som redan har en integration i Yggio krävs det istället att de använder integrations rot-ämnet. Nedan hittar du en lista över tillåtna (och integrerade) enheter.

  • Axis-kameror | yggio/axis/v1/[din-under-ämne-här]

Axis Installation

Börja med att ansluta din Axis-kamera till en strömkälla och Ethernet.

Identifiera vad IPv4-adressen är för den anslutna kameran. Och gå till https://[KAMERA-IP] med en dator som är ansluten till samma nätverk.

root-password

Logga in.

Gå till

  1. Enhetens vy

  2. Underhåll axis-maintenance

Följ instruktionerna för att uppdatera firmware. Yggio stöder upp till 10.8.x

Axis prenumeration på Mqtt

Gå till vår REST API Swagger

Auktorisera dig själv på POST /auth/local

Ta token från svaret och klistra in den i Authorize.

Scrolla ner till BasicCredentialsSets och gör en POST /basic-credentials-sets.

Se till att spara det önskade användarnamnet, lösenordet och basicCredentialsSetId på en säker plats!

Spara _id från svaret och använd det i nästa steg.

Scrolla ner till POST /reserved-mqtt-topics, klistra in _id från föregående steg i basicCredentialsSetId och använd yggio/generic/v2 följt av dina egna ämnen. Separerade med /. Se MQTT (data provider) för exempel.

Axis kamera lokala webbgränssnitt
  1. Enhetsvy

  2. MQTT

  3. public.yggio.net som värd

  4. MQTT över TCP

  5. 1883 som port

  6. Användarnamn från BasicCredentialsSets

  7. Lösenord från BasicCredentialsSets

  8. Spara

  9. Anslut axis-mqtt-connect

Axis Händelser
  1. Enhetsvy

  2. Händelser

  3. MQTT-händelser

  4. Använd standardvillkorsprefix -> AV

  5. Klistra in ämnet du reserverade i tidigare steg

  6. Lägg till ett villkor och välj A3DPCCountingEvent

  7. Spara. axis-mqtt-events

Axis Ockupans
  1. Ockupans

  2. Uppskatta ockupans -> PÅ

  3. Tillåt händelser -> PÅ axis-occupancy

Axis Räknare

Här kommer data från enheten att visas. counter

Konfigurera enheten i Yggio

När ovanstående steg har slutförts och enheten har skickat sitt första meddelande till det reserverade MQTT-ämnet kommer en enhet att skapas i Yggio.

När enheten skapas kommer dess namn att vara MQTT - <ämnet du valde>.

Ange enhetsmodellnamnet till -> axis-p8815-2-3d-people-counter. device-monitor

Gå nu till Data och du hittar din peopleCounter-data.