[gelöst] iPad 2 Safari stürzt seit letztem Update ab

Begonnen von tante ju, 31 Januar 2016, 23:40:31

Vorheriges Thema - Nächstes Thema

tante ju

Zitat von: tomster am 04 Februar 2016, 14:18:57
Och, Tante Ju, nachdem Du dich schon Mal so formidabel eingelesen hast, wie wär's damit dieses Wissen zu Teilen?
SSI war/ ist für mich bislang nur ein weiterer Ausdruck, den ich mit lediglich mit unfundiertem Halbwissen füllen konnte/ kann.
Auch wenn es nicht nach DER Lösung für das Lade-/ Anzeigeproblem zu sein scheint gefallen mir so Nebeneffekt wie tendenziell richtig gut. Und das hebt neben dem WAF auch den MAF...

Irgendwo hier gibt es schon eine Anleitung, wie man Apache installiert. Finde sie nur gerade nicht.

Also, auf jessie apache2 installieren und include aktivieren:
sudo apt-get install apache2
sudo a2enmod include


Dann globale Config anpassen mit
sudo vi /etc/apache2/apache2.conf

So ab Zeile 168 (im vi :168) ungefähr, dieses einfügen:
<Directory /opt/fhem/www/>
        Options Indexes FollowSymLinks Includes
        AllowOverride None
        Require all granted
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
</Directory>


Speichern und raus (im vi :x). Jetzt für den virtuellen Host noch die Einstellung anpassen mit
sudo vi /etc/apache2/sites-enabled/000-default.conf

Hier den alten DocumentRoot und Directory entfernen und dieses einfügen:
        DocumentRoot /opt/fhem/www

        <Directory /opt/fhem/www>
                Options Indexes FollowSymLinks MultiViews Includes
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        Alias /fhem /opt/fhem/www/


Jetzt noch den apache neu starten, damit alles aktiv wird:
sudo service apache2 restart

Da die Web-Seiten (und java widgets) nun von einem anderen Server kommen als die Resultate der AJAX-Requests, muß CORS eingeschaltet werden und ein Port beim FHEM gesucht werden, der keine Authentisierung hat. Dafür gibt es viele Möglichkeiten. Das einfachste ist den WEB (Port 8083) zu nehmen, also in FHEM dann:
attr WEB CORS 1

Jetzt zum Beispiel in /opt/fhem/www/tablet/ eine Datei index.shtml (mit s!) erstellen. Das kann eine Kopie der bekannten index.html sein. Im Header eine neue Zeile einfügen (wie auch meiner index.html, dann halt ohne SSI):
<meta name="fhemweb_url" content="http://192.168.0.1:8083/fhem">

Das sorgt dafür, daß die Requests der Widgets an diese URL gerichtet werden. Deswegen muß Port 8083 mit dem übereinstimmen, bei dem in FHEM CORS aktiviert ist. Es gibt auch andere Wege CORS zu aktivieren, also jeder wie er mag.

Der Zugriff erfolgt jetzt über http://<server>/tablet/<datei>

Also ohne das /fhem in der URL und ohne Port.

Eine normale index.html würde zum Beispiel so aussehen:
<li data-row="1" data-col="1" data-sizex="2" data-sizey="1" data-template="inc_badtemp.html">
</li>


In diesem Fall muß der Client die index.html laden und dann noch das data-template. Es sind zwei Zugriffe nötig. Je nach System und Browsereinstellungen kann sich das ganz schön summieren, bis im Browser alle Daten zusammen sind. Zusätzlich sind das alles TCP Zugriffe, die im Server (RPi hier) auch ein wenig was bewirken.

Mit SSI (Server Side Include) analysiert der Apache die Datei nach <!--# Signaturen und führt die Befehle aus. Das obige Beispiel könnte also so aussehen:
<li data-row="1" data-col="1" data-sizex="2" data-sizey="1">
<!--#include virtual="inc_badtemp.html" -->
</li>


Hier wird der Apache-Server den Inhalt der Datei einsetzen und an den Browser genau eine Datei ausliefern, was Latenz reduziert, da weniger TCP Sessions aufgebaut werden müssen.

Die Doku zu SSI kann man sich hier http://httpd.apache.org/docs/2.2/howto/ssi.html anschauen.

Es ist auch möglich, Ergebnisse einer Befehlsausführung einzubauen oder mit if/else/elif eine strukturierte Datei auszuliefern, was um Beispiel verwendet werden kann, um bestimmte Elemente nur für bestimmte Devices auszuliefern oder was immer einem einfällt.

tante ju

Ich habe gerade mal nachgeschaut. Hätte ich auch eher drauf kommen können. Die Crashinfos vom iPad sagen ganz klar "Low Memory" und deswegen wurde der Safari gekillt.

Es ist also irgendwo ein Speicherleck, welches nach September oder so eingeführt wurde.

zap

#32
Vielen Dank für die Apache Anleitung.

Durch die SSIs hat sich das Thema Pagetab aber erst mal erledigt? Oder verwendest Du beides parallel?

Weitere Infos zu SSIs (sieht vielversprechend aus)

https://httpd.apache.org/docs/2.4/mod/mod_include.html

und hier:

https://httpd.apache.org/docs/2.4/howto/ssi.html

2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

setstate

"Low Memory" -> das wird am Longpoll liegen. Dort wird jede neue Message nur hinten dran gehangen.
Das summiert sich dann bis ins Unendliche (outOfMemory). Früher habe ich Longpoll aller 60sekunden neu gestartet, jetzt läuft es durch.
Da muss ich mir noch was einfallen lassen. Im FHEMWEB ist dazu auch ein Workaround:   
Zitat// reset the connection to avoid memory problems
  if(FW_longpollOffset > 1024*1024 && FW_longpollOffset==input.length)
    FW_longpoll();

tante ju

#34
Zitat von: zap am 05 Februar 2016, 11:00:25
Vielen Dank für die Apache Anleitung.

Durch die SSIs hat sich das Thema Pagetab aber erst mal erledigt? Oder verwendest Du beides parallel?

Bin mir nicht sicher, ob ich das richtig verstehe.
Pagetab ist ja zur Seiten-Umschaltung, SSI dafür den Browser und RPi TCP Stack zu entlasten, um möglichst viel in einem File zu liefern.

Was meinst Du mit "Pagetab erstmal erledigt" ?

Edit: Autokorrektur korrigiert

tante ju

Zitat von: setstate am 05 Februar 2016, 12:48:05
"Low Memory" -> das wird am Longpoll liegen. Dort wird jede neue Message nur hinten dran gehangen.
Das summiert sich dann bis ins Unendliche (outOfMemory). Früher habe ich Longpoll aller 60sekunden neu gestartet, jetzt läuft es durch.
Da muss ich mir noch was einfallen lassen. Im FHEMWEB ist dazu auch ein Workaround:

Wenn "früher" auf meine Installation vor dem Dezember-Update zutrifft, dann kann das in der Tat der Grund sein. Kann man den Neustart des Longpoll parametrisierbar machen?

setstate

ich starte longpoll jetzt aller 1000 Zeilen neu. Sollte passen. Ich teste noch etwas und release das heute Abend.

tante ju

Zitat von: setstate am 05 Februar 2016, 13:41:55
ich starte longpoll jetzt aller 1000 Zeilen neu. Sollte passen. Ich teste noch etwas und release das heute Abend.

Super. Werde mir von meiner Frau berichten lassen, ob das funktioniert hat. Bin die nächste Zeit viel unterwegs.

BTW: DU hast http://forum.fhem.de/index.php/topic,48758.0.html gesehen?

zap

Zitat von: tante ju am 05 Februar 2016, 12:50:02
Bin mir nicht sicher, ob ich das richtig verstehe.
Pagetab ist ja zur Seiten-Umschaltung, SSI dafür den Browser und RPi TCP Stack zu entlasten, um möglichst viel in einem File zu liefern.

Was meinst Du mit "Pagetab erstmal erledigt" ?

Edit: Autokorrektur korrigiert

Mit Pagetab werden ja die "Unterseiten" per Template eingebunden. Bei SSI verstehe ich das so, dass jede Seite mit komplettem FTUI Header erstellt wird und die einzelnen Bereiche nicht per FTUI Template eingebunden werden sondern per SSI Include. Ob sich beide Mechanismen sinnvoll kombinieren lassen, muss ich mir mal anschauen ( wenn ich mal die Zeit finde, den Apache zu installieren )
2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

tante ju

Zitat von: setstate am 05 Februar 2016, 13:41:55
ich starte longpoll jetzt aller 1000 Zeilen neu. Sollte passen. Ich teste noch etwas und release das heute Abend.

Es hat was geholfen, läuft jetzt schon >12 Stunden. Super.

MichaelT

Hallo tante ju,

kannst Du bei dir auch das Verhalten feststellen, welches ich bei mir hatte.
Wenn man debug auf 1 stellt, kamen bei mir nach mehr als 1024 Zeilen immer schnell longpollrestarts.

siehe http://forum.fhem.de/index.php/topic,48818.0.html.

Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

tante ju

Zitat von: MichaelT am 06 Februar 2016, 14:08:39
Hallo tante ju,

kannst Du bei dir auch das Verhalten feststellen, welches ich bei mir hatte.
Wenn man debug auf 1 stellt, kamen bei mir nach mehr als 1024 Zeilen immer schnell longpollrestarts.

siehe http://forum.fhem.de/index.php/topic,48818.0.html.

Ich hatte was in der Art auf dem Laptop, aber (noch) nicht auf dem Tablet. Hab's beim Laptop auf meine Bastelei und den Cache geschoben.

MichaelT

Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

tante ju

So, bin wieder zurück und Frau sagte, es lief alles durch. Das Problem scheint also gelöst.
Allerdings "hing" das Update just gestern Abend, als ich wiederkam. Es wurden keine aktuellen Werte angezeigt.
Mal sehen, ob sich das wiederholt. Bis dahin sehe ich das hier als gelöst an. Danke an alle.

dadoc

Hi Tante Ju,
Zitat von: tante ju am 04 Februar 2016, 20:45:35
Das sorgt dafür, daß die Requests der Widgets an diese URL gerichtet werden. Deswegen muß Port 8083 mit dem übereinstimmen, bei dem in FHEM CORS aktiviert ist. Es gibt auch andere Wege CORS zu aktivieren, also jeder wie er mag.
Hast Du einen Tipp, wie man CORS aktivieren sollte, damit im iframe-Widget von Nesges externe Websites (z.B. TV-Programm von TV Spielfilm) auch unter iOS auf dem iPad geladen werden? Das ging bei mir bis vor Kurzem noch mit data-check-src auf die lokale IP des fhem-Raspi, jetzt nicht mehr. Auch das Einbinden von URLs aus dem Heimnetzwerk geht nicht mehr. Auf (Desktop-)Chrome und Safari geht es dagegen immer noch. Die einschlägigen Tipps, um CORS in Apache2 zu aktivieren, habe ich ausprobiert, ohne Erfolg.
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