FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Phill am 09 Januar 2018, 00:08:11

Titel: [FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: Phill am 09 Januar 2018, 00:08:11
Hier ein kleiner FHEMWEB Mod der ein Textfeld inklusive Autocomplete erzeugt, mit dem das Aufrufen eines Devices erleichtert wird. Klickst du noch?  ;)

In der FHEMWEB Instanz dem Attribut JavaScripts folgedes hinzufügen
pgm2/fhem_details.js
fhem_details.js vom Anhang in Verzeichnis www/pgm2 kopieren
Datei fhem_devdetails.js in Verzeichnis www/pgm2 anlegen und Rechte anpassen.
touch fhem_devdetails.js
chown -R $(stat . -c %u:%g) fhem_*details.js


In der gewünschten FHEMWeb-Instanz das Attribut JavaScripts ergänzen, die Fehlermeldung kann ignoriert werden:
pgm2/fhem_details.js

Das Notify für die Befüllung der Autocomplete-JS-Datei anlegen:
define writeDevices2JS notify global:(DEFINED|RENAMED|DELETED|INITIALIZED).* { {open my $FH, ">", "./www/pgm2/fhem_devdetails.js" or die "Could not open file $!";; print $FH 'var defs=["'.join('","', sort(keys %defs)).'"]';; close $FH } }

Das Notify einmal ausführen lassen:
trigger global DEFINED

Im Browser Cache leeren oder die Seite mit [STRG]+[F5] neu laden und über ein Textfeld erfreuen, mit dem man direkt zu dem eingegebenen Device gelangt.

Wer das ganze in die Kommandozeile integrieren möchte kann sich dieses Script anschauen. link (https://forum.fhem.de/index.php/topic,82442.msg753240.html#msg753240) Danke ThoTo



Wer es nur kurz mal testen will, kann folgendes in der Kommandozeile eingeben.
{$data{FWEXT}{show} = {NAME => "Details:<form><input style='width:97%' name='detail' onmouseover='\$(this).parents(\"a\").removeAttr(\"href\").unbind(\"click\")'></input></form>", LINK=>"/"} }

Um es wieder zu deaktivieren folgendes ausführen.
{$data{FWEXT}{show} = undef}


Gruß

Update: 30.01 Hab mal die select-Funktion wie bei ThoTo reingenommen. Dadurch wird direkt beim auswählen geladen.
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Fixel2012 am 09 Januar 2018, 08:51:42
Hi Phil,

wärst du so nett und Hängst noch ein Foto an und beschreibst, was dein "Hack" vereinfacht?

Habe das ehrlich gesagt so nicht ganz verstanden.

Habe gerade kein Zugriff auf Fhem, um es zu testen.  :)
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: ThoTo am 09 Januar 2018, 09:05:12
Zitat von: Phill am 09 Januar 2018, 00:08:11
Hier ein kleiner HTML Hack. Einfach ausführen und über ein Textfeld erfreuen, mit dem man direkt zu dem eingegebenen Device gelangen kann.

Gibts das auch mit Autocomplete?  8)

LG Thomas
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Phill am 09 Januar 2018, 09:44:51
@Fixel2012: Bild ist da, und vereinfacht oder verkürzt wird der weg zu einer Detailansicht eines Devices. Einfach den Namen in das Textfeld eingeben.

@ThoTo: Das wäre cool. Zumindest tauchen bei mir die bereits eingegebenen im Dropdown auf.
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: RoBra81 am 09 Januar 2018, 10:33:54
Hallo,

ich habe es auch mal probiert, aber irgendwie war es bei mir (aktuelle FHEM-Stand) ein parent() zu wenig...

Ronny
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Phill am 09 Januar 2018, 16:22:05
Komisch? Na dann eben parents("a").
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Fixel2012 am 09 Januar 2018, 16:54:26
Habe es soeben getestet. Ist echt nützlich.

Vorher habe ich immer ein list <GeräteName> und bin dann auf das Gerät gegangen.

So geht es noch schneller, Danke.

Autocomplete wäre echt mega!  ;D
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Esjay am 09 Januar 2018, 19:09:52
Ist wirklich praktisch, wenn man jetzt noch die Breite irgendwie anpassen könnte, wäre es perfekt.

Grüße
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Phill am 09 Januar 2018, 19:57:20
So besser? Oder wie meinst du das?
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Esjay am 09 Januar 2018, 20:15:02
Zitat von: Phill am 09 Januar 2018, 19:57:20
So besser? Oder wie meinst du das?

Perfekt!! Mit style='width:85%'  hat es genau die richtige Größe!
Grüße
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Fixel2012 am 12 Januar 2018, 12:53:05
Mir ist aufgefallen, dass das Feld nach einem Restart wieder weg ist.

Wie kann ich dem entgegen wirken? Auf einen Neustart triggern, ist ja nicht das tollste. Gibt es bessere Lösungen?
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: marvin78 am 12 Januar 2018, 13:01:13
Mach doch ein notify auf GLOBAL:INITIALIZED und führe darin die Funktion aus.
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Fixel2012 am 12 Januar 2018, 14:02:51
Zitat von: marvin78 am 12 Januar 2018, 13:01:13
Mach doch ein notify auf GLOBAL:INITIALIZED und führe darin die Funktion aus.

Dachte, da gibt es eine Bessere Lösung  :) Dann mache ich es so.
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: marvin78 am 12 Januar 2018, 14:04:00
Verstehe nicht, was an der Lösung nicht "toll" ist. Einfach und effizient ist es.
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Benni am 13 Januar 2018, 14:12:59
Danke!
Praktisches Feature!

Kannst es ja Rudi mal zum Einbau in den (FHEMWEB-)Standard vorschlagen (ggf. per Attribut aktivier- und skalierbar).

Er ist ja anscheinend im Moment sowieso dabei an der Oberfläche zu optimieren (https://forum.fhem.de/index.php?topic=82351.0) ;)

gb#
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: FHEMAN am 19 Januar 2018, 14:57:56
Cool, ich bin auch ein großer Fan solcher Improvements :)
Ein wenig stört mich persönlich das weitere Editfeld, dass man die Namen case sensitiv und ausschreiben muss. Da muss man schon viel vom Namen im Kopf haben (hab ich nicht).
Ich behelfe mir mit folgendem CMDALIAS (abgeleitet vom grep Beispiel):

define cmd.dev cmdalias dev .* AS {qx(grep -i \'define.*$EVENT\' *.cfg FHEM/99*.pm)}

Damit bekomme ich im CMD mittels "dev schlaf" bspw. alle Geräte / Defines  mit dem Namen .*[Ss]chlaf.*

Gruß
Ronny
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Benni am 19 Januar 2018, 17:27:48
Zitat von: FHEMAN am 19 Januar 2018, 14:57:56
Damit bekomme ich im CMD mittels "dev schlaf" bspw. alle Geräte / Defines  mit dem Namen .*[Ss]chlaf.*

Im wesentlichen dasselbe bekomme ich doch auch mit einem

list .*[Ss]chlaf.*

Außerdem geht das CMDALIAS direkt auf die Dateien (u.a. fhem.cfg), funktioniert also nicht bei FHEM-Installationen, die stattdessen configDB verwenden.

gb#
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Fixel2012 am 19 Januar 2018, 17:54:01
Zitat von: Benni am 19 Januar 2018, 17:27:48
Im wesentlichen dasselbe bekomme ich doch auch mit einem

list .*[Ss]chlaf.*

Außerdem geht das CMDALIAS direkt auf die Dateien (u.a. fhem.cfg), funktioniert also nicht bei FHEM-Installationen, die stattdessen configDB verwenden.

gb#

Ist allerdings wesentlich mehr Tipp-Arbeit!
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Benni am 19 Januar 2018, 18:06:32
Zitat von: Fixel2012 am 19 Januar 2018, 17:54:01
Ist allerdings wesentlich mehr Tipp-Arbeit!

::)

Mit folgendem cmdalias

define ca_wlist cmdalias wlist .* AS {fhem 'list .*['.toupper(substr($EVENT,0,1)).tolower(substr($EVENT,0,1)).']'.substr($EVENT,1).'.*'}

kannst du das wieder ganz sparsam so aufrufen:


wlist schlaf
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Phill am 19 Januar 2018, 19:44:05
Ich würde es so lösen, dann ist es komplett case insensitiv.
define ca_wlist cmdalias wlist .* AS  {join("\n",grep { /.*$EVENT.*/i } keys %defs)}
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: ThoTo am 19 Januar 2018, 20:13:10
jetzt ist es soweit perfektioniert, dass nur noch auto-complete fehlt  8)
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Phill am 20 Januar 2018, 02:26:07
Also gut, wenns so sehr gewünscht wird. Klick mich. ;) (https://forum.fhem.de/index.php/topic,82442.html)
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: RoBra81 am 20 Januar 2018, 07:25:46
Zitat von: Phill am 20 Januar 2018, 02:26:07
Also gut, wenns so sehr gewünscht wird. Klick mich. ;) (https://forum.fhem.de/index.php/topic,82442.html)
Genial!

Gesendet von meinem SM-G935F mit Tapatalk

Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Fixel2012 am 20 Januar 2018, 17:51:42
Vielen Dank!

Klappt super!
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: FHEMAN am 20 Januar 2018, 18:48:55
Nice!! Danke für die Bereitstellung!

Für die, die es nicht wissen: zum reinen Testen des Features genügt es, den Code in der Console (F12 im Browser drücken) auszuführen.

Und für meinen favorisierten Fall in der Standard Commandbar oben lautet der Code dann

loadScript("pgm2/details.js", function () {
$("input[name=cmd]").autocomplete({source: defs});
});


(Kollidiert dann aber mit meiner Commandbar Historie)

So, wer macht noch das Schleifchen und das Dropdowngedöhns schick?
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Amenophis86 am 20 Januar 2018, 19:02:51
Mal ne Frage, die cmdalias waren aber nur für die normale commandzeile und nicht für den HACK, oder?
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Benni am 20 Januar 2018, 21:22:19
Zitat von: Amenophis86 am 20 Januar 2018, 19:02:51
Mal ne Frage, die cmdalias waren aber nur für die normale commandzeile und nicht für den HACK, oder?

Ja, wie das mit den cmdalias eben so ist ;)
Titel: Antw:[FHEMWEB HACK] Textfeld für Detailseitenaufruf!
Beitrag von: Amenophis86 am 20 Januar 2018, 21:33:03
ok, hab mich schon gewundert, wie das gehen soll :D
Titel: Antw:[FHEMWEB Addon] Textfeld für direkten Device aufruf!
Beitrag von: ThoTo am 21 Januar 2018, 16:58:08
Anbei eine abgewandelte Version, die sich an die FHEM Kommandozeile hängt, Vorschläge werden ab dem 3. eingegebenen Zeichen angezeigt und müssen dann durch Click ausgewählt werden.
Das Notify berücksichtigt Aktionen der folgenden Typen: define, delete, rename, initialize (beim Start)

Die angehängte Datei fhem_details.js nach www/pgm2/ kopieren.
Im Verzeichnis www/pgm2/ zusätzlich eine fhem_devdetails.js anlegen und die Rechte für beide Dateien richtig setzen:
touch fhem_devdetails.js
chown -R $(stat . -c %u:%g) fhem_*details.js


In der gewünschten FHEMWeb-Instanz das Attribut JavaScripts ergänzen, die Fehlermeldung kann ignoriert werden:
pgm2/fhem_details.js

Das Notify für die Befüllung der Autocomplete-JS-Datei anlegen:
define writeDevices2JS notify global:(DEFINED|RENAMED|DELETED|INITIALIZED).*(?<!_timer)$ { {open my $FH, ">", "./www/pgm2/fhem_devdetails.js" or die "Could not open file $!"; print $FH 'var defs=["'.join('","', sort(keys %defs)).'"]'; close $FH } }

Das Notify einmal ausführen lassen:
trigger global DEFINED

Im Browser Cache leeren oder die Seite mit [STRG]+[F5] neu laden und in der Kommandozeile beginnen einen Devicenamen zu tippen  8) ;D


