URL auf lokale IP umleiten / CaptivePortal

Begonnen von dadoc, 06 Mai 2019, 16:12:30

Vorheriges Thema - Nächstes Thema

RappaSan


yersinia

Nur mal so zurück zu den Basics (vlt findet man noch eine andere Lösungsoption):
- die Wetterstation ruft eine URL auf; wahrscheinlich kann man diese nicht editieren (sonst könnte man einen fritzbox host (zB fhempi.fritz.box) nutzen, bei dem die FB die URL auflöst)
- wahrscheinlich kann man keine IP in der Wetterstation hinterlegen (anstelle einer URL)
- in der FB ist es schwierig bis unmöglich den DNS Dienst zu manipulieren (siehe Vorposts)
- ein weiterer/separater DNS-Server im Netzwerk ist nicht gewünscht bzw. nicht möglich

Was bleibt denn noch übrig an Optionen?
- Profil bei WU anlegen und die Daten dort abgreifen? (via HTTPMOD zB; wiki oder auch Forum)
- Hat die Wetterstation ein UI an der man aktuelle Daten ablesen kann? Wenn ja, kann man dies via HTTPMOD auslesen und einfach in der FB versuchen die ZielURL zu weatherunderground sperren?
- Den besagten Wemos D1 mini Ansatz nochmals zu verfolgen und diesen als WIFI-AP mit eigenem DNS nutzen (Beispiel)
- ?
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

dadoc

Zitat von: yersinia am 08 Mai 2019, 14:46:41
- die Wetterstation ruft eine URL auf; wahrscheinlich kann man diese nicht editieren (sonst könnte man einen fritzbox host (zB fhempi.fritz.box) nutzen, bei dem die FB die URL auflöst)
korrekt.
Zitat- wahrscheinlich kann man keine IP in der Wetterstation hinterlegen (anstelle einer URL)
korrekt
Zitat- in der FB ist es schwierig bis unmöglich den DNS Dienst zu manipulieren (siehe Vorposts)
Korrekt - es ginge wohl mit Freetze, aber man muss ja auch die Verhältnismäßigkeit im Auge haben.
Zitat- ein weiterer/separater DNS-Server im Netzwerk ist nicht gewünscht bzw. nicht möglich
Bedingt. Ein geeigneter DNS auf einem Wemos ist ja eigentlich das, was ich im ersten Post angefragt hatte.


ZitatWas bleibt denn noch übrig an Optionen?
- Profil bei WU anlegen und die Daten dort abgreifen? (via HTTPMOD zB; wiki oder auch Forum)
Das habe ich. Aber einerseits macht WU sein API dicht, andererseits war der WU Datenverkehr nie wirklich zuverlässig. Z.B. heute regnet es 4 mm, morgen wird als Niederschlagsmenge für die letzten beiden Tage 0 mm angezeigt usw.
Zitat- Hat die Wetterstation ein UI an der man aktuelle Daten ablesen kann? Wenn ja, kann man dies via HTTPMOD auslesen und einfach in der FB versuchen die ZielURL zu weatherunderground sperren?
Nein, die hat nur eine Inneneinheit
Zitat- Den besagten Wemos D1 mini Ansatz nochmals zu verfolgen und diesen als WIFI-AP mit eigenem DNS nutzen (Beispiel)
JAAAAA ;) Aber Dein Beispiel ist das Captive Portal, das ich in fast identischer Form ausprobiert hatte. Es lenkt URLs aber immer nur auf den eigenen Webserver (den auf dem Wemos). Genau dafür suche ich eine Lösung.
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

yersinia

Zum Thema WU und API: Ich lade Daten eines Temperatursensors nach WU hoch (Modul WUup.pm). Dafür benötige ich ein Profil und bekomme für meine "Wetterstation" eine PWS-ID.
Mit dieser PWS-ID kann ich zumindest die ist-Daten auslesen (wie im wiki beschrieben mit HTTPMOD). Genauso lese ich bisher erfolgreich eine andere Wetterstation aus. Ohne API Key.
Mal schauen, ob und wann WU diesen Weg abschaltet.

[OT]Vorhersagen bekomme ich via Proplanta was auch medium gut ist (dies liegt aber an der Datenlage bei Proplanta).[/OT]

