FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: Jens_B am 24 Juli 2019, 08:46:51

Titel: Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 24 Juli 2019, 08:46:51
Hallo Zusammen,
wie der Betreff schon sagt: Wie bringe ich dem PI bei, wenn das LAN weg ist (Stromausfall) automatisch meinen Huawei Surfstick (E3372) fürs versenden von fhem Meldungen (per email) zu nutzen?

Mein PI läuft im Falle von Netzausfall über einen Akku weiter. Wenn der Strom weg ist, ist logischerweise auch die LAN Verbindung weg + Internet.
Das kann ich ja sehr leicht per ping in regelmäßigen Abständen abfragen. Aber wie bringe ich den PI dann dazu, die Mobilfunkverbindung aufzubauen und dann später auch wieder zu trennen?

Gruß
Jens
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: yersinia am 24 Juli 2019, 14:22:33
Überraschend gibt es dazu realtiv wenig im Internet - oder ich habe nicht richtig gesucht..
Man findet relativ viel bezüglich installation des 3g/4g-USB-Modems, aber nicht den Failover-Falles - insbesondere der automatische Wechsel von LAN auf das USB Modem.
Du könntest noch nach Load-Balancing oder Bonding suchen, dies würde aber bedeuten, dass der Internetstick permanent online ist.

Über die allbekannte Suchmaschine habe ich sowas finden können (teilw. schon sehr alt):
https://www.raspberrypi.org/forums/viewtopic.php?t=164663
https://www.raspberrypi.org/forums/viewtopic.php?t=190620
https://github.com/adrianmihalko/rpiltehotspot/
http://my-techno-arena.blogspot.com/2015/09/raspberry-pi2-as-router-with-network.html
https://www.jethrocarr.com/2017/07/23/failberrypi-diverse-carrier-links-for-your-home-data-center/
https://community.ui.com/questions/LTE-USB-modem-as-WAN2-failover-with-Raspberry-Pi/bbceb481-c9fa-4f32-a89a-a9b92455cb01

Schade, dass deine Fritte nicht teil des Notstroms ist - die kann das wohl automatisch (https://avm.de/service/fritzbox/fritzbox-7590/wissensdatenbank/publication/show/76_FRITZ-Box-fur-Internetzugang-uber-Mobilfunk-LTE-UMTS-einrichten/).
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 24 Juli 2019, 16:01:45
Zitat von: yersinia am 24 Juli 2019, 14:22:33
Überraschend gibt es dazu realtiv wenig im Internet - oder ich habe nicht richtig gesucht..


Ich habe dazu auch nicht viel gefunden. Ans laufen habe ich den Stick gebracht und konnte auch ins Netz damit bzw SMS verschicken.
Ich werden mir jetzt einen E8372 besorgen, der fungiert gleichzeitig als WIFI Router.
Da muß ich dem PI nur irgendwie beibringen, auf das WLAN des E8272 zu schalten sobald LAN weg ist und wieder zurück.
Er soll ja nicht dauernd online über den LTE/WIFI Router sein, sondern nur im Falle wenn LAN nicht da ist.
Da finde ich aber bisher auch nichts entsprechendes.

Gruß
Jens
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: MadMax-FHEM am 24 Juli 2019, 16:12:56
ifconfig wlan0 up

Evtl. mit sudo...

Und ausschalten wieder mit:

ifconfig wlan0 down

Evtl. heißen die Schnittstellen (ab Stretch) auch anders, dann vorher das herausfinden oder die "simple" Namensgebung von Netzwerken reaktivieren ;)

Gruß, Joachim
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: yersinia am 24 Juli 2019, 17:11:20
@MadMax-FHEM: das wäre in der Tat auch der Weg für das USB Modem. Es stellt sich allerdings die Frage, wie der RasPi selbstständig die Verbindung wechselt. Also wenn eth0 keine Verbindung mehr hat, dann wechsel auf wlan0 bzw usbirgendwas (für das Modem). Wenn Verbindung wieder da, wechsel zurück.
Das könnte man dann mit einem Script lösen, denke ich. Aber dafür fehlen mir die Kenntnisse.

Möglicherweise könnte man das auch basierend auf die USV Einschaltung machen (der RasPI müsste ja auch das Signal zum shutdown bekommen, wenn Stromzufuhr weg).

Zitat von: Jens_B am 24 Juli 2019, 16:01:45
Ans laufen habe ich den Stick gebracht und konnte auch ins Netz damit bzw SMS verschicken.
Versuche den Stick mal als Modem zu konfigurieren (-> usb-modeswitch), dann stellt dieser auch eine Internetverbindung her. SMS verschicken und Internetverbindung sind mMn zwei verschiedene Sachen (kann aber auch irren).
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: MadMax-FHEM am 24 Juli 2019, 18:01:30
Wenn du mal weißt wie es läuft und wie (per Linux Console) umgeschalten werden kann...
...wobei wenn es so ist wie beschrieben: Verbindung via WLAN, dann sollten die genannten Befehle ja passen...
...ansonsten halt nennen was geht...

Kriegt man dann schon hin...

Man kann auch ein Presence auf z.B. google.de machen und bei "absent" umschalten...

Oder USV...

Oder...

Oder...

Gruß, Joachim
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 25 Juli 2019, 12:56:27
Wie ich per bash prüfe ob der PI noch ne Verbindung habe bekomme ich ja in etwa so hin:
#!/bin/bash

# The IP for the server you wish to ping (8.8.8.8 is a public Google DNS server)
SERVER=192.168.178.1

# Only send 5 pings, sending output to /dev/null
ping -c5 ${SERVER} > /dev/null

# If the return code from ping ($?) is not 0 (meaning there was an error)
if [ $? != 0 ]
then
    echo "Start the wireless interface"
    echo "$(date): No Ethernet connection, starting wlan0" >> /var/log/checkwifi.log
    ifup wlan0
else
    ifdown wlan0
    echo "$(date): connection ok" >> /var/log/checkwifi.log
fi


ZitatMöglicherweise könnte man das auch basierend auf die USV Einschaltung machen (der RasPI müsste ja auch das Signal zum shutdown bekommen, wenn Stromzufuhr weg).

Da der PI mit dem Akku ca.4 Stunden läuft, habe ich das Script für diesen Fall noch nicht gebastelt. Hätte also erstmal keine Priorität.

Ich werde mich damit wohl mit dem Ganzen noch mal intensiver befassen, wenn es nicht so warm ist ;-)

Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: MadMax-FHEM am 25 Juli 2019, 13:23:52
Dann kannst du entweder alles in dem Script machen und das bei Boot starten...
...es geht auch ein Presence-Device in fhem und dann bei "absent" nur ein Script zu rufen (oder direkt den "shell-Befehl") welches dann die Umschaltung macht...

Aber stimmt, erst mal etwas Abkühlung... ;)

Gruß, Joachim
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 25 Juli 2019, 14:58:51
Zitat von: MadMax-FHEM am 25 Juli 2019, 13:23:52
Dann kannst du entweder alles in dem Script machen und das bei Boot starten...
...es geht auch ein Presence-Device in fhem und dann bei "absent" nur ein Script zu rufen (oder direkt den "shell-Befehl") welches dann die Umschaltung macht...

Aber stimmt, erst mal etwas Abkühlung... ;)

Gruß, Joachim

Prsence device lan-pin hab ich mir erstellt.. Ich denke ich könnte es dann so laufen lassen, das über notify von fhem aus (bei "absent") ein bashscript aufgerufen wird was das WLAN interface startet und bei "present" wieder beendet...  So könnte es klappen.
Allerdings hab ich gerad auf dem PI noch ein anderes Problem, ich bekomme das WLAN interface nicht an den Start...
Ich habe im wpa_supplicant alles eingetragen... Aber er verbindet sich partout nicht... auch das werde ich noch rausbekommen...

Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: betateilchen am 25 Juli 2019, 15:02:49
was spricht dagegen, den watchdog des raspi zu benutzen? Der kann u.a. auch einzelne Schnittstellen überwachen und im Fehlerfall Skripte starten.
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 25 Juli 2019, 15:52:32
eigentlich nix... ganz ehrlich... ich habe mich mit dem watchdog noch nicht befaßt.
Muß der erst aktiviert/installier werden? Wie spreche ich ihn an?

Ich hatte das bisher immer so interpretiert, das man damit im Falle eines Fehlers nur einen reboot auslösen kann...

Edit: Also gut mal eben schnell
apt-get install watchdog gemacht -...
die config Datei unter "/etc/watchdog.conf"

folgendermaßen eingerichtet:

interface = eth0
# timeout [sec] until reboot
retry-timeout = 60
# an internet or local address to test, for example 192.168.0.1
ping = 192.168.178.1
# interval [sec] of testing the connectivity
interval = 15


Jetzt würde der PI also neu booten, wenn er keinen Ping mehr von 192.168.178.1 bekommt, das ist ja aber nicht das gewollte verhalten.









Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: betateilchen am 25 Juli 2019, 17:54:47
Zitat von: Jens_B am 25 Juli 2019, 15:52:32
Ich hatte das bisher immer so interpretiert, das man damit im Falle eines Fehlers nur einen reboot auslösen kann...
...
Jetzt würde der PI also neu booten, wenn er keinen Ping mehr von 192.168.178.1 bekommt, das ist ja aber nicht das gewollte verhalten.

Du solltest nicht interpretieren, sondern die ganze Dokumentation zum Watchdog lesen (es ist wirklich nicht viel zu lesen...), da lässt sich noch mehr konfigurieren, als ein simpler reboot.

https://linux.die.net/man/5/watchdog.conf

Die relevanten Stichworte sind "test-directory" "test-binary" "repair-binary"

Es gibt hier im Forum auch irgendwo schon Beispiel-Scripte.
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 26 Juli 2019, 07:09:51
Zitat von: betateilchen am 25 Juli 2019, 17:54:47
Du solltest nicht interpretieren, sondern die ganze Dokumentation zum Watchdog lesen (es ist wirklich nicht viel zu lesen...), da lässt sich noch mehr konfigurieren, als ein simpler reboot.

https://linux.die.net/man/5/watchdog.conf

Die relevanten Stichworte sind "test-directory" "test-binary" "repair-binary"

Es gibt hier im Forum auch irgendwo schon Beispiel-Scripte.

Wie gesagt, ich habe mich mit dem watchdog noch nicht ausführlich befasst. interpretiert in meinem Falle=verstehen... also einfach falsch verstanden...

interface = eth0
# execute binary in case of error
repair-binary = /usr/local/bin/wifi_start.sh
# an internet or local address to test, for example 192.168.0.1
ping = 192.168.178.1
# interval [sec] of testing the connectivity
interval = 15


würde jetzt also das wifi_start script ausführen (indem ich per shell das wifi starte).
Wenn das LAN jetzt wieder da ist, kann der watchdog aber nicht wieder zurückschalten?

Okay, wie gesagt ist mir jetzt schon zu warm... ;)

Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: betateilchen am 26 Juli 2019, 12:36:13
Naja, so ganz ist das immer noch nicht richtig.

Du solltest Dich entscheiden, ob Du das Interface überwachen willst ODER das ping Das Problem ist nämlich: sobald Dein raspberry auf Mobilfunk umschaltet, funktioniert das pingen einer lokalen IP ja sowieso nicht mehr und der watchdog würde sofort wieder ausgelöst.

In Deinem repair script musst Du die gesamte Logik unterbringen. Darin kannst Du prüfen, warum das script aufgerufen wurde, darin kannst Du z.B. auch per at (Achtung: Betriebssystem!) eine Minute später prüfen lassen, ob eth0 wieder verfügbar ist und dann wieder zurückschalten usw.
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 27 Juli 2019, 11:54:31
Zitat von: betateilchen am 26 Juli 2019, 12:36:13
Naja, so ganz ist das immer noch nicht richtig.

