Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

Etwas für Perl Spezialisten

Begonnen von uwirt, 12 Oktober 2024, 21:30:07

Vorheriges Thema - Nächstes Thema

uwirt

... und vermutlich sehr einfach.

Ich möchte abhängig vom Wert (Namen) eines Readings MoonPhasesS mit einem userReadings einen Text einfärben. Ich habe dazu folgendes userReadings definiert:

attr Astronomy userReadings Mondausleuchtung {if(ReadingsVal($name,"MoonPhaseS","") eq ("Waning Moon","Waning Crescent","Last Quarter")) {return "#B22222"} elsif (ReadingsVal($name,"MoonPhaseS","") eq ("Waxing Moon","Waxing Crescent","First Quarter")) {return "#A3EBB1"} elsif (ReadingsVal($name,"MoonPhaseS","") eq "Full Moon") {return "#FFFFFF"} else {return "#808080"}}
Damit will ich z.B. wenn der Name des Readings MoonPhaseS Waning Moon, Waning Crescent oder Last Quarter ist einen Text rot (#B22222) einfärben. Das mit der Klammer scheint allerdings nicht zu funktionieren. Wie kann man bei eq mehrere Möglichkeiten einbeziehen?

FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

TomLee

ZitatDas mit der Klammer scheint allerdings nicht zu funktionieren. Wie kann man bei eq mehrere Möglichkeiten einbeziehen?

Hallöle,

Gedanken eines Perllaien:

Mit einem logischen Oder || sollte es tun ?
... eq "Waning Moon"||"Waning Crescent"||"Last Quarter" ...
Bei mir würd ich das dem ersten Gedanken nach mit einem Hash umsetzen:

Mondausleuchtung:MoonPhaseS.* {my $phase =ReadingsVal($name,"MoonPhaseS","");
my %name2hex = (
'Waning Moon' => '#B22222',
'Waning Crescent' => '#B22222',
'Last Quarter' => '#B22222',
    'Waxing Moon' => '#A3EBB1',
'Waxing Crescent' => '#A3EBB1',
'First Quarter' => '#A3EBB1',
'Full Moon' => '#FFFFFF');
    return '#808080' if !$name2hex{$phase};
return $name2hex{$phase};}


Gruß Thomas

uwirt

#2
An das mit dem logischen oder dachte ich auch, nur leider funktionierte das nicht.
Deine Lösung finde ich eh eleganter.
Nur leider gibt es noch einen Fehler:

Error evaluating Astronomy userReading Mondausleuchtung: syntax error at (eval 146338) line 1, near ") {"

Es funktioniert jetzt. Es war wohl ein copy/paste Fehler vom iPad mit unsichtbaren Steuerzeichen:
Mondausleuchtung:MoonPhaseS.* {
    my $phase = ReadingsVal($name, "MoonPhaseS", "");
    my %name2hex = (
        'Waning Moon'     => '#B22222',
        'Waning Crescent' => '#B22222',
        'Last Quarter'    => '#B22222',
        'Waxing Moon'     => '#A3EBB1',
        'Waxing Crescent' => '#A3EBB1',
        'First Quarter'   => '#A3EBB1',
        'Full Moon'       => '#FFFFFF'
    );
    return '#808080' if !$name2hex{$phase};
    return $name2hex{$phase};
}
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya