MQTT/UDP
Simpified Version von MQTT über UDP: Network ist Broker!
Beachten Sie andere Repo: https://gitverse.ru/dzavalishin/mqtt_udp
Siehe russische Version / eck рсская версия здесь
MQTT ist ein süßes einfaches Protokoll, das gut für IoT und ähnliche Dinge geeignet ist.
Aber es kann noch einfacher sein und immer noch sehr verwendbar sein: MQTT/UDP ist lediglich ein MQTT -Paket, das über ein UDP übertragen wird.
MQTT/UDP ist
- Extrem einfach
- Extrem schnelle, minimale mögliche Latenz
- Ausgeschlossenem Broker (was ein einziger Fehlerpunkt ist)
- Senkt den Netzwerkverkehr (jede Masurierung wird genau einmal an alle gesendet)
- Einigermaßen zuverlässig (wenn wir es für Sensoren verwenden, die normalerweise alle einige Sekunden oder so wiedergeben)
- Kann auch bei einer Hardware unterstützt werden, die TCP nicht unterstützen kann. Tatsächlich ist nur UDP -Sende erforderlich
- Null -Konfiguration - Ein Sensorknoten benötigt kein Setup, er sendet nur seine Daten. (Und wenn Sie es noch benötigen, unterstützt MQTT/UDP die Remote -Konfiguration über das Netzwerk.)
- Unterstützt die digitale Signatur
Zum weiteren Lesen
- MQTT/UDP Wiki
- Dokumentation
Dieses Repository enthält
- Eine einfache MQTT/UDP -Implementierung in einigen beliebten Programmiersprachen.
- Ein einfachster MQTT für MQTT/UDP Bridge -Implementierung in Pyton.
- Ein Tool zum Senden von Daten von MQTT/UDP an OpenHab
- Eine Debug -Anwendung zum Ableiten von MQTT/UDP -Verkehr (Tools/Viewer).
- Andere Tools und Versorgungsunternehmen
Wenn Sie einem Projekt helfen möchten
Fühlen Sie sich frei zu:
- Fügen Sie die Implementierung in Ihrer bevorzugten Programmiersprache hinzu
- Schreiben Sie eine Brücke zum klassischen MQTT -Protokoll (wir haben hier sehr einfach in Python geschrieben)
- Erweitern Sie Ihren bevorzugten MQTT -Broker oder IoT -System (OpenHab?) Mit MQTT/UDP -Unterstützung
- Überprüfen Sie die MQTT/UDP -Spezifikation/Implementierung gegen MQTT -Spezifikation. Wir müssen nach Möglichkeit kompatibel sein.
Es ist wirklich einfach.
Gründe, MQTT/UDP zu vermeiden
- Sie müssen lange Nutzlasten übertragen. Bei einigen Systemen der UDP -Datagramm ist begrenzt.
- Sie müssen wissen, ob Datagram sicher geliefert wurde. Mit UDP ist es unmöglich. Das zuverlässige Zustell -Subsystem ist jetzt in der Entwicklung und wird in Kürze verfügbar sein.
Möglichkeiten zur Erweiterung von MQTT/UDP
- Es scheint vernünftig zu sein, Paketen eine Signatur hinzuzufügen, um Datenspoofing zu verhindern. Tatsächlich wird es bereits für die Implementierung von Java geschehen, C und Pythin werden bald kommen.
- Die Sendung ist nicht der beste Weg, um Daten zu übertragen. Multicast ist viel besser. Obwohl Multicast in IoT -Betriebssystemen oder Monitoren nicht so gut unterstützt wird.
Schnelle Startanweisungen
- Klon -Repository auf lokale Festplatte
- Lesen Sie Howto -Datei
Support -Tools
Dieses Repository enthält Tools zur Unterstützung von MQTT/UDP -Integration und -Test:
- GUI -Tool zur Anzeige des aktuellen Datenstandes in Tools/Viewer -Verzeichnis; Siehe auch Viewer Help -Seite.
- Zufallsdatengenerator (random_to_udp.py) in Python3/Beispielverzeichnis
- Senden/Überprüfen Sie das Tool für nacheinander nummerierte Pakete. Siehe seq_storm_send.py und seq_storm_check.py im Verzeichnis lang/python3/Beispiele
- Wireshark -Dissektor, um Protokolldaten im Netzwerk im Lang/Lua/Wireshark -Verzeichnis zu sehen
Codebeispiele
Python
Daten senden:
import mqttudp . engine
if __name__ == "__main__" :
mqttudp . engine . send_publish ( "test_topic" , "Hello, world!" ) Hören Sie auf Daten:
import mqttudp . engine
def recv_packet ( ptype , topic , value , pflags , addr ):
if ptype != "publish" :
print ( ptype + ", " + topic + " t t " + str ( addr ) )
return
print ( topic + "=" + value + " t t " + str ( addr ) )
if __name__ == "__main__" :
mqttudp . engine . listen ( recv_packet ) Laden Sie das PYPI -Paket herunter
Java
Daten senden:
PublishPacket pkt = new PublishPacket ( topic , value );
pkt . send ();
Hören Sie auf Daten:
PacketSourceServer ss = new PacketSourceServer ();
ss . setSink ( pkt -> { System . out . println ( "Got packet: " + pkt ); }); Download Jar
C
Daten senden:
int rc = mqtt_udp_send_publish ( topic , value );
Hören Sie auf Daten:
int main ( int argc , char * argv [])
{
...
int rc = mqtt_udp_recv_loop ( mqtt_udp_dump_any_pkt );
...
}
int mqtt_udp_dump_any_pkt ( struct mqtt_udp_pkt * o )
{
printf ( "pkt %x flags %x, id %d" ,
o -> ptype , o -> pflags , o -> pkt_id
);
if ( o -> topic_len > 0 )
printf ( " topic '%s'" , o -> topic );
if ( o -> value_len > 0 )
printf ( " = '%s'" , o -> value );
printf ( "n" );
}
Lua
Daten senden:
local mq = require " mqtt_udp_lib "
mq . publish ( topic , val );
Hören Sie auf Daten:
local mq = require " mqtt_udp_lib "
local listener = function ( ptype , topic , value , ip , port )
print ( " ' " .. topic .. " ' = ' " .. val .. " ' " .. " from: " , ip , port )
end
mq . listen ( listener ) Laden Sie Luarock herunter
Gehen
Es gibt eine GO -Sprachimplementierung, siehe Lang/GO, um Details zu finden