Hallo,
ich habe da mal wieder ein Problem.
Ich möcht gerne ein "setList state:multiple" einsetzten um mir einen Wochen Liste zu bauen.
Leider haut es nicht so hin wie ich mir das vorstelle.
Ich habe Wochentage von So-Fr definiert. Diese möchte ich mit einem eventmap auf Zahlen umsetzen.
Leider werden immer nur zwei Werte umgesetzt der Rest bleibt so wie er ist.
Im Bild kann man das gut sehen.Hat da einer Rat für mich, oder eine Idee bzw.. Vorschalg wie ich das besser lösen kann?
Im state des Bildes kann man sehen das nur der So, Mo und Di umgesezt wurden. Ausgewählt habe ich von So-FR alles.
Danke
Spacy
keiner eine Idee?
Ich würde das gerne im Zusammenhang mit DOIF nutzen, leider werden Wochentage dort als Zahlen definiert, was aber im Webfront keinen WAF erzeugt. ;)
bin für jeden Tip dankbar
Hallo Spacy,
hier eine kleine Sub für dich, die das Mapping übernimmt und die Kommata entfernt
sub weekday2number($){
my $weekdays = shift;
my %weekdaymap = ("So" => 0, "Mo" => 1, "Di" => 2, "Mi" => 3, "Do" => 4, "Fr" => 5, "Sa" => 6, "WE" => 7, "!WE" => 8);
my $weekdaykeys = join("|", keys(%weekdaymap));
$weekdays =~ s/($weekdaykeys)/$weekdaymap{$1}/g;
$weekdays =~ s/,//g;
return $weekdays;
}
Nun einfach noch ein Userreading anglegen
attr Ventil2Tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
Grüße
igami
Ich krame das mal wieder vor.
Ich habe mir einen dummy
du_Wochentag erstellt
Internals:
CFGFN
NAME du_Wochentag
NR 71655
STATE 0,1,Di,Mi,Do,Fr,Sa
TYPE dummy
READINGS:
2018-05-15 13:48:43 state So,Mo,Di,Mi,Do,Fr,Sa
2018-05-15 13:48:43 weekdays 0123456
Attributes:
eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6
setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
webCmd state
In meine 99_myUtils.pm habe ich die Sub-Funktion von igami 1:1 eingefügt.
Zitat von: igami am 17 August 2015, 09:05:15
sub weekday2number($){
my $weekdays = shift;
my %weekdaymap = ("So" => 0, "Mo" => 1, "Di" => 2, "Mi" => 3, "Do" => 4, "Fr" => 5, "Sa" => 6, "WE" => 7, "!WE" => 8);
my $weekdaykeys = join("|", keys(%weekdaymap));
$weekdays =~ s/($weekdaykeys)/$weekdaymap{$1}/g;
$weekdays =~ s/,//g;
return $weekdays;
}
Wie man schon in obigen
list sehen kann, werden im STATE des Dummys die beiden ersten selektierten Wochentage nicht "übersetzt", sondern es steht statt
So eine
0 und statt
Mo eine
1 in der Liste. Wähle ich Sonntag und Montag ab und lasse die anderen Tage aktiviert, dann sind wieder die beiden ersten selektierten Tage (diesmal Di und Mi) als Zahl dargestellt.
Internals:
CFGFN
NAME du_Wochentag
NR 71655
STATE 2,3,Do,Fr,Sa
TYPE dummy
READINGS:
2018-05-15 14:00:23 state Di,Mi,Do,Fr,Sa
2018-05-15 14:00:23 weekdays 23456
Attributes:
eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6
setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
webCmd state
Da ich kein Perl-Auskenner bin, ich aber den Verdacht habe, dass da in der Sub-Funktion ein Fehlerchen ist, wollte ich mal nachfragen, ob jemand einen Tip für mich hat. Im jetzigen Zustand ist der WAF (https://de.wikipedia.org/wiki/Woman_acceptance_factor) nicht wesentlich höher, als wenn ich gleich die Zahlen von 0 bis 6 wählen lasse ;D
Edit: Noch mal hochgepusht. 8) Gibt es keinen, der mir sagen kann, was hier falsch läuft? :-\