Autor Thema: Eigene Perl-Routine über FHEMWEB aufrufen  (Gelesen 346 mal)

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4338
Eigene Perl-Routine über FHEMWEB aufrufen
« am: 19 August 2017, 12:40:54 »
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, THRESHOLD; FHEM-Befehl: IF

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16902
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #1 am: 19 August 2017, 12:45:33 »
userReadings?
readingsChange?

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4338
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #2 am: 19 August 2017, 12:57:36 »
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, THRESHOLD; FHEM-Befehl: IF

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16902
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #3 am: 19 August 2017, 13:03:29 »
Sorry, ich verstehe die Aufgabenstellung dann (immer noch) nicht.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 10266
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #4 am: 19 August 2017, 13:05:12 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4338
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #5 am: 19 August 2017, 13:43:48 »
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, THRESHOLD; FHEM-Befehl: IF

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16902
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #6 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.

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4338
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #7 am: 20 August 2017, 12:10:01 »
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, THRESHOLD; FHEM-Befehl: IF

Online Ellert

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2434
Antw:Eigene Perl-Routine über FHEMWEB aufrufen
« Antwort #8 am: 22 August 2017, 13:58:31 »
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?
« Letzte Änderung: 22 August 2017, 14:00:52 von Ellert »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16902

 

decade-submarginal