Hallo zusammen,
ich wollte ein DevStateIcon für die Steckdose am Trockner bauen. Das ist auch alles soweit okay und klappt.
{
my $pic = ReadingsVal($name,"running","") eq "true"?'scene_clothes_dryer@green':'scene_clothes_dryer';;
my $text = ReadingsVal($name,"running","") eq "true"?"Trockner läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';;
"<div><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a> ".FW_makeImage($pic)." $text </div>"
}
Ziel hiervon:
- In FHEM-WEB soll es nicht klickbar sein. Deswegen habe ich den Standard toggle ins nichts gelenkt (on/off/toggle).
- Hinzu sollen alle Symbole bei mir, auf gleicher höhe sein, weswegen auch als Leerzeichen benötigt wird.
Meine Frage:
Ich denke, man kann die beiden IFs auch besser machen. Ich frage zwei mal das gleiche ab und setze dann zwei Variablen. Das geht doch sicher besser oder mit nur einer Abfrage gegen das Reading running...?
Danke schon mal !
Mache doch davor:
my $val = ReadingsVal($name,"running","");
Und dann einfach 'ReadingsVal($name,"running","")' mit '$val' ersetzen.
Oder:
my $pic;
my $text;
if (ReadingsVal($name,"running","") eq "true")
{
$pic = "scene_clothes_dryer\@green";
$text = "Trockner läuft - Aktuell: ".ReadingsVal($name,"power","")." W";
} else {
$pic = "scene_clothes_dryer";
$text = "Standby";
}
return "<div><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a> ".FW_makeImage($pic)." $text </div>"
Welche Lösung Du eleganter findest ist Dir überlassen.
Gruß
Dan
Danke Dir!
Jetzt hatte ich den PC gewechselt und mir die zweite deiner Lösungen auch gebastelt. Ich finde das in FHEM immer so doof bei devStateIcon z.B. hat man nur diese kleine Zeile. Mittlerweile mache ich das einfach in Notepad++ und da sieht man dann auch den Wald, trotz Bäumen ;)
DANKE DANKE
Zitatif (ReadingsVal($name,"running","") eq "true")
{
my $pic = "scene_clothes_dryer@green";
my $text = "Trockner läuft - Aktuell: ".ReadingsVal($name,"power","")." W";
} else {
my $pic = "scene_clothes_dryer";
my $text = "Standby";
}
return "<div><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a> ".FW_makeImage($pic)." $text </div>"
Der hier geht auch nicht ... Bekomme das auch nicht hin. Es scheint eine Kleinigkeit zu sein...grrr...
2019.08.08 17:08:57 1: PERL WARNING: Possible unintended interpolation of @green in string at (eval 12892) line 1.
2019.08.08 17:08:57 1: ERROR evaluating my $name='1';my $type='1';my $state='1';{return undef; { if (ReadingsVal($name,"running","") eq "true") { my $pic = "scene_clothes_dryer@green"; my $text = "Trockner läuft - Aktuell: ".ReadingsVal($name,"power","")." W"; } else { my $pic = "scene_clothes_dryer"; my $text = "Standby"; } return "<div><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a> ".FW_makeImage($pic)." $text </div>" }}: Global symbol "@green" requires explicit package name (did you forget to declare "my @green"?) at (eval 12892) line 1.
Global symbol "$pic" requires explicit package name (did you forget to declare "my $pic"?) at (eval 12892) line 1.
Global symbol "$text" requires explicit package name (did you forget to declare "my $text"?) at (eval 12892) line 1.
Evtl. muss das @ maskiert werden ? :-\ also scene_clothes_dryer\@green
Grüße Markus
Teste ich morgen.. Danke schon mal Markus!
Hatte das eigentlich schon mal jemand so gepostet oder gesagt, dass man das "FHEM-WEB, zwangs toggle bei on/off" ins nichts senden kann? Hatte mir heute Mittag die Zähne ausgebissen.
...
<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a>...
Wenn ja, wie geht es noch besser/eleganter? :)
Zitat von: KölnSolar am 08 August 2019, 18:58:14
Evtl. muss das @ maskiert werden ? :-\ also scene_clothes_dryer\@green
Grüße Markus
Ja, das @ muss natürlich maskiert werden, darauf hatte ich gar nicht geachtet.
Gruß
Dan
P.S. Hab's mal oben in meinem Lösungsvorschlag ergänzt!
Danke ihr Beiden!
Super schnell und gute Hilfe.
Zitat von: 87insane am 08 August 2019, 16:54:32
Global symbol "$pic" requires explicit package name (did you forget to declare "my $pic"?) at (eval 12892) line 1.
Global symbol "$text" requires explicit package name (did you forget to declare "my $text"?) at (eval 12892) line 1.
ist klar die beiden sind nur gültig innerhalb der jeweiligen geschweiften Klammer (if bzw else) , aber dann nicht mehr beim return :)
Zitat von: 87insane am 08 August 2019, 20:09:00
Hatte das eigentlich schon mal jemand so gepostet oder gesagt, dass man das "FHEM-WEB, zwangs toggle bei on/off" ins nichts senden kann? Hatte mir heute Mittag die Zähne ausgebissen.
Das "Zwangs-Toggle" beim Klick auf das devStateIcon wird man dadurch los indem man als dritten Wert des devStateIcon "noFhemwebLink" übergibt.
Also um bei z.B. einem dummy das "Zwangs-Toggle" zu entfernen einfach:
attr [dummy] devStateIcon on:on:noFhemwebLink off:off:noFhemwebLink
Gruß
Dan
Zitat von: Wzut am 09 August 2019, 09:13:51
ist klar die beiden sind nur gültig innerhalb der jeweiligen geschweiften Klammer (if bzw else) , aber dann nicht mehr beim return :)
Ja, richtig. Das kommt davon wenn man ungetesteten Code postet.
Habe es oben ausgebessert.
Gruß
Dan
Zitat von: DeeSPe am 09 August 2019, 09:14:05
Das "Zwangs-Toggle" beim Klick auf das devStateIcon wird man dadurch los indem man als dritten Wert des devStateIcon "noFhemwebLink" übergibt.
Also um bei z.B. einem dummy das "Zwangs-Toggle" zu entfernen einfach:
attr [dummy] devStateIcon on:on:noFhemwebLink off:off:noFhemwebLink
Gruß
Dan
Das bedeutet, ich kann mir den Link sparen und direkt noFhemwebLink nutzen. Danke Dir. Wird ja immer besser hier :)
Hey,
nochmal zurück zum Ursprung....
Kann man in der Kurz-Schreibweise von if auch mehrere Dinge ausführen lassen? So etwa, nur in richtig?
if ReadingsVal($name,"running","") eq "true" ? my $v1='123' my $v2='abc' my $v3='12ab' : .........;
Zitat von: 87insane am 09 August 2019, 12:18:23
Hey,
nochmal zurück zum Ursprung....
Kann man in der Kurz-Schreibweise von if auch mehrere Dinge ausführen lassen? So etwa, nur in richtig?
if ReadingsVal($name,"running","") eq "true" ? my $v1='123' my $v2='abc' my $v3='12ab' : .........;
Nein.
Gruß
Dan
Also habe ich korrekt gelesen....
Bei ternary IF gibt es nur:
? = Dann
: = Sonst
Schade... Danke!
Hey zusammen,
nochmal ne Frage zu:
on:on:noFhemwebLink off:off:noFhemwebLink
Wie baut man das in folgendes ein?
{ my $amp = ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "false" || ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "true" ? "rot" : ReadingsVal($name,"online","false") eq "true" && ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;
my $pic = ReadingsVal($name,"running","") eq "true"?'scene_laundry_room_fem@green':'scene_laundry_room_fem';;
my $text = ReadingsVal($name,"running","") eq "true"?"Waschmaschine läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';;
my $show = "$amp" eq "gelb" ? "<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>" : "<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$amp)."</a>";;
"<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a>".FW_makeImage($pic)." $text </div>" }
Habe es aktuell über:
<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a>
gelöst. Das geht auch wie gewünscht aber ich hätte es gerne richtig.
Danke!
Zitat von: 87insane am 15 August 2019, 10:42:40
Hey zusammen,
nochmal ne Frage zu:
on:on:noFhemwebLink off:off:noFhemwebLink
Wie baut man das in folgendes ein?
{ my $amp = ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "false" || ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "true" ? "rot" : ReadingsVal($name,"online","false") eq "true" && ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;
my $pic = ReadingsVal($name,"running","") eq "true"?'scene_laundry_room_fem@green':'scene_laundry_room_fem';;
my $text = ReadingsVal($name,"running","") eq "true"?"Waschmaschine läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';;
my $show = "$amp" eq "gelb" ? "<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>" : "<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$amp)."</a>";;
"<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a>".FW_makeImage($pic)." $text </div>" }
Habe es aktuell über:
<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a>
gelöst. Das geht auch wie gewünscht aber ich hätte es gerne richtig.
Danke!
Gar nicht.
Das ist bei Deinem Code nicht anwendbar, da Du mehrere Icons mit verschiedener Funktionalität anzeigen lassen möchtest.
Der Code
on:on:noFhemwebLink off:off:noFhemwebLink
ist nur anwendbar bei der Verwendung von einem einzelnen devStateIcon.
Gruß
Dan
Bedeutet für mich, ich muss bei meiner Variante bleiben und die ist somit nicht "schlechter"?
Danke schon mal!
Zitat von: 87insane am 15 August 2019, 12:20:37
Bedeutet für mich, ich muss bei meiner Variante bleiben und die ist somit nicht "schlechter"?
Danke schon mal!
Genau.
Wenn es so funktioniert wie Du möchtest, dann lass es.
Gruß
Dan