Hauptmenü

setlist state:multiple

Begonnen von spacy, 01 Juli 2015, 07:50:03

Vorheriges Thema - Nächstes Thema

spacy

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


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

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

der_da

#3
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 nicht wesentlich höher, als wenn ich gleich die Zahlen von 0 bis 6 wählen lasse  ;D

der_da

Edit: Noch mal hochgepusht. 8) Gibt es keinen, der mir sagen kann, was hier falsch läuft? :-\