Das CaptivePortal ist wahrscheinlich der richtige Weg. Weil hier immerhin ein DNS-Service genutzt wird. Vielleicht muss man da noch weiter suchen und rumexperimentieren.
Ich hatte noch sowas gefunden: https://www.hackster.io/rayburne/esp8266-captive-portal-5798ff
ZitatShow me the magic
// if DNSServer is started with "*" for domain name,
// it will reply with the provided IP to all DNS requests
   dnsServer.start(DNS_PORT, "*", apIP);
Wenn ich das richtig verstehe, könnte man anstelle der apIP auch die fhemIP setzen; ich könnte mir da sowas wie dnsServer.start(DNS_PORT, "rtupdate.wunderground.com", fhemIP); vorstellen.
Allerdings weiss ich noch nicht, wie man verhindert, dass die Wetterstation sich einen anderen DNS sucht (zB die FB). Kann man das in der Wetterstation manipulieren? Sprich: IP Adressdaten manuell setzen? Weil für den "Rest" muss FHEM in einem für die Wetterstation empfangbaren Netz sein.

Vielleicht hilft auch noch diese Version: https://github.com/reischle/CaptiveIntraweb
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

dadoc

Zitat von: yersinia am 08 Mai 2019, 15:57:12
Das CaptivePortal ist wahrscheinlich der richtige Weg. Weil hier immerhin ein DNS-Service genutzt wird. Vielleicht muss man da noch weiter suchen und rumexperimentieren.
Ich hatte noch sowas gefunden: https://www.hackster.io/rayburne/esp8266-captive-portal-5798ffWenn ich das richtig verstehe, könnte man anstelle der apIP auch die fhemIP setzen; ich könnte mir da sowas wie dnsServer.start(DNS_PORT, "rtupdate.wunderground.com", fhemIP); vorstellen.
Das war auch meine Hoffnung, geht aber nicht.
Zitat
Allerdings weiss ich noch nicht, wie man verhindert, dass die Wetterstation sich einen anderen DNS sucht (zB die FB). Kann man das in der Wetterstation manipulieren? Sprich: IP Adressdaten manuell setzen? Weil für den "Rest" muss FHEM in einem für die Wetterstation empfangbaren Netz sein.
Die Wetterstation wäre ja direkt mit dem softAP des Wemos verbunden, der für sie dann (in meinem Verständnis) den DNS macht.
ZitatVielleicht hilft auch noch diese Version: https://github.com/reischle/CaptiveIntraweb
Dasselbe in grüne ;)
Am Ehesten geht wohl https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/CaptivePortalAdvanced.ino in diese Richtung, aber damit hat es bei mir auch nicht geklappt.
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

Tedious

Zitat von: dadoc am 08 Mai 2019, 15:00:45
Nein, die hat nur eine Inneneinheit

Wie bekommt die denn ihre Daten?
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

dadoc

Per Funk von der Außenstation. Habe aber bislang nichts gefunden, wie man da reingrätschen könnte.
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

dadoc

In https://github.com/esp8266/Arduino/issues/731 geht es wohl um dasselbe Thema. Allerdings ist unklar, ob es so gelöst wurde, und ich selbst wüsste nicht, wo ich das einfügen sollte:
IPAddress ip(192, 168, 4, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 1);

After this in setup void:

WiFi.config(ip, gateway, subnet, dns);

Jemand von Euch?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

yersinia

#23
Zitat von: dadoc am 08 Mai 2019, 16:30:44
Das war auch meine Hoffnung, geht aber nicht.Die Wetterstation wäre ja direkt mit dem softAP des Wemos verbunden, der für sie dann (in meinem Verständnis) den DNS macht. Dasselbe in grüne ;)
Am Ehesten geht wohl https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/CaptivePortalAdvanced.ino in diese Richtung, aber damit hat es bei mir auch nicht geklappt.
Warum funktioniert das mit dem SoftAP nicht? Ich meine, es wäre doch der erste Schritt, dass CaptivePortal überhaupt erstmal zum laufen zu bekommen. Woran scheitert es denn hier?
("funktioniert nicht" oder "geht nicht" ist mir etwas zu unkonkret)

