Forum: PC-Programmierung Android - Server online?


von Peter (Gast)


Lesenswert?

Hallo zusammen.

Ich habe einen kleinen Webserver in meinem WLAN (ESP8266), welcher 
aufgrund des Batteriebetriebs nur durch einen extern ausgelösten 
Interrupt an einen der Pins online geht (30 sec.). Danach geht der ESP 
wieder in den Deep Sleep und somit offline, bis der nächste Interrupt 
ausgelöst wird. Usw.

Nun habe ich vor, eine Android-App zu entwickeln, welche nach dem Aufruf 
in einem "Bereitschaftsmodus" verharrt und im Hintergrund auf genau 
diesen Moment wartet, dass der besagte Webserver im WLAN online geht.
Dann soll das Android-Gerät beispielsweise einen "Toast" ausgeben oder 
sich anderweitig bemerkbar machen, dass der Server (ESP) gerade online 
ist.

Leider weiß ich nicht, welches Verfahren dafür am geeignetsten wäre.
Gibt es einen "Service", der genau auf so etwas abgeschnitten ist?
Es geht nur darum resourcenschonend den Server im WLAN ausfindig zu 
machen um zu sehen, ob dieser offline oder online ist. "Mehr nicht".

Eine andere Idee war von mir noch eine Art Polling alle x sec. zur 
jeweiligen IP des Servers zu machen. Aber ich vermute, dass dies 
ziemlich resourcenfressend ist.

Nochmal das Beispiel:

App starten -> in der App auf "Scharfschalten" tippen -> App 
"schließen".....nun fragt im Hintergrund das Androidgerät (der besagte 
Service) in einem gewissen Zeitintervall den Server an "bist du offline? 
bist du online?" -> WENN ja: gib einen Toast aus/vibriere/whatever, WENN 
nein: warte weiter....


Ich hoffe, ich konnte das Problem einigermaßen gut beschreiben und hoffe 
auf Stichwörter, die dieses Problem behandeln.

Vielen Dank im Voraus!

Gruß
Peter

von Hmmm (Gast)


Lesenswert?

UDP-Broadcast, darauf können dann alle im lokalen Netz lauschen.

von sid (Gast)


Lesenswert?

Aalso du kannst das Pferd von beiden Seiten aus besteigen.
Willst Du jedesmal mit dem Server verbunden werden falls er online 
kommt?
Falls nciht ist das einfach
weise dem ESP eine feste IP im DNS des Routers zu
dann kannst Du wann imemr du möchtest die IP pingen und weisst ob online 
oder nicht
(Du kannst auch einfach ind er Router oberfläche nachsehen gehen ;))
mit variabler IP ist das schwieriger, dann musst Du dem Server einen 
externen Zugriff verpassen den der Router in der Lage ist zu tunneln.
dann kannst Du jederzeit auf den Server als Netzwerkressource zugreifen
indem Du dir die aktuelle IP beim Router erfragst.
(also //ESP_8266 statt //192.168.2.30)

Willst Du aber im Grundsatz sobald der ESP online ist auch 
benachrichtigt/verbunden werden gibt es wieder zwei Möglichkeiten

PUSH:
Wenn es immer dasselbe Android gerät ist (single client)
könnte der ESP nach dem WLAN Connect automatisch nach dem Client suchen 
und ihn kontaktieren,
dadurch sparst Du dir permanent nach dem ESP zu suchen.
da bräuchte es mMn nichtmal eine App auf dem Android für,
ich meine Du kannst auch ne LAN Pushnachricht schicken
(weiss ich aber nicht genau)

Willst Du allerdings auf mehrerern Geräten über das aktivwerden des ESP 
informiert werden wird das schnell voll im Speicher des ESP.
Dann würde ich empfehlen den Router als relay zu nutzen
(ESP informiert WLAN Router, Router informiert clients in der dort 
hinterlegten Liste, das erfordert aber einen skriptfähigen Router oder 
permanenten Netzwerkserver mit skriptfähigkeit [NAS reicht glaub ich 
nicht])

ODER PULL:
Die besagten AndroidGeräte pingen permanent nach dem vorhandensein des 
ESP,
das sollte in einem Intervall kleiner als 30sek passieren damit die 
"ontime" auch nicht verpasst werden kann,
das ist ganz schon nervtötend in den Netzwerklogs, aber es funktioniert 
halt..
(so pingt mein versch* fernseher permanent nach allem was n Mediaplayer 
hat um zu fragen ob ich nicht vllt doch was lokal streamen will)
kostet halt Akku am Telefon ist aber recht einfach..
was Du im ersten Fall (suche nach IP/Ressource)  manuell durch 
Knopfdruck erledigt hast schreibst Du als dauerschleife in die App.
(alle 17sekunden zB.. Primzahlen sind Dein Freund)
sobald die App läuft wird gepingt udn getan was Du willst, läuft sie 
nicht, sollte auch Ruhe sein ;)

'sid

von M. K. (Gast)


Lesenswert?

Wäre nicht folgender Ablauf besser geeignet?:

ESP sendet seine Nachricht an einen MQTT Broker, der die speichert.
Der MQTT Broker (Mosquitto) läuft auf einem Raspi Zero, der irgendwo am 
Netz hängt und keine Batterielaufzeitprobleme hat.
Über openHAB, IObroker oder sonst einer geeigneten Software könnte der 
raspi auch gleich ein Webinterface zur Steuerung, Anzeige etc. bieten, 
das Du keine spezielle APP schreiben musst um was damit anzufangen.
Browser reicht und das Handy muss nicht alle paar Sekunden aufwachen um 
keine Nachricht zu verpassen.

Ich arbeite mich da gerade ein und war recht positiv überrascht wie 
schnell man da zu sehr respektablen Ergebnissen kommt.
Statt alles selbst zu schreiben setzt Du damit auf eine sehr mächtige 
Umgebeung auf, mit der Du eine unglaubliche Vielzahl an Geräten 
vernetzen und steuern kannst.

Wenn Du keinen extra Broker verwenden willst, würde ich mal die 
Möglichkeit prüfen eine Nachricht per WA, Telegram, SMS etc. pp. ans 
Handy zu schicken.

von Peter (Gast)


Lesenswert?

An der ESP-Software gibt es leider nichts mehr zu rütteln.

Nach Recherchen habe ich herausgefunden, dass ein einfaches Pingen des 
ESPs schon mal ein Anfang für mein Problem wäre.

Nur: Wie mache ich das am resourcensparendsten fürs Androidgerät?

Ich möchte also eine App schreiben, welche laufend abfragt, ob die IP 
erreichbar ist bzw. die Website online ist oder nicht und dies möglichst 
batterieschonend für das Androidgerät. :-)


Beispiel:
Wie schaffen es Apps wie WhatsApp etc. um nach Empfang einer Nachricht 
sich bemerkbar zu machen?


Gruß

von Klaus P. (Gast)


Lesenswert?

Peter schrieb:
> Ich möchte also eine App schreiben, welche laufend abfragt, ob die IP
> erreichbar ist bzw. die Website online ist oder nicht und dies möglichst
> batterieschonend für das Androidgerät. :-)

Es gibt bei Android Background Services, bei denen onMessageReceived() 
überschrieben wird. Zumindest vor einigen Jahren war Firebase dafür sehr 
beliebt (Datenschutzbedenken mal außen vor gelassen). Mit diesen 
Stichwörten müsstest Du schon weiterkommen.

von Hmmm (Gast)


Lesenswert?

Peter schrieb:
> Wie schaffen es Apps wie WhatsApp etc. um nach Empfang einer Nachricht
> sich bemerkbar zu machen?

Die nutzen Google FCM (früher GCM), was auf einer dauerhaft stehenden 
TCP-Verbindung basiert. Dafür müsste der ESP dann mit Google-Servern 
kommunizieren, was mit Deiner Vorgabe "Firmware darf nicht mehr 
verändert werden" kollidiert.

Dauerhafte TCP-Connections bekommst Du auch so hin, aber auch das dürfte 
eine Anpassung der Firmware erfordern.

von Joachim S. (oyo)


Lesenswert?

Der sinnvolle Ansatz wäre imho, etwas am ESP zu verändern.
Aber wenn das wirklich nicht geht, wäre mglw. Folgendes eine Option, um 
ständiges Polling zu vermeiden:
Sofern der ESP seine IP-Adresse per DHCP bezieht, könntest Du Deinen 
eigenen DHCP-Server betreiben und ihn so konfigurieren, dass, wenn der 
ESP online kommt, ein Skript ausgeführt wird, wie z.B. hier beschrieben:
https://superuser.com/questions/211411/executing-a-script-when-dhcpd-give-an-ip

von Imonbln (Gast)


Lesenswert?

Joachim S. schrieb:
> Sofern der ESP seine IP-Adresse per DHCP bezieht, könntest Du Deinen
> eigenen DHCP-Server betreiben und ihn so konfigurieren, dass, wenn der
> ESP online kommt, ein Skript ausgeführt wird, wie z.B. hier beschrieben:
> https://superuser.com/questions/211411/executing-a-script-when-dhcpd-give-an-ip

Wäre auch mein Ansatz, zwischen den ESP und den Netzwerk einen DHCP 
Server (dnsmasq z.b.) der auch scripte kann, und diesen dann als Proxy 
eine MQTT Status Massage absetzten lassen, das der ESP nun online ist. 
Das Android Kann dann diesen Status abonnieren. Das ganze sollten dann 
mit wenig oder keine Anpassung auf dem Android oder den ESP auskommen, 
da die Monkey Work auf dem Proxy stattfindet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.