Zwischen dem Video bin ich einkaufen gegangen und wie ich jetzt wieder zuhause bin hatte ich auf einmal 4 Pizzen dabei! Liegt wohl daran das ich heute morgen mit sehr schlechter Laune aufgestanden bin! :D
Das ist genau das Thema womit Ich mich selber zurzeit beschäftige, du hast ja deinen Broker aus dem Internet erreichbar gemacht über eine Portfreigabe. Sonst kann ja aus dem Internet auch niemand senden, wenn keine Portfreigabe aktiv ist.
Jein, das der Broker bei dir nicht erreichbar ist und du ein DNAT ("Portfreigabe") brauch ist lediglich eine "Nebenwirkung" der IP-Adressknappheit. Ich habe hier einen Server im RZ verwendet, der ist natürlich mit einer öffentlichen IP ausgestattet. Zu Hause nutze ich allerdings auch einen Zugang mit IPv6, da ist ebenfalls jedes Gerät direkt aus dem Internet erreichbar. Da dieses ganze NAT-Gebastel eher meh ist und es viele Wege gibt daran vorbei zu kommen würde ich - egal ob NAT oder nicht - jedes Gerät mit Internetzugang so behandeln, als ob es auch aus dem Internet erreichbar wäre.
Hm, enable sorgt normal dafür, dass der Dienst nach einem Reboot wieder gestartet wird, das sollte aber eigentlich bei der Installation unter Ubuntu automatisch passieren. Für andere Distributionen würde ich das auf ein "sudo systemctl enable --now mosquitto" ändern, dann wird es auch direkt ohne Neustart gestartet.
@@adlerweb ja ich musste den enable Befehl auch nur einmalig ausführen, seitdem funktionierte auch der restart bzw. Start Befehl ohne Fehlermeldung. Ich verwende debian bullseye. Grüße Nils.
Super Anleitung und auch echt genial erklärt, sodass es sofort verständlich ist. Leider funktioniert bei mir der Teil mit TLS nicht. Ohne TLS kann sich mein ESP8266 einwandfrei auf meinen RaspPi verbinden (über FQDN). Sobald ich jedoch die selben Schritte verfolge, um TLS zu aktivieren funktioniert nichts mehr. (Ja CN ist beim ca.crt als die FQDN meines rasps hitnerlegt). Übersehe ich noch etwas offensichtliches?
Hallo erstmal tolles und hilfreiches Video allerdings habe ich eine Frage uns zwar: Wie bekomme ich so eine Adresse auf den mqtt-Server der auf meinem pi läuft?
Hallo, ich weiß, es ist schon länger her mit dem Video. aber mich würde das mit dem "tmux" interessieren, aus der anleitung bin ich leider nicht richtig schlau geworden, da man da mit Optionen überschwemmt wird.
Servus, vielen Dank für deine gute Anleitung. Hast du für mich einen Tipp. Ich habe aktuelle die Mosquitto Version 2.0.15 im Docker am laufen. Ich schaffe es wunderbar mit dem mqtt_explorer darauf mit den notwendigen Zertifikaten zuzugreifen. Mit dem ESP8266 und dem "richtigen" Fingerprint bekomme ich immer folgenden Fehler im mosquitto.log angezeigt: OpenSSL Error[0]: error:140360C7:SSL routines:ACCEPT_SR_CERT:peer did not return a certificate. Hast du da eine Idee für mich? Vielen Dank Gruß Heiko
Hey Biba, finde deine Videos echt der Knaller. Ist so eine Mischung aus dem ganzen wissenschaftlichen Zeug und einer gesunden Prise Basic Knowledge :-) Hast du irgendwo eine verlässliche Anleitung zum IPv6 Port Mapping über nen DynDNS Anbieter gefunden? Gerade bei so armen Schweinen wir mir, die nen DS-Lite Zugang von Unity Media haben? Danke für eine Info
So direkt nicht. Generell: Wenn du "DS-Lite" hast, hat jedes deiner Geräte eine IP, die auch von allen IPv6-fähigen Anschlüssen aus erreichbar sein sollte. Probleme gibt es eigentlich nur, wenn der aufrufende Rechner nur v4/legacy kann - leider in Deutschland noch immer bei ein paar Altverträgen, Lokalprovidern und einigen Mobilfunkanbietern der Fall. In dem Fall bräuchtest du ein Port-Mapping, das hat aber nichts mit DynDNS zu tun. Es gibt zwar einige Cloud-Services wie portmap.io oder dataplicity.com - haben alle aber in der kostenlosen Variante Einschränkungen - da lohnt sich preislich meist eher ein kleiner vServer um dort seine Dienste zu hosten.
Hallo BitBastelei, viel dank für das video. ich habe genauso gemacht, wie du gemacht hast. aber ich bekomme immer die Fehlermeldung: " connection refused ", wenn ich den folgenden Befehl gebe: sudo mosquitto_sub --cafile /etc/mosquitto/ca_certificates/ca.crt -h fd28::1 -u hsrm -P password -t Topic:6LoWPAANover802.15.4 -p 8883 Und die Fehlermeldung: " A TLS error occurred ", wenn ich den folgenden Befehl gebe: sudo mosquitto_sub --cafile /etc/mosquitto/ca_certificates/ca.crt -h fd28::1 -u hsrm -P password -t Topic:6LoWPAANover802.15.4 -p 1883 Ausserdem was muss man noch von Client ´s Seite machen? Ich brauche deine Hilfe? Ich stehe seit 2 woche fest und komme nicht mehr weiter. Ich danke dir im Voraus.
Der Fingerprint Befehl in der Videobeschreibung und im Arduino Sketch ist glaube ich falsch. Wenn ich den laufen lasse kommt nur sowas wie "Unknown digest nooup" und "verify error:num=19:self signed certificate in certificate chain". Wenn ich allerdings das aus dem Video verwende geht es. Das könnte man ggf. anpassen. Oder der läuft nur bei mir nicht. Keine Ahnung Das Video hat mich motiviert meine eigene Hausautomatisierung mal etwas voran zu treiben. Vielen Dank dafür! Mach weiter so!
Bei deinem korrigierten Zertifikat, wie lautet der CN? your-server.de? (Was bedeutet der clients part?) Das macht mir nämlich gerade üble Kopfschmerzen, da mir die socket errors nur so um den Kopf fliegen
Ich komm hier ehrlich nicht mehr weiter. Hab jetzt dein sketch auf meine Verhältnisse übertragen und verbinde mit mqtt_server="Homeserver.local" - CN ist Homeserver (mit ALT IPs/DOMAINs) - und was mich besonders wurmt ist, das ich seriell ne Ausgabe "Connection failed" bekomme ("Connection insecure" noch als dreingabe, aber das liegt wohl laut code eher daran, das keine mqtt connection vorhanden ist). Interessanter noch, das laut tail mosquitto.log ständig neue Verbindungen reinkommen (IP/Port ok) und die nach dem standard keepalive (60s) einfach timeouten. Mit der lokalen IP gibts zeitverzögert socket errors (cf/ci) und mit Homeserver.fritz.box ist zwar (komischerweise) das insecure weg, dafür Connection failed und das log zeigt noch nicht mal einen Verbindungsversuch. So, mit MQTT.fx auf meinem anderen Linuxclient kann ich geschmeidig auf den Broker zugreifen (über die lokale IP). Secure, der Publish kommt ebenso ohne Zicken an..... Ich bekomm die Motten hier :P Da kann sich doch nicht so viel in der Lib getan haben, das der sketch jetzt total futsch ist. Normalerweise nehme ich noch andere Libs zur Hilfe (ESPHelper erleichtert einiges), da zeigen sich aber ebenso die gleichen Anzeichen über ssl.
Mit itoa und char Pointern/Arrays ist das der typische C Weg, mit der Arduino Bibliothek kann man auch String Objekte verwenden, die etwas praktischer zu benutzen sind. Man könnte z.B. client.publish("/test", String(counter)) schreiben. Hat noch paar weitere Funktionen: www.arduino.cc/reference/en/language/variables/data-types/stringobject/
Nope, das geht so nicht, dafür müsste publish() exprizit String akzeptieren. Lässt sich zwar auch nachrüsten, aber das brauch doch noch etwas mehr Speicher und ich wollte nicht noch mit Wrappern arbeiten müssen. Selbst habe ich da was drum, das auch direkt int & Co akzeptiert.
Stimmt, das habe ich übersehen, dann müsste man String(counter).c_str() machen, damit der char* rauskommt. Übrigens ruft das intern dann auch itoa() auf. In dem Objekt steht dazu noch die Länge als int, also so schlimm finde ich das vom Speicherverbrauch nicht, inbesondere auf dem ESP. Funktioniert natürlich auch wenn man es wie im Video macht einwandfrei, ich wollte nur mal String erwähnen, falls das jemand noch nicht kennt.
Hallo Bitbastelei, zuerst einmal danke für Deine Videos. Ich schau den Kanal sehr gerne und auch regelmässig. Ich habe eine Grundsatzfrage zum Thema Sicherheit. Hier dem Video geht es um Verschlüsselung von Mosquitto und die Datenverbindung mit ESP8266. Ich will eine kleine Hausautomation mit IOBroker betreiben, um meine Lampen zu steuern. Zusätzlich will ich einige ESP8266 Module über Mosquitto integrieren um Temperaturen, Luftfeuchte und solche Dinge zu erfassen. Der Mosquitto läuft auf einem Ubuntu-Server und das ganze läuft nur intern, und soll von außen (Internet) NICHT erreichbar sein. Ist in diesem Fall überhaupt eine Verschlüsselung des Datenstromes über MQTT erforderlich? Das WLAN über das der ESP8266 kommuniziert, ist ja bereits gesichert. Vielen Dank im Voraus und weiter so.
Die Frage ist: Was ist "Intern"? Die wenigsten Nutzer haben zu Hause eine Firewall, bestenfalls einen Plastikrouter, welcher NAT nutzt und daher eine Pseudo-Sicherheit bietet. Selbst Firewalls sind oft keine große Hürde - ein Gerät mit Webbrowser und/oder Sicherheitslücke zum Springen und schon hat man auch von "extern" Zugriff auf die Geräte. Oder eines der Dutzenden Geräte, welche "Cloud" spielen und sich einen Tunnel durch die bestehenden Sicherheitsmaßnahmen bohren. Als wirklich "Intern" würde ich daher nur Netze betrachten, welche entweder gar keine Verbindung nach außen haben oder auf Anwendungsebene sehr strikte Filter für jede Kommunikation nach Drinnen und Draußen haben.
Das kommt sehr auf dein Netzwerk an und wo du das nutzen willst. Wenn es nur um intern geht kannst du meist den Geräten in deinem Router einen internen Namen geben, bei FritzBoxen heißt das dann meist geraetename.fritz.box. Wenn es auch extern sein soll eignet sich für Privatanschlüsse ein Dynamic-DNS-Dienst. Es gibt einige kostenlose, da bekommt man dann wunschname.anbieter.com, einige Routeranbieter haben sowas auch schon ab Werk dabei. Ansonsten kann man auch "echte" Domänen kaufen, die Anbieter haben meist auch passende Dynamic-DNS-Funktionen.
hmh also wenn ich meinen MQTT server öffentlich mache ist es wohl sinvoll aber wenn der server nur im lokalen netz läuft ist das ganze nicht dann etwas übertrieben?
Naja - wenn etwas mit dem Internet verbunden ist, dann ist es auch öffentlich. Ob da jetzt ne ungepatchte Plastikkiste mit UPNP dazwischen steht oder das direkt am Internet hängt macht da am Ende nicht viel Unterschied. Oder halt die IoT-Kaffemaschiene, die einen Tunnel durch baut. Heutige Netze haben mehr als genug Eingänge.
Bei älteren IP-Versionen hatten Router durch NAT einen Filter, das ist /war aber eher ein Abfallprodukt der Technik und kein Sicherheitsmerkmal. Es gibt viele Möglichkeiten solche Router (oder auch komplette Firewalls) zu umgehen, von daher ist es fast immer eine gute Idee alles, was direkt oder indirekt mit dem Internet verbunden ist, als erreichbar zu betrachten.
@@adlerweb Ich bin kein Experte, nur Autodidakt, das ist der Grund weshalb ich IPv6 nicht mag. Selbst wenn man die einzelnen Geräte absichert finde ich den Gedanken grauslig, dass jedes Gerät eine öffentliche IP hat. Jetzt muss man bedenken, dass die große Mehrheit der Menschen die IT Geräte nutzen kaum eine Ahnung davon haben wie man so ein Gerät absichert. Als Laie muss man sich ja quasi darauf verlassen, dass der heimische Router einen gewissen Schutz bietet.
@@fredfeuerstein3328 sich bei ipv4 ist es keine wirkliche Kunst einen solchen Router zu überwinden. Im Gegenteil: da der Adressraum kleiner ist findet man interessante Geräte üblicherweise sogar leichter.
@@adlerweb Wie sicherst Du z.B. Geräte in Deinem Netzwerk ab, wenn Du keinen vollen Zugriff, also keine Rootrechte hast? Es gibt ja immer mehr IoT Geräte in den Haushalten, viele davon kann man nicht absichern. Wenn Router keine Sicherheit bieten, dann funktioniert das Kaskadieren von mehreren Routern auch nicht (DMZ)?
@@adlerweb Naja, sicherlich ist/war NAT kein reines Sicherheits-Feature von IPv4 (bzw. IPv6), dennoch erhöht es die Sicherheit im Alltag enorm. Ungewollte einkommende Verbindungen kommen dadurch ja nicht zu Stande. Sicherlich kann man das auch mit Stateful Firewalls erreichen (so wie es bei IPv6) die Regel ist, aber NAT ist unter diesem Gesichtspunkt schon ganz nett. Unter allen anderen ist es natürlich grausam und sorgt für viele Probleme. Dass man NAT (von außen) so ohne weiteres umgehen kann, ist aber nicht korrekt. Klar sind ungepatchte Geräte bzw. UPnP generell ein Problem, aber im Alltag funktionieren die vielen Heim-Router dann doch erstaunlich gut. Nichtsdestotrotz ist es natürlich immer empfehlenswert mittels TLs Ende-zu-Ende zu verschlüsseln. Leider ist der dadurch entstehende Overhead im Embedded Bereich aktuell nicht ganz zu vernachlässigen, und der TLS Support von Tasmota & Co. ist eher rudimentär ...
Bei 34:10 hatte ich im Funktionsaufruf etwas verwechselt und dachte, dass die 10 eine Längenangabe wäre und es daher in 11 geändert. In Wahrheit ist das die Zahlenbasis. Da ich dort 11 geschrieben hab sind es daher nicht mehr die 10 Ziffern 0123456789 sondern hier 0123456789a - also ähnlich wie Hexadezimal/16 0123456789abcdef hat. Im Code zum Download hat das korrigiert.
Ich versuche gerade den Raspi und das esp8266 über mosquitto reden zu lassen. Funkt aber nicht bekomme immer diese Meldung "Error: Invalid port given: 0" wenn ich was subscriben will. Vielleicht habt Ihr eine Idee.
@@adlerweb Port hab ich in der Config angegeben. Jetzt kommt die Meldung "Socket error on client , disconnecting."Jetzt sehe ich zumindest das sich hier mein ESP verbinden will.Keine Ahnung komme nicht weiter.
Versuche mit NodeJS via MQTT.js draufzukommen, habe aber ein Verifizierungsproblem. Wie binde ich die Zertifikate oder den Fingerprint ein? PS: Super Anleitung
Wenn ich die Doku richtig interpretiere: var client = mqtt.connect([…, ca: fs.readFileSync(path.join(__dirname, '/ca.crt'))]) allerdings scheint JS da den Hostname zu validieren, wenn der nicht stimmt geht es trotzdem nicht.
Wenn es zu schnell geht kann die Geschwindigkeitsfunktion der Abspielsoftware ggf. helfen. Am Ende ist es Geschmackssache. Hier sind auch viele dabei, die in 1.5x oder 2x schauen.
Hallo ich hätte da mal eine Frage (bin relativer Anfänger was das Thema betrifft... ): wie genau setzt sich die IP bzw die Adresse des mqtt brokers zusammen?? Habe das Problem am Ende mit der lokalen IP leider nicht verstanden. Der Grund, warum ich nach der IP frage ist folgender: Ich versuche seit einiger Zeit mit Node RED (mqtt broker) auf dem raspi und einem esp8266 das selbe wie im Video zum laufen zu bekommen. Jedoch bekomme ich von meinem esp immer die Meldung er könne sich nicht verbinden. Nun habe ich die Vermutung das es mit der IP zusammenhängt. Vielleicht hat ja irgendjemand eine Idee was das Problem sein könnte und wie sich die IP zusammensetzt. Vielen Dank Oliver
Die IP hat erst mal nichts mit MQTT zu tun, es ist einfach nur die IP deines Raspi, welche du entweder eingestellt hast oder automatisch von deinem Router (z.B. FritzBox) vergeben wurde. Was mich aber wundert: Sicher, dass du einen MQTT-Broker hast? NodeRED kenne ich nur als "Logikwerkzeug" für MQTT, den Broker muss man normalerweise separat installieren. Sofern ich das nur falsch verstanden hab und auf dem RPi noch ein mosquitto wie bei mir läuft: Wenn du ohnehin noch testest versuche es erst mal ohne Verschlüsselung, Passwörter & Co. Wenn das läuft kannst du diese Dinge dann nach und nach wieder dazubauen. So siehst du am ehesten an welcher Stelle es hängt und lernst auch gleich noch die Zusammenhänge besser kennen.
@@adlerweb Danke für Ihren Tipp habe nun das Problem gefunden: der mit einem zusätzlichen Node implementierte mqtt broker führte zum Absturz von node Red. Mit mosquitto als broker funktioniert es jetzt wunderbar. Nochmals vielen Dank, Oliver
Ich bin da noch von sysvinit/OpenRC/… geschädigt - da hatte restart z.T. den zugehörigen Prozess nicht beendet, sondern einen Prozessinternen reload aufgerufen, welcher z.T. die Caches nicht gelöscht hatte.
@@adlerweb Ah.. hm, ich hatte mit restart bei systemd noch nie Probleme bemerkt. Wo ich jetzt aber gerade die manpage lese: _Note that restarting a unit with this command does not necessarily flush out all of the unit's resources before it is started again. For example, the per-service file descriptor storage facility (see FileDescriptorStoreMax= in systemd.service(5)) will remain intact as long as the unit has a job pending, and is only cleared when the unit is fully stopped and no jobs are pending anymore. If it is intended that the file descriptor store is flushed out, too, during a restart operation an explicit _*_systemctl stop_*_ command followed by _*_systemctl start_*_ should be issued._ Also ist start & stop im Zweifelsfall vll doch ne gute Angewohnheit? Hachja... ^^
Joa, die ENCs habe ich leider nie stabil zum laufen bekommen, außerdem ist RAM für TCP/IP zu klein, sodass nur ein nicht standardkonformer Mini-Nachbau drin ist. TLS ist entsprechend erst recht nicht drin. Gibt zwar Alternativen mit internem Stack, die sind aber recht teuer.
BitBastelei hab im April einen für 3,xx€ bestellt. Und soo groß sind sie auch nicht. Zusammen mit einem Arduino nano daneben kriegt man die schon in ne Verdrahtungsdose.
Hi, I'm not quite sure what you're looking for. You need to set up a MQTT server yourself (in this case it's the IP of the system you installed the server on) or use a public one (in this case you should use the DNS/hostname provided since IPs might change).
Thanks for the answer, I figured out. It was my public Ipv4 from AWS EC2. Just one more question, if u permit. The fingerprint is a shortcut of the CA or is of the CERT?
Genial. Endlich kann ich dank deines Videos die subscribed Payload mit dem Wemos D1 Mini (Arduino) als ganzes auslesen und weiter verarbeiten.
Zwischen dem Video bin ich einkaufen gegangen und wie ich jetzt wieder zuhause bin hatte ich auf einmal 4 Pizzen dabei! Liegt wohl daran das ich heute morgen mit sehr schlechter Laune aufgestanden bin! :D
14:22 *CTRL-X CTRL-F* im insert mode von vim vervollständigt Pfade über ein Pop-Up-Menü. ;)
Das ist genau das Thema womit Ich mich selber zurzeit beschäftige, du hast ja deinen Broker aus dem Internet erreichbar gemacht über eine Portfreigabe.
Sonst kann ja aus dem Internet auch niemand senden, wenn keine Portfreigabe aktiv ist.
Jein, das der Broker bei dir nicht erreichbar ist und du ein DNAT ("Portfreigabe") brauch ist lediglich eine "Nebenwirkung" der IP-Adressknappheit. Ich habe hier einen Server im RZ verwendet, der ist natürlich mit einer öffentlichen IP ausgestattet. Zu Hause nutze ich allerdings auch einen Zugang mit IPv6, da ist ebenfalls jedes Gerät direkt aus dem Internet erreichbar. Da dieses ganze NAT-Gebastel eher meh ist und es viele Wege gibt daran vorbei zu kommen würde ich - egal ob NAT oder nicht - jedes Gerät mit Internetzugang so behandeln, als ob es auch aus dem Internet erreichbar wäre.
Geniales Video, nach den beiden install mosquitto Befehlen fehlt noch: sudo systemctl enable mosquitto , sonst lief es bei mir nicht. Grüße Nils
Hm, enable sorgt normal dafür, dass der Dienst nach einem Reboot wieder gestartet wird, das sollte aber eigentlich bei der Installation unter Ubuntu automatisch passieren. Für andere Distributionen würde ich das auf ein "sudo systemctl enable --now mosquitto" ändern, dann wird es auch direkt ohne Neustart gestartet.
@@adlerweb ja ich musste den enable Befehl auch nur einmalig ausführen, seitdem funktionierte auch der restart bzw. Start Befehl ohne Fehlermeldung. Ich verwende debian bullseye. Grüße Nils.
Is des was der Arduino sendet auch verschlüsselt? Oder Ned?
Super Anleitung und auch echt genial erklärt, sodass es sofort verständlich ist. Leider funktioniert bei mir der Teil mit TLS nicht.
Ohne TLS kann sich mein ESP8266 einwandfrei auf meinen RaspPi verbinden (über FQDN). Sobald ich jedoch die selben Schritte verfolge, um TLS zu aktivieren funktioniert nichts mehr. (Ja CN ist beim ca.crt als die FQDN meines rasps hitnerlegt). Übersehe ich noch etwas offensichtliches?
hey hast du nicht zufällig eine Schnittstelle am Brain, was man auslesen kann? :)
Hallo erstmal tolles und hilfreiches Video allerdings habe ich eine Frage uns zwar:
Wie bekomme ich so eine Adresse auf den mqtt-Server der auf meinem pi läuft?
Hallo, ich weiß, es ist schon länger her mit dem Video. aber mich würde das mit dem "tmux" interessieren, aus der anleitung bin ich leider nicht richtig schlau geworden, da man da mit Optionen überschwemmt wird.
Ich glaub leyrer erklärt das besser ;) media.ccc.de/v/gpn18-105-tmux-warum-ein-schwarzes-fenster-am-bildschirm-reicht
Servus, vielen Dank für deine gute Anleitung. Hast du für mich einen Tipp. Ich habe aktuelle die Mosquitto Version 2.0.15 im Docker am laufen. Ich schaffe es wunderbar mit dem mqtt_explorer darauf mit den notwendigen Zertifikaten zuzugreifen. Mit dem ESP8266 und dem "richtigen" Fingerprint bekomme ich immer folgenden Fehler im mosquitto.log angezeigt: OpenSSL Error[0]: error:140360C7:SSL routines:ACCEPT_SR_CERT:peer did not return a certificate. Hast du da eine Idee für mich? Vielen Dank Gruß Heiko
Findet die nötigen Voraussetzungen? Das klingt komisch. Abhängigkeiten = dependencies wäre besser. Sonst gut erklärt.
Hey Biba, finde deine Videos echt der Knaller. Ist so eine Mischung aus dem ganzen wissenschaftlichen Zeug und einer gesunden Prise Basic Knowledge :-) Hast du irgendwo eine verlässliche Anleitung zum IPv6 Port Mapping über nen DynDNS Anbieter gefunden? Gerade bei so armen Schweinen wir mir, die nen DS-Lite Zugang von Unity Media haben? Danke für eine Info
So direkt nicht. Generell: Wenn du "DS-Lite" hast, hat jedes deiner Geräte eine IP, die auch von allen IPv6-fähigen Anschlüssen aus erreichbar sein sollte. Probleme gibt es eigentlich nur, wenn der aufrufende Rechner nur v4/legacy kann - leider in Deutschland noch immer bei ein paar Altverträgen, Lokalprovidern und einigen Mobilfunkanbietern der Fall. In dem Fall bräuchtest du ein Port-Mapping, das hat aber nichts mit DynDNS zu tun. Es gibt zwar einige Cloud-Services wie portmap.io oder dataplicity.com - haben alle aber in der kostenlosen Variante Einschränkungen - da lohnt sich preislich meist eher ein kleiner vServer um dort seine Dienste zu hosten.
danke dir. hab einen vserver. werde mir mal 6tunnel anschauen. das sollte ja ipv4 auf ipv6 mappen können.
Fehler in der Videobeschreibung: "... HomeAssistant eineen eigenen..." :)
Hallo BitBastelei, viel dank für das video. ich habe genauso gemacht, wie du gemacht hast. aber ich bekomme immer die Fehlermeldung: " connection refused ", wenn ich den folgenden Befehl gebe:
sudo mosquitto_sub --cafile /etc/mosquitto/ca_certificates/ca.crt -h fd28::1 -u hsrm -P password -t Topic:6LoWPAANover802.15.4 -p 8883
Und die Fehlermeldung: " A TLS error occurred ", wenn ich den folgenden Befehl gebe:
sudo mosquitto_sub --cafile /etc/mosquitto/ca_certificates/ca.crt -h fd28::1 -u hsrm -P password -t Topic:6LoWPAANover802.15.4 -p 1883
Ausserdem was muss man noch von Client ´s Seite machen?
Ich brauche deine Hilfe? Ich stehe seit 2 woche fest und komme nicht mehr weiter.
Ich danke dir im Voraus.
Der Fingerprint Befehl in der Videobeschreibung und im Arduino Sketch ist glaube ich falsch. Wenn ich den laufen lasse kommt nur sowas wie "Unknown digest nooup" und "verify error:num=19:self signed certificate in certificate chain".
Wenn ich allerdings das aus dem Video verwende geht es. Das könnte man ggf. anpassen.
Oder der läuft nur bei mir nicht. Keine Ahnung
Das Video hat mich motiviert meine eigene Hausautomatisierung mal etwas voran zu treiben. Vielen Dank dafür! Mach weiter so!
stimmt - muss noout heißen
dann ist gut, hatte erst etwas gerätselt warum es bei dir läuft und bei mir nicht 👍
Bei deinem korrigierten Zertifikat, wie lautet der CN? your-server.de? (Was bedeutet der clients part?) Das macht mir nämlich gerade üble Kopfschmerzen, da mir die socket errors nur so um den Kopf fliegen
Ich komm hier ehrlich nicht mehr weiter.
Hab jetzt dein sketch auf meine Verhältnisse übertragen und verbinde mit mqtt_server="Homeserver.local" - CN ist Homeserver (mit ALT IPs/DOMAINs) - und was mich besonders wurmt ist, das ich seriell ne Ausgabe "Connection failed" bekomme ("Connection insecure" noch als dreingabe, aber das liegt wohl laut code eher daran, das keine mqtt connection vorhanden ist). Interessanter noch, das laut tail mosquitto.log ständig neue Verbindungen reinkommen (IP/Port ok) und die nach dem standard keepalive (60s) einfach timeouten. Mit der lokalen IP gibts zeitverzögert socket errors (cf/ci) und mit Homeserver.fritz.box ist zwar (komischerweise) das insecure weg, dafür Connection failed und das log zeigt noch nicht mal einen Verbindungsversuch.
So, mit MQTT.fx auf meinem anderen Linuxclient kann ich geschmeidig auf den Broker zugreifen (über die lokale IP). Secure, der Publish kommt ebenso ohne Zicken an.....
Ich bekomm die Motten hier :P Da kann sich doch nicht so viel in der Lib getan haben, das der sketch jetzt total futsch ist. Normalerweise nehme ich noch andere Libs zur Hilfe (ESPHelper erleichtert einiges), da zeigen sich aber ebenso die gleichen Anzeichen über ssl.
kann man den mqtt server auch auf dem esp laufen lassen oder brauche ich dafür ein seperates gerät?
Mir ist kein Server für den ESP bekannt. Dürfte auch zu wenig Speicher für sowas haben, also eher separates Gerät.
@@adlerweb danke für die antwort. Ich habe einen gefunden namens uMQTTbroker und mein projekt hat damit geklappt ohne externen server
Mit itoa und char Pointern/Arrays ist das der typische C Weg, mit der Arduino Bibliothek kann man auch String Objekte verwenden, die etwas praktischer zu benutzen sind. Man könnte z.B. client.publish("/test", String(counter)) schreiben. Hat noch paar weitere Funktionen: www.arduino.cc/reference/en/language/variables/data-types/stringobject/
Nope, das geht so nicht, dafür müsste publish() exprizit String akzeptieren. Lässt sich zwar auch nachrüsten, aber das brauch doch noch etwas mehr Speicher und ich wollte nicht noch mit Wrappern arbeiten müssen. Selbst habe ich da was drum, das auch direkt int & Co akzeptiert.
Stimmt, das habe ich übersehen, dann müsste man String(counter).c_str() machen, damit der char* rauskommt. Übrigens ruft das intern dann auch itoa() auf. In dem Objekt steht dazu noch die Länge als int, also so schlimm finde ich das vom Speicherverbrauch nicht, inbesondere auf dem ESP.
Funktioniert natürlich auch wenn man es wie im Video macht einwandfrei, ich wollte nur mal String erwähnen, falls das jemand noch nicht kennt.
Kann es sein das bei Auxnet das Script nicht mehr zu Verfügung steht? Mir wird nur die Überschrift angezeigt mehr nicht.
Scheint so - leider auch nicht im Internet-Archiv zu finden. Bleibt nur zu hoffen, dass der Autor den Fehler repariert.
Schade. Dann werde ich wohl einen anderen Weg gehen müssen
Hallo Bitbastelei, zuerst einmal danke für Deine Videos. Ich schau den Kanal sehr gerne und auch regelmässig. Ich habe eine Grundsatzfrage zum Thema Sicherheit. Hier dem Video geht es um Verschlüsselung von Mosquitto und die Datenverbindung mit ESP8266. Ich will eine kleine Hausautomation mit IOBroker betreiben, um meine Lampen zu steuern. Zusätzlich will ich einige ESP8266 Module über Mosquitto integrieren um Temperaturen, Luftfeuchte und solche Dinge zu erfassen. Der Mosquitto läuft auf einem Ubuntu-Server und das ganze läuft nur intern, und soll von außen (Internet) NICHT erreichbar sein. Ist in diesem Fall überhaupt eine Verschlüsselung des Datenstromes über MQTT erforderlich? Das WLAN über das der ESP8266 kommuniziert, ist ja bereits gesichert. Vielen Dank im Voraus und weiter so.
Die Frage ist: Was ist "Intern"? Die wenigsten Nutzer haben zu Hause eine Firewall, bestenfalls einen Plastikrouter, welcher NAT nutzt und daher eine Pseudo-Sicherheit bietet. Selbst Firewalls sind oft keine große Hürde - ein Gerät mit Webbrowser und/oder Sicherheitslücke zum Springen und schon hat man auch von "extern" Zugriff auf die Geräte. Oder eines der Dutzenden Geräte, welche "Cloud" spielen und sich einen Tunnel durch die bestehenden Sicherheitsmaßnahmen bohren. Als wirklich "Intern" würde ich daher nur Netze betrachten, welche entweder gar keine Verbindung nach außen haben oder auf Anwendungsebene sehr strikte Filter für jede Kommunikation nach Drinnen und Draußen haben.
Wie erhalte ich eine vollständige Domain statt einer IP-Adresse für den ESP?
Das kommt sehr auf dein Netzwerk an und wo du das nutzen willst. Wenn es nur um intern geht kannst du meist den Geräten in deinem Router einen internen Namen geben, bei FritzBoxen heißt das dann meist geraetename.fritz.box. Wenn es auch extern sein soll eignet sich für Privatanschlüsse ein Dynamic-DNS-Dienst. Es gibt einige kostenlose, da bekommt man dann wunschname.anbieter.com, einige Routeranbieter haben sowas auch schon ab Werk dabei. Ansonsten kann man auch "echte" Domänen kaufen, die Anbieter haben meist auch passende Dynamic-DNS-Funktionen.
hmh also wenn ich meinen MQTT server öffentlich mache ist es wohl sinvoll aber wenn der server nur im lokalen netz läuft ist das ganze nicht dann etwas übertrieben?
Naja - wenn etwas mit dem Internet verbunden ist, dann ist es auch öffentlich. Ob da jetzt ne ungepatchte Plastikkiste mit UPNP dazwischen steht oder das direkt am Internet hängt macht da am Ende nicht viel Unterschied. Oder halt die IoT-Kaffemaschiene, die einen Tunnel durch baut. Heutige Netze haben mehr als genug Eingänge.
Wieso ist der von außen vom Internet erreichbar? Hinterm Router doch nicht oder?
Bei älteren IP-Versionen hatten Router durch NAT einen Filter, das ist /war aber eher ein Abfallprodukt der Technik und kein Sicherheitsmerkmal. Es gibt viele Möglichkeiten solche Router (oder auch komplette Firewalls) zu umgehen, von daher ist es fast immer eine gute Idee alles, was direkt oder indirekt mit dem Internet verbunden ist, als erreichbar zu betrachten.
@@adlerweb Ich bin kein Experte, nur Autodidakt, das ist der Grund weshalb ich IPv6 nicht mag. Selbst wenn man die einzelnen Geräte absichert finde ich den Gedanken grauslig, dass jedes Gerät eine öffentliche IP hat.
Jetzt muss man bedenken, dass die große Mehrheit der Menschen die IT Geräte nutzen kaum eine Ahnung davon haben wie man so ein Gerät absichert. Als Laie muss man sich ja quasi darauf verlassen, dass der heimische Router einen gewissen Schutz bietet.
@@fredfeuerstein3328 sich bei ipv4 ist es keine wirkliche Kunst einen solchen Router zu überwinden. Im Gegenteil: da der Adressraum kleiner ist findet man interessante Geräte üblicherweise sogar leichter.
@@adlerweb Wie sicherst Du z.B. Geräte in Deinem Netzwerk ab, wenn Du keinen vollen Zugriff, also keine Rootrechte hast? Es gibt ja immer mehr IoT Geräte in den Haushalten, viele davon kann man nicht absichern. Wenn Router keine Sicherheit bieten, dann funktioniert das Kaskadieren von mehreren Routern auch nicht (DMZ)?
@@adlerweb Naja, sicherlich ist/war NAT kein reines Sicherheits-Feature von IPv4 (bzw. IPv6), dennoch erhöht es die Sicherheit im Alltag enorm. Ungewollte einkommende Verbindungen kommen dadurch ja nicht zu Stande. Sicherlich kann man das auch mit Stateful Firewalls erreichen (so wie es bei IPv6) die Regel ist, aber NAT ist unter diesem Gesichtspunkt schon ganz nett. Unter allen anderen ist es natürlich grausam und sorgt für viele Probleme. Dass man NAT (von außen) so ohne weiteres umgehen kann, ist aber nicht korrekt. Klar sind ungepatchte Geräte bzw. UPnP generell ein Problem, aber im Alltag funktionieren die vielen Heim-Router dann doch erstaunlich gut. Nichtsdestotrotz ist es natürlich immer empfehlenswert mittels TLs Ende-zu-Ende zu verschlüsseln. Leider ist der dadurch entstehende Overhead im Embedded Bereich aktuell nicht ganz zu vernachlässigen, und der TLS Support von Tasmota & Co. ist eher rudimentär ...
37:18 Warum schreibt er nach 49 erst 4a und dann 50?
Bei 34:10 hatte ich im Funktionsaufruf etwas verwechselt und dachte, dass die 10 eine Längenangabe wäre und es daher in 11 geändert. In Wahrheit ist das die Zahlenbasis. Da ich dort 11 geschrieben hab sind es daher nicht mehr die 10 Ziffern 0123456789 sondern hier 0123456789a - also ähnlich wie Hexadezimal/16 0123456789abcdef hat. Im Code zum Download hat das korrigiert.
Ich versuche gerade den Raspi und das esp8266 über mosquitto reden zu lassen. Funkt aber nicht bekomme immer diese Meldung "Error: Invalid port given: 0" wenn ich was subscriben will. Vielleicht habt Ihr eine Idee.
Wo kommt die meldung? Im Mosquitto-Server? Dann schau mal in der Config-Datei, ob da die Port-Angabe fehlt.
in dieser Datei mosquitto.conf ?
Da steht nichts von einem Port.
Danke für die Hilfe. (bin ein super Noob)
Auch beim Start von mosquitto kommt die Fehlermeldung "Error: Address already in use".
@@adlerweb Port hab ich in der Config angegeben. Jetzt kommt die Meldung "Socket error on client , disconnecting."Jetzt sehe ich zumindest das sich hier mein ESP verbinden will.Keine Ahnung komme nicht weiter.
Versuche mit NodeJS via MQTT.js draufzukommen, habe aber ein Verifizierungsproblem. Wie binde ich die Zertifikate oder den Fingerprint ein?
PS: Super Anleitung
Wenn ich die Doku richtig interpretiere:
var client = mqtt.connect([…, ca: fs.readFileSync(path.join(__dirname, '/ca.crt'))])
allerdings scheint JS da den Hostname zu validieren, wenn der nicht stimmt geht es trotzdem nicht.
@@adlerweb
Muss man ein Client Zertifikat erstellen?
Inhaltlich sehr interessant, aber ich glaub du wolltest ein Schnellsprechbewerb gewinnen. Für einen Anfänger nicht nachzuvollziehen
Wenn es zu schnell geht kann die Geschwindigkeitsfunktion der Abspielsoftware ggf. helfen. Am Ende ist es Geschmackssache. Hier sind auch viele dabei, die in 1.5x oder 2x schauen.
why port 1883 if using certificates?
Too lazy to reconfigure firewall and config files ;)
Hallo ich hätte da mal eine Frage (bin relativer Anfänger was das Thema betrifft... ): wie genau setzt sich die IP bzw die Adresse des mqtt brokers zusammen?? Habe das Problem am Ende mit der lokalen IP leider nicht verstanden. Der Grund, warum ich nach der IP frage ist folgender: Ich versuche seit einiger Zeit mit Node RED (mqtt broker) auf dem raspi und einem esp8266 das selbe wie im Video zum laufen zu bekommen. Jedoch bekomme ich von meinem esp immer die Meldung er könne sich nicht verbinden. Nun habe ich die Vermutung das es mit der IP zusammenhängt. Vielleicht hat ja irgendjemand eine Idee was das Problem sein könnte und wie sich die IP zusammensetzt.
Vielen Dank
Oliver
Die IP hat erst mal nichts mit MQTT zu tun, es ist einfach nur die IP deines Raspi, welche du entweder eingestellt hast oder automatisch von deinem Router (z.B. FritzBox) vergeben wurde. Was mich aber wundert: Sicher, dass du einen MQTT-Broker hast? NodeRED kenne ich nur als "Logikwerkzeug" für MQTT, den Broker muss man normalerweise separat installieren.
Sofern ich das nur falsch verstanden hab und auf dem RPi noch ein mosquitto wie bei mir läuft: Wenn du ohnehin noch testest versuche es erst mal ohne Verschlüsselung, Passwörter & Co. Wenn das läuft kannst du diese Dinge dann nach und nach wieder dazubauen. So siehst du am ehesten an welcher Stelle es hängt und lernst auch gleich noch die Zusammenhänge besser kennen.
@@adlerweb Danke für Ihren Tipp habe nun das Problem gefunden: der mit einem zusätzlichen Node implementierte mqtt broker führte zum Absturz von node Red. Mit mosquitto als broker funktioniert es jetzt wunderbar. Nochmals vielen Dank,
Oliver
*systemctl restart* macht stop & start in einem Befehl
Ich bin da noch von sysvinit/OpenRC/… geschädigt - da hatte restart z.T. den zugehörigen Prozess nicht beendet, sondern einen Prozessinternen reload aufgerufen, welcher z.T. die Caches nicht gelöscht hatte.
@@adlerweb Ah.. hm, ich hatte mit restart bei systemd noch nie Probleme bemerkt. Wo ich jetzt aber gerade die manpage lese:
_Note that restarting a unit with this command does not necessarily flush out all of the unit's resources before it is started again. For example, the per-service file descriptor storage facility (see FileDescriptorStoreMax= in systemd.service(5)) will remain intact as long as the unit has a job pending, and is only cleared when the unit is fully stopped and no jobs are pending anymore. If it is intended that the file descriptor store is flushed out, too, during a restart operation an explicit _*_systemctl stop_*_ command followed by _*_systemctl start_*_ should be issued._
Also ist start & stop im Zweifelsfall vll doch ne gute Angewohnheit? Hachja... ^^
@@nibblrrr7124 er hat doch zuerst restart genutzt und das hat nicht geklappt... start stop ging dann
Für Arduino gibt es auch Ethernet
Joa, die ENCs habe ich leider nie stabil zum laufen bekommen, außerdem ist RAM für TCP/IP zu klein, sodass nur ein nicht standardkonformer Mini-Nachbau drin ist. TLS ist entsprechend erst recht nicht drin. Gibt zwar Alternativen mit internem Stack, die sind aber recht teuer.
BitBastelei diese wiznet tcp/ip chips 5500 kosten 3€
Hm - ich find da nur welche für ~4.50€, die sind aber auch im Shield-Design, also brauchen recht viel Platz.
BitBastelei hab im April einen für 3,xx€ bestellt. Und soo groß sind sie auch nicht. Zusammen mit einem Arduino nano daneben kriegt man die schon in ne Verdrahtungsdose.
Hey du äs gibt aufsätze für Arduino
kan mir jemandt mit einem Arduino Code helfen
Jo
Hi, can u please show me how to get the correct mqtt server IP? I'm struggling with german haha. By the way, nice video!
Hi, I'm not quite sure what you're looking for. You need to set up a MQTT server yourself (in this case it's the IP of the system you installed the server on) or use a public one (in this case you should use the DNS/hostname provided since IPs might change).
Thanks for the answer, I figured out. It was my public Ipv4 from AWS EC2.
Just one more question, if u permit.
The fingerprint is a shortcut of the CA or is of the CERT?
kermit
Gute alte hetzner Server 😂