Wenn das CaptivePortal erstmal grundsätzlich funktioniert, kann man immernoch anfangen den DNS Service zu adaptieren.

EDIT:
g00gle führte mich noch hierzu: https://github.com/ojack/ESP8266-captive-portal-webserver
Wie gesagt, erstmal es überhaupt zum laufen bekommen....

Sogar YT hat da was: https://www.youtube.com/watch?v=AHO1zN8c_zU
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

dadoc

Zitat von: yersinia am 09 Mai 2019, 10:19:07
Warum funktioniert das mit dem SoftAP nicht? Ich meine, es wäre doch der erste Schritt, dass CaptivePortal überhaupt erstmal zum laufen zu bekommen. Woran scheitert es denn hier?
("funktioniert nicht" oder "geht nicht" ist mir etwas zu unkonkret)
Du hast recht, das war zu ungenau. Das CaptivePortal läuft schon, aber wenn man sich mit seinem softAP verbindet, leitet es alle Anfragen auf die *eigene* IP bzw. den eigenen Webserver um. Wenn ich hier die eigentlich gewollte Ziel-IP (=fhem) eingäbe, hätte ich zwei Geräte mit derselben IP im Netz.

ZitatEDIT:
g00gle führte mich noch hierzu: https://github.com/ojack/ESP8266-captive-portal-webserver
Wie gesagt, erstmal es überhaupt zum laufen bekommen....
Da war ich mit Google auch schon mehrfach ;) Das ist genau das, was ich (in der w.o. verlinkten, neueren, advanced-Version https://github.com/esp8266/Arduino/tree/master/libraries/DNSServer/examples) ausprobiert hatte. Ergebnis s.o.
Im Arduino-Forum hat mich jemand auf https://arduino.stackexchange.com/questions/57178/bridging-the-wifi-networks-on-nodemcu-how-to-set-the-esp8266-as-wifi-extender/57199#57199 verwiesen. Damit würde nicht die eigentliche Anfrage umgeleitet, sondern die vom ESP empfangenen Daten 1:1 an den externen Rechner weitergereicht. Man weiß allerdings nicht, wie das ausgegangen ist, und ich wüsste (noch) nicht, wie hgenau ich das ausprobieren sollte.
Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

yersinia

Danke dadoc für die Details. :)

