[HN Gopher] Mosquitto: An open-source MQTT broker
       ___________________________________________________________________
        
       Mosquitto: An open-source MQTT broker
        
       Author : ducktective
       Score  : 182 points
       Date   : 2021-09-29 15:50 UTC (7 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | nathan_f77 wrote:
       | I've learned a lot about MQTT while setting up Home Assistant,
       | and Mosquitto is a pretty important part of my Home Assistant
       | installation. I use it to control all of my Zigbee devices via
       | "zigbee2mqtt" (buttons, switch modules, etc.), and also a smart
       | kettle running Tasmota [1]. I also added a little patch to
       | Tasmota [2] so that my kettle responds with `418 I'm a teapot`
       | [3]
       | 
       | [1] https://tasmota.github.io/docs
       | 
       | [2]
       | https://github.com/ndbroadbent/Tasmota/commit/bbcf57faffbf5b...
       | 
       | [3] https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/418
        
         | matttrotter wrote:
         | Cool stuff and inspiring. Have a website or GitHub about your
         | home automation projects? I checked out your blog, and the
         | raspberry pi microwave was pretty sweet.
        
         | seidoger wrote:
         | Prime use-case for HTTP 418!
        
           | SV_BubbleTime wrote:
           | People always want that for teapots. I have a device that
           | uses it as an indication it's internal data shouldn't be
           | trusted (some unknown error).
           | 
           | I have it respond with 418 as _"I taste colors and the
           | government spies on you with the ground in your house
           | wiring"._
           | 
           | I like it for that more than actual tea pots which is far too
           | on the nose.
        
       | Kuinox wrote:
       | I'm developing a mqtt client/broker and the protocol is all but
       | simple to implement. I didn't found any implementation, mosquitto
       | included, that was really lossless.
        
         | xnyan wrote:
         | I've worked quite a bit with MQTT - can you tell us a little
         | more about what you mean by "really lossless"?
        
           | Kuinox wrote:
           | To never loose a packet on QoS 1/2.
        
         | RedShift1 wrote:
         | The protocol is simple (I've written my own implementation in
         | php), what do you mean with lossless?
        
           | Kuinox wrote:
           | That when you use QoS 2 "ExactlyOnce" (or 1), you will never
           | loose a message.
        
         | nicolaslem wrote:
         | Could you expand on the difficulties you are facing? From the
         | outside the protocol looks quite simple.
        
           | Kuinox wrote:
           | The Packet ID logic is not enough restricted.
           | 
           | For exemple, the emitter is not restricted in the ID it
           | should use for it's packet, it can be any unsigned 16 bit
           | number.
           | 
           | In contrast, a lot of protocol the ID must be incremental,
           | and the receiver can detect that a package is missing (which
           | result in smaller network overhead, the client can ack, or
           | re-ask for a dropped packet, which result in a single
           | roundtrip when there is no issue, instead of having the
           | double round trip that mqtt have). It means that, the
           | receiver can't know if it missed a packet. Because you don't
           | have to waits for the acks to propagate the message, it mean
           | the message delivering is unordoned. It also mean that if the
           | same message keep dropping, the protocol should continue to
           | work. Now if you implemented your mqtt with an i++, this
           | where you can start to have dataloss, because now that you
           | sent 65k messages you finished you start to need actually
           | free packet id.
           | 
           | And it cause a lot more issues that what I said there, that I
           | hope I covered every case in my implementation:
           | https://github.com/signature-opensource/CK-
           | MQTT/blob/develop...
           | 
           | Then, this is just the PacketID Logic. MQTT 3 doesn't do
           | enough things, while MQTT5 do too much things. MQTT 3 Have
           | design issues which MQTT 5 acknowledged it, and tried to fix
           | it with duck tapes. One issue for exemple is the credentials
           | being sent after the last will packet, which lead to a huge
           | DOS issue, because now an attacker can attack you with your
           | maximum last will packet, that you will want to save to disk,
           | then wait to timeout without ever sending credentials. MQTT 5
           | is not really a breaking change as this behavior still exist,
           | but you can enforce a credentials packet for the connexion.
           | 
           | All this highlight that MQTT could be a far smaller, faster,
           | simpler protocol if correctly done (and a protocol like this
           | probably exist, I didn't looked at a lot of popular protocols
           | for now, only a dozen of hardware custom ones).
           | 
           | If I knew all the above before starting to implement my MQTT
           | client, I would had want with another protocol.
        
         | eska wrote:
         | Paho-mqtt implements QoS and also has an option to store unsent
         | messages to disk for later sending.
        
           | Kuinox wrote:
           | The issues I spotted are how the protocol is implemented, not
           | how the packets are stored.
        
         | idatum wrote:
         | +1 on paho-mqtt for python and mosquitto. All of my fun
         | projects such as XBee3 sensors and HA + Z-Wave go through MQTT.
         | It has been rock solid and a joy to develop against.
        
           | Kuinox wrote:
           | It will work fine for your small scale IoT, but when they
           | said "for IoT" they never meant it for high scale.
        
         | luma wrote:
         | Is that true if you set QoS to a value other than 0 in your
         | application?
         | 
         | https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-qual...
        
           | Kuinox wrote:
           | No, even when you set the QoS to 2, "ExactlyOnce", you may
           | still hit edge cases where you loose data, without knowing
           | it, especially on enterprise networks, or if there is an high
           | throughtput.
        
       | mleo wrote:
       | MQTT/Mosquitto relays is a great solution for passing data across
       | network boundaries when inbound is limited.
       | 
       | I use it with Webhooks deployed to Internet VM that pass the data
       | to broker installed on VM.
       | 
       | Another broker in home network connects to Internet broker and
       | relays messages to local clients.
       | 
       | I don't have to open any ports into my home network for webhooks
       | to work with other services.
        
       | zwieback wrote:
       | I like MQTT and we use Mosquitto in our product but I always
       | wonder if MQTT pushes TCP into areas where UDP would be a better
       | fit.
        
         | mlaretallack wrote:
         | That is where MQTT-SN comes in. I have used it over NB-IOT and
         | then a gateway to full MQTT over mTLS to AWS IoT.
        
         | ralight wrote:
         | Like your other reply said, MQTT-SN can use UDP so may be a
         | better fit in some situations. It's a shame that MQTT-SN hasn't
         | seen wider use, but there isn't that much support at the
         | moment. The protocol is being standardised at the moment, and
         | there has been an MQTT to MQTT-SN gateway as part of the
         | Eclipse Paho project for a while now. The Mosquitto project has
         | the aim of adding support for MQTT-SN - it's just not as high a
         | priority as other things at the moment unfortunately though. If
         | it's something that's important to you, please get in touch.
         | 
         | Roger
        
       | boilerupnc wrote:
       | The node-red [0] project is a great complement to MQTT use-cases.
       | [1]
       | 
       | "Node-RED is a programming tool for wiring together hardware
       | devices, APIs and online services in new and interesting ways. It
       | provides a browser-based editor that makes it easy to wire
       | together flows using the wide range of nodes in the palette that
       | can be deployed to its runtime in a single-click."
       | 
       | [0]: https://nodered.org/
       | 
       | [1]: https://cookbook.nodered.org/mqtt/connect-to-broker
        
       | SavantIdiot wrote:
       | Anyone have experience scaling with more than 256 devices?
       | 
       | I use MQTTS at work and for my own projects. It is a very thin
       | protocol (low code footprint), especially combined with Wi-Fi
       | where those stacks typically eat up most of your MCU's flash if
       | you're using a single-chip solution with TLS. I've used it on a
       | max of 256 devices on a single BSSID, but I would be curious to
       | know how it scales.
       | 
       | EDIT: Specifically, when all devices are subbed to a noisy
       | channel. In some cases we had to stagger pub with random jitter
       | to prevent both Wi-Fi and edge processing issues.
        
         | ralight wrote:
         | I can't comment on MCUs or WiFi BSSIDs, but on the server side
         | I have an Intel Atom N2800 (think low performance) with nearly
         | 4000 clients sending out ~50k messages/s with an average
         | payload size of 80 bytes. The overwhelming majority of those
         | are not using TLS. About a quarter using MQTT over websockets.
        
         | lulf wrote:
         | You can use a subset of MQTT for ingress data and store it in
         | Kafka for instance. Check out https://www.drogue.io and
         | https://sandbox.drogue.cloud for an open source project that
         | does that
        
         | eska wrote:
         | I've only seen papers from the automobile industry where they
         | used MQTT but fed it into Kafka to scale.
        
         | IshKebab wrote:
         | All Dyson smart products use MQTT. As I recall it works fine
         | from a performance point of view (it's a very lightweight
         | protocol), but personally I thought it was a pretty flawed
         | choice because the problem of choosing/discovering paths is
         | just completely ignored, and it shares the same problem as all
         | event bus style systems - events can get lost, it's very
         | difficult to debug and learn, etc.
        
           | SavantIdiot wrote:
           | > events can get lost,
           | 
           | Well, yes, but QoS=1 or 2 with a reasonably large queue I
           | haven't seen loss issues.
           | 
           | What kind of loss problems are you running into (that I
           | should be worried about)?
        
             | IshKebab wrote:
             | Yeah I don't mean due to the protocol, I mean due to
             | application bugs where something adds a message to some
             | queue and the thing that is meant to process it doesn't for
             | some reason, and then nothing will ever realise.
             | 
             | Compared to callbacks / RPC for example, where you have a
             | function call the either has to succeed or it has to fail.
             | 
             | It's not a deal breaker but I don't like it.
        
               | RedShift1 wrote:
               | If your MQTT client allows control over this aspect of
               | the protocol, you can just not ACK QOS > 0 messages that
               | failed to process. Next time you connect you'll get the
               | non-ACK'ed messages first.
        
       | tombert wrote:
       | I've never used Mosquitto, but I have done a fair amount with
       | Verne.mq [1], and I have to say that MQTT is downright _pleasant_
       | to use in a lot of cases. I 've not done a ton with it in "real
       | world" situations, but I have used it for multiple hackathons,
       | and I'm always impressed how little of a headache it is to build
       | a decent "live" application with almost no effort.
       | 
       | If your frontend web project calls for any kind of messaging, I
       | definitely recommend looking into trying MQTT before you jump
       | straight into WebSockets. There's a good chance MQTT does what
       | you need, scales better, can communicate over WebSockets, and
       | will make your life easier .
       | 
       | [1] https://vernemq.com/
        
         | [deleted]
        
         | jvanderbot wrote:
         | I have used ZMQ for this with great success. The one-line
         | python calls to send data between nodes are _really nice_.
        
           | tombert wrote:
           | I love ZeroMQ, but I didn't think that had any first-class
           | support for communicating in the browser (could be wrong).
           | 
           | I agree it's super nice though, even with a single process.
        
           | alias_neo wrote:
           | ZeroMQ is fantastic. I've been using at work for a few years
           | now, but I generally enjoy the tech anyway, their
           | documentation[0] and "The Guide"[1] is also really nice, with
           | examples for all of the different language bindings.
           | 
           | From C or Golang (or a bunch of other language bindings) you
           | can set up some nice pub/sub or req/res with fan in/fan out
           | and all sorts of cool routing with low-level, high speed
           | sockets with the added power that ZMQ provides, such as the
           | queueing, high-watermarks etc. You can also enable encryption
           | easily with CurveZMQ which is a refreshing change from TLS.
           | 
           | [0]https://zeromq.org/get-started/
           | 
           | [1]https://zguide.zeromq.org/
        
             | tombert wrote:
             | I almost feel like the guide should be mandatory reading
             | for _anyone_ learning network programming. It gives
             | extremely digestible summaries of most of the network
             | patterns, when and why you 'd use them, and then how
             | they're done in ZeroMQ. Even if you end the guide thinking
             | that ZeroMQ is stupid (which you probably wouldn't), you'd
             | still probably benefit from having read the guide.
        
         | PostThisTooFast wrote:
         | Yeah, it's pretty cool. I am tasked with developing a new API
         | and communication method for a bunch of networked devices that
         | run embedded Linux. Initially I focused on MQTT, but have since
         | decided to define an API in OpenAPI and implement an HTTP/REST-
         | style interface because that's well understood and easily
         | supported by third parties, whose APIs we might want to
         | integrate with or provide a translation layer for.
         | 
         | But the devices need to alert a controller application to
         | status changes... which so far I supposed they would do by
         | POSTing REST-style messages back to that application. Do people
         | combine REST & MQTT?
        
           | serial_dev wrote:
           | > Do people combine REST & MQTT?
           | 
           | I'm not a REST+MQTT expert, but some people do combine them,
           | why not?
           | 
           | One of the project I was working on (IoT, smart home), the
           | mobile app received the current status from the REST API,
           | then subscribed to changes via MQTT. Having MQTT was great
           | for live updates on the mobile app, and for communicating
           | with the IoT devices. HTTP was great for integrations with
           | Google Home, Alexa, and we could test it easily as there are
           | many backend frameworks focusing on CRUD REST HTTP backend
           | apps.
           | 
           | Of course, if you actually have a problem you want to solve,
           | be sure the to do your own research, there are more than one
           | way to skin a cat, and there are so many services and
           | platforms that could be "good enough" for your use case.
        
           | eska wrote:
           | The REST paper explicitly mentions that REST and HTTP only
           | try to solve the common cases, and solve those well. If
           | something is not covered well then you're explicitly advised
           | to leave it to another protocol. You could for example have a
           | GET response that (due to HATEOAS) suggests a websocket url
           | including a topic to subscribe to.
        
           | kitd wrote:
           | One thing to note is that MQTT is session-oriented, so you
           | have to send periodic pings to the server to keep your
           | session active. Which is obviously a deviation from stateless
           | REST.
        
         | RedShift1 wrote:
         | The VerneMQ bugtracker scares me. Especially this one:
         | https://github.com/vernemq/vernemq/issues/1663. I'm running one
         | instance but I'm on the lookout for an alternative that can
         | more reliably save messages if a subscription client goes down.
        
           | tombert wrote:
           | I wish I could say that I chose Verne.mq because I weighed
           | all the options and it was the best for my project but...I
           | really chose it because it was written in Erlang and I like
           | Erlang.
           | 
           | I won't pretend to have done an audit of the best servers in
           | terms of bugs or features.
        
         | mosselman wrote:
         | > I definitely recommend looking into trying MQTT before you
         | jump straight into WebSockets.
         | 
         | What is a nice way to use mqtt in the front-end instead of
         | websockets? What can you recommend?
        
           | oneweekwonder wrote:
           | Eclipse Paho JavaScript Client[0] for the front-end and
           | personally I prefer RabbitMQ Web MQTT Plugin[1] for the back-
           | end[1].
           | 
           | Take note Paho MQTT Client is available for several
           | programming languages(Py,Rust,Go,C,C#,etc)[2].
           | 
           | [0]: https://www.eclipse.org/paho/index.php?page=clients/js/i
           | ndex... [1]: https://www.rabbitmq.com/web-mqtt.html [2]:
           | https://www.eclipse.org/paho/index.php?page=downloads.php
        
             | tombert wrote:
             | Beat me to it!
             | 
             | I was about to suggest the Eclipse Paho library. One of the
             | very few things in the developer world that has "just
             | worked" for me the first time I tried it.
        
       | ajfally wrote:
       | I've been wanting a GCM/FCM alternative, could mqtt be used for
       | notifications like that? I understand its usually used for IOT
       | devices and stuff so I assume its suitable for not using loads of
       | power
        
         | malermeister wrote:
         | Thats what Facebook Messenger uses. Downside to this is that
         | only FCM can work around android's power saving mechanisms and
         | deliver instantly... unless you're Facebook and able to
         | convince vendors to patch the firmware for your servers too ;)
        
           | holoduke wrote:
           | Yep. Another real concrete example of an unwanted monopoly.
           | We have issues with fcm, we are sending about 10m per day for
           | millions of users. About 1 to 3% never arrives. Ends up in
           | the void. Google doesn't want to help. We are not Facebook.
           | But no alternative. A pity
        
             | malermeister wrote:
             | 97% is actually a really good delivery rate. From my
             | experience working on several push-based products, ~80% is
             | the industry standard.
        
       | clumsysmurf wrote:
       | Anyone have experience comparing MQTT with NATS, they seem to
       | cover similar scenarios.
        
         | JesseObrien wrote:
         | Would be looking for this as well. I love using NATS, would
         | like to see a comparison of both.
        
       | jvanderbot wrote:
       | I've recently transitioned my home "IOT" network (and servers) to
       | a Wireguard-only network. It's wonderful. All the routing
       | accessibility through firewalls or with dynamic IPs just
       | disappeared. All services are exposed only on the wireguard
       | interface, meaning security and connectivity are solved (to the
       | 80/20 level) with just Wireguard.
       | 
       | That kind of removed the need for a static broker entirely since
       | now every node has a static IP on my wireguard network and are
       | accessible no matter what network they are _actually_ on. Pinging
       | my mobile phone from an air quality sensor was an eye-opening
       | experience.
        
         | kobalsky wrote:
         | what kind of IOT devices are we talking about? linux embedded
         | or is wireguard available for something like nodemcu?
        
         | 3np wrote:
         | Did you ever notice any issues with significant increased
         | softirqs?
         | 
         | I started going down a similar path but a node that is acting
         | as a gateway/bridge for UDP traffic routing to an outbound
         | wireguard tunnel is now spending a constant ~20% CPU time on
         | NET_RX softirqs with 10Mbps and 5~30Kpps. Almost no NET_TX.
         | 
         | It's specifically the combination of UDP-over-wg that seems to
         | cause this. It's otherwise handling 1Gbps and way more packets
         | just fine.
         | 
         | (I'm aware MQTT is TCP but hey, worth a shot)
        
       | zerkten wrote:
       | For someone that has worked with RabbitMQ, is there a guide to
       | the differences and appropriate usage of MQTT brokers with some
       | real use cases explained?
        
         | oneweekwonder wrote:
         | You are aware RabbitMQ support MQTT[0] and MQTT over
         | WebSockets[1]?
         | 
         | As for comparing it to RabbitMQ you should compare the AMQP
         | protocol vs MQTT protocol, it seems MQTT with its lightweight
         | design "won" IoT market over and should be rather compared
         | against protocols like CoAP.
         | 
         | As for guides I have always found resources rather scarce and
         | mostly learned by adding features to mqtt libraries or writing
         | my own prototype games using it.
         | 
         | [0]: https://www.rabbitmq.com/mqtt.html [1]:
         | https://www.rabbitmq.com/web-mqtt.html
        
       | travisgriggs wrote:
       | I'll just pile on my own accolades. We use MQTT to connect
       | handhelds with in the field ag irrigation controllers. There's
       | probably about 10,000 valves on farms and other ag projects
       | throughout, that are ultimately scheduled and monitored through
       | MQTT. We've even been able to build a full request/event protocol
       | on top of it.
       | 
       | The protocol is simple enough, that when I wasn't happy with not
       | many full solutions existing in iOS, I just rolled our own in a
       | day or two.
       | 
       | Currently adding an Elixir REST bridge to the whole thing. It's
       | been pretty cool all around.
        
         | ralight wrote:
         | That sounds really nice, I love interesting projects in areas
         | outside of my experience. If you're using Mosquitto I'd love to
         | hear more about it - my contact details are at the bottom of
         | https://github.com/eclipse/mosquitto/ :)
        
       | IceWreck wrote:
       | I'm a big fan of NATS. It a small binary which can be scaled as
       | much as you want and it replaces Kalfka, lightweight MQTT
       | brokers, etc and has clients for most languages.
        
         | ducktective wrote:
         | https://nats.io/ https://github.com/nats-io/nats-server
         | 
         | Is it suitable for embedded applications? (very low resources,
         | intermittent network availability, etc)
        
           | DenseComet wrote:
           | NATS actually also has support for MQTT[0]. If you already
           | have a deployment for queues, microservices, etc, using the
           | NATS mqtt endpoint seems like a very good option.
           | 
           | [0] https://docs.nats.io/nats-server/configuration/mqtt
        
           | AkshitGarg wrote:
           | The NATS protocol [0] looks pretty simple, but is text based
           | unlike MQTT which uses a size optimized binary protocol.
           | 
           | [0]: https://docs.nats.io/nats-protocol/nats-protocol
        
       | deknos wrote:
       | is mosquitto clusterable nowadays? on its own or via k8s?
       | 
       | for: * fault tolerance * fail over * vertical scalability?
       | 
       | does anyone know this? if not is there a another opensource mqtt
       | broker which does that?
        
         | ralight wrote:
         | I work for Cedalo AG developing Mosquitto. Cedalo will be
         | offering a version of Mosquitto with failover support as a paid
         | for feature soon.
        
         | eska wrote:
         | There are broker implementations that support clustering. Emqx
         | comes to mind.
        
         | oneweekwonder wrote:
         | Recently wanted to also create a cluster of mqtt brokers and
         | found this medium tutorial stringing Docker Swarm, RabbitMQ,
         | Consul and HAProxy together very helpful[0].
         | 
         | I was not happy with the static ip's for haproxy and opted to
         | register the mqtt/tls services in consul and use the consul dns
         | resolver with hapraxy.
         | 
         | [0]: https://medium.com/hepsiburadatech/implementing-highly-
         | avail...
        
         | mlhales wrote:
         | Mosquitto is not, we use RabbitMQ which runs on Erlang/OTP and
         | has mqtt plug-ins. Mosquitto is single threaded. It's fast for
         | sure but doesn't scale out. They can interoperate though as
         | Mosquitto has configurable bridging.
        
         | discreteevent wrote:
         | Have a look at Apache Artemis. Well architected multi-protocol
         | broker with clustering.
        
         | serial_dev wrote:
         | VerneMQ [0] could be interesting for you, they claim that:
         | 
         | > VerneMQ is a high-performance, distributed MQTT broker. It
         | scales horizontally and vertically on commodity hardware to
         | support a high number of concurrent publishers and consumers
         | while maintaining low latency and fault tolerance.
         | 
         | I'm not sure about their licensing at the moment [1], to me
         | it's a bit confusing.
         | 
         | [0] https://vernemq.com/
         | 
         | [1] https://vernemq.com/blog/2019/11/26/vernemq-end-user-
         | license...
        
         | jonquark wrote:
         | There are lots of brokers and Eclipse Amlen is coming soon:
         | https://www.eclipse.org/amlen/
         | 
         | (disclosure: I work on Amlen)
        
       | eska wrote:
       | Unfortunately the websockets implementation only allows IPv6, and
       | in my tests from a js app sometimes took seconds to start if it
       | worked at all. I'm currently looking for an alternative broker
       | due to those issues.
        
         | oauea wrote:
         | > Unfortunately the websockets implementation only allows IPv6
         | 
         | Huh? Pretty sure that's not true.
        
           | eska wrote:
           | >socket_domain [ ipv4 | ipv6 ]
           | 
           | >By default, a listener will attempt to listen on all
           | supported IP protocol versions.
           | 
           | >If you do not have an IPv4 or IPv6 interface you may wish to
           | disable support for either of those protocol versions. In
           | particular, note that due to the limitations of the
           | websockets library, it will only ever attempt to open IPv6
           | sockets if IPv6 support is compiled in, and so will fail if
           | IPv6 is not available.
           | 
           | From the manual. Huh, seems like I might've misunderstood
           | this paragraph. But I was only ever able to access the broker
           | if the browser was using an ipv6 address. I'll have to test
           | again I suppose. Still, the performance and reliability was
           | not good.
        
             | oauea wrote:
             | Right, that just says if you don't have IPv6 support
             | compiled in, you can't use IPv6. IPv4 is always available,
             | and has worked wonderfully well in my experience.
        
               | eska wrote:
               | Thanks for pointing that out. I'll have to try again.
               | Maybe ipv4 got disabled in the configuration somehow by
               | accident.
        
         | ralight wrote:
         | As others have pointed out, that's not the case. Something you
         | do have to be careful of is the compile options for
         | libwebsockets and what version you're using. Recent-ish version
         | of libwebsockets in particular disable by default some features
         | Mosquitto relies on, so some installations may suffer.
         | 
         | Version 2.1 of Mosquitto will no longer need libwebsockets
         | (although it can still be selected at compile time) and so
         | websockets support will be less dependant on how other
         | libraries are compiled.
        
       | nicolaslem wrote:
       | MQTT is becoming the defacto interface for home automation. As an
       | example, Home Assistant used to have plugins for zwave and zigbee
       | but they are now replaced by an MQTT broker that sits between
       | Home Assistant and the program driving the wireless dongle.
       | 
       | Since I'm already running Mosquitto to interface with zwave
       | devices, I decided to also use it to monitor my home lab. Servers
       | push sensor statuses into Mosquitto and Home Assistant is used
       | for the UI and alerting. That was a fun week-end project.
        
         | SV_BubbleTime wrote:
         | >MQTT is becoming the defacto interface for home automation.
         | 
         | The problem I have with MQTT is also a feature. The payload
         | format isn't defined, there is no request response structure,
         | encryption of payload requires custom encapsulation, etc. You
         | are on your own for everything.
         | 
         | This is made better in MQTT v5, but AWS still doesn't support
         | that.
         | 
         | If I was starting over today, I really like OSCORE and CoAP
         | derivatives for their completeness.
        
         | cptskippy wrote:
         | I observed this as well and was just starting to dabble in MQTT
         | with my ESP projects.
         | 
         | I have yet to find a good resource for outlining autodiscovery.
         | Most of the projects I have come across just hard code some pub
         | paths in the homeassistant namespace.
        
         | oynqr wrote:
         | ZHA is still the preferred way for Zigbee with Home Assistant,
         | isn't it?
        
           | dusing wrote:
           | ZHA is great and fast, I prefer it instead of zigbee2mgtt. I
           | have 100+ zigbee devices and 80 z-wave.
        
           | nathan_f77 wrote:
           | I started with ZHA but had problems with some devices (e.g. a
           | 4-way switch panel that would only show as a single button.)
           | I've had a much better experience with zigbee2mqtt, and it
           | seems a bit more powerful
        
           | specto wrote:
           | Saw this too recently - https://www.cnx-
           | software.com/2021/09/27/zb-gw03-esp32-based-..., quite nice
        
           | EngCanMan wrote:
           | Many people use https://www.zigbee2mqtt.io/ now too, it seems
           | people are moving in this direction
        
         | parineum wrote:
         | > Home Assistant used to have plugins for zwave and zigbee but
         | they are now replaced by an MQTT broker that sits between Home
         | Assistant and the program driving the wireless dongle
         | 
         | And now, they've moved on from that to having straight
         | websocket communication between those two programs, eliminating
         | MQTT altogether.
         | 
         | I use MQTT for a lot of stuff but it adds a layer of delay
         | between devices that is particularly noticeable with flipping a
         | light switch in the Home Assistant web ui.
        
           | EngCanMan wrote:
           | This may be a use case issue. I have a zigbee door contact
           | that communicates to HA through Z2MQTT which turns on the
           | light when the door opens. It turns on so fast that my wife
           | didn't believe the light wasn't already on until I made her
           | open the door from the inside. It is instant for all intents
           | and purposes. So this delay may be relevant to the setup,
           | more than MQTT itself.
        
           | zerd wrote:
           | Are you sure it's MQTT adding the delay? From my experience
           | that part is pretty much instantaneous, but processing though
           | Home Assistant, and in my case zigbee2mqtt does add some
           | delay.
        
             | parineum wrote:
             | No I'm not certain but I can certainly say that the whole
             | setup is much more responsive after taking MQTT out of the
             | loop.
        
       | yasserf wrote:
       | MQTT is awesome. In deepstream.io we bridged the node MQTT
       | protocol to deepstream which allows us to mix and match
       | protocols. MQQT for IoT devices (and to be honest any device
       | considering the large amount of libraries) and the deepstream JS
       | client for node/browsers.
       | 
       | This pretty much allowed clustering out of the box +
       | automatically saves messages with quality assurance set in an
       | actual database. Plus a bit more authentication and permission
       | tools.
       | 
       | https://deepstream.io/blog/20190909-release-deepstream-4.2/
       | 
       | Deepstream itself is under maintenance right now, but I find the
       | concept of mixing protocols together (similar to what ably.io
       | provides) to hit a sweet spot for development across multiple
       | different environments/devices
        
       | pletnes wrote:
       | I take it mqtt was developed for embedded systems,
       | microcontrollers etc to be lightweight. Can the _broker_ also run
       | in such and environment, or is that just the clients?
        
         | joezydeco wrote:
         | I'm running Mosquitto as the central messaging broker on an
         | embedded Linux product right now. It's super lightweight.
         | 
         | Running the broker on the target has been a really great thing
         | during development. I can run validation systems on other
         | machines and inject messages over the wire, or I can actually
         | run the UI on my dev machine and let the backend respond from a
         | live target.
         | 
         | I also have a development team in Asia that can't get to the
         | newest hardware, so I fire up a system here and open a port
         | they can access. They love it.
         | 
         | That said, the _bandwidth_ in MQTT is lightweight but you still
         | need a TCP /IP stack on your system. That's typically more
         | substantial of a footprint than Mosquitto will be at the end of
         | the day.
        
         | zorr wrote:
         | Mosquitto is C/C++ without any crazy dependencies so you should
         | be able to do that. I don't immediately see why you would do
         | this though? Any specific use cases?
         | 
         | I haven't done this myself yet but I've seen a couple of
         | production IoT setups with a local MQTT broker running on a
         | RaspberryPi configured to relay all messages to a central
         | broker running in the cloud.
        
           | jvanderbot wrote:
           | Pi is a far cry from "Microcontrollers".
           | 
           | MQTT requires a TCP stack, which limits to the higher end
           | chips.
           | 
           | But, for embedded linux, you're probably golden.
        
             | joezydeco wrote:
             | MQTT is available via LWIP on STM32 parts that don't have
             | an MMU.
             | 
             | I've tried it on the STM32F746 (Cortex-M7) and it works
             | well, although there are other issues with networking on
             | CubeMX that are open.
        
         | ralight wrote:
         | The lowest spec device I've come across Mosquitto being used is
         | a 180MHz MIPS processor on 32MB RAM, running Linux.
         | 
         | Someone has recently taken the RSMB broker (from IBM
         | originally) and ported it to the ESP32:
         | https://github.com/DynamicDevices/picobroker I can't comment on
         | what the limitations of that are though.
        
         | detaro wrote:
         | If you don't need it to scale crazily, yes. E.g.
         | microcontrollers in nodes and then a local gateway as an
         | embedded Linux system would not surprise me to see.
        
       | rhodin wrote:
       | We run a hosted version starting at $5/month [0]. We used to have
       | a free version but it was too popular.
       | 
       | [0] https://www.cloudmqtt.com/plans.html
        
         | jasonvorhe wrote:
         | In case someone's looking for a free MQTT service with the only
         | constraints being client connection limits and bandwidth, check
         | out HiveMQ Cloud: https://hivemq.cloud
        
         | pmx wrote:
         | We use cloudmqtt at work and we've been really impressed by the
         | price and quality of the product. You made it not worth hosting
         | our own instance!
        
         | jayzym wrote:
         | We use this for work and it's a pretty slick product. Please
         | add support for MQTT 5.0, or shared subscriptions!
        
         | jshier wrote:
         | The free version was a great resource while developing MQTT
         | clients a few years ago, sorry it was too expensive.
        
           | rhodin wrote:
           | If you are a library developer/maintainer we'd be happy to
           | sponsor you with free subscriptions, contact us at
           | support@cloudmqtt.com.
        
       | bsmth wrote:
       | I really like Mosquitto, I'd recommend it for quickly getting
       | started hacking together IoT projects on the hobby / side project
       | scale. One of our community (QuestDB) contributors put together a
       | docker compose example that I thought was pretty nice for quick
       | prototyping, could be convenient for someone here:
       | 
       | https://github.com/shantanoo-desai/questitto
        
       | EastOfTruth wrote:
       | I used Mosquitto years ago for a few years and never had any
       | issues with it...
        
       | monkeydust wrote:
       | Use Mosquitto on Windows server at home to transfer data from my
       | energy smart meter to home assistant. Pretty rock solid and easy
       | to diagnose issues via mqtt tools.
        
       | bborud wrote:
       | This project is exceptionally useful not only in itself but as a
       | tool you can use during development. Software that can be
       | controlled entirely from the command line without configuration
       | files (unless you choose to) are very convenient.
        
       ___________________________________________________________________
       (page generated 2021-09-29 23:00 UTC)