Eigene Perl-Routine über FHEMWEB aufrufen

Begonnen von Damian, 19 August 2017, 12:40:54

Vorheriges Thema - Nächstes Thema

Damian

Ich möchte eine eigene Perl-Routine beim Ändern eines Readings aufrufen.

Mit:
my $val = ReadingsVal($dev,$reading,"???");
return "<div class='dval' informid='$dev-$reading'>$val</div>";


wird ein Readinginhalt aktualisiert, da ich aber noch Perl-Berechnungen beim Trigger vor der Ausgabe durchführen möchte, müsste ich auf eine zuvor definierte Funktion verweisen, die dann ausgeführt würde.

Ist so etwas möglich?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig


Damian

Zitat von: rudolfkoenig am 19 August 2017, 12:45:33
userReadings?
readingsChange?

Es geht hier um eine eigene Weboberfläche innerhalb eines Moduls, wo HTML-Code zusammengebaut wird, da sind solche Attribute/Module nicht nutzbar.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Sorry, ich verstehe die Aufgabenstellung dann (immer noch) nicht.

CoolTux

Zitat von: Damian am 19 August 2017, 12:57:36
Es geht hier um eine eigene Weboberfläche innerhalb eines Moduls, wo HTML-Code zusammengebaut wird, da sind solche Attribute/Module nicht nutzbar.

Jetzt sage bitte nicht Du machst Ernst und baust für DOIF wie von den Usern vorgeschlagen ein eigenes Webfrontend  ;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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

Es geht hier um eine tabellarische Darstellung ähnlich ReadingsGroup.

Beispiel:

wenn man über  $hash->{FW_detailFn}

zurückliefert:
   
"<div class='dval' informid='bla-myreading'>0</div>"


wird der Inhalt von myreading (hier mit Null voreingestellt) angezeigt und bei Änderungen des Readings aktualisiert.

und ich denke an so etwas:

"<div class='perl-eval' informid='bla-myreading' func='myPerlFunction'>0</div>"

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Um das Problem zu loesen muss FW_detailFn JavaScript-Code ausliefern, was an den betroffenen HTML-Elementen eine setValueFn dranhaengt. Diese (JavaScript) Funktion wird von fhemweb.js:FW_doUpdate() jeweils mit dem neuen Wert des Readings aufgerufen.

Falls jemand mich ueberzeugt, dass sowas von mehreren Entwicklern benoetigt wird, dann bin ich bereit, diese Funktionalitaet in fhemweb.js zu integrieren.

Damian

Zitat von: rudolfkoenig am 20 August 2017, 11:23:39
Um das Problem zu loesen muss FW_detailFn JavaScript-Code ausliefern, was an den betroffenen HTML-Elementen eine setValueFn dranhaengt. Diese (JavaScript) Funktion wird von fhemweb.js:FW_doUpdate() jeweils mit dem neuen Wert des Readings aufgerufen.

Falls jemand mich ueberzeugt, dass sowas von mehreren Entwicklern benoetigt wird, dann bin ich bereit, diese Funktionalitaet in fhemweb.js zu integrieren.

Danke, dass du dir die Sache angeschaut hast. Es müsste allerdings, wie ich es verstanden habe, eine JavaScript-Funktion und nicht Perl-Funktion sein.

Desweiteren wäre es an ein Reading gebunden, ich habe aber noch beliebige Regex-Trigger - da habe ich etwas zu kurz gedacht.

Ich werde das Problem einfach umgehen, indem ich die eigentliche Perl-Funktion in ein DOIF_Reading (ähnlich userReadings) packe und dieses angebe.

Es ist dann zwar zweistufig, dafür funktioniert es mit bestehenden Mechanismen.

Aus meiner Sicht hat sich das Problem damit erledigt. Danke noch mal.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#8
Wäre es eine gute Lösung den Inhalt von <div doifId='yxz'></div> über
trigger <FHEMWEB Instanzen> JS:$("[doifId='xyz']").html("Ergebnis von myPerlFunction") zu setzen?