Moin
Ein Meshnetzwerk mit den ESP's ist ja dank dem Beispiel "Hello Mesh"
recht einfach.
Aber wie schaffe ich es einen Laptop (oder Handy) mit in diese
Kommunikation einzubinden?
Es sind auch nicht viele Daten die ausgetauscht werden sollen:
Die ESP's senden alle x Minuten einen gemessenen Wert in das Mesh,
der Laptop liest diese aus (am liebsten mit PHP) und sendet einen Wert
an den jeweiligen ESP zurück.
Hat damit jemand Erfahrung?
Gruß
Schau Dir den Quelltext an und verstehe ihn.
Soweit ich das sehe, warten alle Nodes darauf, dass sich jemand mit
ihnen verbindet. Dann senden sie die hardcodierte Hello-World Nachricht
an alle erreichbaren anderen Nodes.
Die Nachricht erreicht aber nur diese Nodes. Nodes die weiter weg sind
und indirekt mit verbunden sind, empfangen die Nachricht nicht. Aber
alle Nodes, die irgend etwas empfangen haben, senden wiederum die in
ihnen hardcodierte Nachricht an alle anderen erreichbaren Nodes.
Danach blockiert der Node für eine Sekunde und ignoriert alles, was um
ihn herum passiert.
Eine Node ist ein Access Point mit beliebiger SSID und ein TCP Listener
auf IP Adresse 192.168.4.1 Port 4011.
Ich denke, das geht am Sinn des vermaschten Netzes vorbei.
Zum Einen kannst du damit nicht frei bestimmbare Nachrichten durch das
ganze Netz schicken und zum Anderen sehe ich dort keinen sinnvoll
funktionierenden Mechanismus, der endlose Wiederholungen verhindert. Bei
größen Netzen wird das auffallen, oder auch bei kleinen Netzen wenn du
die Blockierzeit verringerst.
Auffallen wird der Konzeptfehler, wenn du mal einen anderen Text in das
Netz sendest, der NICHT im Quelltext hardcodiert drin steht. Und mach
mal das Netz so groß, dass sich nicht alle Nodes direkt erreichen,
sondern ein oder zwei Ringe entstehen:
Dann bricht das totale Chaos aus, darauf wette ich.
Damit dein PC Teil dieses Netzes wird, muss er ebenfalls selbst ein
Access Point sein oder mit einem Access Point verbunden sein und die IP
Adresse 192.168.4.1 haben. Und er muss einen TCP Listener auf Port 4011
laufen haben - im einfachsten Fall das Programm Netcat (nc).
Dieses Beispielprogramm ist typischer Arduino Murks.
Hallo Stefan
Danke für die ausführliche Antwort,
auch wenn es nicht das ist was ich erwartet hatte.
Zur Zeit ist das Mesh nur drei nides groß, später sollen es aber bis zu
50 sein.
Kennst du eine andere Methode um mit Laptop und 50 ESPs zu
kommunizieren?
Gruß
> Kennst du eine andere Methode um mit Laptop und 50 ESPs> zu kommunizieren?
Zum Beispiel ein ganz normales WLAN mit einem AP.
Aber das wolltest du wohl nicht hören. Mal ein anderer Ansatz, der
vielleicht besser zu deiner unbekannten Anwendung passt:
Schließe ein ESP Modul an den seriellen Port des PC an, dann kannst du
von dort aus steuern, was das Ding auf der Funkschnittstelle machen
soll. Eine entsprechende selbst geschriebene µC Software natürlich
vorausgesetzt.
Was soll denn die Anwendung tun, welche Anforderung kannst du nennen?
Werner P. schrieb:> MQTT
Schaue ich mir mal an, kannte ich noch gar nicht.
Gibt es damit nicht die Probleme, die Stefan oben dem Mesh
zugeschrieben hat?
Stefan U. schrieb:> Zum Beispiel ein ganz normales WLAN mit einem AP.
Dafür sind die Entfernungen zu groß. ;-)
Stefan U. schrieb:> Schließe ein ESP Modul an den seriellen Port des PC an
Laptop -> USB -> Seriell -> ESP ist mir eigentlich etwas zu aufwändig,
dafür das der Laptop schon eine W-Lan Karte integriert hat.
Stefan U. schrieb:> Was soll denn die Anwendung tun, welche Anforderung kannst du nennen?
Naja, wie oben schon beschrieben:
Es sollen 3 Nodes (NodeMCU), später bis zu 50 Stück,
alle 3 Minuten einen Temperaturwert senden
und daraufhin einen Stellgröße (int) empfangen.
Im "Mittelpunkt" steht ein Laptop, welcher die Temperaturen der
einzelnen Nodes speichert, auswertet und daraufhin jedem Node seinen
neuen Stellwert zuordnet.
Eigentlich ganz einfach.
> und daraufhin einen Stellgröße (int) empfangen.
Also willst du nicht eine eine Hallo Nachricht durch das ganze Netz
schicken, sondern gezielt von jeder Node zu PC senden und vom PC aus
jeder Node einzeln eine gezielte Antwort senden.
Da kannst du diese HelloMesh Klasse völlig in die Tonne kloppen. Solange
du mit TCP/IP arbeiten möchtest, solltest du auch dessen Routing
Methoden einsetzen. Zum Beispiel durch Aufstellen von WLAN Repeatern,
man muss das Rad ja nicht neu erfinden.
Jede Fritz Box (auch die billige für 50 Euro) kann das.
Ja, das ist richtig.
Es muss nicht jede Node jede Information haben.
Die eigentliche Kommunikation soll nur zwischen dem Laptop und jeder
einzelnen Node stattfinden.
Aber ne Fritzbox als Repeater ist doch genauso "von hinten durchs Knie
ins Auge" wie der serielle Anschluss eines ESPs an den Laptop.
Es ist doch die gesamte Fläche mit WLAN abgedeckt, da brauch es doch
nicht noch mehr Hardware...
Eins noch, die Aufstellung der ESPs wird des öfteren verändert,
sodass ich keine festen Routen hinterlegen kann.
Sorry, das hatte ich vergessen zu Beginn zu erwähnen.
> Aber ne Fritzbox als Repeater ist doch genauso "von hinten durchs> Knie ins Auge"
Nein, denn die Fritzbox nutzt die Mittel, die für WLAN vorgesehen sind.
Und damit brauchst du auch nicht so üble Tricks anwenden, wie
- Laptop scannt periodisch nach allen AP und versucht, sich mit allen zu
verbinden.
- Alle Nodes haben die selbe hardcodierte IP Adresse.
- Alle Nodes senden dumm an alle anderen, was Endlos-Schleifen
provoziert.
Und denke an das Timing. Rate mal, wie lange wohl eine Kette von 50
Nodes mit maximalem Abstand bräuchte, um die Nachricht von einem Ende
bis zum anderen durch zu reichen, wenn damit jedesmal ein AP Scan und
Verbindungsaufbau verbunden ist.
Kann gut sein, dass es sogar länger als eine Minte dauert.
Das Konzept ist so mies, dass du damit keine gute Bewertung bekommen
wirst.
Hallo,
je nach Datenmenge und geforderten Antwortzeiten kann durchaus auch ein
ESP den Repeater spielen, ist kleiner als eine Fritzbox. Problem ist die
Anzahl Clientverbindungen, der ESP kann nur eine "zeitgleich" handeln.
Ein MQTT-Broker auf einem RasPi o.ä. als Verwaltung.
MQTT bietet eigentlich alles, was hier nötig wäre: Quittungsmöglichkeit,
Keep-Alive und Handlingsmöglichkeit, wenn ein Client abhanden kommt
("letzter Wille"), die Möglichkeit, nur aktuelle gesendete Daten zu
bekommen oder beim Neu-/Wiederanmelden die letzte Meldung zu bekommen
usw.
Wäre sicher ein interessantes Projekt und mit einigen NodeMCUs auch
preiswert zu testen.
Sensor sendet Wert, notfalls mehrmals, bis er vom Broker die Quittung
hat usw.
Die Frage ist jetzt, wie die Daten verarbeitet werden sollen.
Könnte der RasPi vermutlich übernehmen, Anbindungen für MQTT gibt es
alle Möglichen.
Prinzipiell ist es ja nur ein MQTT-Client, der alle Nachrichten
abboniert auswertet und den Stellwert verendet.
Kann man zum Test z.B. mit MQTTfx auf dem Notebook testen, beim Broker
anmelden und schauen, was alles draußen passiert bzw. erstmal die Werte
von Hand senden.
Man kann auch Mosquitto als Broker erstmal auf dem Notebook
installieren, dann braucht man zum Test außer ein paar NodeMCU
garnichts.
PS: es sollten sich nie 2 MQTT-Clients mit dem gleichen Namen beim
Broker anmelden, es passieren dann durchaus seltsame Dinge...
Gruß aus Berlin
Michael
Stefan U. schrieb:> Kann gut sein, dass es sogar länger als eine Minte dauert.
Und wenn es drei Minuten Dauert, das ist OK.
Michael U. schrieb:> Wäre sicher ein interessantes Projekt und mit einigen NodeMCUs auch> preiswert zu testen.
Wenn ich MQTT richtig verstehe, muss dort (wie bei Router-Client) jeder
ESP einen direkten Kontakt zum Laptop haben.
Um das zu umgehen, war die erste Idee ja das Mesh-Netzwerk
Ganz ehrlich, ich halte nicht viel von dem Ansatz, alle AP's in der
Umgebung zu suchen und dann zu kontaktieren. Nichts desto trotz kann es
funktionieren.
Aber nicht mit diesem HelloMesh Projekt, schreibe Dir da besser eine
eigene Logik die deine Anforderungen erfüllt:
- Messwerte (nicht hardcodierte Texte) zum PC hin senden
- Steuerwert vom PC empfangen
- Keine Endlosschleifen
Hallo,
Kurt schrieb:> Wenn ich MQTT richtig verstehe, muss dort (wie bei Router-Client) jeder> ESP einen direkten Kontakt zum Laptop haben.
das ist richtig. Deshalb ja meine (ungetestete) Idee, strategisch
günstig ein paar NoceMCU als reine Repeater in der Gegend zu verteilen.
Bei Deinem zu erwartenden Datenaufkommen sollte das eigentlich gehen.
Gruß aus Berlin
Michael
Vergiss den Stromverbrauch nicht!
WLAN ist gut hunrig und dauert auch immer ne Weile, wenn die nachm
schlafen
sich mit wem auch immer wieder verbinden sollen.
Sollen die alle auf Batterie laufen oder Akku oder Netzteil?
Um welche Entfernungen handelt es sich später?
Vllt ginge was mit BLE?
Hans
Ja, sie werden über Akkus am Leben gehalten.
Eine Laufzeit von ein paar Tagen sollte reichen.
Aber es gibt ja noch einen Motor, der mit am Strom hängt.
Wie viel Strom der zieht, kann ich leider noch gar nicht sagen.
Aber schlafen können die Nodes doch in der Zeit wo nix passiert.
Möglicher Ablaufplan:
1.) Alle Nodes senden ihre beiden Messwerte zu dem Laptop
2.) Der Laptop sendet an jede Node einen passenden Stellwert
3.) Jeder Node bestätigt den neu erhaltenen Wert
4.) Der Laptop legt alle für 5 Minuten Schlafen.
6.) Die Nodes wachen auf, siehe 1.)
Wie die Nodes ihr Informationen an den Laptop senden
und wie die Antwort zurück kommt,ist hier natürlich nicht
berücksichtigt!
Hallo,
Node wacht auf
Meldet sich beim nächstgelegenen AP an
*Meldet sich beim MQTT-Broker an.
Node schickt den Messwert
Node wartet auf den Stellwert
Node geht schlafen.
*Wenn während des Schalfens ein Stellwert geschickt wurde, bekommt die
Node diesen sofort, wenn man das dem MQTT sagt.
Man kann sie also auch nach dem Schicken des Messwertes wieder schlafen
legen und and z.b. 1min später wieder wecken.
Das hängt dann einfach von den nötigen Gegebenheiten ab.
Man kann auch alle 3min aufwachen, den "letzten" Stellwert abholen und
den neuen Sensorwert schicken.
Kommt darauf an, ob man "sofort" reagieren muß oder ob das Spiel:
ich schicke einen Meßwert
ich bekommen 3min später den Stellwert (für den Messwert von vor 3min)
und schicke parallel den aktullen Messwert.
Wenn man z.B. Keep-Alive beim Broker dann auf 4 Minuten und einen
"letzten Willen" setzt, bekommt man diese Meldung nach 4 Minuten, wenn
sich ein Node nicht pünklich gemeldet hat.
Gruß aus Berlin
Mcihael
Hallo,
der ESP kann AP und Station gleichzeitig sein, damit für diesen Zweck
praktisch Repaeter spielen, da auch noch ein MQTT-Client darauf laufen
zu lassen wäre kein Problem.
Vielleicht präpariere ich mir hier mal einen ESP als "AP" genau für
diesen Zweck und schaue mal. Ich kann den ja erstmal einfach
"transparent" zwischen einen meiner MQTT-Clients hängen und über die
Entscheidungslogik nachdenken, ob und wann der sich mit meinem AP oder
dem ESP-"AP" verbindet. Sind dann ja erstmal hier beide in Reichweits.
Noch sagt mir mein Gefühl, daß es gehen könnte, das kann sich nach
wenigen Stunden auch ins Gegenteil verkehren.
Sowas probiere ich mit der Anfangsidee meist erstmal aus...
Mein Testwebserver macht im Moment erstmal alles, was er soll: fallback
in eine 2. WLAN, wenn das erste nicht ereichbar ist (theoretisch auch
mehrere, ist eine Zeitfrage, da ich im Momet für jeden
Verbindungsversuch 10s timeout habe, dann fallback in den AP-Mode.
File-Upload/Download geht, editieren der config-Datei geht.
Muß noch ein Neustart-Button in die config-Seite und im AP-Mode noch
eine Zeitsteuerung, die alle xx Minuten versucht, ob eins der WLANs
wieder ereichbar ist und wenn ja, dann wieder AP aus.
Das amcht aber jetzt keine Mühe mehr, da kann ich auch mal mit seinem
Problem rumspielen.
Gruß aus Berlin
Michael
Michael U. schrieb:> der ESP kann AP und Station gleichzeitig sein, damit für diesen Zweck> praktisch Repaeter spielen, da auch noch ein MQTT-Client darauf laufen> zu lassen wäre kein Problem.
Dann kann der ESP doch auch noch alle 5 Minuten zwei Temperaturen
auslesen und kurz darauf einen Motor laufen lassen :-)
Michael U. schrieb:> Noch sagt mir mein Gefühl, daß es gehen könnte,
Vertraue deinem Gefühl!
Ich habe leider erst drei ESPs hier rumliegen.
Eigentlich dachte ich, dass ich damit eine Netzwerk aufbaue,
welches auch mit mehr Teilnehmern funktioniert.
Jetzt bin ich da etwas unsicher geworden.
Gruß nach Berlin & Danke für die Unterstützung!
Nochmal ein paar Gedanken zum Datenaustausch:
Alle Daten werden über Laufzettel aka Arrays übertragen.
Das Array hat für jede Node eine Zeile und eine Kopfzeile für die
Konfiguration (Nummer des Arrays).
Wenn der erste Node aufwacht misst er die Temperaturen
und speichert seine ID und die Messwerte auf dem Laufzettel
und schickt diesen in Netzwerk.
Empfängt ein Node den Laufzettel, fügt er seine Daten hinzu.
Auch der Server empfängt, je nach Position, mehr oder weniger unfertige
Laufzettel,
aber irgendwann den Kompletten.
Jetzt kann er aus den Temperaturen neue Stellwerte berechnen und schickt
diese, auf einem Laufzettel, in das Netzwerk.
Wenn ein Node den Laufzettel empfängt und seinen Stellwert ändert,
schreibt er dies auf den Laufzettel.
Wenn ein Node einen vollständig unterschriebenen Laufzettel bekommt,
legt er sich für 5 Minuten schlafen.
Gruß und gut nacht
Moin
Gibt es hier jemand der zufällig eine zweistellige Anzahl von ESp
Modulen rumliegen hat?
Selbst wenn ich heute bestelle, dauert es bin Mitte Juni, bis ich welche
habe...
Hallo,
kannst ja mal schauen, ob im EU-Warehouse von BangGood was rumliegt:
http://eu.banggood.com/
Preise muß Du selber vergleichen, ist etwas teuerer. Versand knapp 1
Euro, Lieferzeit bisher bei mir bisher immer 1 Woche.
Die komplette Seite findest Du unter http://www.banggood.com/
PS: Preise werden mehr nach Lust und Laune in Euro, Dollar, Kronen,
Lire, Pfund angezeigt, muß man dann jedesmal wieder umstellen...
Gruß aus Berlin
Micjaeö
Hallo,
das ist eines der Geheimnisse von BangGood, vermutlich nicht genug
NodeMCU am Lager.
ESp8266-12E kann man kaufen.
Hatte ich mit Lochrasterplatinen schonmal, ich konnte nur eine Sorte
bestellen, warum auch immer...
Aus US kann man NodeMCU offenbar bestellen, 7-10 Tage Lieferzeit, keine
eigene Erfahrung. Ich nutze da nur das EU-Warehouse, keine Lust, über
Zollfreigrenzen nachzudenken.
Gruß aus Berlin
Michael
bei echtem mesh netzwerk müssten alle ESP gleichzeitig AP und Station
sein
also 50 AP
batteriebetrieben müssten die dann auch noch zur gleichen zeit ON sein..
kann mir nicht vorsteleln dass das mit "normalem Wlan" sinnvoll
funktioniert..
eher wird man zwischendurch ein paar repeater hinstellen..