Du solltest Dich entscheiden, ob Du das Interface überwachen willst ODER das ping Das Problem ist nämlich: sobald Dein raspberry auf Mobilfunk umschaltet, funktioniert das pingen einer lokalen IP ja sowieso nicht mehr und der watchdog würde sofort wieder ausgelöst.


Das stimmt so nicht ganz ;-). Ich habe ja vor ein 2. WLAN zu nehmen, der Surfstick soll quasi ein mobiler LTE Router sein. 
Außerdem soll der PING ja nur prüfen ob das lokale lan wieder da ist.... Wenn ja soll er WLAN abschalten. Wenn nein nicht...
Zitat

In Deinem repair script musst Du die gesamte Logik unterbringen. Darin kannst Du prüfen, warum das script aufgerufen wurde, darin kannst Du z.B. auch per at (Achtung: Betriebssystem!) eine Minute später prüfen lassen, ob eth0 wieder verfügbar ist und dann wieder zurückschalten usw.

Ich überlege einfach folgendes ohne watchdog oder so zu machen, einfach per cronjob dieses script hier alle x (2?) Minuten auszuführen:

#!/bin/bash

# The IP for the server you wish to ping (8.8.8.8 for i.e. is a public Google DNS server)
SERVER=192.168.178.1

# Only send 10 pings, sending output to /dev/null
ping -c10 ${SERVER} > /dev/null

# If the return code from ping ($?) is not 0 (meaning there was an error)
if [ $? != 0 ]
then
    echo "Start the wireless interface"
    echo "$(date): No network connection, starting wlan0" >> /var/log/checkwifi.log
    sudo ifconfig wlan0 up
else
    sudo ifconfig wlan0 down
    echo "$(date): LAN connection ok" >> /var/log/checkwifi.log
fi


Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: betateilchen am 28 Juli 2019, 11:44:19
Zitat von: Jens_B am 27 Juli 2019, 11:54:31
Außerdem soll der PING ja nur prüfen ob das lokale lan wieder da ist.... Wenn ja soll er WLAN abschalten. Wenn nein nicht...

Du hast das Prinzip immer noch nicht verstanden. Die Prüfbedingungen in der watchdog.conf sind nicht "UND" sondern "ODER"


interface = eth0
ping = 192.168.178.1


bedeutet: der watchdog löst jedesmal dann aus, wenn entweder das eth0 nicht verfügbar ist ODER die Adresse 192.168.178.1 nicht angepingt werden kann.

Zitat von: Jens_B am 27 Juli 2019, 11:54:31
Ich überlege einfach folgendes ohne watchdog oder so zu machen, einfach per cronjob dieses script hier alle x (2?) Minuten auszuführen:

Herzlichen Glückwunsch, Du versuchst grade, die Funktionalität des watchdog nachzubauen...

*kopfschüttel*
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 29 Juli 2019, 19:16:37
Zitat von: betateilchen am 28 Juli 2019, 11:44:19
Du hast das Prinzip immer noch nicht verstanden. Die Prüfbedingungen in der watchdog.conf sind nicht "UND" sondern "ODER"


interface = eth0
ping = 192.168.178.1


bedeutet: der watchdog löst jedesmal dann aus, wenn entweder das eth0 nicht verfügbar ist ODER die Adresse 192.168.178.1 nicht angepingt werden kann.

Herzlichen Glückwunsch, Du versuchst grade, die Funktionalität des watchdog nachzubauen...

*kopfschüttel*

Ja sorry, ich habe das tatsächlich nicht verstanden... Deshalb eben für mich der "einfache" Weg über das bashscript....

Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 02 August 2019, 11:50:13
Hallo zusammen,
falls es von Interesse sein sollte: Ich habe mit zwischenzeitlich einen E8372 Stick von Huawei besorgt.
Den an den Pi angestöpselt und er wurde sofort als Netzwerkschnittstelle "eth1" erkannt. Mein PI hat die IP 192.168.8.100 bekommen. (Das WLAN des Sticks benötige ich nicht).
Der PI behandelt den Stick wie eine zusätzliche Netzwerkkarte. Ausschalten kann man den Stick über
sudo ifconfig eth1 down

Eingeschaltet wird über:
sudo ifconfig eth1 up
.

Ich nutze jetzt ein kleines bashscript, welches alle 2 Minuten abfragt ob einer meiner Netzwerkswitche noch erreichbar ist. Wenn nicht wird eth1 eingeschaltet. Das ganze ist als cronjob realisiert.


#!/bin/bash

# checklan.sh
# The IPs of the servers you wish to ping
SERVER1=192.168.178.100
SERVER2=192.168.8.1
# Send 5 pings, sending output to /dev/null, saving in ERROR1 and ERROR2
ping -c5 ${SERVER1} > /dev/null
ERROR1=$?
ping -c5 ${SERVER2} > /dev/null
ERROR2=$?
# If the ERROR1 and ERROR2 is not 0 (meaning there was an error)
if [ $ERROR1 != 0 ] && [ $ERROR2 != 0 ]
then
    echo "$(date): No network connection, starting UMTS" >> /var/log/checklan.log
    sudo ifconfig eth1 up
elif [ $ERROR1 == 0 ] && [ $ERROR2 == 0 ]
then
    sudo ifconfig eth1 down
    echo "$(date): LAN connection ok" >> /var/log/checklan.log
else
    echo "$(date): Network connection ok" > /dev/null
fi
exit


in fhem habe ich jetzt ein außerdem ein LAN Presence device auf die 192.168.178.100 eingerichtet, sobald das nicht mehr antwortet, wird eine Nachricht aus einen DOIF raus verschickt.

defmod LAN PRESENCE lan-ping 192.168.178.100 120
attr LAN room USV


defmod DI_SEND_MAIL_STROMAUSFALL DOIF ([LAN] eq "absent") (msg mail @Bewohner | Netzwerk ausgefallen | Netzwerk ausgefallen. Stromausfall?  ) DOELSE (msg mail @Bewohner | Netzwerk wieder da | Netzwerk wieder da. Strom wieder da  )
attr DI_SEND_MAIL_STROMAUSFALL room Sicherheit,USV
attr DI_SEND_MAIL_STROMAUSFALL wait 120



Das mag alles nicht perfekt und auch etwas umständlich sein, funktioniert aber für meine Zwecke.

gruß
Jens
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Wernieman am 14 August 2019, 14:44:30
Wenn das Mobilfunkt über einen dedizierten router erreichbar sein soll, brauchst Du doch WLAN2 (?) nicht hoch/runterfahren, sondern kannst einfach nur das "Standardgateway" ändern....

Hat den Vorteil, das man einigen Programmen auch dediziert ein Standardgateway mitgeben kann (z.B. ping!!) und Du damit auch im Normalfall die Existenz des Mobilfunkrouters und dessen Verbindung testen kannst. Auch ist dann noch Dein Heimnetz erreichbar, sofern nicht geroutet .....
Titel: Antw:Surfstick am PI /PI soll automatisch auf Mobilfunknetz schalten bei LAN Ausfall
Beitrag von: Jens_B am 14 August 2019, 14:59:38
Zitat von: Wernieman am 14 August 2019, 14:44:30
Wenn das Mobilfunkt über einen dedizierten router erreichbar sein soll, brauchst Du doch WLAN2 (?) nicht hoch/runterfahren, sondern kannst einfach nur das "Standardgateway" ändern....

Hat den Vorteil, das man einigen Programmen auch dediziert ein Standardgateway mitgeben kann (z.B. ping!!) und Du damit auch im Normalfall die Existenz des Mobilfunkrouters und dessen Verbindung testen kannst. Auch ist dann noch Dein Heimnetz erreichbar, sofern nicht geroutet .....

? Versteh ich jetzt nicht ganz. Mein Heimnetz ist ja im Falle eines Stromausfalls sowieso "weg". Ich schalte ja kein WLAN ein sondern nur den Stick der über eth1 angebunden ist.

WLAN des UMST Sticks ist aus.