LG Thomas
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: Phill am 21 Januar 2018, 20:23:27
Find ich gut, allerdings habe ich mich an das zusätzliche Textfeld gewöhnt, und ich will auch nicht erst die Auswahl treffen müssen.

Ich habe mal deine Anleitung übernommen, und 2 kleine Änderungen vorgenommen.
1. Dem notify ein "sort" spendiert. Dadurch ist die Liste Alphabetisch sortiert.
2. Der focus wird beim Laden direkt auf das Textfeld gesetzt.

Gruß
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: FHEMAN am 21 Januar 2018, 22:29:13
Könnte man es so erweitern, dass Autocomplete nur in Verbindung mit "list " losfeuert? List wäre ja ein ganz guter Indikator, dass man gerade ein Device sucht.
Titel: Antw:[FHEMWEB Addon] Textfeld für direkten Device aufruf!
Beitrag von: RoBra81 am 23 Januar 2018, 12:21:33
Zitat von: ThoTo am 21 Januar 2018, 16:58:08
Anbei eine abgewandelte Version, die sich an die FHEM Kommandozeile hängt, Vorschläge werden ab dem 3. eingegebenen Zeichen angezeigt und müssen dann durch Click ausgewählt werden.
Das Notify berücksichtigt Aktionen der folgenden Typen: define, delete, rename, initialize (beim Start)

Die angehängte Datei fhem_details.js nach www/pgm2/ kopieren.
Im Verzeichnis www/pgm2/ zusätzlich eine fhem_devdetails.js anlegen und die Rechte für beide Dateien richtig setzen:
touch fhem_devdetails.js
chown -R $(stat . -c %u:%g) fhem_*details.js


In der gewünschten FHEMWeb-Instanz das Attribut JavaScripts ergänzen, die Fehlermeldung kann ignoriert werden:
pgm2/fhem_details.js

Das Notify für die Befüllung der Autocomplete-JS-Datei anlegen:
define writeDevices2JS notify global:(DEFINED|RENAMED|DELETED|INITIALIZED).* { {open my $FH, ">", "./www/pgm2/fhem_devdetails.js" or die "Could not open file $!";;;; print $FH 'var defs=["'.join('","', keys %defs).'"]';;;; close $FH;;;;} }

Das Notify einmal ausführen lassen:
trigger global DEFINED

Im Browser Cache leeren oder die Seite mit [STRG]+[F5] neu laden und in der Kommandozeile beginnen einen Devicenamen zu tippen  8) ;D


LG Thomas

Die Funktion ist echt praktisch, aber leider funktioniert dadurch die History des Textfeldes im Browser nicht mehr - gibt's da eine Möglichkeit, dass die trotzdem funktioniert?

Ronny
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: Phill am 23 Januar 2018, 12:35:59
Ja nimm meine Methode aus dem ersten Beitrag.  :D
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: KernSani am 29 Januar 2018, 21:06:42
Ich finde die Funktion klasse, mich hat nur ein bisschen gestört, dass writeDevices2JS ein bisschen zu häufig triggert (nämlich bei jedem "at" oder "on-till-timer" o.ä.), daher habe ich das notify leicht abgewandelt:

global:(DEFINED|RENAMED|DELETED|INITIALIZED).*(?<!_timer)$ { {open my $FH, ">", "./www/pgm2/fhem_devdetails.js" or die "Could not open file $!"; print $FH 'var defs=["'.join('","', sort(keys %defs)).'"]'; close $FH } }
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: ThoTo am 31 Januar 2018, 20:12:22
Zitat von: KernSani am 29 Januar 2018, 21:06:42
Ich finde die Funktion klasse, mich hat nur ein bisschen gestört, dass writeDevices2JS ein bisschen zu häufig triggert (nämlich bei jedem "at" oder "on-till-timer" o.ä.), daher habe ich das notify leicht abgewandelt:

Danke für den Hinweis, habe mein ursprüngliches Posting angepasst.

LG Thomas
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: Phill am 31 Januar 2018, 23:23:30
Aber ist das nicht nur Relevant, wenn man seine at's und Co mit "_timer" am Schluss anlegt?
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: KernSani am 01 Februar 2018, 06:06:38
Zitat von: Phill am 31 Januar 2018, 23:23:30
Aber ist das nicht nur Relevant, wenn man seine at's und Co mit "_timer" am Schluss anlegt?
Von FHEM erzeugte temporäre ATs (z.B. on-till... bei Geräten die das nicht selbst können - Baumarktsteckdosen) werden mit _timer angelegt.


Kurz, weil mobil...
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: Amenophis86 am 11 März 2018, 12:26:55
Zitat von: KernSani am 29 Januar 2018, 21:06:42
Ich finde die Funktion klasse, mich hat nur ein bisschen gestört, dass writeDevices2JS ein bisschen zu häufig triggert (nämlich bei jedem "at" oder "on-till-timer" o.ä.), daher habe ich das notify leicht abgewandelt:

global:(DEFINED|RENAMED|DELETED|INITIALIZED).*(?<!_timer)$ { {open my $FH, ">", "./www/pgm2/fhem_devdetails.js" or die "Could not open file $!"; print $FH 'var defs=["'.join('","', sort(keys %defs)).'"]'; close $FH } }

Kannst du mir sagen, wie ich den Perl Teil ändere, damit nicht ständig eine Meldung im Log erscheint? Ich habe zwei Funktionen, welche ziemlich viele Temp-Ats anlegen und ständig Meldungen im Log dadurch.
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: ThoTo am 11 März 2018, 15:16:37
Zitat von: Amenophis86 am 11 März 2018, 12:26:55
Kannst du mir sagen, wie ich den Perl Teil ändere, damit nicht ständig eine Meldung im Log erscheint? Ich habe zwei Funktionen, welche ziemlich viele Temp-Ats anlegen und ständig Meldungen im Log dadurch.

Mit verbose 0 wird die Ausgabe unterdrückt, falls du das meinst:
attr writeDevices2JS verbose 0

LG Thomas
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: Amenophis86 am 11 März 2018, 16:26:39
Oh man, es kann so einfach sein :D Sry stand aufm Schlauch. Dank dir.
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: TomLee am 24 Mai 2018, 12:44:06
Hallo,

mit dem Hack (aus dem ersten Post) verhält sich je nach verwendetem Style die Menü-Leiste anders. s. Bilder im Anhang.
Mein Standard-Style ist f18, kann mir jemand sagen was ich wo ändern muss, das das Menü nicht in die "Hauptseite" reinragt.

Gruß

Thomas
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: TomLee am 26 Mai 2018, 14:26:48
Hat sich erledigt hab mich für die mMn komfortablere Variante (https://forum.fhem.de/index.php/topic,82442.msg753240.html#msg753240) entschieden.
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: Benni am 16 Februar 2019, 10:27:16
Das hat sich inzwischen anscheinend erledigt, da direkt als FHEM-Befehl verfügbar:

Zitat von: rudolfkoenig am 13 Februar 2019, 08:09:07
Side-Note: da es nirgendwo dokumentiert, und was aehnliches tut:l <devicename>(das ist ein kleines L) oben in der FHEMWEB Kommandozeile ruft die Detailansicht von <devicename>" auf.
Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: RoBra81 am 16 Februar 2019, 11:48:46
Wobei diese Lösung hier den entscheidenden Vorteil des (nicht case-sensitiven) Autocomplete hat!

Gesendet von meinem LYA-L29 mit Tapatalk

Titel: Antw:[FHEMWEB Mod] Textfeld für direkten Device aufruf!
Beitrag von: hmtec99 am 02 Januar 2020, 14:29:55
Wäre das nicht was um es standardmäßig in Fhem zu integrieren?

Gerade für Anfänger (und nicht nur die) eine tolle Sache.

Daumen hoch.

Habe die Zeichenzahl für Autocomplete übrigens auf 2 reduziert, damit es auf meine Umgebung matcht (z.B. wdXYZ oder atXYZ).

Was muß man ändern damit alle Ergebnisse alphabetisch sortiert werden?