ESP Wifi Repeater

Begonnen von Gisbert, 04 Oktober 2019, 22:36:14

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo zusammen,

ich setze mittlerweile 18 ESP8266 in verschiedenen Varianten und mit verschiedener Firmware (hauptsächlich Tasmota und ESPEasy, aber auch 2 eigene Sketche sind darunter) ein. Bei einem ESP hatte ich eine schlechte Verbindung zu meinem AP, und nur durch eine günstige Ausrichtung des ESPs mit seiner Antenne war das Signal gerade noch so stark, dass es nicht zum Verbindungsabbruch kam. Ich weiß, dass es auch ESP mit einem externen Antennenanschluss gibt; diese hatte ich aber nicht vorhanden.

Also habe ich im Netz nach Repeater auf Basis von ESP8266 gesucht.
Ich bin hier fündig geworden:https://github.com/martin-ger/esp_wifi_repeater/blob/master/README.md.
Diese Software bringt neben einer Repeater- bzw. Router-Funktion auch noch MQTT- und GPIO-Funktionalität mit.
Damit kann der ESP-Repeater ganz nebenbei z.B. Relais schalten.

Da ich zwischen dem entfernten ESP und meinem AP ein ESP-Device im Einsatz habe, welches (bisher) nichts anderes gemacht hat, als ein Relais zum Lüftermotor zu schalten, habe ich letzteren mit der esp_wifi_repeater Firmware geflasht, GPIO und MQTT entsprechend der Doku verfügbar gemacht - und siehe da es funktioniert (fast) auf Anhieb.
Um die Kommunikation zwischen dem entfernten ESP und dem Heimnetz verfügbar zu machen, waren noch 2 Dinge notwendig: 1) eine Route von meinem Heimrouter zum Adressbereich des ESP-AP und 2) ein Portmapping auf dem ESP-Router zum entfernten ESP-Client. Dies ist zwar auch in der Doku beschrieben, aber nicht so einfach und übersichtlich wie das Flashen, Inbetriebnehmen, MQTT und GPIO.

Man findet im Netz etliche Treffer, wenn nach den Begriffen im Titel sucht, letztlich landet man dann aber doch wieder beim Orginal auf github.
Mir gefällt diese Firmware ausgesprochen gut, weshalb ich hier meine zugegeben noch frischen Erfahrungen schildern wollte.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

Hallo zusammen,

ich muss hier um Hilfe bitten, denn es gibt eine Schwierigkeit, die ich alleine kaum bewältigen kann.

Ich hab die Firmware auf einen Sonoff Dual geflasht, da ich einen Lüfter mit 230VAC schalten möchte. Ich hab einen Sonoff Dual genommen, da ich von dieser Sorte noch etliche habe.
Die Firmware an sicht läuft sehr gut auf dem Sonoff Dual. Ich habe nicht bedacht, dass beim Dual nicht die GPIOs direkt angesteuert werden, wenn man die Relais schalten möchte, sondern dass diese seriell geschaltet werden.
Hier fängt mein Problem an.
Wie bekomme ich einen seriellen Befehl in die Firmware hinein?

Der Autor sagt dazu folgendes:
ZitatIf you are looking for a way to integrate the NAT feature into your Arduino project - see https://github.com/martin-ger/lwip_nat_arduino .
Aber auch damit komme ich nicht wirklich weiter, zumindest nicht ohne einen großen zeitlichen Aufwand, und in meinem Fall mit leider limitierter Erfolgswahrscheinlichkeit.

Grundsätzlich ist mir klar, wie die Relais des Sonoff Dual angesteuert werden:

void switch_relay(byte b) {
if (0<=b && b<=2) {
Serial.write(0xA0);
Serial.write(0x04);
Serial.write(b);
Serial.write(0xA1);
Serial.flush(); }}

Im setup muss folgendes enthalten sein:
Serial.begin(19200);

Die Relais werden damit an/aus geschaltet:
switch_relay(0); // both relays are off  // possible values: 0, 1, 2


Zum Schalten muss ich demnach den Wert von b per MQTT zum Sonoff Dual senden.
Wie das im Detail aussehen soll, bin ich im Moment (noch) überfragt.

Wenn jemand an dieser Front mitmischen möchte, dann würde ich dies begrüßen.
Viele Grüße
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

andies

Du könntest auch eine Webseite aufrufen, die schaltet (geht auch). MQTT geht, glaube ich, so hier: https://github.com/256dpi/arduino-mqtt Selbst implementiert habe ich das aber nicht.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Gisbert

Hallo andies,

vielen Dank für deinen Hinweis; allerdings weist der zusätzliche Schwierigkeiten für mich auf.

Ich möchte das Thema - Implemntierung von seriellen Anweisungen im Arduino-Code - zur Ansteuerung von Relais des Sonoff Dual erneut zur Diskussion stellen.
Vielleicht lässt sich ja zusammen was auf die Beine stellen.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

andies

Ich hab die github-Seite nur kurz überflogen, aber nicht direkt erkennen können, wo genau da die zu kompilierende Firmware nun steht. Dort müssten die Befehle für die serielle Schnittstelle hinein. Aber wo ist die dazugehörige C-Datei?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Gisbert

Zitat von: andies am 24 Oktober 2019, 20:58:15
Ich hab die github-Seite nur kurz überflogen, aber nicht direkt erkennen können, wo genau da die zu kompilierende Firmware nun steht. Dort müssten die Befehle für die serielle Schnittstelle hinein. Aber wo ist die dazugehörige C-Datei?

Leider habe ich auch nichts dergleichen gesehen. Der Autor möchte wahrscheinlich nicht, dass man selbst compiliert. Wenn man die fertig compilierte Firmware flashen möchte, dann muss man 2 bin-Dateien flashen. Von anderen Projekten kenne ich es nur so, dass eine bin-Datei an 0x00000 geflasht wird.

Der Autor schlägt hier vor, wie ein Anwender seinen eigenen Sketch mit dem esp wifi router-Sketch erweitert:
https://github.com/martin-ger/lwip_nat_arduino/blob/master/README.md

Für mich gibt es 2 Schwierigkeiten:

  • Ich verstehe nicht genau, wie es funktionieren soll
  • Der Autor schreibt: "WiFiNATRouter.ino" that sets up a basic NAT router between the AP and the STA interface (works like a basic version of https://github.com/martin-ger/esp_wifi_repeater ). Mich stört daran, dass es offenbar eine abgespeckte Version sein wird.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

rossime

Hallo Gisbert,
das Thema ist schon ein paar Tage alt, aber eventuell könntest du mir einenTip geben. Ich habe auch den ESPRepeater bei mir in Betrieb genommen. Dabei habe ich einen entfernten mit ESPEasy geflashten ESP8266 an den Accesspoint des ESP Repeaters verbunden:
PC<–>Fritzbox<–>ESPRepeater<–>ESPEasy
Die IP Adresse des Repeater AP 10.24.1.1 . Die des ESPEasy 10.24.1.2
Die Verbindung von 10.24.1.2 zum PC klappt. Anmeldung am MQTT Broker geht.
Ping vom PC zu 10.24.1.2 geht nicht. Die Web Oberfläche von ESPEasy kann auch nicht erreicht werden.

Du hast geschrieben Route und Portmapping müssen im ESPRepeater Konfiguriert werden. Könntest du mir erklären was ich hier machen muss. Ich habe die Konfiguration nach Anleitung des Git Projekts gemacht, bin aber gescheitert.
Grüße, Stefan

Gisbert

#7
Hallo Stefan,

hab's gerade mal bei mir ausprobiert, ping auf den entfernten Client geht bei mir auch nicht.

Du musst portmap ausführen:
portmap add TCP 81 10.24.1.2 80
show liefert dann:
Portmap: TCP: 192.168.xx.yy:81 -> 10.24.1.2:80
192.168.xx.yy ist die IP-Adresse des ESP Repeaters in deinem Heim-Wlan.
Mit save dhcp abspeichern, damit die Änderung permanent wird.

D.h. das Device mit der IP 10.24.1.2 ist über 192.168.xx.xx:81 erreichbar, wenn du das in einen Webbrowser eintippst.
Voraussetzungen: auf dem entfernten Client ist alles richtig eingestellt, damit er sich mit dem Gateway 10.24.1.1 verbinden kann.

Wenn es nicht funktioniert, dann melde dich morgen früh gerne nochmals.

Viele Grüße Gisbert

Edit: die Route war anscheinend doch nicht notwendig, denn ich habe sie im späteren Verlauf wieder entfernt.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

rossime

Hallo Gisbert,
danke für die schnelle Antwort. Ich habe das Portmapping so eingestellt wie du das beschrieben hast.
Im Browser bekomme ich jetzt die Fehlermeldung IP blocked als Antwort.
Kommt diese Meldung vom Repeater? Muss ich noch etwas im Repeater einstellen.
Stefan

rossime

Hallo Gisbert,
ich habe das Problem IP blocked nun verstanden. Das ist eine Einstellung am ESPEasy. Allow Client IPs.
Bei mir funktioniert es nun. Klasse! Vielen Dank!

Ein direktes Routing zu den Subnet Adressen ist über den ESP Repeater ist wohl nicht möglich. Damit kann ich aber leben.
Grüße Stefan

Gisbert

Zitat von: rossime am 31 Dezember 2020, 11:11:26
Ein direktes Routing zu den Subnet Adressen ist über den ESP Repeater ist wohl nicht möglich. Damit kann ich aber leben.
Grüße Stefan

Hallo Stefan,
ja das scheint so zu sein, aber das muss man halt akzeptieren. Ich habe mir im entsprechenden Fhem-Device einen Hyperlink zum entfernten Client gesetzt; so kommt man ohne großes Tippen auf den Client drauf:

attr Garage stateFormat IPaddress
attr Garage userReadings IPaddress {"<a href='http://192.168.2.35:81' style='color: green;; text-decoration: underline;;' target='_blank' rel='noopener noreferrer'>http://192.168.2.35:81</a>"}


Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

micky0867

interessant, was der ESP so alles kann!

Eigentlich ist aber eine Bridge schöner, weil man dann auf NAT verzichten kann. Und man kann DHCP gleich zur Fritze durchreichen, etc.
Aber wenn ich's richtig gesehen habe, kann der ESP8266 kein Bridge.

Was man aber sehr wahrschenlich machen kann (ich selbst habe keinen ESP-Router, aber einen Raspi in einem separaten Netzwerk), ist statisches Routing.
Man trägt eine Route für das andere Netz (also 10.x.x.x) in sein Default-Gateway (Fritz-Box) ein.
Wenn der PC auf das andere Netz zugreifen will, weiss er erstmal nicht wohin er soll.
Deshalb reicht er seine Anfrage einfach an das Default-GW weiter (ist fast wie "ich will zu www.google.de", da weiss er ja auch nicht, wo das ist)
Das Default-GW weiss aber durch die eingetragene Route, dass der ESP-AP mit der IP 192.168.xx.yy für das andere Netz (10.x.x.x) zuständig ist und sagt dem PC:
ZitatWende dich gefälligst an 192.168.xx.yy, der weiss, wo's zu 10.x.x.x geht

Ohne diese Route auf der Fritze passiert folgendes:
Der PC weiss nicht, wie er zu 10.x.x.x kommt, also reicht er es an die Fritze weiter.
Die Fritze weiss es ebenfalls nicht, und da 10.x.x.x ein privater Netzbereich ist, gibt die Fritze es auch nicht an ihr Default-GW (IP vom Provider) weiter (was aber auch nicht sinnvoll wäre).
Und damit war's das auch schon.

Spannend ist jetzt nur der Rückweg.
der AP hat ja quasi zwei  Netzwerke und weiß damit, wie das Routing zwischen den beiden geht.
Aber weiß der ESP hinter dem AP auch, dass der AP sein Default-GW sein sollte? (scheinbar ja: https://github.com/martin-ger/esp_wifi_repeater#static-routes)
Beim Kaskadieren von ESP-APs wird es dann noch komplizierter....

Meine Meinung dazu:
Man bekommt für 20€ einen Wifi-Extender mit Bridgefunktion und hat diese Probleme nicht.
Noch besser:
Man kauft für  ca 40€ einen Wifi-AP mit Gigabit Ethernet, der Openwrt kann, und verkabelt den (wenn möglich) mit der Fritze oder einem zentralen Switch.
Dann kann man daran noch per Lan z.B. Webcams etc. anschließen und hat einen richtig guten Datendurchsatz + ggf Wifi mit 5G.







Gisbert

Hallo micky0867,

es führen ja bekanntlich viele Wege nach Rom.
Letztlich ist ja die Frage, was man erreichen will.

Bei mir kamen folgende Anforderungen zusammen, die natürlich bei jedem verschieden sein können, was letztlich die Wahl des Weges, s.o., beeinflusst:

  • Verbindung zum entfernten Client
  • Spieltrieb
  • Kosten
  • Vorhandensein eines ESPs mit Ansteuerung eines Relais auf der halben Strecke zwischen Heim-Wlan und entferntem Client

Der letzte Punkt ist entscheidend für die Auswahl des ESP NAT Routers, d.h. keine zusätzliche Hardware, und der kann sehr schön Relais schalten, und das auch noch sehr raffiniert mit Ein- und verzögertem Ausschalten, so dass nur ein einziger Befehl zum ESP NAT Router (mit Relais) gesendet werden muss.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY