[gelöst: offiziell keine]stateFormat: Welche Variablen sind verfügbar

Begonnen von supernova1963, 30 Juni 2017, 06:47:49

Vorheriges Thema - Nächstes Thema

supernova1963

Hallo zusammen,

Seit einiger Zeit bastele ich an einem angepassten stateFormat. Aus verschiedenen Beiträgen habe ich entnommen, dass auf einzelne Variablen des Devices zugegriffen werden kann.
Jetzt möchte ich das Ergebnis des Attributs devStateIcon verwenden. Damit soll das angezeigte Icon mit extend devStateIcon anpassbar werden.
Wenn ich $devStateIcon verwende, wird der Inhalt des Attributs angezeigt, aber nicht das Ergebnis.

Es gibt bestimmt irgendwo, - wo ich bisher noch nicht gesucht habe -, eine Dokumentation, welche Variablen bei stateFormat genutzt werden können.

Kann mir einer "auf die Sprünge" helfen?

Danke,

Gernot

Hier meine konkrete Baustelle (nicht mit extend devStateIcon änderbar):

{
my $Icon = "<img src='/fhem/images/default/10px-kreis-gelb.png' alt='?'>";
$Icon = "<img src='/fhem/images/default/10px-kreis-gruen.png' alt='up'>" if (ReadingsVal($name,'state','') eq 'up');
$Icon = "<img src='/fhem/images/default/10px-kreis-rot.png' alt='down'>" if (ReadingsVal($name,'state','') eq 'down');
return "<table width=100% style='table-layout:fixed'><tr>
    <td style='text-align: left'>".ReadingsVal($name,'IP','')."</td>
    <td style='width: 30px'>".$Icon."</td>
    <td align=Left style='white-space: nowrap'>".ReadingsVal($name,'VENDOR','')."</td>
    <td style='text-align: right'>".ReadingsTimestamp($name,'state','')."</td>
</tr></table>"
}




supernova1963

Bis heute habe ich noch nichts gefunden ...

Wo sollte ich suchen?

Danke,

Gernot

rabehd

ZitatWenn ich $devStateIcon verwende, wird der Inhalt des Attributs angezeigt, aber nicht das Ergebnis.
Macht für mich Sinn!
Denn so habe ich das Attribut auch verstanden. Damit wird der mögliche Inhalt von state oder STATE (müßte jetzt suchen welches richtig ist) zu einem Icon gemappt.

Ich verstehe Dein Problem nicht!
Auch funktionierende Lösungen kann man hinterfragen.

supernova1963

Hallo rabehd,

vielen Dank für deinen Hinweis, ich hab es gleich getestet und die fixe Definition $Icon weggelassen.
ReadingsVal($name,'state','') ergibt "up|down|?" (ausgeschrieben)

{
return "<table width=100% style='table-layout:fixed'><tr>
    <td style='text-align: left'>".ReadingsVal($name,'IP','')."</td>
    <td style='width: 30px'>".ReadingsVal($name,'state','')."</td>
    <td align=Left style='white-space: nowrap'>".ReadingsVal($name,'VENDOR','')."</td>
    <td style='text-align: right'>".ReadingsTimestamp($name,'state','')."</td>
</tr></table>"
}

InternalVal($name,'STATE','') ergibt, wie du es vermutet hast, den formatierten Device Status. Leider wird auch nach stateFormat. (Vollständige Tabelle aus stateFormat, Achtung: Zirkelbezug!)

{
return "<table width=100% style='table-layout:fixed'><tr>
    <td style='text-align: left'>".ReadingsVal($name,'IP','')."</td>
    <td style='width: 30px'>".ReadingsVal($name,'state','')."</td>
    <td align=Left style='white-space: nowrap'>".ReadingsVal($name,'VENDOR','')."</td>
    <td style='text-align: right'>".ReadingsTimestamp($name,'state','')."</td>
</tr></table>"
}


Zum besseren Verständnis:
Nur damit ich fhem besser verstehe, versuche ich zZt. ein Modul zur Umsetzung einer automatisierten Anlage von Netzgeräten im lokalen Netz laienhaft zusammen zu schustern
[Ein init.d Service, sendet über den Port 7072 das Ergebnis aus dem permanent laufenden fing -Log an fhem. Wird ein neues Netzgerät erkannt, soll eine neues Device auf Basis des Moduls angelegt werden.]
Dort wollte ich ein flexibleres stateFormat vorgeben, damit ich nachdem das Device angelegt wurde, mit devStateIcon das angezeigte Icon, wie in fhemweb vorgesehen, ändern kann.

Eines meiner vielen offenen Punkte ist die Frage, welche Variablen des Moduls an den unterschiedlichen Stellen zur Verfügung steht. Die Variable $name s.o. z.B. funktioniert im stateFormat. Wie gesagt, ich habe zwar schon viel gelesen und gesucht, aber leider nichts gefunden bzw. überlesen.

Danke, dir nochmal für deine Hilfsbereitschaft,

Gernot



Amenophis86

Sollte dir im Anfängerforum keiner helfen können, dann solltest du deinen Beitrag in das richtige Unterforum verschieben. Da es sich wohl um eine Modulentwicklung handelt schlage ich vor, dass du dir die Berechtigung fürs Developer Forum geben lässt und dorthin deinen Beitrag verschiebst.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

dev0

Zitat von: supernova1963 am 06 Juli 2017, 06:56:32
welche Variablen des Moduls an den unterschiedlichen Stellen zur Verfügung steht. Die Variable $name s.o. z.B. funktioniert im stateFormat. Wie gesagt, ich habe zwar schon viel gelesen und gesucht, aber leider nichts gefunden bzw. überlesen.

Das $name beim Attribut stateFormat verwendet werden kann ist eher Zufall. Da es auch nicht in der command ref dokumentiert ist, kann es sich auch jederzeit ändern.
Wenn Du auf Werte Deines Modules zugreifen möchstest, dann solltest Du ReadingsVal(), InternalVal() oder AttrVal() benutzen. Du kannst zwar auch Variablen mit our im gesamten Package verfügbar machen, davon solltest Du aber erst einmal absehen.

supernova1963

@Amenophis86: Wenn ich denn tatsächlich, irgendwann einmal, ein Modul, was andere auch nutzen, fertiggestellt habe, werde ich deinen Rat befolgen. Bis dahin hoffe ich darauf, dass ein "Wissender" auch mal im Anfängerforum vorbei schaut und Anfängern, wie mir, Hilfestellung für den Einstieg gibt.

@dev0:
Danke für die Info. Dann versuche ich mit 'AttrVal()' auf ein ggf. gesetztes devStateIcon mein Glück. Hoffentlich bleibt die Möglichkeit den Bezug zum Namen des Devices in den Attributen, in denen Perl Code erlaubt ist, herzustellen noch lange bestehen.

LG
Gernot


dev0

Zitat von: supernova1963 am 06 Juli 2017, 12:14:30
Hoffentlich bleibt die Möglichkeit den Bezug zum Namen des Devices in den Attributen, in denen Perl Code erlaubt ist, herzustellen noch lange bestehen.
Wenn es für Dich wichtig ist und/oder es vielleicht sogar schon irgendwo im Forum/Wiki beschrieben wurde, dann könntest Du den Maintainer bitten, eine Variable $NAME (um beim Standard zu bleiben) in der Funktion FHEM/evalStateFormat($) einzuführen und es in der command ref zu dokumentieren. Ein Patch wäre noch besser und ist auch nicht kompliziert. ;)