Autor Thema: [gelöst] Hilfe bei getFN - funktion bzw. deren Darstellung  (Gelesen 1442 mal)

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Hi zusammen,

ich habe mal einen Frage zur darstellung bei Aufruf der getFN funktion.

Ich habe in einem Modul bzw dessen Webansicht einen Button der die Get funktion aufruft , wenn ich diesen benutze , wird die Funktion zwar korrekt aufgerufen, aber es erfolgt ein Reload der Seite und es wird nur die erwartete Antwort dargestellt.

wenn ich den gleichen Befehl , der dem Button hinterlegt ist im webcmd eingebe erfolgt die Darstellung des Ergebnisses ohne das er die komplette Seite nachlädt im .. ich denke ... Inline-Popup.

ich würde gerne erreichen, das bei Nutzung des Buttons das Ergebniss ebenso in diesem Inline-Popup dargestelt wird ohne erneutes laden der Seite , werde aber leider nicht fündig wie ich das bezwecke. Gibt es hier ein entsprechenden Parameter , der mitgegeben werden muss , oder wie muss ich das lösen .


EDIT: bzw. muss die Frage wohl sein, wie ich bereits vorhandene Scriptfunktion für Get aus einem externen Script aufrufen kann/muss, um dieses zu bezwecken ( hoffe ich ) .

Danke und sorry, .... aber bin hier mit wiki, forum etc nicht weitergekommen.

Gruss Byte09
« Letzte Änderung: 11 Januar 2018, 13:08:27 von Byte09 »
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15237
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #1 am: 25 Dezember 2017, 10:31:21 »
my $ret = '<html><table width=100%><tr><td>';
        $ret .= '<table class="block wide">';
       
        foreach my $logs (@{$decode_json}) {
            $ret .= '<tr class="odd">';
           
            if($logs->{timestamp}) {
                $ret .= "<td><b>timestamp:</b> </td>";
                $ret .= "<td>$logs->{timestamp}</td>";
                $ret .= '<td> </td>';
            }
           
            if($logs->{type}) {
                $ret .= "<td><b>type:</b> </td>";
                $ret .= "<td>$logs->{type}</td>";
                $ret .= '<td> </td>';
            }
           
            foreach my $d (reverse sort keys %{$logs}) {
                next if( $d eq "type" );
                next if( $d eq "timestamp" );
               
                $ret .= "<td><b>$d:</b> </td>";
                $ret .= "<td>$logs->{$d}</td>";
                $ret .= '<td> </td>';
            }
           
            $ret .= '</tr>';
        }
   
        $ret .= '</table></td></tr>';
        $ret .= '</table></html>';
     
        return $ret;
[code]

Du musst einfach nur etwas in HTML zusammenbauen und das dann als return auf Deinen Aufruf zurück geben.
Das ist der leichte Teil. Sollte Dein get blockierend sein ist es etwas schwieriger  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #2 am: 25 Dezember 2017, 10:45:14 »
Hi Cooltux,

danke erstmal.

ich glaube ich habe mich falsch ausgedrückt . wie ich den inhalt der ausgabe generiere ist klar, es geht um die Art der Darstellung ( somit wohl letztendlich um die fhemweb.js ) mit der ich nicht klarkomme.

ich muss den get - aufruf aus einem eigenen script starten . geht soweit und ich bekomme auch die gewünschte rückgabe , aber auf einer neu geladenen seite, nicht mehr die Seite "?detail=$Name" , sondern eine leere Seite mit dem Ergebniss der Abfrage.

rufe ich get über die webcmd auf, bekomme ich die gleiche rückgabe, aber im Inline-Popup.

daher ist die Frage , wie ich aus einem eigenen script , die funktion "get XXX XXX" aufrufen kann, und das ergebniss in eben diesem Popup dargestellt wird .  ich glaube , ich müsste eine entsprechende function der fhemweb.ks mit eigenen Parametern ( get XXX $arg ) aufgrufen um das zu bezwecken ? , finde aber dazu irgendwie keine Dokumentation bzw. tue mich sehr schwer mit der vorhandenen Doku zur fhemweb.js.

gruss Byte09
« Letzte Änderung: 25 Dezember 2017, 10:53:28 von Byte09 »
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15237
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #3 am: 25 Dezember 2017, 11:49:20 »
Hi Cooltux,

danke erstmal.

ich glaube ich habe mich falsch ausgedrückt . wie ich den inhalt der ausgabe generiere ist klar, es geht um die Art der Darstellung ( somit wohl letztendlich um die fhemweb.js ) mit der ich nicht klarkomme.

ich muss den get - aufruf aus einem eigenen script starten . geht soweit und ich bekomme auch die gewünschte rückgabe , aber auf einer neu geladenen seite, nicht mehr die Seite "?detail=$Name" , sondern eine leere Seite mit dem Ergebniss der Abfrage.

rufe ich get über die webcmd auf, bekomme ich die gleiche rückgabe, aber im Inline-Popup.

daher ist die Frage , wie ich aus einem eigenen script , die funktion "get XXX XXX" aufrufen kann, und das ergebniss in eben diesem Popup dargestellt wird .  ich glaube , ich müsste eine entsprechende function der fhemweb.ks mit eigenen Parametern ( get XXX $arg ) aufgrufen um das zu bezwecken ? , finde aber dazu irgendwie keine Dokumentation bzw. tue mich sehr schwer mit der vorhandenen Doku zur fhemweb.js.

gruss Byte09

Ah jetzt verstehe ich. Du hast ein Skript was ein CommandGet() auf ruft und das Ergebnis soll in ein Pop-up. Sowas habe ich bisher noch nie gebraucht, da müssen wir mal bitte auf Wissende warten  :)


Grüße
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #4 am: 25 Dezember 2017, 12:04:45 »
Ah jetzt verstehe ich. Du hast ein Skript was ein CommandGet() auf ruft und das Ergebnis soll in ein Pop-up. Sowas habe ich bisher noch nie gebraucht, da müssen wir mal bitte auf Wissende warten  :)


Grüße
Leon

das trifft es auf den Punkt  ;). Ich danke dir trotzdem.

gruss Byte09
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2700
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #5 am: 25 Dezember 2017, 13:34:36 »
Hallo zusammen,

sowas geht ganz prima mit asyncOutput (siehe Wiki DevelopmentModuleAPI).
Rudi hatte mich unlängst darauf aufmerksam gemacht und ich setze es in meinem 49_SSCam ein.
Klappt prima sowohl mit get als auch mit set.

LG,
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, Dashboard (interims)
aktive Mitarbeit:SMAEM, SMAInverter
Für eine Überraschung/Unterstützung: https://www.paypal.me/HMaaz

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #6 am: 25 Dezember 2017, 13:44:30 »
Hallo zusammen,

sowas geht ganz prima mit asyncOutput (siehe Wiki DevelopmentModuleAPI).
Rudi hatte mich unlängst darauf aufmerksam gemacht und ich setze es in meinem 49_SSCam ein.
Klappt prima sowohl mit get als auch mit set.

LG,
Heiko
Super,  schaue ich mir nachher mal , wenn die Bude wieder leer ist.

Danke und Gruss Byte99

Gesendet von meinem SM-G900F mit Tapatalk

Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15237
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #7 am: 25 Dezember 2017, 14:59:21 »
Hallo zusammen,

sowas geht ganz prima mit asyncOutput (siehe Wiki DevelopmentModuleAPI).
Rudi hatte mich unlängst darauf aufmerksam gemacht und ich setze es in meinem 49_SSCam ein.
Klappt prima sowohl mit get als auch mit set.

LG,
Heiko

Dazu muss das Ausgabemittel aber AsyncOutput unterstützen. Also FHEMWEB oder Telnet zum jetzigen Zeitpunkt.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #8 am: 25 Dezember 2017, 19:04:24 »
Hallo zusammen,

sowas geht ganz prima mit asyncOutput (siehe Wiki DevelopmentModuleAPI).
Rudi hatte mich unlängst darauf aufmerksam gemacht und ich setze es in meinem 49_SSCam ein.
Klappt prima sowohl mit get als auch mit set.

LG,
Heiko

Ich habe mir das eben mal angeschaut und probiert. Grundsätzlich geht es und ich bekomme die daten angezeigt - aber mit selber Problematik - ich löse mit der get abfrage schon ein reload der seite aus und genau dass will ich vermeiden ( was ja offensichtlich möglich ist , da der reload nicht erfolgt, wenn ich das get über die  über das Webcmd auslöse oder das SELECT auslöse ) .

die frage reduziert sich also darauf, wie ich aus einem eigenen script , ein "get NAME ARG" auslösen kann, ohne gleichzeitig ein reload der Seite auszulösen.


 (Hintergrund: ich habe zum Zeitpunkt der Get Abfrage noch ungespeicherte Daten in einem Textfeld , die erhalten bleiben sollen, was sie bei einem Reload natürlich nicht tuen. )
Gruss Byte09
« Letzte Änderung: 25 Dezember 2017, 19:06:45 von Byte09 »
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 18827
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #9 am: 25 Dezember 2017, 19:18:03 »
Zitat
die frage reduziert sich also darauf, wie ich aus einem eigenen script , ein "get NAME ARG" auslösen kann, ohne gleichzeitig ein reload der Seite auszulösen.
Indem du das get mit FW_cmd (oder Vergleichbares) an FHEM sendest, siehe fhemweb.js. Also sowas wie

FW_cmd(FW_root+"?"+encodeURIComponent(cmd)+"&XHR=1", function(resp){
  FW_okDialog(resp);
});

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #10 am: 25 Dezember 2017, 20:32:08 »
Indem du das get mit FW_cmd (oder Vergleichbares) an FHEM sendest, siehe fhemweb.js. Also sowas wie

FW_cmd(FW_root+"?"+encodeURIComponent(cmd)+"&XHR=1", function(resp){
  FW_okDialog(resp);
});


erstmal danke, ich bekomme es aber nicht ans laufen .
Gibt es denn irgendwo eine Doku über die fhemweb.js , in der entsprechende Funktionen und deren Aufrufe ( parameter etc. ) beschrieben sind , und ich stelle mich nur zu dusselig an, sie zu finden ?

im Augenblick muss ich ja raten und / oder probieren  wie die Variablen cmd, resp etc. belegt sein müssen .
resp = Text in dem Popup
cmd = comand ( get NAME ARG ) ... ist das richtig ?

Aufruf erfolgt testweise also einfach so :
cmd ='get Test test';
//resp='resp';
//alert(encodeURIComponent(cmd));
FW_cmd(FW_root+'?'+encodeURIComponent(cmd)+'&XHR=1', function(resp){FW_okDialog(resp);});

wenn ich entsprechend aufrufe, bekomme ich ein leere Popup zurück , sehe aber schon im LOG, das irgendwas so wohl nicht stimmt , da die GetFN zwar aufggerufen wird, aber keine argumente übergeben werden , ausser modulname und hash .

2017.12.25 20:26:25 1: Test_get in: hash -> HASH(0x192f848), name -> Test, opt ->?, ARGS ->  L:121
wie muss denn die rückgabe aus der getFN sein , im augenblick beende ich Sie mit ' return "text"; ',  bekomme aber , wie gesagt , ein leeres Popup.

Gruss Byte09

Ich habe jetzt erstmal eine Möglichkeit gefunden, wenn auch wirklich hässlich irgendwie, indem ich das ganze als formular an entsprechende funktion weitergebe, an die auch daten der cmd-line weitergegeben werden. Funktioniert soweit - ist aber eher nicht so toll .

Nichtsdestotrotz würde ich die fhemweb.js aufrufe ja ganz gerne mal verstehen und würde mich freuen , wenn sich nochmal jemand entsprechende Zeit nimmt.
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:[gelöst] Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #11 am: 25 Dezember 2017, 22:09:52 »
ich habe die dokumentation gefunden und es funktioniert nun .

danke für die Hilfe , Gruss Byte09
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #12 am: 11 Januar 2018, 11:56:06 »
hi,

ich muss den thread leider nochmal hochholen.

jetzt habe ich ein Problem mit 'FW_okDialog'.
Bei schliessen des Fensters mit OK , möchte ich gerne ein eigenes Script ausführen . Laut https://wiki.fhem.de/wiki/DevelopmentFHEMWEB-API#FW_okDialog soll dieses ja auch möglich sein , wobei ich glaube, das im wiki was durcheinander geht. Das dritte Parameter bei der Übergabe ist hier 'removeFn' . In der Parameterbeschreibung taucht nur 'returnFn' auf, und im Beispiel ' FW_okDialog('Hello world!',10000); ' taucht hier ein numerischer wert auf, der in der Parameterbeschreibung gar nicht da ist ,sondern bei 'FW_errmsg' als timeout auftaucht. Oder habe ich hier nur ein Verständnissproblem ?

Wie dem auch sei , ich bekomme es nicht geregelt, eine Funktion bei schliessen des Fensters aufzurufen . egal was ich als 3. parameter übergebe - ich erhalte immer folgende Fehlermeldung : 'TypeError: removeFn is not a function'

Kann mir hier bitte mal jemand auf die sprünge helfen, wie ich eine eigene Funktion ( z.B. funtion test() ) aufrufe ? , bzw. was ich hier als drittes Parameter übergeben muss ?

Danke und Gruss Byte09
« Letzte Änderung: 11 Januar 2018, 12:03:29 von Byte09 »
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 18827
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #13 am: 11 Januar 2018, 12:45:07 »
Die Parameter sind
- text (wird dargestellt)
- parent (wird rechts daneben dargestellt, siehe Save config Fragezeichen)
- removeFn (wird aufgerufen, falls das Fenster geschlossen wird).

Warum schaust du nicht die Implementierung oder die Aufrufe in fhemweb.js an?
Denk dran: FHEM ist OpenSource.

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #14 am: 11 Januar 2018, 13:08:09 »
danke,

ich denke ein Fehler in dem Wiki hat mich hier auf eine falsche fährte geschickt .

gruss Byte09
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:[gelöst] Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #15 am: 11 Januar 2018, 15:49:23 »
auch wenn ich mich kaum noch zu fragen traue,  - nach dem obigen dezenten hinweis -,  ich habe noch immer probleme mit dem Popup. Habe versucht mich - auch in der fhemweb.js - durchzuwühlen, aber javascript ist echt nicht meine Welt und ich tue mich da wirklich schwer.

es geht um die Positionierung des Fensters. Wenn ich das Fenster öffne , wird es mit der linken oberen Ecke in der Mitte des Fensters (siehe Bild )  geöffnet, ich hätte aber gerne , das es am oberen Rand geöffnet wird, damit es unten nicht über den Bildschirm hinausragt .Ist das mit den gegebenen Möglichkeiten zu beeinflussen ?  ich habe diesen teil : 'Ein Objekt zur Verankerung des Popup-Fensters, default ist das body-Element. Eine FHEM-Widget-Schnittstelle wird interpretiert' im Wiki zwar gesehen , bringt mich aber leider nicht weiter.

Gruss Byte09



Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 18827
Antw:[gelöst] Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #16 am: 11 Januar 2018, 22:19:34 »
Wenn ich get / asyncOuput / FW_okDialog mit einem grossen Text aufrufe, dann wird es automatisch zentriert, siehe Anhang.
Ich gehe davon aus, dass du nachtraeglich Daten zum Dialog hinzufuegst (nein, okDialog ist nicht dafuer gebaut), und in diesem Fall muss du fuer die nachtraegliche Zentrierung sorgen. Dafuer gibt es etliche Beispiele auf dem Netz: FW_okDialog ist ein normales jQuery-UI Dialog, erreichbar ueber $("#
FW_okDialog").

Du kannst FW_okDialog auch positionieren mit dem parent Attribut, wie vorhin beschrieben.

Online Byte09

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 691
Antw:[gelöst] Hilfe bei getFN - funktion bzw. deren Darstellung
« Antwort #17 am: 12 Januar 2018, 18:56:22 »
.....Ich gehe davon aus, dass du nachtraeglich Daten zum Dialog hinzufuegst

ja, genau so ist es . Danke für die Info.

gruss Byte09
Fhem 5.7, 3*RPi2, Harmony, Hyperion, HM-CFG-LAN, Signalduino, SignalESP, NanoCul
MAINTAINER: 98_Siro, 98_MSwitch

 

decade-submarginal