FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: Steffen@Home am 12 Januar 2018, 09:16:03

Titel: devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 12 Januar 2018, 09:16:03
Hallo Miteinander,

mein Dummy hat 2 devStateIcons für die Zustände on & off was auch funktioniert.

Nun habe ich ein UserReading und stateFormat erstellt um auch den verknüpften Wert anzeigen zu können erstellt.
Leider funktioniert dadurch das devStateIcon nicht mehr und es steht jetzt dann 48.2 % off da, ich hätte aber gerne den Wert plus das richtige devStateIcon für den Zustand on bzw. off dahinter.
Der dummy wird per notify auf on oder off gestellt.

Hat jemand einen Tip für mich? Danke!

Internals:
NAME d_GaOstHumAlarm
NR 170
STATE <span style="color:blue">48.2 % </span><span style="color:green">off</span>
TYPE dummy
READINGS:
2018-01-11 19:35:44 humidity 48.2
2018-01-11 19:35:44 state off
2018-01-11 19:46:24 temperature 0
Attributes:
DbLogExclude .*
alias Luftfeuchte Alarm GaOst
devStateIcon on:temperature_humidity@red off:temperature_humidity@grey
group Garage Ost
icon humidity
room GarageOst
setList state: on off
stateFormat <span style="color:blue">humidity % </span><span style="color:green">state</span>
userReadings humidity { ReadingsVal("GaOstHum","state",0);; }
webCmd :

Titel: Antw:devStateIcon zurück erhalten
Beitrag von: rudolfkoenig am 12 Januar 2018, 09:44:36
ZitatHat jemand einen Tip für mich?
Ja, stateFormat nicht zum HTML-Formatieren missbrauchen, das hat ein haufen Nebeneffekte, z.Bsp. dass HTML in FileLog/DbLog landet, list in telnet kaputt ist, devStateIcon spezifizieren aufwendiger wird, usw. Fuer die Umwandlung von STATE in HTML-Elemente ist devStateIcon zustaendig.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 12 Januar 2018, 10:44:11
Ok. Html habe ich entfernt.
Aber es funktioniert leider trotzdem nicht.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: rudolfkoenig am 12 Januar 2018, 10:51:35
Wenn im STATE "48.3 % off" steht, dann musst man im devStateIcon auch danach pruefen, und nicht nur nach off. Nein, es gibt kein Feature "nur off ersetzen, aber 48.3 % lassen", es sei denn, man programmiert es selbst (devStateIcon kann {}).
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 12 Januar 2018, 12:25:49
So weit sind meine Künste der Programmierung leider noch nicht vorgeschritten  :o

Habe in einem anderen Beitrag etwas ähnliches gefunden das vielleicht zur Lösung führen könnte?... verstehe aber bisher noch nicht wie das funktioniert  ::)

{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/on.png">'." ".(split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0]." ".ReadingsVal($name,"running","off").'</div>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'." ".(split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0]." ".ReadingsVal($name,"running","off").'</div>' if($state eq "off");
}


https://forum.fhem.de/index.php/topic,56067.15.html (https://forum.fhem.de/index.php/topic,56067.15.html)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 17 Januar 2018, 14:13:19
Vielleicht könnte das jemand vereinfachen/erklären damit ich einen Anhaltspunkt habe um etwas weiter zu kommen? ???

{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/on.png">'." ".(split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0]." ".ReadingsVal($name,"running","off").'<>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'." ".(split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0]." ".ReadingsVal($name,"running","off").'<>' if($state eq "off");
}


bisher ist mein Ansatz: (irgendwie müssen noch die vielen Hochkomma, Punkte, Split und Klammern weg)

{
  my $state = ReadingsVal($name, "state", "off");
return '<div><img src="/fhem/images/default/on.png">'." ".ReadingsVal($name,"humidity",0)." ".ReadingsVal($name,"state","off").'<>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'." ".ReadingsVal($name,"humidity",0)." ".ReadingsVal($name,"state","off").'<>' if($state eq "off");
}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 18 Januar 2018, 13:54:34
Soweit funktioniert es nur wie bekomme ich die <> weg? Alles was ich seither versucht habe endete darin dass nichts mehr ging  ;D

Außerdem würde ich statt on.png gerne temperature_humidity@red und für off &gray verwenden.
Wie bekomme ich das in den HTML Code?

Danke!
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 18 Januar 2018, 15:14:27
Zitat von: Steffen@Home am 18 Januar 2018, 13:54:34
Soweit funktioniert es nur wie bekomme ich die <> weg?
indem du sie nicht mehr zurückgibst.

(hab mal quote-tags verwendet, damit ich sie markieren konnte)
Zitatreturn '<div><img src="/fhem/images/default/on.png">'." ".ReadingsVal($name,"humidity",0)." ".ReadingsVal($name,"state","off").'<>' if($state eq "on");


Zitat von: Steffen@Home am 18 Januar 2018, 13:54:34
Außerdem würde ich statt on.png gerne temperature_humidity@red und für off &gray verwenden.
Wie bekomme ich das in den HTML Code?

hast du schon den abschnitt zu devStateIcon in https://fhem.de/commandref_DE.html#FHEMWEB gelesen??
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 19 Januar 2018, 07:34:50
Zitat von: nils_ am 18 Januar 2018, 15:14:27
indem du sie nicht mehr zurückgibst.

Hallo Nils, ja das habe ich ja versucht und habe .'<>' durch ." " ersetzt aber dann funktioniert es nicht mehr.

Zitat von: nils_ am 18 Januar 2018, 15:14:27hast du schon den abschnitt zu devStateIcon in https://fhem.de/commandref_DE.html#FHEMWEB gelesen??
ja habe ich gelesen. Laut dem Abschnitt müssten die <> bestehen bleiben damit er den zurückgelieferten Code als HTML verarbeitet oder?
Weiterhin ist mir unklar wie ich das @red und @grey verarbeite. Ich kann ja wohl kaum
return '<div><img src="/fhem/images/default/on.png@red"> schreiben
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 19 Januar 2018, 08:44:01
guck dir mal den von dir erwähnten beitrag an, den du als "vorlage" benutzt hast.


die <> nicht entfernen, sondern das schließende tag für dein <div> muss das werden.
also </div> anstatt <>

so evtl.?
{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/on.png">'." ".ReadingsVal($name,"humidity",0)." ". $state .'</div>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'." ".ReadingsVal($name,"humidity",0)." ". $state .'</div>' if($state eq "off");
}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 19 Januar 2018, 09:14:01
Aaah, ok super jetzt hab ich verstanden. Das div Tag muss wieder geschlossen werden. Aber dann war das ja schon in dem anderen Beitrag falsch?

Habe das on/off jetzt noch durch % ersetzt. Jetzt sieht es so aus wie ich es wollte.
return '<div><img src="/fhem/images/default/on.png">'." ".ReadingsVal($name,"humidity",0)." %".'</div>' if($state eq "on");
(Für was steht denn der Punkt eigentlich ? )

Jetzt fehlt mir nur noch das mit der Farbe für die png´s ....wo kann ich das nachlesen?
Danke!
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: rudolfkoenig am 19 Januar 2018, 10:30:55
ZitatJetzt fehlt mir nur noch das mit der Farbe für die png´s ....wo kann ich das nachlesen?
In der Gimp/Photoshop/etc Dokumentation.

FHEM kann nur SVG's neu faerben, das ist einfach, weil man nur in einer Textdatei (.svg) ein String austauschen muss.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 19 Januar 2018, 11:16:02
Oh das hab ich gar nicht bemerkt dass es ja png anstatt der svg´s sind.

Ich könnte doch auch ein svg (auch eingefärbt @red?) zurück geben? Wo kann ich das @Farbe setzen?

{my $state = ReadingsVal($name, "state", "off"); return '<div><img src="/fhem/www/images/fhemSVG/temperature_humidity.svg" height="32" width="32">'." ".ReadingsVal($name,"humidity",0)." %".'</div>' if($state eq "on");   return '<div><img src="/fhem/www/images/fhemSVG/temperature_humidity.svg" height="32" width="32">'." ".ReadingsVal($name,"humidity",0)." %".'</div>' if($state eq "off");}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 20 Januar 2018, 17:07:13
Keiner eine Idee wie man das @Farbe mit einbringen kann?
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: KernSani am 20 Januar 2018, 17:19:42
Ich erzeuge Images grundsätzlich mit
FW_makeImage("iconname","tooltip")

da geht dann auch
FW_makeImage("iconname\@color","tooltip")

Grüße,

Oli

Edit: @ escapen ;-)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 20 Januar 2018, 17:52:31
Hallo Oli, das klappt bei mir nicht und kommt ein Fehler:

{my $state = ReadingsVal($name, "state", "off"); return FW_makeImage("temperature_humidity@grey","tooltip")." ".ReadingsVal($name,"humidity",0)." %" if($state eq "on"); return FW_makeImage("temperature_humidity@red","tooltip")." ".ReadingsVal($name,"humidity",0)." %" if($state eq "off");}

attr d_GaOstHumAlarm devStateIcon: Unrecognized character \xE2; marked by <-- HERE after midity@red<-- HERE near column 276 at (eval 291) line 1.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 20 Januar 2018, 17:55:34
Ich glaube da waren irgendwelche falsche Hochkommas im spiel, leider kommt jetzt eine andere Meldung:

{my $state = ReadingsVal($name, "state", "off"); return FW_makeImage("temperature_humidity@grey","tooltip")." ".ReadingsVal($name,"humidity",0)." %" if($state eq "on"); return FW_makeImage("temperature_humidity@red","tooltip")." ".ReadingsVal($name,"humidity",0)." %" if($state eq "off");}

attr d_GaOstHumAlarm devStateIcon: Global symbol "@grey" requires explicit package name at (eval 339) line 1.
Global symbol "@red" requires explicit package name at (eval 339) line 1.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: KernSani am 20 Januar 2018, 18:10:12
Sorry, das @ muß natürlich escaped werden. Hab's oben angepasst.

Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 20 Januar 2018, 19:05:33
Funktioniert leider irgendwie nicht. Es erscheint nur die standard Lampe.

{my $state = ReadingsVal($name, "state", "off"); return FW_makeImage("temperature_humidity\@grey","tooltip")." ".ReadingsVal($name,"humidity",0)." %" if($state eq "on"); return FW_makeImage("temperature_humidity\@red","tooltip")." ".ReadingsVal($name,"humidity",0)." %" if($state eq "off");}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: KernSani am 20 Januar 2018, 19:25:10
siehe commandref:

Zitatwird ein String in <> zurück geliefert, wird dieser als HTML String interpretiert

Du lieferst am Ende kein > zurück. Und lagere das Ganze mal in die myUtils aus, zur besseren Übersichtlichkeit ;-)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 21 Januar 2018, 12:44:06
Hallo Meister,

ich habe doch alles HTML Tags entfernt und möchte doch stattdessen die Funktion FW_makeImage verwenden.... ???
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: KernSani am 21 Januar 2018, 12:53:13
FW_makeImage liefert ja auch nur HTML zurück. Einfach um den gesamten Rückgabewert nochmal ein DIV und das sollte klappen
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 21 Januar 2018, 13:06:37
Ah ok.

Das gibts doch nicht. Jetzt kommt als Ausgabe:
FW_makeImage("temperature_humidity\@grey","tooltip") 47.9 %
und ich kann sogar anklicken und es wechselt dann den Staus zwischen grey und red  ;D

{my $state = ReadingsVal($name, "state", "off"); return '<div>FW_makeImage("temperature_humidity\@red","tooltip")'." ".ReadingsVal($name,"humidity",0)." %".'</div>' if($state eq "on"); return '<div>FW_makeImage("temperature_humidity\@grey","tooltip")'." ".ReadingsVal($name,"humidity",0)." %".'</div>' if($state eq "off");}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: KernSani am 21 Januar 2018, 13:11:16


{my $state = ReadingsVal($name, "state", "off"); return "<div>".FW_makeImage("temperature_humidity\@red","tooltip")'." ".ReadingsVal($name,"humidity",0)." %</div>"

Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 21 Januar 2018, 13:21:19
da glaube da stimmt was nicht mit den einfachen und doppelten Hochkomma nicht..

{my $state = ReadingsVal($name, "state", "off"); return "<div>".FW_makeImage("temperature_humidity\@red","tooltip")'." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "on"); return "<div>".FW_makeImage("temperature_humidity\@grey","tooltip")'." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "off");}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 24 Januar 2018, 07:50:19
Bekomme es nicht hin.

Kann mir jemand erklären wann einzelne und wann doppelte Hochkomma zu setzen sind?
Am Anfang waren an den <DIV> immer ' , jetzt sind aber " ???

Vielleicht so ?

{my $state = ReadingsVal($name, "state", "off"); return '<div>".FW_makeImage("temperature_humidity\@red","tooltip")'." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "on"); return '<div>".FW_makeImage("temperature_humidity\@grey","tooltip")'." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "off");}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Ellert am 24 Januar 2018, 08:02:51
Hochkommas sind paarweise zu verwenden.
Sie umschliessen Zeichenketten.
Wenn ein Hochkommatyp eine Zeichenkette umschliesst und in der Zeichenkette der gleiche Hochkommatyp verwendet werden soll, dann muss man das Hochkomma escapen. Wenn man nicht escapen will, nimmt man den anderen Hochkommatyp.
Wenn Variablennamen zwischen "" angegeben werden, dann wird ihr Inhalt angezeigt, zwischen '' der Variablenname. Zwischen "" kann das den Variablennamen einleitende Zeichen escapt werden, dann verält sich die Angabe des Variablennamen wie zwischen ''.

'<div>".FW_ma : Hier wird z.B. die Zeichenkette nicht vom gleichen Hochkommatyp eingeschlossen.
." %</div>" if($ : Hier z.B. wird % nicht escaped, es ist aber das einleitende Zeichen eines Hashes.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 24 Januar 2018, 08:42:38
versuch mal:

return "<div>" . FW_makeImage( (ReadingsVal($name, "state", "off") eq "on" ? "temperature_humidity\@red" : "temperature_humidity\@grey"), "tooltip") . " " . ReadingsVal($name,"humidity",0) . " %</div>";
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 24 Januar 2018, 08:43:20
Hallo Hr. Ellert,

- Grundsätzlich verstehe ich nicht warum hier überhaupt einzelne ' verwendet sind und dann mal wieder doppelte und das alles ohne System oder ich verstehe es noch nicht. Erst wurde '<Div> geschrieben jetzt so "<div> ...was ist denn jetzt richtig?  :o
Benötige ich hier die einzelnen ' überhaupt? Ist es für HTML, also die <div> Angabe nötig?
Sonst würde ich nur " verwenden.
{my $state = ReadingsVal($name, "state", "off"); return "<div>".FW_makeImage("temperature_humidity\@red","tooltip")"." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "on"); return "<div>".FW_makeImage("temperature_humidity\@grey","tooltip")"." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "off");}

- für was wird der Punkt (.) verwendet ?



Soweit ich weiss Ergibt "variable" die Ausgabe: variable (Den Text zwischen den Hochkommas)
$variable Ausgabe: den Inhalt der Variablen


'<div>".FW_ma : Hier wird z.B. die Zeichenkette nicht vom gleichen Hochkommatyp eingeschlossen.
Würde ich so schreiben:
"<div>".FW_ma....

." %</div>" if($
Das % soll doch als Text Dargestellt sein ist für mich also kein einleitendes Zeichen für etwas  ???

Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 24 Januar 2018, 08:53:04
Zitat von: Steffen@Home am 24 Januar 2018, 08:43:20
- Grundsätzlich verstehe ich nicht warum hier überhaupt einzelne ' verwendet sind und dann mal wieder doppelte und das alles ohne System oder ich verstehe es noch nicht. Erst wurde '<Div> geschrieben jetzt so "<div> ...was ist denn jetzt richtig?  :o

Benötige ich hier die einzelnen ' überhaupt? Ist es für HTML, also die <div> Angabe nötig?
für was die doppelten und einzelnen Hochkommas da sind hat dir ellert ja beschrieben!
für das HTML-Tag ist es egal welche du nimmst, haptsache sie werden wieder _abgeschlossen_ (so wie bei der klammersetzung!)

Zitat von: Steffen@Home am 24 Januar 2018, 08:43:20
Sonst würde ich nur " verwenden.
{my $state = ReadingsVal($name, "state", "off"); return "<div>".FW_makeImage("temperature_humidity\@red","tooltip")"." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "on"); return "<div>".FW_makeImage("temperature_humidity\@grey","tooltip")"." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "off");}
wenn du nur "" sprich doppelte verwendest, musst du halt etwas anders auf deine variablen zugreifen und den ...... (gleich gehts weiter!)

Zitat von: Steffen@Home am 24 Januar 2018, 08:43:20
- für was wird der Punkt (.) verwendet ?
.... Text verketten, denn dafür wird hier der Punkt verwendet!

Zitat von: Steffen@Home am 24 Januar 2018, 08:43:20
Soweit ich weiss Ergibt "variable" die Ausgabe: variable (Den Text zwischen den Hochkommas)
$variable Ausgabe: den Inhalt der Variablen
siehe erklärung von Ellert wann daraus der Inhalt und wann der Variablenname ausgegeben wird!

Zitat von: Steffen@Home am 24 Januar 2018, 08:43:20
'<div>".FW_ma : Hier wird z.B. die Zeichenkette nicht vom gleichen Hochkommatyp eingeschlossen.
Würde ich so schreiben:
"<div>".FW_ma....

ok, würde passen!

Zitat von: Steffen@Home am 24 Januar 2018, 08:43:20
." %</div>" if($
Das % soll doch als Text Dargestellt sein ist für mich also kein einleitendes Zeichen für etwas  ???
doch könnte als hash interpretiert werden, nämlich durch das durcheinander an Hochkommaverwendung. (ich hab es nicht kontrolliert!)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Ellert am 24 Januar 2018, 09:05:14
Zitat von: Steffen@Home am 24 Januar 2018, 08:43:20
Hallo Hr. Ellert,

- Grundsätzlich verstehe ich nicht warum hier überhaupt einzelne ' verwendet sind und dann mal wieder doppelte und das alles ohne System oder ich verstehe es noch nicht. Erst wurde '<Div> geschrieben jetzt so "<div> ...was ist denn jetzt richtig?  :o
Benötige ich hier die einzelnen ' überhaupt? Ist es für HTML, also die <div> Angabe nötig?
Sonst würde ich nur " verwenden.
{my $state = ReadingsVal($name, "state", "off"); return "<div>".FW_makeImage("temperature_humidity\@red","tooltip")"." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "on"); return "<div>".FW_makeImage("temperature_humidity\@grey","tooltip")"." ".ReadingsVal($name,"humidity",0)." %</div>" if($state eq "off");}

- für was wird der Punkt (.) verwendet ?



Soweit ich weiss Ergibt "variable" die Ausgabe: variable (Den Text zwischen den Hochkommas)
$variable Ausgabe: den Inhalt der Variablen


'<div>".FW_ma : Hier wird z.B. die Zeichenkette nicht vom gleichen Hochkommatyp eingeschlossen.
Würde ich so schreiben:
"<div>".FW_ma....

." %</div>" if($
Das % soll doch als Text Dargestellt sein ist für mich also kein einleitendes Zeichen für etwas  ???

Ich sehe, dass Dir nicht nur das Wissen zu den Hochkommas fehlt, sondern Grundwissen zu Perl.
Daher würde ich vorschlagen, dass Du Dein Perl-Grundwissen im Selbststudium erweiterst, dann hast Du mehr davon, als wenn Du  nur Einzelaspekte nachfragst und die Antworten zu mehr Verwirrung führen, da hier kein Perl-Tutorial nacherzählt werden kann..
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 24 Januar 2018, 09:27:17
ja da hast du absolut Recht. Perl ist leider völliges Neuland ja und wenn dann noch unterschiedliche Vorgehensweisen verwendet werden ist das total verwirrend für mich.

Das Beispiel von nils werde ich noch testen.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 25 Januar 2018, 17:07:07
Bekomme leider eine Fehlermeldung von FHEM zurück:
Argument FW_makeImage( for attr d_GaOstHumAlarm devStateIcon is not a valid regexp: Unmatched ( in regex; marked by <-- HERE in m/^FW_makeImage( <-- HERE $/ at fhem.pl line 2777.

Zitat von: nils_ am 24 Januar 2018, 08:42:38
versuch mal:

return "<div>" . FW_makeImage( (ReadingsVal($name, "state", "off") eq "on" ? "temperature_humidity\@red" : "temperature_humidity\@grey"), "tooltip") . " " . ReadingsVal($name,"humidity",0) . " %</div>";
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: KernSani am 25 Januar 2018, 17:26:44
Perl-Audruck, also {} drumrum
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 25 Januar 2018, 18:20:29
Perfekt! Super, Danke dafür!  8)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 26 Januar 2018, 08:37:51
sorry, die {} hatte ich nicht mitgepostet. (für mich war klar das die da hin kommen....  ??? )


funktioniert alles soweit?
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 26 Januar 2018, 11:52:38
Hallo Nils, ja funktioniert perfekt Danke!
Könnte man eigentlich den hinteren Teil (ReadingsVal($name,"humidity",0) . " %) auch separat formatieren z.b. Schriftfarbe ... ?

{return "<div>" . FW_makeImage( (ReadingsVal($name, "state", "off") eq "on" ? "temperature_humidity\@red" : "temperature_humidity\@grey"), "tooltip") . " " . ReadingsVal($name,"humidity",0) . " %</div>";}
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 26 Januar 2018, 12:13:00
Zitat von: Steffen@Home am 26 Januar 2018, 11:52:38
Hallo Nils, ja funktioniert perfekt Danke!
ok. gut!

Zitat von: Steffen@Home am 26 Januar 2018, 11:52:38
Könnte man eigentlich den hinteren Teil (ReadingsVal($name,"humidity",0) . " %) auch separat formatieren z.b. Schriftfarbe ... ?
geht das bei html einfach so? oder muss man dafür das css anpacken??
das weiß ich nicht genau.
falls es da was gibt, musst du es nur an die richtige stelle in deinem string setzen ;)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 26 Januar 2018, 12:34:31
Müsste ich mal versuchen ob das funktioniert...

{return "<div style=\"color:#0000FF\">" . FW_makeImage( (ReadingsVal($name, "state", "off") eq "on" ? "temperature_humidity\@red" : "temperature_humidity\@grey"), "tooltip") . " " . ReadingsVal($name,"humidity",0) . " %</div>";}

oder ein 2. <div> im <div> vielleicht.
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 31 Januar 2018, 19:29:20
Zitat von: Steffen@Home am 26 Januar 2018, 12:34:31
{return "<div style=\"color:#0000FF\">" . FW_makeImage( (ReadingsVal($name, "state", "off") eq "on" ? "temperature_humidity\@red" : "temperature_humidity\@grey"), "tooltip") . " " . ReadingsVal($name,"humidity",0) . " %</div>";}

funktioniert  :)

Allerdings was mir aufgefallen ist, ist dass das UserReading des dummy leider nicht aktualisiert wird.
Folgend ist das humidity nicht aktuell.

Das DOIF das den meinen dummy auf on oder off setzt löst leider keinen Event auf das ReadingsProxy aus damit sich dieses auch den neuen Wert holt.


DOIF:
Internals:
   DEF        ([GaOstHum:humidity] > 50) (set d_GaOstHumAlarm on) DOELSE (set d_GaOstHumAlarm off)
   NAME       doif_GaOstHumAlarm
   NR         171
   NTFY_ORDER 50-doif_GaOstHumAlarm
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-01-31 19:00:11   Device          GaOstHum
     2018-01-25 18:19:19   cmd             2
     2018-01-25 18:19:19   cmd_event       set_cmd_2
     2018-01-25 18:19:19   cmd_nr          2
     2018-01-31 19:00:11   e_GaOstHum_humidity 47.7
     2018-01-25 18:19:19   state           cmd_2
   condition:
     0          ReadingValDoIf($hash,'GaOstHum','humidity') > 50
   devices:
     0           GaOstHum
     all         GaOstHum
   do:
     0:
       0          set d_GaOstHumAlarm on
     1:
       0          set d_GaOstHumAlarm off
   helper:
     event      temperature: 12.1,absFeuchte: 5.1,dewpoint: 1.3
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   GaOstHum
     timerevent temperature: 12.1,absFeuchte: 5.1,dewpoint: 1.3
     triggerDev GaOstHum
     timerevents:
       temperature: 12.1
       absFeuchte: 5.1
       dewpoint: 1.3
     timereventsState:
       temperature: 12.1
       absFeuchte: 5.1
       dewpoint: 1.3
     triggerEvents:
       temperature: 12.1
       absFeuchte: 5.1
       dewpoint: 1.3
     triggerEventsState:
       temperature: 12.1
       absFeuchte: 5.1
       dewpoint: 1.3
   internals:
   itimer:
   readings:
     0           GaOstHum:humidity
     all         GaOstHum:humidity
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   DbLogExclude .*
   room       GarageOst
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 01 Februar 2018, 09:38:09
Zitat von: Steffen@Home am 31 Januar 2018, 19:29:20
Allerdings was mir aufgefallen ist, ist dass das UserReading des dummy leider nicht aktualisiert wird.
Folgend ist das humidity nicht aktuell.
welches userreading??
welcher dummy??

Bitte bitte bitte gewöhn dir an, ein list von den devices zu posten!!! (in code-tags!)
so ist es wieder nur raten und nachfragen....

Zitat von: Steffen@Home am 31 Januar 2018, 19:29:20
Das DOIF das den meinen dummy auf on oder off setzt löst leider keinen Event auf das ReadingsProxy aus damit sich dieses auch den neuen Wert holt.
wie oft und wann soll das passieren??
dein doif triggert nur bei über/unterschreiten des schwellwertes (bei dir 50)
momentan ist es im DOELSE-Zweig (cmd_2) weil hum 47.7 ist !
und da bleibt es bis hum mal irgendwann über 50 ist (das kann unter umständen auch mal 2 bis 3 jahre dauern!!!)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 01 Februar 2018, 11:56:13
Hallo Nils,

das List ist auf Seite 1 / 1. Post. Wollte ich nicht noch einmal posten, aber ok.

Ok, Ich dachte das DOIF löst immer bei einer Änderung der Luftfeuchtigkeit aus und startet entweder den cmd1 oder cmd2.
Aber du hast recht die Readings im Ziel Dummy sind auch vom 25.01.2018

D.h. ich müsste das DOIF durch ein notify ersetzen das auf humidity.* reagiert und den cmd1 oder cmd2 ausführt.
Somit würde der auslösende Event im Ziel dummy sein UserReading auch aktualisieren.

Richtig?

aus DOIF:
([GaOstHum:humidity] > 50) (set d_GaOstHumAlarm on) DOELSE (set d_GaOstHumAlarm off)
wird notify:
define n_GaOstHumAlarm notify GaOstHum:humidity.* IF ($EVENT > 50) (set d_GaOstHumAlarm on) ELSE (set d_GaOstHumAlarm off)
Titel: Antw:devStateIcon zurück erhalten
Beitrag von: nils_ am 01 Februar 2018, 13:11:52
Zitat von: Steffen@Home am 01 Februar 2018, 11:56:13
das List ist auf Seite 1 / 1. Post. Wollte ich nicht noch einmal posten, aber ok.
ok, hab da nochmal reingeschaut.

Zitat von: Steffen@Home am 01 Februar 2018, 11:56:13
Ok, Ich dachte das DOIF löst immer bei einer Änderung der Luftfeuchtigkeit aus und startet entweder den cmd1 oder cmd2.
nein, so funktioniert doif nicht. um das zu erreichen musst du das attribut 'do always' setzen. (siehe commendref!)

Zitat von: Steffen@Home am 01 Februar 2018, 11:56:13
Aber du hast recht die Readings im Ziel Dummy sind auch vom 25.01.2018
kann sein. wenn deine humi seitdem nicht über 50 war ?!


Zitat von: Steffen@Home am 01 Februar 2018, 11:56:13
D.h. ich müsste das DOIF durch ein notify ersetzen das auf humidity.* reagiert und den cmd1 oder cmd2 ausführt.
Somit würde der auslösende Event im Ziel dummy sein UserReading auch aktualisieren.
du kannst auch DOIF nehmen (siehe oben)

notify sollte so passen, wenn du es denn verwenden willst...

Titel: Antw:devStateIcon zurück erhalten
Beitrag von: Steffen@Home am 02 Februar 2018, 06:50:51
Hallo Nils,

Danke für den Tipp mit do always. Habe es so umgesetzt. Kommt ja eigentlich auf´s gleiche raus wie das notify von den Aktivitäten denk ich.