Modul für Terminansicht CALVIEW

Begonnen von chris1284, 08 Februar 2014, 13:18:31

Vorheriges Thema - Nächstes Thema

chris1284

Hallo,

UPDATE: https://forum.fhem.de/index.php/topic,63575.0.html

Das Modul legt ein Device an, setzt als Reagings alle Termine aus einem bestehenden Kalender des Moduls 57_Calender.
Vorausetzung: ein Kalender auf  Modul 57_Calendar beruhend

Doku um es einzubinden hier http://fhem.de/commandref.html#CALVIEW

Das Attribut "maxreadings" kann die Anzahl der angezeigten Termine anpassen.
Das Attribut "oldStyledReadings" ändert das Format der Readings in die Form [2015.01.01-00:00 Neujahr]

default-Readings
(http://forum.fhem.de/index.php?action=dlattach;topic=19922.0;attach=24885;image)
oldStyledReadings
(http://forum.fhem.de/index.php?action=dlattach;topic=19922.0;attach=24887;image)

Beispiel readingsGroup mit den Standard-Readings
1. leere readingsgroup definieren:
define rg_ViewAll readingsGroup <Zeile>,<Start>,<Start Zeit>,<Summary>,<Ende>,<End Zeit>
1.a) der rg das Attribut nonames 1 geben
2. ein notify definieren welches die readingsGroup dynamisch mit leben füllt wenn sich calview au grund eines calendar-updates aktualisiert hat
[code]define ntf_ViewAll notify View_All:t:.* {
my $i;
my $modtext = "<Datum>,<Zeit>,<Termin>,<Ort>,<Quelle> ";

for($i= 1;$i<= ReadingsVal("View_All","c-today", 0);$i++){
$modtext .= "View_All:<Heute>,today_".sprintf('%03d',$i)."_btime,today_".sprintf('%03d',$i)."_summary,today_".sprintf('%03d',$i)."_location,today_".sprintf('%03d',$i)."_source ";}

for($i= 1;$i<= ReadingsVal("View_All","c-tomorrow", 0);$i++){
$modtext .= "View_All:<Morgen>,tomorrow_".sprintf('%03d',$i)."_btime,tomorrow_".sprintf('%03d',$i)."_summary,tomorrow_".sprintf('%03d',$i)."_location,tomorrow_".sprintf('%03d',$i)."_source ";}

for($i= 1;$i<= ReadingsVal("View_All","c-term", 0);$i++){
$modtext .= "View_All:t_".sprintf('%03d',$i)."_bdate,t_".sprintf('%03d',$i)."_btime,t_".sprintf('%03d',$i)."_summary,t_".sprintf('%03d',$i)."_location,t_".sprintf('%03d',$i)."_source ";}

fhem("modify rg_View_All $modtext");
fhem("SAVE");
}


!Ihr müsst ViewAll mit eurem Namen des CALVIEW devices ersetzen!
dann ein calendar update und sowohl calview als auch rg sollten schön gefüllt sein mit neuen readings

(http://forum.fhem.de/index.php?action=dlattach;topic=19922.0;attach=24890;image)

Beispiel readingsGroup mit Attribut "oldStyledReadings" = 1
define kalenderTermine readingsGroup <%time_calendar>,<Text>,<Zuletzt erfasst> myView
attr kalenderTermine alias Termine
attr kalenderTermine group _KalenderView_
attr kalenderTermine mapping %READING
attr kalenderTermine room Kalender


Gruß
Christian

holzwurm83

Hallo Christian,

danke für das Modul! Habe das auch gleich mal getestet. Ich habe nur das Problem das ich alle Termine aus einem Jahr angezeigt bekomme und das die Termine nicht in der richtigen Reihenfolge sind. Kannst du mir hier weiterhelfen?

- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

chris1284

Stimmt, hab ich gerade getestet und nachvollziehen könne. Da ich die Werte so nehme wie sie aus dem Kalender kommen werden sie wohl dort nicht sortiert. Werde morgen mal schauen ob ich das hinbekomme.

chris1284

#3
Beim Testen sind nun einige Problem zusammen gekommen:
1.  57_Calender liefert unsortiert -> sortiere ich nun erstmal nach Datum (Uhrzeit geht noch nicht)
2. Das Webinterface sortiert Readings selbst aufsteigend und betrachtet nur den Tag und nicht das ganze Datum. Hier gibts 2 Lösungen meiner Meinung nach:

a) Ich schreib vor das Datum einer Nummer z.B:
Zitat0-09.02.14-00:00 Chrischi Einkauf
1-12.02.14-00:00 Vodafone fristgerecht Kündigen!
2-15.02.14-00:00 Leichtverpackungen
3-16.02.14-00:00 Ani Einkauf
4-18.02.14-07:30 asda
5-18.02.14-00:00 Bioabfall
6-19.02.14-00:00 Restabfall
7-24.02.14-06:00 Vodafone fristgerecht Kündigen!
8-18.03.14-08:00 a
b) Ich verwende ein vom Frontend sortierbares Datumsformat wie
Zitat14-02-12@00:00
[YY-MM-dd@hh:mm].

Was meinst du? Ich habe mal die Version b) angehängt.

holzwurm83

Also ich finde b auch gut! Wie lässt du dir nur acht Einträge anzeigen? Bei mir schreibt er alle 100 Einträge in die readingGroup
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Hans Franz

Zitat von: chris1284 am 08 Februar 2014, 13:18:31
To do:
- Prüfung einbauen ob Kalender <Name> existiert -> über einen Tipp würde ich mich freuen

sub
CalendarPresent($)
{
    my ($Calendar) = @_;   
    my $xml_calendars = fhem("xmllist TYPE=Calendar");
    my $pos=index($xml_calendars,"name=\"".$Calendar."\"");
    my $ret = "False";
    if ($pos > -1) {
        $ret = "True";
        }
    return $ret
}


Printed leider in log :(
Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

chris1284

Danke für den Tipp, werde es heute Abend mal versuchen einzubauen / umzusetzen.

@holzwurm83: Tja, das kann man limitieren, ist aber noch nicht im Modul. Bei mir gibt es wohl ein Problem mit dem Kalender (irgendwo ist eine uralte ics / oder Werte gecached). Auf meinem 2. fhem-Server sind es auch mehr Einträge.

Wer ich heute Abend auch versuchen mi einzubauen.

chris1284

Hallo Hanz,

habe es gerade über list [Kalendername] TYPE probiert, schreibt aber auch nur ins Log...
Werde ich morgen weiter versuchen und mir auch deiner Version noch  einmal anschauen.

@holzwurm83: ich habe gerade getestet. Was sind das für Termine bei dir? Ich habe mir mal einen Serientermin täglich, nicht endend eingestellt. Ich komme nicht auf solch eine lange Terminliste.

holzwurm83

Zitat von: chris1284 am 10 Februar 2014, 21:42:29
@holzwurm83: ich habe gerade getestet. Was sind das für Termine bei dir? Ich habe mir mal einen Serientermin täglich, nicht endend eingestellt. Ich komme nicht auf solch eine lange Terminliste.

Das sind Ganztagestermine die über das Jahr geplant sind.
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

chris1284

#9
Habe ein Attr "maxreadings" eingebaut. Das setzen und danach "set update" und es sollte die gewünschte Anzahl an readings vorhanden sein.
Hab es im ersten Post angehängt.

Hans Franz

#10
Hallo,

So geht's, glaube ich:
{calendar_exists("NRW_Ferien")}
sub
calendar_exists($)
{
    my ($Calendar) = @_;
    my $spec = devspec2array("NAME=$Calendar");
    my $ret = "False";
    if ($spec > 0) {
        $ret = "True";
        }
    return $ret
}


Gruß
Hans
Edit:
vlt. auch:

{defined($defs{"NRW_Ferien"})}

liefert 1, wenn Kalender definiert ist.
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

chris1284

Habe mich hierfür entschieden, Danke für den Tipp Hans

return "invalid Calendername \"$calender\", define it first" if((devspec2array("NAME=$calender")) != 1 );

{defined($defs{"NRW_Ferien"})} wäre aber auch gegangen, auch dafür Danke.

holzwurm83

Zitat von: chris1284 am 11 Februar 2014, 06:16:47
Habe ein Attr "maxreadings" eingebaut. Das setzen und danach "set update" und es sollte die gewünschte Anzahl an readings vorhanden sein.
Hab es im ersten Post angehängt.

Danke! So habe ich mir das vorgestellt!
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

brmpfl

Hai,

Danke für's Modul. Funktioniert wie beschrieben.

3 Sachen, die ich mir wünschen würde:
- Die Ansicht: 14-02-12@00:00 finde ich persönlich eher "gewöhnungsbedürftig"
- Bei Terminen wird immer nur die Startzeit angezeigt
- Die Notwendigkeit, zur Anzeige der Daten aus 57_Calender zusätzliche Devices definieren zu müssen.
Aus meiner Sicht wäre es hier optimal, bei der Definition eines Calendar-Devices  gleich eine entsprechende (ggf. konfigurierbare) View automatisch zu erhalten.
:)
Hajo

chris1284

Hallo Hajo,

schön das es noch weitere Interessenten gibt.

Zur Ansicht: Damit bin ich auch noch nicht 100% zu Frieden. Habe mal das Forum durchsucht und bin der Meinung ich sollte ich an der Namensgebung der Devices orientieren um möglichst den Standard einzuhalten.
Das bedeutet erlaubt sind A-Za-z0-9.:_, Es ist recht einfach das Format des Readings zu ändern (evtl. sogar per "Auswahl" um es zu individualisieren). Dazu kommt noch das sortiertverhalten des Frontends welches ich nicht beeinflussen kann. Über Vorschläge für ein besser lesbares Format freue ich mich natürlich :-)

Zu Bei Terminen wird immer nur die Startzeit angezeigt: Es geht nur <Readingname><Wert> hier  <Startdatum><Text>. Ich kann das Ende mit in <Startdatum:Ende> oder <Text : Ende > nehmen

Wenn ich den 3. Punkt verstehe willst du den Kalender definieren und sofort die View erstellt haben. Da 57_Calender nicht mein Modul ist müsstest du den Entwickler ansprechen. Ich wüsste nicht wie ich darauf mit meinem Modul reagieren könnte.

Ich werde spätestens am WE mehr Zeit zum Basteln haben und sehen was ich umsetzten kann.

Gruß
Christian