NEWS
iOS App - Tester gesucht!
-
@stolly82
Wie sollte es denn sein? Also sollte der Connection-Status dauerhaft auf "true" stehen? Oder sollte er nur alle paar Sekunden/Minuten eine Verbindung aufbauen? -
hmm, wie machen das die Messenger? Kann man sich da was abschauen, wie das Telegram und Co machen?
Da muss es doch irgendeinen Trick geben, und die Daten sofort zu pushen..
Vielleicht ist der Websocket nicht so das richtige dafuer..?Hier ist es mit der Version 10 der App besser, aber auch nur, wenn die App offen ist.. aber er haelt die Verbindung nicht.. irgendwas schliesst die..
-
@ilovegym
Ja, sobald man die App öffnet, connectet sie auch. Das ist wesentlich besser als zuvor, da hast du Recht. -
Also mit der (10) kann ich das so überhaupt nicht nachvollziehen.
Ich habe noch mal ein wenig rumgeschraubt, da ja offensichtlich die 15 min. Cronjobs im Hintergrund Modus nicht greifen, habe ich jetzt überall wo eine Verbindung als Verloren "markiert" werden kann, einen Reconnect eingebaut.
Ich hoffe, dass es jetzt funktioniert (Version 11).
1. Aufbau der WebSocket-Verbindung
- Initiale Verbindung: Wenn die App gestartet wird oder eine neue WebSocket-Verbindung erforderlich ist (z.B. nach einem Verbindungsverlust), wird eine neue Verbindung zum Server aufgebaut. Dies geschieht in der Methode
connect()
derIoBrokerConnection
-Klasse. - Authentifizierung: Sobald die Verbindung erfolgreich hergestellt ist, authentifiziert sich die App beim Server. Dies geschieht durch das Senden eines Authentifizierungs-Tokens, das aus den Anmeldeinformationen (Benutzername und Passwort) sowie dem Geräte-Token besteht.
- Verbindungsstatus: Während der gesamten Zeit wird der Status der Verbindung (z.B. "verbunden", "authentifiziert", "verloren") überwacht und in der App gespeichert.
2. Überwachung der WebSocket-Verbindung
- Heartbeat und Ping: Um die Verbindung stabil zu halten, sendet die App in regelmäßigen Abständen (alle 30 Sekunden) ein "Ping" an den Server. Wenn der Server darauf mit einem "Pong" antwortet, wird die Verbindung als stabil angesehen. Dieser Mechanismus stellt sicher, dass die Verbindung nicht unbemerkt abbricht.
- Pong-Timeout: Wenn nach dem Senden eines Pings kein Pong innerhalb einer bestimmten Zeit (z.B. 10 Sekunden) empfangen wird, wird dies als Verbindungsverlust gewertet. Die Verbindung wird dann als "verloren" markiert und ein Reconnect-Prozess wird eingeleitet.
3. Stabilisierung und Wiederherstellung der Verbindung
- Reconnect-Mechanismus: Wenn die Verbindung aus irgendeinem Grund verloren geht (z.B. durch Netzwerkprobleme, Serverfehler, etc.), plant die App automatisch einen erneuten Verbindungsaufbau. Dieser Prozess wird von der
IoBrokerReconnectManager
-Klasse verwaltet. - Verbindungsverluste erkennen: Wenn ein Verbindungsverlust erkannt wird, entweder durch fehlende Pong-Antworten oder durch direkte Verbindungsabbrüche (wie z.B. durch einen
error
oderpeerClosed
-Event), wird derscheduleReconnect()
-Mechanismus ausgelöst. Dadurch wird sichergestellt, dass die App versucht, die Verbindung in einem regelmäßigen Intervall (z.B. alle 10 Sekunden) wiederherzustellen, bis die Verbindung erfolgreich ist. - Reconnect bei Viabilitätsänderung: Wenn die Verbindung von der Netzwerkschicht als nicht mehr lebensfähig (
viabilityChanged
) erkannt wird, startet die App ebenfalls einen Reconnect-Versuch.
4. Caching und Nachrichtenzustellung
- Zwischenspeichern von Nachrichten: Während der Verbindungswiederherstellung werden Nachrichten, die an den Server gesendet werden sollen, in einem Cache zwischengespeichert. Sobald die Verbindung wiederhergestellt ist und als stabil (im Status
ready
) gilt, werden die zwischengespeicherten Nachrichten gesendet.
- Initiale Verbindung: Wenn die App gestartet wird oder eine neue WebSocket-Verbindung erforderlich ist (z.B. nach einem Verbindungsverlust), wird eine neue Verbindung zum Server aufgebaut. Dies geschieht in der Methode
-
@stolly82
Das liest sich gut. Kann dir schon mal sagen, dass der Verbindungsaufbau nach Neustarten der App ruckzuck geht. Bin nun schon 5 Minuten am Testen und die Verbindung bleibt bestehen. iPhone lädt gerade, App im Hintergrund, Smartphone wird nicht genutzt. Wechsel ins Handynetz und VPN klappt auch super.Was mich wundert: Bei Notifications war zuvor immer das Display angegangen. Das bleibt nun aus, nur meine Apple Watch macht sich bemerkbar. Vielleicht hab ich auch was umgestellt.
Wenn die Verbindung so bleibt, bin ich hoch zufrieden. Super Arbeit
-
@smarthome2020 sagte in iOS App - Tester gesucht!:
Wie sollte es denn sein? Also sollte der Connection-Status dauerhaft auf "true" stehen? Oder sollte er nur alle paar Sekunden/Minuten eine Verbindung aufbauen?
Ja, die Verbindung sollte möglichst immer auf true stehen. Der Aufbau einer Verbindung verbraucht einiges an Energie, daher bin ich von der REST API auf WebSockets umgestiegen. WebSockets halten die Verbindung effizient aufrecht und sparen so Energie.
Allerdings möchte ich vermeiden, dass die App bei fehlendem Internetzugang ununterbrochen versucht, die Verbindung wiederherzustellen. Das wäre ein unnötiger Energiefresser. Deshalb habe ich den ReconnectManager so gestaltet, dass er bei Verbindungsverlusten exponentiell versucht, die Verbindung wiederherzustellen: Erst nach 10 Sekunden, dann nach 20, 40, 80 und so weiter. Ab 320 Sekunden erfolgt der Versuch alle 320 Sekunden.
Aktuell habe ich ihn auf 10 Sekunden eingestellt, um das Verhalten zu beobachten. Wenn die App geöffnet ist, sollte auf der Startseite der Verbindungsstatus korrekt angezeigt werden.
Im IoBroker-Adapter habe ich die Verbindung mit Pings und anderen Mechanismen stabilisiert. Bei einer Verbindungsunterbrechung dauert es maximal 30 Sekunden, bis die App dies erkennt und reagiert. Ich habe jetzt auch den Verbindungsstatus im Adapter für den History Adapter aktiviert, um besser nachverfolgen zu können, wo es eventuell noch Probleme gibt.
Dass die WebSocket-Verbindung dauerhaft offen bleibt, ist vor allem für Nachrichten wichtig. Wenn es um Statistiken geht, ist es nicht schlimm, wenn sie mal eine Stunde verspätet ankommen. Aber wenn jemand an der Haustür steht, ist das natürlich kritisch.
Eine Alternative wäre, auf die offiziellen Apple APNs (Apple Push Notification Service) umzusteigen. Das würde über einen Apple Push Token laufen, den der Entwickler bereitstellt – aber das möchte ich nicht in einen Open-Source-Adapter integrieren. Alternativ könnte man das über einen Server lösen. Der Vorteil dabei wäre, dass man sogenannte "silent APNs" senden könnte. Diese "stillen" Push-Nachrichten wecken die App auf, wenn die Verbindung abbricht, und das ganz ohne Benachrichtigung auf dem Gerät. Ich würde es aber vorziehen, das ohne zusätzliche Server zu lösen.
-
@smarthome2020
Bei den Notifications bin ich noch nicht wieder bei gewesen. Das sollte ne Setting sein, wobei die bei mir wenn ich das Handy lade eigentlich immer nur auf der Watch ankommen glaube ich.,... Notifications muss ich dann auch noch für das MacOS etc. freigeben, das ist auch noch nicht drin (dass die dann auch da ankommen, wenn Mac an, iOS aber nicht in Benutzung).
Warte mal ab, beim neu-Install lief es bei mir bisher immer super, die Abbrüche kamen immer wenn die App länger zu war (bei mir immer so ab 03:00 Nachts, ggf. aber auch wegen neue FritzBox! IP).
-
@stolly82
Was mir gerade noch aufgefallen ist... Die Akkustandanzeige wird nicht adäquat aktualisiert. Hat 5% geladen, in der App hat sich nichts geändert. Als ich das Smartphone von Ladegerät genommen habe, hat es kurz aktualisiert. Ich hab bisher immer mein iPhone zwischen 20 und 80% Akku belassen. Ging bisher per Automation und URLs, die das Smartphone aufgerufen hat. Wollte nun jedoch wegen genauerer Anzeige mit dem Adapter das Ladegerät steuern.Intervall ist dabei auf "Imidiatley", GPS-Daten sowie Charging-Status ändern sich auch prompt. Nur die Akkuanzeige halt nicht.
-
Zonen Frage
Habe ich ggf. beim Entwickeln einen Denkfehler gehabt,...
Die Zonen sind ja so konzipiert, dass diese in der Zone den User einloggen.
Jetzt ist dummerchen aufgefallen, dass wenn man mehre Devices hat, diese sich ja dann nach "last wins" einloggen.
Bedeutet:
iPad ist zuhause
iPhone ist zuhause
Zuhause.Jan = true
Zuhause.Jan_distance = 0iPhone bewegt sich aus Zuhause raus.
Zuhause.Jan = false
Zuhause.Jan_distance = 1000iPad überschreibt bei Bewegung die 1000 aber wieder mit 0
Solange iPad immer zuhause bleibt, würde es keinen Status true/false überschreiben, aber die distance.
Muss ich das auf
Zuhause.Jan.iPhone_distance
Zuhause.Jan.iPhoneumstellen?
-
@smarthome2020 sagte in iOS App - Tester gesucht!:
Was mir gerade noch aufgefallen ist... Die Akkustandanzeige wird nicht adäquat aktualisiert. Hat 5% geladen, in der App hat sich nichts geändert. Als ich das Smartphone von Ladegerät genommen habe, hat es kurz aktualisiert. Ich hab bisher immer mein iPhone zwischen 20 und 80% Akku belassen. Ging bisher per Automation und URLs, die das Smartphone aufgerufen hat. Wollte nun jedoch wegen genauerer Anzeige mit dem Adapter das Ladegerät steuern.
Wie ist der Status in der App > Sensoren > batterie ?
Ist er Abweichend zum IoBroker?
-
@stolly82 sagte in iOS App - Tester gesucht!:
@smarthome2020 sagte in iOS App - Tester gesucht!:
Was mir gerade noch aufgefallen ist... Die Akkustandanzeige wird nicht adäquat aktualisiert. Hat 5% geladen, in der App hat sich nichts geändert. Als ich das Smartphone von Ladegerät genommen habe, hat es kurz aktualisiert. Ich hab bisher immer mein iPhone zwischen 20 und 80% Akku belassen. Ging bisher per Automation und URLs, die das Smartphone aufgerufen hat. Wollte nun jedoch wegen genauerer Anzeige mit dem Adapter das Ladegerät steuern.
Wie ist der Status in der App > Sensoren > batterie ?
Ist er Abweichend zum IoBroker?
Der Status der App und ioBroker ist identisch, passt aber nicht zum realen Ladezustand des iPhones. Gerade sind 38% geladen, die App und ioBroker geben aber 40% aus.
-
@stolly82 sagte in iOS App - Tester gesucht!:
Zonen Frage
Habe ich ggf. beim Entwickeln einen Denkfehler gehabt,...
Die Zonen sind ja so konzipiert, dass diese in der Zone den User einloggen.
Jetzt ist dummerchen aufgefallen, dass wenn man mehre Devices hat, diese sich ja dann nach "last wins" einloggen.
Bedeutet:
iPad ist zuhause
iPhone ist zuhause
Zuhause.Jan = true
Zuhause.Jan_distance = 0iPhone bewegt sich aus Zuhause raus.
Zuhause.Jan = false
Zuhause.Jan_distance = 1000iPad überschreibt bei Bewegung die 1000 aber wieder mit 0
Solange iPad immer zuhause bleibt, würde es keinen Status true/false überschreiben, aber die distance.
Muss ich das auf
Zuhause.Jan.iPhone_distance
Zuhause.Jan.iPhoneumstellen?
Also für mein Verständnis: Die Distanz ist die Distanz (in m) des Geräts von der Zone oder? Wenn man durch die Entfernung des iPhones nun zum Beispiel die Beleuchtung im Garten beim Heimkommen steuern will, dann ist es unpraktisch, wenn das zu Hause liegende iPad die Distanz immer überschreibt. Ich würde beide Geräte "eigenständig" machen. Man kann ja immer noch beide Geräte dann im ioBroker bei Bedarf über Skript/Blockly zusammenführen.
-
@smarthome2020
Ja, kann ich bestätigen!
iPhone 13%
App & Adapter 15%iOS könnte intern andere APIs oder Methoden verwenden, um den Batteriestand anzuzeigen als die, die für Apps freigegeben sind. Wir nutzen UIDevice.current.batteryLevel.
-
@smarthome2020 sagte in iOS App - Tester gesucht!:
@stolly82 sagte in iOS App - Tester gesucht!:
Zonen Frage
Habe ich ggf. beim Entwickeln einen Denkfehler gehabt,...
Die Zonen sind ja so konzipiert, dass diese in der Zone den User einloggen.
Jetzt ist dummerchen aufgefallen, dass wenn man mehre Devices hat, diese sich ja dann nach "last wins" einloggen.
Bedeutet:
iPad ist zuhause
iPhone ist zuhause
Zuhause.Jan = true
Zuhause.Jan_distance = 0iPhone bewegt sich aus Zuhause raus.
Zuhause.Jan = false
Zuhause.Jan_distance = 1000iPad überschreibt bei Bewegung die 1000 aber wieder mit 0
Solange iPad immer zuhause bleibt, würde es keinen Status true/false überschreiben, aber die distance.
Muss ich das auf
Zuhause.Jan.iPhone_distance
Zuhause.Jan.iPhoneumstellen?
Also für mein Verständnis: Die Distanz ist die Distanz (in m) des Geräts von der Zone oder? Wenn man durch die Entfernung des iPhones nun zum Beispiel die Beleuchtung im Garten beim Heimkommen steuern will, dann ist es unpraktisch, wenn das zu Hause liegende iPad die Distanz immer überschreibt. Ich würde beide Geräte "eigenständig" machen. Man kann ja immer noch beide Geräte dann im ioBroker bei Bedarf über Skript/Blockly zusammenführen.
Korrekt! Sehe ich auch so, da gehe ich dann noch mal dran.
-
@stolly82
Ich meine aber, dass es zuvor aber adäquat ging. Bin mir aber nicht 100% sicher, da die App immer die Verbindung verloren hat.
Meinst du, dass man die App auch auf die Watch bekommt? -
@smarthome2020
Wird nicht anders gewesen sein mit der Batterie, da war ich nur einmal dran, danach änderte sich nichts.Ist von der Library ggf. so, dass die das nur alle X Minuten ausgibt oder so.
Was soll denn in die iWatch app rein?
Also was ich generell noch machen will sind Widgets für die iOS devices um IOB Daten anzuzeigen und zu steuern (Garagentor, Lichter, PV Werte anzeige etc. )
In der iWatch App kann ich mir irgendwie noch nicht wirklich was vorstellen, was sinn ergibt.
Button ggf ?!? -
@stolly82 sagte in iOS App - Tester gesucht!:
In der iWatch App kann ich mir irgendwie noch nicht wirklich was vorstellen, was sinn ergibt.
Button ggf ?!?Ich fände sinnvoll:
- Einbindung in die Zonen wie beim Smartphone
- Akku (wenn das darüber gehen sollte, denn das ist sonst nirgends möglich, den Akkustand der Uhr abzugreifen )
- Schalter/Button wären gut (zB vom Sofa aus die Lampe dimmen/schalten) (das mache ich auch wieder umständlich über das Abrufen einer URL. Das hat ne doch ausgeprägte Latenz bis es dann die Lampe schaltet . Eine App für die Uhr mit anpassbaren Button wäre da genial.
-
Hi, vielen Dank fuer deine unermuedliche Arbeit! Super, dass du da so ergeizig dran bleibst!
Zonen:
mein Ipad bleibt auch zu 98% Zuhause, ich habe dort garkeine Zonen eingerichtet.
mein Iphone hab ich immer dabei, daher gibt es mehrere Zonen:
Home - kleinster Umkreis 50m
Home100 - Umkreis 100m
Home500 - Umkreis 500m
ArbeitDie verschiedenen Umkreise von Home nutze ich, um festzustellen, ob ich mich nach Hause oder von dort weg bewege, und steuere damit wiederrum verschiedene Dinge.
Version 11 der App
funktioniert stabiler, dank deiner Beschreibung wie oft die Verbindung geprueft wird, kann ich es zu 100% nachvollziehen, passt!AppleWatch
- auslesen des Akku waere super
Alles andere waere mir zu umstaendlich, da ich die LTE Funktion nicht mehr nutze, ist das Iphone sowieso immer dabei.
Airpods:
- auslesen der Akkustaende waere klasse
MacBook / Imac
- Notifications
- Widgets
Das ist jetzt aber wie Weihnachten und Ostern auf einmal als Wunschliste
- auslesen des Akku waere super
-
@ilovegym sagte in iOS App - Tester gesucht!:
Zonen:
mein Ipad bleibt auch zu 98% Zuhause, ich habe dort garkeine Zonen eingerichtet.
mein Iphone hab ich immer dabei, daher gibt es mehrere Zonen:
Home - kleinster Umkreis 50m
Home100 - Umkreis 100m
Home500 - Umkreis 500m
ArbeitDie verschiedenen Umkreise von Home nutze ich, um festzustellen, ob ich mich nach Hause oder von dort weg bewege, und steuere damit wiederrum verschiedene Dinge.
Danke für die Info. So kann ich es auch sinnvoll umsetzen
Was mich noch interessiert. Wie macht ihr das mit dem VPN?
Wenn man das WLAN verlässt, kann man eine Automation im iPhone machen, dass es VPN startet. Nur, wenn man wieder in WLAN-Reichweite kommt, bleibt mein iPhone im VPN statt auf WLAN zu wechseln.
Wie sehen eure Automationen da aus oder wie regelt ihr das? -
ich hab die Wireguard App auf dem Phone und die steht auf "on demand" damit funktioniert es einwandfrei.
Also in den App Wireguard immer eingeschaltet, verbindet sich aber nur per VPN, wenn das Wifi nicht mehr erreichbar ist.