FHEM als Reverseproxy verschwurbelt 99_myUtils.pm beim Editieren über FHEMWEB

Begonnen von Motivierte linke Hände, 18 Januar 2016, 16:05:21

Vorheriges Thema - Nächstes Thema

Motivierte linke Hände

Hi,

ich habe hier für den Zugriff von außen FHEM über Apache2 laufen, und musste feststellen, dass eigentlich alles nach der Anleitung im Wiki läuft (kleine Änderungen habe ich noch aufgenommen). Ein Problem habe ich allerdings:

Wenn ich in FHEMWEB "Edit Files" und dann "99_myUtils.pm" auswähle, klappt es ohne Proxy. Mit Proxy wird die 99_myUtils.pm in der Mitte irgendwo zerhackt und im Editor kaputt angezeigt. Wenn ich ohne Proxy direkt zugreife, ist alles ok.

Hatte das schonmal jemand?

Danke, Christian
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

der_da

Hi!

Genau das gleiche Problem ist mir auch aufgefallen.

99_myUtils.pm hat beim Editieren (über ReverseProxy) derzeit 61 Zeilen. Hier das letzte Modul, das gerade editiert wurde:

######## Netzwerk Gerät über Fritzbox abfragen V1############
sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($Device, $MAC) = @_;
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my $StatusFritz = ReadingsVal($Device, $MAC, "weg");
  if ($StatusFritz eq "weg") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");
    $Status = 0;
  } elsif ($StatusFritz eq "inactive") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");
    $Status = 0;
  } else {
    # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.
    Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");
    $Status = 1;
  }
  return $Status
}


Speichern -> FHEM sagt "erfolgreich gespeichert".
Datei wieder geöffnet --> nur noch 54 Zeilen und die letzten Zeilen sind zerhackt:
######## Netzwerk Gerät über Fritzbox abfragen V1############
sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($Device, $MAC) = @_;
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my $StatusFritz = ReadingsVal($Device, $MAC, "weg");
  if ($StatusFritz eq "weg") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");
    $Status = 0;
  } elsif ($StatusFritz eq "inactive") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive$StatusFritz<. return ende>
</.>


Gibt es dafür auch eine Lösung? :o

Hollo

Wie ist denn der Proxy konfiguriert, was macht der genau?
Nur ein URL-Rewriting oder auch andere Sachen?

Ich tippe mal auf unterschiedliche Zeichensätze oder sowas...
in Deinem Fall wird ja scheinbar das < irgendwie als Steuerzeichen gedeutet !?
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

der_da

Zitat von: Hollo am 10 Februar 2016, 12:55:36
Wie ist denn der Proxy konfiguriert, was macht der genau?
Nur ein URL-Rewriting oder auch andere Sachen?

Ich tippe mal auf unterschiedliche Zeichensätze oder sowas...
in Deinem Fall wird ja scheinbar das < irgendwie als Steuerzeichen gedeutet !?
Ich benutze den ReverseProxy, um FHEM (nur) über eine SSL-Verbindung mit Nutzernamen und Passwort erreichbar zu machen.
Er macht also neben URL-Rewriting auch noch Single-Sign on und Verschlüsselung.
Also in etwa sowas:
<VirtualHost *:443>
    ProxyPass /fhem http://192.168.178.2:8083/fhem
    ProxyPassReverse /fhem http://192.168.178.2:8083/fhem
</VirtualHost>

Im Router habe ich ein Portforwarding von Port 443 auf den Proxyserver:Port443 eingerichtet.
Über https://meinedomain.de/fhem komme ich dann auf meine FHEM-Webseite.
Es funktioniert auch alles wie gewünscht - bis auf den Effekt mit dem Editor in FHEM.

rudolfkoenig

Ich habe das gerade mit einem Apache/Proxy/Reverseproxy getestet, und hatte keine Probleme die Datei in FHEMWEB zu bearbeiten. Ich habe die Date schrittweise bis 100k vergroessert, dann wurde es mir langweilig.
Auch mit der gezeigten Funktion (checkFritzMACpresent) hatte ich keine Probleme

Icinger

Hab auch seit ca. 2 Jahren die selbe Konstellation laufen und noch nie Probleme gehabt.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

der_da

Hmm,

nachdem das bei anderen offenbar keine Probleme macht, habe ich nun noch ein wenig probiert.
Ich hatte da noch folgendes aktiv:
SetOutputFilter     INFLATE;proxy-html;DEFLATE
Nachdem ich das entfernt hatte konnte ich nach einem Reload des Webservices tatsächlich auch problemlos über den ReverseProxy die Datei editieren. ;D

Danke für's anstupsen! ;)

Motivierte linke Hände

Das Problem ist, dass es hier ohne

SetOutputFilter     INFLATE;proxy-html;DEFLATE

gar nicht funktioniert. Dann bekomme ich beim Aufruf der Seite nur einen Content Encoding Fehler vom Browser. Der Apache sagt dazu:

[Thu Feb 11 13:52:50.526867 2016] [deflate:error] [pid 26979] [client 192.168.3.3:64585] AH01402: Zlib error 1 flushing inflate buffer ((null)), referer: https://www.example.com/fhem

Hm...
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.