Ich habe langsam Zweifel ob das überhaupt sinnvoll und out-of-the-box funktioniert, da man im Netz kaum wirklich Infos dazu findet. :(
Sorgen macht mir auch die Doku hier:
ZitatThe DNS server currently supports only one domain (for all other domains it will reply with NXDOMAIN or custom status code).

Es ist aber gut, dass das Captive Portal immerhin läuft.

Wir haben ja mehrere Netzwerkgeräte. Und der FHEM-Pi muss sich in einem für die Wetterstation erreichbaren Netzwerk befinden; zuzüglich Router mit DHCP und DNS (Beispielhaft):
Router 192.168.1.1
FHEM 192.168.1.2 (via DHCP fest; DNS ist 192.168.1.1)
ESP 192.168.1.3 (via DHCP fest; DNS ist 192.168.1.1)
Wetterstation 192.168.1.4  (via DHCP reserviert, aber manuell eingetragen; DNS ist 192.168.1.3)

Ich frage mich, ob sich das überhaupt so einstellen lässt, wahrscheinlich musst du die IP Konfig manuell in der Wetterstation einklimpern.

Allerdings würde ich die ino versuchen zu adaptieren (ie um die FHEM IP erweitern):
/* Soft AP network parameters */
IPAddress apIP(192, 168, 1, 3); // ESP IP
IPAddress fhemIP(192, 168, 1, 2); // FHEM IP
IPAddress netMsk(255, 255, 255, 0);

Und beim DNS Aufruf ggf von diesem Google-Fund abschreiben:
// modify TTL associated with the domain name (in seconds)
// default is 60 seconds
dnsServer.setTTL(300);
// set which return code will be used for all other domains (e.g. sending
// ServerFailure instead of NonExistentDomain will reduce number of queries
// sent by clients)
// default is DNSReplyCode::NonExistentDomain
dnsServer.setErrorReplyCode(DNSReplyCode::ServerFailure);

// start DNS server for a specific domain name
dnsServer.start(DNS_PORT, "rtupdate.wunderground.com", fhemIP); //hier die fhem IP und nicht die des ESPs <-------------------------------------

// simple HTTP server to see that DNS server is working
webServer.onNotFound([]() {
[...]

Wenn ich den Rest richtig verstehe, dann wird bei nichtfinden auf den ESP Webserver umgeleitet....

Keine Ahnung ob das praktisch läuft, in der Theorie klingt es jdfs schlüssig...-.-
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

dadoc

Vielen Dank für Deine Unterstützung. Ja, das ist echt merkwürdig, dass man dazu so wenig findet. Hättest Du mich vor einer Woche gefragt, hätte ich Stein und Bein geschworen, dass das Internet voll sein müsste mit Lösungen dafür...
Ich werde das alles mal ausprobieren.
Gleichzeitig frage ich mich, ob es nicht einfacher ginge, mit einem Redirect in einem Webserver wie https://github.com/me-no-dev/ESPAsyncWebServer
https://github.com/me-no-dev/ESPAsyncWebServer#redirect-to-another-url
Allerdings wüsste ich nicht, wie/wo ich das in einen Sketch packen könnte...

Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

yersinia

#27
Zitat von: dadoc am 10 Mai 2019, 17:01:52Gleichzeitig frage ich mich, ob es nicht einfacher ginge, mit einem Redirect in einem Webserver wie https://github.com/me-no-dev/ESPAsyncWebServer
https://github.com/me-no-dev/ESPAsyncWebServer#redirect-to-another-url
Allerdings wüsste ich nicht, wie/wo ich das in einen Sketch packen könnte...
Vor allem: wie wird die URL rtupdate.wunderground.com auf die WebServer-IP aufgelöst? Ist ja schön und gut, wenn der WebServer läuft - aber wenn es die Wetterstation nicht interessiert.... (gleiches Thema: DNS)

Ansonsten, wenn der WebServer auf dem ESP läuft, könnte man dies noch weiter verfolgen:
https://github.com/me-no-dev/ESPAsyncWebServer#rewrites-and-how-do-they-work
https://github.com/me-no-dev/ESPAsyncWebServer#redirect-to-another-url

EDIT
Vielleicht verabschiedet man sich vom ESP Gedanken hier und nutzt einen anderen Mikrorouter wie zB den MR3020 (gibt es in der v1 gerade für <20€) und flashed den auf OpenWRT um. Aufgrund des geringen Flash-Speichers würde ich allerdings selber bauen, was auch nicht schwierig ist (dann allerdings basierend auf 18.06.2).
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

dadoc

Zitat von: yersinia am 11 Mai 2019, 09:02:25
Vor allem: wie wird die URL rtupdate.wunderground.com auf die WebServer-IP aufgelöst? Ist ja schön und gut, wenn der WebServer läuft - aber wenn es die Wetterstation nicht interessiert.... (gleiches Thema: DNS)
Naja, das ist ja der Zweck des Captive Portals: Was sich da an dessen AP hängt, landet immer beim selben Ziel.

Ansonsten, wenn der WebServer auf dem ESP läuft, könnte man dies noch weiter verfolgen:
[...]
https://github.com/me-no-dev/ESPAsyncWebServer#redirect-to-another-url

Das ist genau mein Link von oben ;)

Ich verfolge mit Unterstützung aus dem Arduino-Forum noch einen zweiten Ansatz: Nicht redirecten, sondern die Datenpakete auf dem ESP empfangen und dann an den fhem Raspi senden. Ist aber bislang auch nicht klar, ob das geht...


ZitatEDIT
Vielleicht verabschiedet man sich vom ESP Gedanken hier und nutzt einen anderen Mikrorouter wie zB den MR3020 (gibt es in der v1 gerade für <20€) und flashed den auf OpenWRT um. Aufgrund des geringen Flash-Speichers würde ich allerdings selber bauen, was auch nicht schwierig ist (dann allerdings basierend auf 18.06.2).
Sicher eine Möglichkeit, aber ich fände es viel eleganter, wenn das mit dem ESP ginge.
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods