diff --git a/14_SD_Keeloq.pm b/14_SD_Keeloq.pm index 348c9f3..089eaa9 100644 --- a/14_SD_Keeloq.pm +++ b/14_SD_Keeloq.pm @@ -107,6 +107,9 @@ sub SD_Keeloq_Initialize() { $hash->{FW_detailFn} = "SD_Keeloq::summaryFn"; $hash->{FW_addDetailToSummary} = 1; $hash->{FW_deviceOverview} = 1; + + #Neu, um einen "versteckten Get-Befehl zu haben + $hash->{GetFn} = "SD_Keeloq::Get"; } ################################### @@ -192,7 +195,7 @@ sub Attr(@) { if ($init_done == 1) { if ($cmd eq "set") { - if (($attrName eq "MasterLSB" && $MasterMSB ne "") || ($attrName eq "MasterMSB" && $MasterLSB ne "")) { + if (($attrName eq "MasterLSB" && $MasterMSB ne "") || ($attrName eq "MasterMSB" && $MasterLSB ne "")) { if ($Serial_send eq "") { readingsSingleUpdate($hash, "user_info", "messages can be received!", 1); readingsSingleUpdate($hash, "user_modus", "limited_functions", 1); @@ -333,8 +336,33 @@ sub Set($$$@) { my $buttonbits; # Buttonbits my $button; # Buttontext - - ### Einzeilig mit Auswahlfeld ### + + # Über diesen Set-Befehl wird die Aktualisierung vorgenommen. + # $html wird nicht benötigt, dies war nur ein Versuch, das HTML direkt zu übergeben. + # Leider geht dies nicht...sobald ein /" oder eine neue Zeile im $html -> FHEM Error + if ($cmd eq "setHTML"){ + #my $html = SD_Keeloq_getHTML($hash); + #$html =~ s/{/XXX/g; + #$html =~ s/}/XXX/g; + my $html= "TEST"; + my $Script=<<"EOF"; +if (typeof SD_Keeloq_updateAll === "function") { + SD_Keeloq_updateAll("$html"); +} + +EOF + #Über FW_directNotify wird das JavaScript ausgeführt + #Es muss zwingend "main::" funktion verwendet werden, da sonst die Routinen nicht gefunden werden! -> FHEM Absturz + #Es darf kein Raumfilter gesetzt werden, da sonst in der Detailansicht keine Aktualisierung erfolgt! + + #Da die Funktion "SD_Keeloq_updateAll" nur auf den Tabs vorhanden ist, wo unser HTML angezeigt wird, muss mittels + #if (typeof SD_Keeloq_updateAll === "function") { + #geprüft werden, ob diese Funktion überhaupt vorhanden ist. (Sonst Fehlermeldung auf allen anderen Tabs, die diese Funktion nicht besitzen!) + { map { main::FW_directNotify("FILTER=.*", "#FHEMWEB:$_", "$Script", "") } main::devspec2array("TYPE=FHEMWEB") } + return; + } + + ### Einzeilig mit Auswahlfeld ### if ($a[0] eq "OptionValue") { $a[0] = $hash->{READINGS}{DDSelected}{VAL}; } @@ -1137,6 +1165,28 @@ sub summaryFn($$$$) { return SD_Keeloq_attr2html($name, $hash); } +##################################### +# Neue Funktion, um den HTML-Code zu bekommen +sub SD_Keeloq_getHTML($) { + my $hash = shift; + my $name = $hash->{NAME}; + return SD_Keeloq_attr2html($name, $hash); +} + +##################################### +sub Get ($$@) +{ + my ( $hash, $name, $opt, @args ) = @_; + #HTML-Code ausgeben per Get-Befehl + #Dieser Get-Befehl ist nicht über die FHEM-Oberfläche erreichbar ("versteckt") + if($opt eq "html") { + return SD_Keeloq_getHTML($hash); + } else { + return; + } + return; +} + ##################################### # Create HTML-Code sub SD_Keeloq_attr2html($@) { @@ -1211,19 +1261,63 @@ sub SD_Keeloq_attr2html($@) { ### Einzeilig ### if ($UI eq "Einzeilig") { if (not exists $attr{$name}{ChannelFixed}) { - $html = ' - '; + + #Script zum aktualisieren + #der Parameter html ist überflüssig. Siehe oben. + # + $html = <<"EOF"; + + +
+EOF + $html.= "
"; $html.= SD_Keeloq_attr2htmlButtons($DDSelected, $name, $ShowIcons, $ShowShade, $ShowLearn); - $html.= "
"; - my $changecmd = "cmd.$name=setreading $name DDSelected "; - #$html.= ""; + + my $changecmd = "cmd.$name=setreading $name DDSelected "; + #2. Command -> Aktualisieren + #Könnte man auch vereinfachen, indem masn hier auch gleich die Auswahl mitgibt und das Reading dort setzt... + my $changecmd2 = "cmd.$name=set $name setHTML "; + + #Beide commands absetzen bei Änderung: + $html.= ""; + #$html.= "
"; + $html.= "
"; } ### Einzeilig with attrib ChannelFixed ### @@ -1647,4 +1741,4 @@ sub SD_Keeloq_attr2htmlButtons($$$$$) { =end html_DE -=cut \ No newline at end of file +=cut