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
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
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.
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ß
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.