[gelöst] onClick | FW_cmd - call PERL sub with values -> perl-html-javascript

Begonnen von HomeAuto_User, 10 Mai 2019, 17:29:04

Vorheriges Thema - Nächstes Thema

HomeAuto_User

Hallo,

ich möchte eine Oberfläche erstellen wo ich via Klick bestimme Routinen in einem Modul starten kann.
In meinem HTML Code habe ich eine Variable welche ich mit dem Code fülle.

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung()}&XHR=1\')\" value=\"Text\" %s/>";

Mit diesem Code springe ich direkt in meine Routine.

Nun würde ich gern aber dieser Routine mit Variablen übergeben und erziele kein Erfolg bisher.

Gedanklich müsste es ja so werden
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(Tag,Daten)}&XHR=1\')\" value=\"Text\" %s/>";
Leider geht dies nicht und ich erhalte Barewords ... strict subs

Bitte um Mithilfe  ???
MfG

EDIT Zusammenfassung vom Faden was kein Erfolg brachte:

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung('".$var1."','".$var2."')}&XHR=1\')\" value=\"Text\" %s/>";
# -> SyntaxError: missing ) after argument list

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(1,\\\"123e4\\\")}&XHR=1\')\" value=\"Text\" %s/>";
# -> SyntaxError: '' literal not terminated before end of script

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(1,\"123e4\")}&XHR=1\')\" value=\"Text\" %s/>";
# -> string literal contains an unescaped line break

EDIT last:
Lösung auf der letzten Seite  ;)
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

#1
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(".$variableTag.",".$variableDaten.")}&XHR=1\')\" value=\"Text\" %s/>";
Oder Schritt für Schritt zur Erklärung:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(";
$buttons .= $variableTag;
$buttons .= ",";
$buttons .= $variableDaten;
$buttons .= ")}&XHR=1\')\" value=\"Text\" %s/>";


Aber ich verstehe nicht ganz, warum du diesen Fehler kriegst. Dafür wäre die genaue Fehlermeldung hilfreich. Nw. zeigt Perl genau wo das Problem steht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

rudolfkoenig

Ist vermutlich die die gleiche Meldung, was man kreigt, wenn man in FHEM
{Entleerung(Tag,Daten)}
eingibt.

amenomade

Du meinst wegen Tag und Daten, oder wegen Leerzeichen vor und nach dem Fuktionsaufruf?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

Zitat von: rudolfkoenig am 10 Mai 2019, 18:22:52
Ist vermutlich die die gleiche Meldung, was man kreigt, wenn man in FHEM
{Entleerung(Tag,Daten)}
eingibt.

Ja richtig, die Fehlermeldung.

Bareword "Tag" not allowed while "strict subs" in use at (eval 178572) line 1.
Bareword "Daten" not allowed while "strict subs" in use at (eval 178572) line 1.


Zitat von: amenomade am 10 Mai 2019, 18:26:59
Du meinst wegen Tag und Daten, oder wegen Leerzeichen vor und nach dem Fuktionsaufruf?

Ich meine den Funktionsaufruf damit die Variablen Tag und Daten übergeben werden können.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

HomeAuto_User

#5
Wenn ich zum testen manuell in die Kommandozeile
{Entleerung('Tag')}
eingebe, so erhalte ich den Aufruf und die Übergabe.

Wenn ich dies aber in meine Zeile ergänze, so erhalte ich

fhem?detail=SIGNALduino_TOOL line 1:
SyntaxError: missing ) after argument list


Muss da etwas "anders" maskiert werden?

EDIT: geht nicht:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung('Data')}&XHR=1\')\" value=\"update\" %s/>";
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(\'Data\')}&XHR=1\')\" value=\"update\" %s/>";

EDIT2:
WIESO geht das aber das nicht?

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd('/fhem?XHR=1&cmd.$name={Entleerung("."124".")}')\" value=\"update\" %s/>";
geht

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd('/fhem?XHR=1&cmd.$name={Entleerung("."abc".")}')\" value=\"update\" %s/>";
geht NICHT  :o :'(

obwohl ich via Kommandozeile beides manuell übergeben kann?

@Rudi, hast du einen Tip diesbezüglich?

EDIT3:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd('/fhem?XHR=1&cmd.$name={Entleerung(123e4)}')\" value=\"update\" %s/>";
führt im Code zu 1230000  >:( ???
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

#6
Wäre gut wenn Du:
- das ganze zeigen würdest (und nicht nur eine Zeile von Code): wie sieht deine Funktion aus? Wo willst Du diese Zeile hinzufügen?
- die Fehlermeldungen bei jedem Versuch zeigen würdest. Du hast einmal von Barewords und einmal von "missing )" erwähnt. Was heisst jetzt "geht nicht" ?

Das $ vor name sollte noch escaped werden
Was ist übrigens $name

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

#7
Hallo,
hier muss ein internet Fehler vorliegen welchen ich mit deinem Code nachvollziehen konnte.

Zitat von: amenomade am 10 Mai 2019, 17:45:07
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(".$variableTag.",".$variableDaten.")}&XHR=1\')\" value=\"Text\" %s/>";
Oder Schritt für Schritt zur Erklärung:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(";
$buttons .= $variableTag;
$buttons .= ",";
$buttons .= $variableDaten;
$buttons .= ")}&XHR=1\')\" value=\"Text\" %s/>";


Aber ich verstehe nicht ganz, warum du diesen Fehler kriegst. Dafür wäre die genaue Fehlermeldung hilfreich. Nw. zeigt Perl genau wo das Problem steht.

Sobald ich anstatt Zahlen Buchstaben nehme kommt

2019.05.10 20:12:00 1: ERROR evaluating {Entleerung(2,egon)}: Bareword "egon" not allowed while "strict subs" in use at (eval 192471) line 1.

EDIT: CODE

my $variableTag = "1";
my $variableDaten = "ade";
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(".$variableTag.",".$variableDaten.")}&XHR=1\')\" value=\"Text\" %s/>";


FEHLER:
2019.05.10 20:16:40 1: ERROR evaluating {Entleerung(1,ade)}: Bareword "ade" not allowed while "strict subs" in use at (eval 193248) line 1.

Soory, hatte die Variante mit namen= zum testen ersetzt mit Bsp aus dem Internet, daher weicht der Code ab oben.  ::) Ich sehe dennoch nicht durch wo es zustande kommt.

EDIT TEST 2:
my $variableTag = "1";
my $variableDaten = "\ade";
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(".$variableTag.",".$variableDaten.")}&XHR=1\')\" value=\"Text\" %s/>";

$ret .= "<tr> <td colspan=\"5\" rowspan=\"1\"> <div>$buttons</div> </td></tr>";


Fehler:
2019.05.10 20:25:35 1: ERROR evaluating {Entleerung(1,de)}: Unrecognized character \x07; marked by <-- HERE after leerung(1,<-- HERE near column 15 at (eval 194646) line 1.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

HomeAuto_User

SEHR KOMISCH wenn ich den Test auch mit Zahlen + Buchstaben vornehme...

my $variableTag = "1";
my $variableDaten = "123a4";
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(".$variableTag.",".$variableDaten.")}&XHR=1\')\" value=\"Text\" %s/>";

$ret .= "<tr> <td colspan=\"5\" rowspan=\"1\"> <div>$buttons</div> </td></tr>";
}

$ret .="</tbody></table>";


Fehler:
2019.05.10 20:33:26 1: PERL WARNING: Bareword found where operator expected at (eval 195917) line 1, near "123a4"
2019.05.10 20:33:26 3: eval: {Entleerung(1,123a4)}
2019.05.10 20:33:26 1: PERL WARNING: (Missing operator before a4?)
2019.05.10 20:33:26 3: eval: {Entleerung(1,123a4)}
2019.05.10 20:33:26 1: ERROR evaluating {Entleerung(1,123a4)}: syntax error at (eval 195917) line 1, near "123a4"


Bei reinen Zahlen klappt es. Kann ich ggf noch wo anders mit "eingreifen" um den Fehler einzugrenzen?
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

Das ist nicht komisch, das ist normal. Es geht um Variabletypen und wie Perl damit umgeht, um etwas einen Typ zu geben.

Alle deine Fehler deuten auf dem Parameter womit du die Funktion Entleeren aufrufst.
2019.05.10 20:33:26 1: PERL WARNING: Bareword found where operator expected at (eval 195917) line 1, near "123a4"
2019.05.10 20:33:26 3: eval: {Entleerung(1,123a4)}

Er versucht 123a4 als Kalkulation zu verstehen, deswegen operator expected. Richtige Syntax wäre {Entleerung(1,"123a4")} damit er das als String versteht.

2019.05.10 20:12:00 1: ERROR evaluating {Entleerung(2,egon)}: Bareword "egon" not allowed while "strict subs" in use at (eval 192471) line 1.Er versteht egon als Bareword, da die richtige Syntax {Entleerung(2,"egon")} sein sollte.
Genau das gleiche mit
2019.05.10 20:16:40 1: ERROR evaluating {Entleerung(1,ade)}: Bareword "ade" not allowed while "strict subs" in use at (eval 193248) line 1.

ZitatBei reinen Zahlen klappt es
Ja, weil ein Zahl... ein Zahl ist. Da braucht er nichts zu interpretieren

Also: hör auf wild zu testen, und denk mal nach. Wo sind deine Strings, wo fangen die an, wo enden sie, wie sind sie verschachtelt, mit welchen Deliminer (single oder double quotes), was wird escaped.

Wie soll das finale HTML Code aussehen?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Wenn deine Variable nicht immer numerisch sind, sondern auch alphanumerisch sein können, und es am Ende so aussehen muss:
<INPUT type="reset" onclick="FW_cmd(FW_root+'?cmd={Entleerung("1","123a4")}&XHR=1')" value="Text" %s/>

Dann sollte folgendes Code funktionieren:
{
$var1 = 1;
$var2 = "123a4";
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(\"".$var1."\",\"".$var2."\")}&XHR=1\')\" value=\"Text\" %s/>";;
}

Wenn var1 immer numerisch ist, kannst Du dir die enspr. escaped double quotes sparen. Musst aber nicht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

Zitat von: amenomade am 10 Mai 2019, 23:19:12
....

Dann sollte folgendes Code funktionieren:
{
$var1 = 1;
$var2 = "123a4";
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(\"".$var1."\",\"".$var2."\")}&XHR=1\')\" value=\"Text\" %s/>";;
}

Wenn var1 immer numerisch ist, kannst Du dir die enspr. escaped double quotes sparen. Musst aber nicht.

bringt mir folgendes

fhem?detail=SIGNALduino_TOOL line 1:
SyntaxError: '' string literal contains an unescaped line break
   ::) :'(
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

Kann man bitte ein "list SIGNALduino_TOOL" sehen?
Du hast immer noch nicht erwähnt WO Du dieses Code nutzen möchtest.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

#13
Zitat von: amenomade am 11 Mai 2019, 00:33:53
Kann man bitte ein "list SIGNALduino_TOOL" sehen?

Hier hast du das List von dem Modul wo ich es hereingenommen hatte zum testen.

Internals:
   FUUID      5c44efd0-f33f-08a5-fbb9-57b647266a77e9ae
   NAME       SIGNALduino_TOOL
   NR         561
   NTFY_ORDER 50-SIGNALduino_TOOL
   STATE      RAWMSG dispatched
   TYPE       SIGNALduino_TOOL
   Version    2019-05-09
   dispatchDevice ABS700_79
   dispatchDeviceTime 2019-05-11 00:33:22
   dispatchOption from SD_Device_ProtocolList.json
   dispatchSTATE T: 3.3
   OLDREADINGS:
   READINGS:
     2019-05-11 00:33:22   cmd_raw         D=110001001111000000111000001100000000
     2019-05-11 00:33:22   cmd_sendMSG     set sduino_dummy sendMSG s4F038300#R5
     2019-05-11 00:33:22   decoded_Protocol_ID 0
     2019-05-11 00:33:22   last_DMSG       s4F038300
     2019-05-11 00:33:22   last_MSG        MS;P1=-7949;P2=492;P3=-1978;P4=-3970;D=21232423232424242423232323232324242423232323232424;CP=2;SP=1;R=245;O;
     2019-05-11 00:33:22   message_dispatched 1
     2019-05-11 00:33:22   message_to_module CUL_TCM97001
     2019-05-11 00:33:22   state           RAWMSG dispatched
   helper:
     NTFY_SEARCH_Time 2019-05-11 00:33:22
     NTFY_SEARCH_Value s4F038300
Attributes:
   DispatchMax 100
   DispatchModule -
   Dummyname  sduino_dummy
   Filename_export SIGNALduino_TOOL_output.txt
   Filename_input SIGNALduino_TOOL_input.txt
   Path       ./SD_TOOL/
   StartString MU;
   cmdIcon    START:remotecontrol/black_btn_PS3Start Dispatch_RAWMSG_last:remotecontrol/black_btn_BACKDroid
   room       SIGNALduino_un
   userattr   DispatchModule:-,CUL_EM,CUL_FHTTK,CUL_TCM.txt,CUL_TCM97001,CUL_TX,CUL_WS,Dooya,FHT,FLAMINGO,FS10,FS20,Hideki,IT,OREGON,RFXX10REC,SD_BELL,SD_BELL.txt,SD_Keeloq,SD_Keeloq.txt,SD_RSL.txt,SD_UT,SD_UT.txt,SD_Unknown.txt,SD_WS,SD_WS.txt,SD_WS07,SD_WS09,SD_WS_Maverick,SOMFY
   verbose    3
   webCmd     START:Dispatch_RAWMSG_last


EDIT:
Ich habe nun das ganze mal fix in ein kleines Beispiel hereingenommen wo nur der Code drin ist.
Vielleicht kannst du da mal dies bei dir testen und somit die Umsetzung von mir nachempfinden wo der Fehler liegt bei mir.

Fehler wie bekannt: fhem?detail=123 line 1:
SyntaxError: '' string literal contains an unescaped line break


ZitatDu hast immer noch nicht erwähnt WO Du dieses Code nutzen möchtest.
-> siehe Beispielcode im Anhang.

Im Voraus schon einmal danke  8)
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

HomeAuto_User

#14
Hallo,

@amenomade

Ich habe getestet und komme zu einem sehr komischen Verhalten was ich versuche herauszubekommen.
Wenn ich das BeiSpielModul welches ich hier nochmal anhänge, nutze, so klappt es.

Wenn ich diesen Code in mein anderes Modul einarbeite, so klappt dieser nur wenn ich "Zahlen" nutze obwohl die Zeile kopiert wurde.
Gibt es eine bestimmte Reihenfolge welche eingehalten werden muss oder wieso erhalte ich ausgerechnet dort dann den Fehler
Bareword "Modulname" not allowed while "strict subs" in use at (eval 898)  ::) :o

Kann es durch Copy&Paste oder durch eine andere Funktion oder Funktionsaufruf dadurch gehindert werden?

EDIT:
SO soll es aussehn {Entleerung(1,"test")}

Da ist die Variante um Zahlen weiterzugeben

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(";
$buttons .= $var1;
$buttons .= ",";
$buttons .= $var2;  # zahl
$buttons .= ")}&XHR=1\')\" value=\"update_Data\" %s/>";


Sobald ich nun Texte nutzen möchte, wäre doch nach deiner Aussage dies dazu zu nutzen:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(";
$buttons .= $var1;
$buttons .= ",";         ### Komma wie in Kommandozeile
$buttons .= "\"";         ### maskierung
$buttons .= $var2;   ### text
$buttons .= "\"";         ### maskierung
$buttons .= ")}&XHR=1\')\" value=\"update_Data\" %s/>";


geht aber nicht leider!

SyntaxError: '' string literal contains an unescaped line break

EDIT 2:

Sobald ich irgendeine Maskierung in den Zeilen hinzufügen möchte kommt der Fehler. So im Anhang funktioniert er aber soabld ich Variable 2 als Text maskieren möchte schlägt es fehl.
my $var1 = 1;
my $var2 = 2;

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(";
$buttons .= $var1; # variable 1 Zahl
$buttons .= ","; # Trennung
$buttons .= ""; # eventuelles Zwischenzeichen - Maskierung
$buttons .= $var2; # variable 2
$buttons .= ""; # eventuelles Zwischenzeichen - Maskierung
$buttons .= ")}&XHR=1\')\" value=\"update_Data\" %s/>";

Log3 $name, 3, "$name: TEST -> ".$buttons;
$ret .= "<tr> <td colspan=\"5\" rowspan=\"1\" align=\"center\"> <div>$buttons</div> </td></tr>";
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

Zitatonclick="FW_cmd(FW_root+'?cmd={Entleerung(1,"2")}&XHR=1')"
Da gibt es m.M.n. noch etwas, was in der Verschachtelung nicht stimmt
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

#16
Zitat von: amenomade am 12 Mai 2019, 19:37:46
Da gibt es m.M.n. noch etwas, was in der Verschachtelung nicht stimmt

Gibt es die Möglichkeit noch "besser" zu debuggen.
Ich habe schon mir nur das Stück vorgenommen aber komme immer zum Fehler.

Sobald ich die Variable Text maskieren möchte tritt der Fehler auf.

EDIT:

Selbst wenn ich alles umschreibe von " auf das ' Zeichen

$buttons = '<INPUT type="reset" onclick="FW_cmd(FW_root+\'?cmd={Entleerung(';
$buttons .= $var1; # variable 1 Zahl
$buttons .= ','; # Trennung
$buttons .= ''; # eventuelles Zwischenzeichen - Maskierung
$buttons .= $var2; # variable 2
$buttons .= ''; # eventuelles Zwischenzeichen - Maskierung
$buttons .= ')}&XHR=1\')" value="update_Data" %s/>';


geht es nicht, sobald ich definieren möchte mit der Maskierung das es Text ist.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

Das ist schwierig: Du hast in einer Konkatenation von Perl Strings eine Konkatenation von Javascript Strings... und jede Art muss quotes und double quotes escapen.
Ich würde in einem online Perl Tester, z.B. https://www.tutorialspoint.com/execute_perl_online.php zuerst zu eine Variable kommen, die eine rightige Javascript String enthält (diese mit einem intelligenten Editor mit javascript Syntaxhervorhebung kontrollieren)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

Zitat von: amenomade am 12 Mai 2019, 20:03:31
Das ist schwierig: Du hast in einer Konkatenation von Perl Strings eine Konkatenation von Javascript Strings... und jede Art muss quotes und double quotes escapen.
Ich würde in einem online Perl Tester, z.B. https://www.tutorialspoint.com/execute_perl_online.php zuerst zu eine Variable kommen, die eine rightige Javascript String enthält (diese mit einem intelligenten Editor mit javascript Syntaxhervorhebung kontrollieren)

Hm, das wird natürlich eine sehr sehr große Herausforderung.

Kann es sein, das vielleicht auch schon der Fehler in der sub _FW_Detail steckt wo das Script zum aufrufen verankert ist?
ODER
kommt nur meine Sub in Frage welche aufgerufen wird. (also diese wo der Code zum HTML Bau verankert ist?
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

Funktioniert es, wenn Du fix (ohne Variable) folgendes in deinem Modul einträgst:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(1,\"123e4\")}&XHR=1\')\" value=\"Text\" %s/>";
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

Zitat von: amenomade am 12 Mai 2019, 20:58:48
Funktioniert es, wenn Du fix (ohne Variable) folgendes in deinem Modul einträgst:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(1,\"123e4\")}&XHR=1\')\" value=\"Text\" %s/>";

Nein leider nicht. Nach fester Verankerung kommt

Zitatstring literal contains an unescaped line break
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

Und mit:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(1,\\\"123e4\\\")}&XHR=1\')\" value=\"Text\" %s/>";
?
(ein escaped backslash in Perl, um das double quote in Javascript zu escapen)...
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

Zitat von: amenomade am 12 Mai 2019, 21:36:55
Und mit:
$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(1,\\\"123e4\\\")}&XHR=1\')\" value=\"Text\" %s/>";
?
(ein escaped backslash in Perl, um das double quote in Javascript zu escapen)...

Da erhalte ich

ZitatSyntaxError: '' literal not terminated before end of script
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

Naja, wir haben " ' " " ' ". Wäre eine dreifache Verschachtelung perl-html-javascript... geht aber nicht : der zweite " schliesst den ersten.

Ich weiss nicht wirklich, was Du machen könntest.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

Zitat von: amenomade am 12 Mai 2019, 22:58:39
Naja, wir haben " ' " " ' ". Wäre eine dreifache Verschachtelung perl-html-javascript... geht aber nicht : der zweite " schliesst den ersten.

Ich weiss nicht wirklich, was Du machen könntest.

Kann es innerhalb FHEM ein Verarbeitunsfehler sein oder hat nur intern das Modul die Verarbeitung zu leisten?
Ich frage daher, weil Bsp: FW_cmd hier als FHEM Funktionen beschrieben werden.

Das komische bleibt ja, via Kommandozeile in FHEM klappt es.

Ein Umweg wäre nur, das ich über eine "Globale Variable" daran komme, was ich aber vermeiden wollte.

Bei der Verarbeitung
->FW_detailFn ->Script -> Sub
geht es ja

nur bei
->FW_detailFn ->Script -> Sub -> Sub
nicht
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

amenomade

FW_cmd ist eine Javascript Funktion aus fhemweb.js
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Vielleicht ist die Lösung ganz anders. Mit deiner Funktion willst Du eine String bauen, die HTML Code mit Buttons & Co enthält. Was willst Du dann mit dieser Funktion machen? Wofür wird die String dann benutzt?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

bismosa

Hallo!

Ich hatte dies Problem auch gerade erst...ich habe gerade nochmal ein wenig getestet...bin mir aber nicht sicher, ob ich das Problem auch richtig verstanden habe:
my $changecmd = "{MAX_Temperatur_TEST(&quot;HUHU&quot;)}";";
$html.="<a style=\"cursor: pointer;\" onClick=\"FW_cmd(FW_root+'?cmd=$changecmd&XHR=1')\">TESTXXX</a>";

Aufgerufen wird hier "MAX_Temperatur_TEST" mit der "Variablen" "HUHU". Die Sub sieht zum testen so aus:
sub MAX_Temperatur_TEST($){
  my $Value = shift;
  Log3 "TEST",1,"TEST, $Value";
  return "huhu";
}


Ich habe es nur geschafft, indem ich die Anführungszeichen als "&quot;" angegeben habe. Alles andere klappte nicht.

Möchtest Du dann auch mit dem Rückgabewert der Funktion arbeiten? Dann:
my $changecmd = "{MAX_Temperatur_TEST(&quot;HUHU&quot;)}";";
$html.="<a style=\"cursor: pointer;\" onClick=\"FW_cmd(FW_root+'?cmd=$changecmd&XHR=1',function(data){FW_okDialog(data)})\">TESTXXX</a>";


Ich habe aber insgesamt für mich festgestellt, das es u.U. wesentlich einfacher ist ein SET Command auszuführen:
my $cmd = "cmd.$name=set $name start";
$html.="<a style=\"cursor: pointer;\" onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmd',function(data){FW_okDialog(data)})\">$img</a>";

Hier könnte man ja noch weitere Werte übergeben. Das lässt sich auch so im Modul auswerten, das der SET-Command nicht weiter vom USER bedient werden kann...

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

amenomade

ZitatIch habe es nur geschafft, indem ich die Anführungszeichen als "&quot;" angegeben habe.
Ah schön! Das bringt uns das dritte Verschachtelungslevel! Prima
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

HomeAuto_User

Zitat von: amenomade am 13 Mai 2019, 09:09:10
Ah schön! Das bringt uns das dritte Verschachtelungslevel! Prima

Dann muss ich das mal testen und den String mir zusammenbauen.

Schwieriger dazu wird, bei allen Versuchen die letzte Variante wieder zu finden :D

Edit:
Vermutlich muss ich hier ansetzen

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(1,\\\"123e4\\\")}&XHR=1\')\" value=\"Text\" %s/>";

Gesendet von iPhone mit Tapatalk Pro
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

HomeAuto_User

 ;) DANKE! Ihr beiden.

Die Lösung der 3er Maskierung (perl-html-javascript) ist im Detail die Maskierung mit dem &quot; vorzunehmen.

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(";
$buttons .= "&quot;"; # eventuelle - Maskierung
$buttons .= $name; # variable 1
$buttons .= "&quot;"; # eventuelles - Maskierung
$buttons .= ","; # Trennung
$buttons .= "&quot;"; # eventuelle - Maskierung
$buttons .= $var2; # variable 2
$buttons .= "&quot;"; # eventuelle - Maskierung
$buttons .= ")}&XHR=1\')\" value=\"update_Data\" %s/>";


ODER alles zusammen

$buttons = "<INPUT type=\"reset\" onclick=\"FW_cmd(FW_root+\'?cmd={Entleerung(&quot;$name&quot;,&quot;$var2&quot;)}&XHR=1\')\" value=\"update_Data\" %s/>";

Wenn man die $var2 direkt als Zahl übergeben möchte, so  kann man die Maskierung weglassen.

--> Vielleicht kann man dies sogar als Bsp. für die Wiki mal vorschlagen.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet