Abschalten der Device Replace Automatik

Begonnen von Loredo, 11 März 2019, 10:08:02

Vorheriges Thema - Nächstes Thema

Loredo

Ich habe jetzt eine ganze Weile gesucht, aber ich finde nichts darüber, wie man FHEMWEB abgewöhnen kann in der Ausgabe von Get/Set Befehlen nach Devicenamen zu suchen und diese zu verlinken.


Gibt es diese Möglichkeit schon und wie geht das? ;-)




Danke & Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

betateilchen

Sieht nicht so aus, als könne man das derzeit abschalten...


    } else {             # "linkify" output (e.g. for list)
      $FW_cmdret = FW_addLinks(FW_htmlEscape($FW_cmdret));
      $FW_cmdret =~ s/:\S+//g if($FW_cmdret =~ m/unknown.*choose one of/i);
      $FW_cmdret = "<pre>$FW_cmdret</pre>" if($FW_cmdret =~ m/\n/);
    }

...

sub
FW_addLinks($)
{
  my ($txt) = @_;
  return undef if(!defined($txt));
  $txt =~ s,\b([a-z0-9._]+)\b,
            $defs{$1} ? "<a href='$FW_ME$FW_subdir?detail=$1'>$1</a>" : $1,gei;
  return $txt;
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loredo

#2
Danke dir! Ich habs wirklich nicht gefunden


Die betreffende Codestelle in FHEMWEB ist wohl die andere:


  #If we are in XHR or json mode, execute the command directly
  if($FW_XHR || $FW_jsonp) {
    $FW_cmdret = $docmd ? FW_fC($cmd, $cmddev) : undef;
    $FW_RETTYPE = $FW_chash->{contenttype} ?
        $FW_chash->{contenttype} : "text/plain; charset=$FW_encoding";
    delete($FW_chash->{contenttype});

    if($FW_jsonp) {
      $FW_cmdret =~ s/'/\\'/g;
      # Escape newlines in JavaScript string
      $FW_cmdret =~ s/\n/\\\n/g;
      FW_pO "$FW_jsonp('$FW_cmdret');";

    } else {
      $FW_cmdret = FW_addLinks($FW_cmdret) if($FW_webArgs{addLinks});
      FW_pO $FW_cmdret;

    }
    return 0;
  }


Dort wird <html></html> weder berücksichtigt noch entfernt. Soll das tatsächlich so sein?
Angehängter Patch würde das beheben. Wäre das was?


Trotzdem begegnet mir auch wieder, dass sich der get/set Button in der Detailansicht unterschiedlich zum get Textbefehl verhält. Wenn ich den get Button benutze, dann funktioniert alles wie es soll. Wenn ich aber get als Textkommando eingebe, dann ist im sich öffnenden Popup Window immer das allererste HTML Kommando als Text dargestellt, also nicht vom Browser gerendert. Alle folgenden Tags werden rerendert, aber die Anzeige ist natürlich trotzdem falsch, wenn der nicht gerenderte, erste Tag ein Tabellenanfang war...  :(
Kann dabei noch jemand helfen?
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Kann das jemand nachvollziehen?


@Rudi, hattest du Gelegenheit über die geänderten Zeilen in FHEMWEB zu philosophieren? ;-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Ich habe damit noch nicht angefangen, weil ich nur eine Loesung fuer ein grob beschriebenes Problem, was ich nicht wirklich verstanden habe, gesehen habe. Wenn ich etwas machen soll, dann brauche ich ein HOWTO fuers Nachstellen des Problems.

Loredo

Ok, das nachzustellen ist ganz einfach:

1. FHEM Demo starten
2. define fhemInstaller Installer
3. auf der Detailseite des Devices fhemInstaller auf "get showModuleInfo FHEM" klicken.
4. Die Links unter "Wiki" und "Command Reference" haben beide am Ende den Modulnamen "global" stehen, welcher aber dann durch den HTML Anker ersetzt wird. Dadurch sind die beiden <a></a> Anweisungen ineinander verschachtelt und es wird nicht auf die richtige externe Seite verlinkt (z.B. https://wiki.fhem.de/wiki/%3Ca%20href='/fhem?detail=global%27%3Eglobal%3C/a%3E anstatt https://wiki.fhem.de/wiki/global)
5. Den gleichen Aufruf 'get fhemInstaller showModuleInfo FHEM' nun über die Texteingabezeile oben eingeben. Das Ergebnis ist, dass hier oben <html> als Text mit angezeigt wird.
6. Nun den Patch für FHEMWEB aus diesem Post anwenden. Das Verhalten aus Punkt 4 ist damit korrigiert. Gleichzeitig bleibt das Verhalten aus Punkt 5 dennoch erhalten, jedoch wird statt <html> nun <table> als Klartext angezeigt und die Formatierung der Seite ist nicht mehr korrekt.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Zitat3. auf der Detailseite des Devices fhemInstaller auf "get showModuleInfo FHEM" klicken.
Bitte meine Emailadresse umgehend entfernen.
Ich weiss auch nicht, ob der Link auf dem Verein "rechtens" ist, abgestimmt ist es jedenfalls nicht.
Die Privacy Erklaerung ist fraglich: auf der verlinkten Seite geht es um die fhem.de Seiten, und nicht um FHEM als Software.
Und ob man diese Version von fhem.pl als "stable" bezeichnen kann, muss auch noch nachgewiesen werden.


Zitat5. Den gleichen Aufruf 'get fhemInstaller showModuleInfo FHEM' nun über die Texteingabezeile oben eingeben. Das Ergebnis ist, dass hier oben <html> als Text mit angezeigt wird.
html sollte die Funktion nur dann zurueckliefern, wenn sie sicher ist, dass die Ausgabe im Browser landet.
Das kriegt man ueber $hash->{CL} raus, was fuer SetFn, GetFn, etc auf die Quell-Instanz des Befehls gesetzt ist.

Zitat6. Nun den Patch für FHEMWEB aus diesem Post anwenden.
Der Haken mit dem Patch ist, dass er nicht rueckwaertskompatibel ist, und ich weiss nicht, ob jetzt schon Module gibt, die sich darauf verlassen, dass trotz <html> FHEMWEB die Geraete verlinkt.
Eine rueckwaertskompatible Alternative (mit anderen Nachteilen) ist, $FW_webArgs{addLinks} zu entfernen, wenn man sicher ist, dass man diese Behandlung nicht haben will.
Nach etwas Gruebeln bin ich fuer diese Alternative, bin aber fuer Argumente offen.

rudolfkoenig

Zitat5. Den gleichen Aufruf 'get fhemInstaller showModuleInfo FHEM' nun über die Texteingabezeile oben eingeben. Das Ergebnis ist, dass hier oben <html> als Text mit angezeigt wird.

Sorry, das habe ich nicht aufmerksam gelesen.
War ein Bug in fhemweb.js, was mehrzeilige <html> nicht erkannt hat, und sie deswege in <pre> gepackt hat, was wiederum <html> Tags nicht ignoriert, sondern anzeigt.
Das habe ich jetzt gefixt.

Loredo

Zitat von: rudolfkoenig am 14 März 2019, 13:59:03
Bitte meine Emailadresse umgehend entfernen.

Ich habe dir dazu hier geantwortet:

Zitat von: rudolfkoenig am 14 März 2019, 13:59:03
html sollte die Funktion nur dann zurueckliefern, wenn sie sicher ist, dass die Ausgabe im Browser landet.
Das kriegt man ueber $hash->{CL} raus, was fuer SetFn, GetFn, etc auf die Quell-Instanz des Befehls gesetzt ist.

Danke, das mache ich auch schon so.

Zitat von: rudolfkoenig am 14 März 2019, 13:59:03
Der Haken mit dem Patch ist, dass er nicht rueckwaertskompatibel ist, und ich weiss nicht, ob jetzt schon Module gibt, die sich darauf verlassen, dass trotz <html> FHEMWEB die Geraete verlinkt.
Eine rueckwaertskompatible Alternative (mit anderen Nachteilen) ist, $FW_webArgs{addLinks} zu entfernen, wenn man sicher ist, dass man diese Behandlung nicht haben will.
Nach etwas Gruebeln bin ich fuer diese Alternative, bin aber fuer Argumente offen.

Wie entferne ich denn $FW_webArgs{addLinks}? Oder meinst du, dass du das aus FHEMWEB entfernen würdest? Ich verstehe dann nicht ganz den Unterschied zum vorgeschlagenen Patch?


Zitat von: rudolfkoenig am 14 März 2019, 14:12:49Sorry, das habe ich nicht aufmerksam gelesen.War ein Bug in fhemweb.js, was mehrzeilige <html> nicht erkannt hat, und sie deswege in <pre> gepackt hat, was wiederum <html> Tags nicht ignoriert, sondern anzeigt.Das habe ich jetzt gefixt.


Super gut, danke!  :)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

ZitatWie entferne ich denn $FW_webArgs{addLinks}?
delete($FW_webArgs{addLinks});
ZitatIch verstehe dann nicht ganz den Unterschied zum vorgeschlagenen Patch?
Dein Patch bewirkt, dass bei <html> Ausgaben existierender Module keine Links eingebaut werden. Wenn ich das einbaue, dann habe ich vermutlich uebermorgen die Beschwerden diverser Anweder am Hals.
Wenn Du addLinks in deinem Modul selbst entfernst, dann sollte kein Anwender einen Grund fuer eine Beschwerde haben.

Loredo

Zitat von: rudolfkoenig am 14 März 2019, 17:09:18
Wenn Du addLinks in deinem Modul selbst entfernst, dann sollte kein Anwender einen Grund fuer eine Beschwerde haben.


Vielen Dank, dann mache ich das so. Hatte übersehen ob FW_webArgs ein globaler Hash ist.


Zitat von: rudolfkoenig am 14 März 2019, 14:12:49
War ein Bug in fhemweb.js, was mehrzeilige <html> nicht erkannt hat, und sie deswege in <pre> gepackt hat, was wiederum <html> Tags nicht ignoriert, sondern anzeigt.
Das habe ich jetzt gefixt.


Jetzt scheint die Ausgabe jedoch auf eine andere Weise unterschiedlich. Beim anklicken des Buttons wird mit <pre></pre> gearbeitet, bei der Javascript Variante jedoch nicht. Ich bin nicht sicher, welche Variante mir besser gefällt, aber es sollte wenn möglich zumindest konsistent sein. Könntest du da bei Gelegenheit bitte nochmals nachsehen?
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

ZitatJetzt scheint die Ausgabe jedoch auf eine andere Weise unterschiedlich. Beim anklicken des Buttons wird mit <pre></pre> gearbeitet, bei der Javascript Variante jedoch nicht.
Danke fuer den Hinweis, das Problem kam nicht mit dem vorherigen Fix rein, das war schon frueher so.
Ist aber mAn ein Fehler (wer <html> schreibt, der soll bei Bedarf <pre> hinzufuegen), und ich habe es gefixt: beim <html> wird kein <pre> eingebaut. Hoffentlich gibt es keine unbebsichtigte Nebenwirkungen.

Loredo

Klasse, danke! Ich hätte nämlich nicht gewusst, wie ich zwischen den beiden Aufrufen hätte unterscheiden sollen, um einmal <pre></pre> noch hinzuzufügen und einmal nicht :-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Einen hab ich noch (sorry!  :-[ )


Die Änderungen an fhemweb.js werden scheinbar erst wirksam, wenn ich den Browser Cache leere. Ist das so gewollt und hätte ich nur warten müssen?
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Die FHEMWEB Cache-Timeouts sind 15 Minuten, Zeile 2129 in 01_FHEMWEB.pm: "Expires: ".FmtDateTimeRFC1123($now+900)