Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ankündigung
Einklappen
Keine Ankündigung bisher.
MQTT API Server und MQTT Clients - LBS19001051 - LBS19001054
Was genau funktioniert nicht?
Benutzt du einen Leading Slash '/'?
das sollte man bei MQTT nicht tun, daher wird der auch entfernt.
Ich habe das bei mir getestet mit "house1' und dann auf house1/edomi/set/knx/1-1-30 gesendet. Funktioniert problemlos.
Ich kann diesen allerdings nicht so ohne weiteres wegnehmen, da der mqtt Server auch andere Subsysteme versorgt und das dann einen Rattenschwanz nach sich zieht.
Dann füge mal folgende Zeile zwischen 195 und 196 ein:
Code:
$prefix = trim($prefix, "\\");
Danach solltest du mit einem Backslash den Slash escapen können, so dass nur der Backslash entfernt wird, und somit das Prefix mit Slash beginnt. E13 beginnt also so:
Code:
\/AS43/from_io/....
Ist allerdings ungetestet. Wenn es funktioniert, dann lade ich das Update hoch.
Never use a leading forward slash
A leading forward slash is permitted in MQTT. For example, /myhome/groundfloor/livingroom. However, the leading forward slash introduces an unnecessary topic level with a zero character at the front. The zero does not provide any benefit and often leads to confusion.
Never use spaces in a topic
A space is the natural enemy of every programmer. When things are not going the way they should, spaces make it much harder to read and debug topics. As with leading forward slashes, just because something is allowed, doesn’t mean it should be used. UTF-8 has many different white space types, such uncommon characters should be avoided.
Keep the topic short and concise
Each topic is included in every message in which it is used. Make your topics as short and concise as possible. When it comes to small devices, every byte counts and topic length has a big impact.
Use only ASCII characters, avoid non printable characters
Because non-ASCII UTF-8 characters often display incorrectly, it is very difficult to find typos or issues related to the character set. Unless it is absolutely necessary, we recommend avoiding the use of non-ASCII characters in a topic.
Embed a unique identifier or the Client Id into the topic
It can be very helpful to include the unique identifier of the publishing client in the topic. The unique identifier in the topic helps you identify who sent the message. The embedded ID can be used to enforce authorization. Only a client that has the same client ID as the ID in the topic is allowed to publish to that topic. For example, a client with the _client1 ID is allowed to publish to _client1/status, but not permitted to publish to _client2/status.
Don’t subscribe to #
Sometimes, it is necessary to subscribe to all messages that are transferred over the broker. For example, to persist all messages into a database. Do not subscribe to all messages on a broker by using an MQTT client and subscribing to a multi-level wildcard. Frequently, the subscribing client is not able to process the load of messages that results from this method (especially if you have a massive throughput). Our recommendation is to implement an extension in the MQTT broker. For example, with the plugin system of HiveMQ you can hook into the behavior of HiveMQ and add an asynchronous routine to process each incoming message and persist it to a database.
Don’t forget extensibility
Topics are a flexible concept and there is no need to preallocate them in any way. However, both the publisher and the subscriber need to be aware of the topic. It is important to think about how topics can be extended to allow for new features or products. For example, if your smart-home solution adds new sensors, it should be possible to add these to your topic tree without changing the whole topic hierarchy.
Use specific topics, not general ones
When you name topics, don’t use them in the same way as in a queue. Be as specific topics as possible. For example, if you have three sensors in your living room, create topics for _myhome/livingroom/temperature, _myhome/livingroom/brightness and _myhome/livingroom/humidity. Do not send all values over _myhome/livingroom. Use of a single topic for all messages is a anti pattern. Specific naming also makes it possible for you to use other MQTT features such as retained messages. For more on retained messages, see part 8 of the Essentials series.
Zuletzt geändert von jonofe; 22.10.2019, 10:35.
Grund: Im trim Befehl ist ein doppelter Backslash notwendig: trim($prefix, "\\");
Ich habe mal eine generelle Frage, wie ihr das handhabt in Bezug auf die Sicherheit....
Grundsätzlich empfinde ich die Anbindung von edomi über einen Broker als sehr sicher, da kein direkter Zugriff auf das edomi genommen wird, sondern edomi im Broker mitliest. Wenn der Broker auf einer externen Ressource außerhalb des eigenen Netzwerks liegt und eine gesicherte Verbindung besteht, geht man damit ein besonderes Risiko ein?
Alternativ könnte man ja einen Broker intern aufziehen, dieser verbindet sich mit dem externen Broker und edomi verbindet sich ausschließlich mit dem Internen.
Ich hoffe ihr versteht was ich meine. Mir ist für den Moment noch unklar ob Variante 1 ausreichend sicher ist oder ob lieber ein zweiter Broker aktiviert werden sollte um edomi komplett anonym agieren zu lassen?!
Wenn ich interne MQTT Quellen habe, die ich in EDOMI verwenden möchte, dann würde ich auf jeden Fall einen internen Broker verwenden, da man ja ansonsten interne Daten zunächst nach extern senden müsste, damit der interne EDOMI Server diese dann wieder bekommt. Externe Broker sollte man nur mit Authentifizierung und TLS Verschlüsselung nutzen.
Grundsätzlich gibt es drei Ebenen der Security bei MQTT:
Zwischen zwei Brokern kan man auch ein Bridge konfigurieren, was dann verhindert, dass EDOMI beispielsweise auf einen externen Broker zugreifen muss. Das kann dann durch einen eigenen Broker (z.B. Mosquitto) passieren, welcher in der DMZ läuft. Habe ich so schon mit Amazon IoT gemacht.
Es ist natürlich immer eine Frage, wie kritisch die Daten sind, welche man per MQTT empfängt. Wenn ich z.B. ein Topic subscribe, welches meine Haustür öffnet, würde ich es nicht von einem externen Broker subscriben wollen. Beim Publish stellt sich dieselbe Frage, nämlich wie kritisch sind die Daten, die ich per MQTT veröffentliche und werden sie eigentlich nur intern benötigt.
Hier noch zwei gute Artikel zum Thema Sicherheit Kommunikation mit MQTT:
Erst ein Ersetzen im LBS von localhost zu 127.0.0.1 hat dann funktioniert. Im Dockerimage
scheint die Host-Namensauflösung deaktiviert zu sein.
Wäre das durch eine art globales IKO übersteuerbar? Ich denke da zB an ein iKO mit dem namen "globalMySQL"?
Hallo Jonofe,
...
Erst ein Ersetzen im LBS von localhost zu 127.0.0.1 hat dann funktioniert. Im Dockerimage
scheint die Host-Namensauflösung deaktiviert zu sein.
Probleme mit localhost (IPv6) und 127.0.0.1 (IPv4) liegen oft mit der Konfiguration von entsprechenden Netzen zusammen.
Ist bei Dir da irgendetwas "wegkonfiguriert"?
Nein, nicht von mir. Ich nutze das Edomi-Docker, und habe die konfiguration dort nicht extra untersucht, da bisher alles funktioniert hat.
Ich vermute, dass hier in den (mysql-?)Einstellungen auf die Namensauflösung verzichtet wird/wurde (aus performance-gründen?).
Ein Ping auf Localhost hat jedenfalls funktioniert, also kann das system selbst prinzipiell den namen auflösen.
Ich nutze deinen genialen Baustein zur Anbindung von IObroker.
Damit erschließt der Baustein auf einfache Weise die Adapter des iobrokers.
Wenn ich im IObroker z.b. bei einer Prüfung auf Verfügbarkeit eines Geräts edomi/set/internal/ko-id mache, dann kommt auf der Edomi-Seite true oder false an.
Super wäre, wenn ich nun im Baustein noch eine Ersetzung machen könnte.
Also z.B. einen Eingang für 1 mit dem Inhalt true|wahr|an|auf...
und einen Eingang für 0 mit dem Inhalt false|falsch,aus,ab....
Damit könnte der Baustein direkt eine Edomi Logic triggern ohne dass ich das vorher noch durch einen Baustein jagen muss.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar