devStateIcon zurück erhalten

Begonnen von Steffen@Home, 12 Januar 2018, 09:16:03

Vorheriges Thema - Nächstes Thema

Steffen@Home

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.
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

Steffen@Home

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.
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

KernSani

Sorry, das @ muß natürlich escaped werden. Hab's oben angepasst.

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Steffen@Home

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");}
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

KernSani

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 ;-)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Steffen@Home

Hallo Meister,

ich habe doch alles HTML Tags entfernt und möchte doch stattdessen die Funktion FW_makeImage verwenden.... ???
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

KernSani

FW_makeImage liefert ja auch nur HTML zurück. Einfach um den gesamten Rückgabewert nochmal ein DIV und das sollte klappen
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Steffen@Home

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");}
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

KernSani



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

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Steffen@Home

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");}
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

Steffen@Home

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");}
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

Ellert

#26
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.

nils_

versuch mal:

return "<div>" . FW_makeImage( (ReadingsVal($name, "state", "off") eq "on" ? "temperature_humidity\@red" : "temperature_humidity\@grey"), "tooltip") . " " . ReadingsVal($name,"humidity",0) . " %</div>";
viele Wege in FHEM es gibt!

Steffen@Home

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  ???

Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

nils_

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!)
viele Wege in FHEM es gibt!