userreadings -> at -> Funktionsaufruf mit setreading

Begonnen von TomLee, 19 April 2021, 11:03:15

Vorheriges Thema - Nächstes Thema

TomLee

ZitatAlso die Frage: was erwartest Du für eine Ausgabe wenn es keine Termine gibt.

Versteh ich nicht, ein get gibt entweder was zurück oder wenns keine Termine gibt undef/nix.

Du meinst also den Teil
my @a= split("\n",$t);
    for (my $i = 0;$i<=$#a;$i++)
    {my $r = sprintf("t_%03.0f", $i + 1 )._summary;fhem("setreading $name $r $a[$i]");}

im Ausführungsteil eines if ausführen das prüft ob das get nicht undef ist.

ZitatIch würde der "guten Ordnung" halber doch noch einfach etwas zurückgeben, damit weißt Du ob das userReadings getriggert hat oder nicht.

Mir gefällts aber eigentlich sehr das es gar kein zusätzliches Reading und wenns man wissen möchte obs getriggert hat schaut man halt im Log  8)  :P

Otto123

Eventuell haben wir uns doch verstanden? ich dachte so:
my $t = fhem('get '.$name.' events format:custom="$S" limit:from=0,count='.$nr,1);
if (defined $t) {
my @a= split("\n",$t)
...
}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

#17
Dann hier nochmal mein bisheriger Ansatz die Zusammenfassung der nächsten 5 Termine in Readings zu schreiben, evtl. findet sich ja noch jemand der irgendwo Optimierungsbedarf oder ein No-Go sieht:

ce2r:triggered {fhem(qq(sleep 0.1;{pc_ce2rtest("$name",'5')}))}

sub pc_ce2rtest {
    my $name = shift;
my $nr = shift;
fhem ("deletereading $name t_.*",1);
    my $t = fhem('get '.$name.' events format:custom="$S" limit:from=0,count='.$nr,1);
if (defined $t) {
my @a= split("\n",$t);
for (my $i = 0;$i<=$#a;$i++)
{my $r = sprintf("t_%03.0f", $i + 1 )._summary;fhem("setreading $name $r $a[$i]");}
}
my $v =fhem("list $name:FILTER=t_001_summary=.+",1);
!defined ($v) ? return 'nothing to do' : return 'done';
}


Im Falle das es User gibt die gar kein Calendar-Device nutzen, sich aber mit der Programmierung auskennen und -evt.- es nachvollziehen möchten, hier eine RAW-Definition und im Anhang die dazugehörige .ics mit 3 Beispiel-Terminen:

defmod cal_Test Calendar ical file ./example4.ics 86400
attr cal_Test defaultFormat "$T1 $T2 $S"
attr cal_Test hideOlderThan 1
attr cal_Test room Test
attr cal_Test userReadings ce2r:triggered {fhem(qq(sleep 0.1;;{pc_ce2rtest("$name",'5')}))}


Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz