Modul für Terminansicht CALVIEW

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

Vorheriges Thema - Nächstes Thema

chris1284

das attribut löschen und set update machen

oti

#211
Hallo,

ich kann mich den anderen nur anschließen, ein tolles Modul.
Eine Sortierung nach Datum und Uhrzeit und dann noch für mehrere Kalender wäre toll.

Im Moment sind die Termine doch recht durcheinander.

Meines Erachtens nach lässt sich dies auch nur durch Programmierung im Modul erledigen, die Schleife über mehrere Kalender kann nur da ablaufen.

Gruß
OTi

onkel-tobi

#212
Zitat von: KernSani am 20 Januar 2015, 10:04:51
AbfallKalView:t_001_bdate,t_001_summary AbfallKalView:t_002_bdate,t_002_summary AbfallKalView:t_003_bdate,t_003_summary FerienKalView:t_001_bdate,t_001_summary
bringt in der readingsgroup die nächsten drei Müll-Termine und den nächsten Ferientermin.

Hi,

ich versuche gerade eine view für mehrere Kalender zu bauen. Leider bekomme ich so ncihts angezeigt.
Ich habe ein calview Abfall und würde mir als erstes einfach mal nur die nächsten drei Termine anschauen. Also habe ich folgendes definiert:

define kalenderAlle readingsGroup Abfall:t_001_bdate,t_001_summary Abfall:t_002_bdate,t_002_summary Abfall:t_003_bdate,t_003_summary  Alle

Angezeigt wird da aber leider dann nichts...
Im Abfall view werden die Termine dargestellt.

t_001_bdate usw. müßten doch auch in dem cal view Objekt irgendwo auftreten, oder mache ich da einen Denkfehler?

Gruß,

Tobi

chris1284

Zitat von: oti am 18 Februar 2015, 12:03:18
Eine Sortierung nach Datum und Uhrzeit und dann noch für mehrere Kalender wäre toll.
Im Moment sind die Termine doch recht durcheinander.

nö sind sie nicht. wenn du pro kalender eine calview-instanz nutz ist es je calview zu mindest was das datum angeht sortiert (ausnahme können mehrere Termine zu unterschiedlichen zeiten an einem tag sein). wie du dann die daten mehrere viewes in der rg sortierst ist dann deine aufgabe / kann durch calview aktuell nicht erledigt werden da es pro view nur einen kalender unterstützt. du könntets alle termine in einen kalender schieben und so das "problem" umgehen. ich werde aber schauen ob ich ggf mehrere kalende pro view einbauen kann

@all: danke für's lob

chris1284

Zitat von: onkel-tobi am 18 Februar 2015, 19:56:39
Hi,
ich versuche gerade eine view für mehrere Kalender zu bauen. Leider bekomme ich so ncihts angezeigt.
Ich habe ein calview Abfall und würde mir als erstes einfach mal nur die nächsten drei Termine anschauen. Also habe ich folgendes definiert:

define kalenderAlle readingsGroup Abfall:t_001_bdate,t_001_summary Abfall:t_002_bdate,t_002_summary Abfall:t_003_bdate,t_003_summary  Alle

du versucht eine reeadingsgroup für mehrere calview zu bauen. mehrere kalende rin einer view wird akuell nicht untertsützt von calview
Zitat von: onkel-tobi am 18 Februar 2015, 19:56:39
Angezeigt wird da aber leider dann nichts...
Im Abfall view werden die Termine dargestellt.

t_001_bdate usw. müßten doch auch in dem cal view Objekt irgendwo auftreten, oder mache ich da einen Denkfehler?
korekt, die daten für die readingsgroup müssen im calview vorhanden sein
t_001_bdate, t_001_btime usw sind nur in der default ansicht  vorhanden. wenn du den alten style nutz gibt es diese readings nicht.
deine def der rg sieht gut aus (wenn es dcie readings wirklich gibt), das "Alle" hat sich sicher nur reingemogelt.


define kalenderAlle readingsGroup
Abfall:t_001_bdate,t_001_summary
Abfall:t_002_bdate,t_002_summary
Abfall:t_003_bdate,t_003_summary


oti

Zitatnö sind sie nicht. wenn du pro kalender eine calview-instanz nutz ist es je calview zu mindest was das datum angeht sortiert (ausnahme können mehrere Termine zu unterschiedlichen zeiten an einem tag sein). wie du dann die daten mehrere viewes in der rg sortierst ist dann deine aufgabe / kann durch calview aktuell nicht erledigt werden da es pro view nur einen kalender unterstützt. du könntest alle termine in einen kalender schieben und so das "problem" umgehen. ich werde aber schauen ob ich ggf mehrere kalende pro view einbauen kann

Hallo Chris,

zum Hintergrund:
In unserer Familie hat jeder seinen eigenen Google-Kalender, was sicherlich auch viele andere so nutzen. Die Kalender der anderen Familienmitglieder lasse ich mir in meinem Google-Kalender anzeigen, d. h. ich sehe im Kalender, alle Termine für den Tag, die Woche, u.s.w..
Jetzt hätte ich gerne im CALView einen Kalender, in dem ich alle Termine aus allen Kalendern in der zeitlich richtigen Reihenfolge sehe. So weiß jeder aus der Familie, welche Termine jeder heute hat.

Meine Idee wäre, die Termine in ein Array zu schreiben, wobei das Anfangsdatum und die Anfangsuhrzeit in einen Unix-Timestamp gewandelt werden (wurde hier ja auch schon einmal gesagt). Dann könnte man die Ausgabe danach sortieren und den Timestamp zurückwandeln. Somit wäre auch das "Uhrzeit-Problem" gelöst. Ich habe das in Perl noch nicht gemacht und kann nicht sagen, ob es dabei zu überwindende Hürden gibt, vielleicht können die Profis dazu was sagen. Bei mir wird die Umsetzung sicherlich einige Zeit dauern, aber ich werde mich damit beschäftigen. Sobald ich ein Ergebnis habe, werde ich es posten.

Gruß
OTi

oti

#216
Hallo,

ich weiß nicht ob es hilft und ich bin auch kein Programmierer, aber hier mal mein Beispiel-Perl-Skript. Für jegliche Optimierung bin ich gerne zu haben.  ;)

Das Skript sortiert Termine nach Startdatum und Startuhrzeit.


#!/usr/bin/perl

use strict;
use warnings;
use Date::Parse;

my @Startdatum = ( "19.02.2024", "20.02.2020", "19.02.2036", "19.02.2020" );
my @Startzeit = ( "21:13", "14:24", "16:35", "10:46" );
my @Text = ("Termin_1", "Termin_2", "Termin_3", "Termin_4",);
my @Enddatum = ( "19.02.2024", "20.02.2020", "20.02.2036", "19.02.2020" );
my @Endzeit = ( "22:13", "16:24", "16:35", "11:46" );
my $i;
my @kalnew;

# Startzeit und Startdatum -> Unixtimestamp
# und alles in das Array kalnew schreiben
for($i= 0; $i<= 3; $i++){
  my $j = 0;
  my ($D,$M,$Y) = split(/\./,$Startdatum[$i]);
  my ($h,$m) = split(/\:/,$Startzeit[$i]);
  $kalnew[$i]->[$j] = str2time($M."/".$D."/".$Y." ".$h.":".$m.":00");
  $kalnew[$i]->[$j+1] = $Text[$i];
  $kalnew[$i]->[$j+2] = $Enddatum[$i];
  $kalnew[$i]->[$j+3] = $Endzeit[$i];
}
# Sortierung des Arrays
@kalnew = sort { $a->[0] <=> $b->[0]} @kalnew;

# Zerlegen des Timestamp und Ausgabe
for($i= 0; $i<= 3; $i++){
  my $j = 0;
  my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
  localtime ($kalnew[$i]->[$j]);
  $mon  += 1;
  $year += 1900;
  printf "%02d.%02d.%04d\t%02d.%02d\t", $mday, $mon, $year, $hour, $min;
  $j++;
  print $kalnew[$i]->[$j+1]."\t";
  print $kalnew[$i]->[$j+2]."\t";
  print $kalnew[$i]->[$j+3]."\n";
}


Gruß
OTi

bjoernbo

@Oti, Du meinst, ihr habt einen "Google-Kalender-Account" in diesem sind dann weitere Kalender definiert? Wir haben dies ebenso! Innerhalb des Kalender haben wir vier weitere. Da wäre eine coole Sache, wenn man quasi alle Kalender anzeigen lassen kann.
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

onkel-tobi

Zitat von: chris1284 am 19 Februar 2015, 08:12:32
wenn du den alten style nutz gibt es diese readings nicht.
Das hat geholfen, danke. Nun bin ich fast hapy ;)
Ich habe mir nun eine rg für alle Kalender gebaut, jetzt würde ich nur gerne noch in die Übersicht den Kalendernamen/einen Namen einbinden.
Habe das folgendermaßen (allerdings ohne Erfolg probiert):
my $modtext = "<Datum>,<Uhrzeit>,<Text>,<Endet am>,<End um>,<Kalender> ";
for($i= 1;$i<= ReadingsVal("Tobi","c-tomorrow", 0);$i++){
$modtext .= "Tobi:<Morgen>,tomorrow_".sprintf('%03d',$i)."_btime,tomorrow_".sprintf('%03d',$i)."_summary,tomorrow_".sprintf('%03d',$i)."_edate,tomorrow_".sprintf('%03d',$i)."_etime ","Tobi";}

Ich gehe mal stark davon us, dass ich das"Tobi" ganz am Ende irgendwie anders setzen muss.
Ist vermutlich ein Anfängerfehler :(

Gruß,
Tobi

oti

#219
Hallo Chris,

wie ich ja schon geschrieben habe, gibt es zwei Dinge, die dein Modul perfekt für mich machen würden. Erstens die Sortierung auch nach Uhrzeit und zweitens die Auflistung mehrerer Kalender in einer Übersicht.

Zu Punkt 1 hätte ich folgenden Änderungsvorschlag. Könntest Du dir das mal ansehen? Ich habe die Änderung bei mir getestet, es funktioniert. Aber vielleicht habe ich noch etwas übersehen.

use Date::Parse;
foreach my $item (@termine ){
my @tempstart=split(/\s+/,$item->[0]);
my @tempend=split(/\s+/,$item->[2]);
my ($D,$M,$Y)=split(/\./,$tempstart[0]);
my @bts=str2time($M."/".$D."/".$Y." ".$tempstart[1]);
push @termineNew,{
bdate => $tempstart[0],
btime => $tempstart[1],
summary => $item->[1],
edate => $tempend[0],
etime => $tempend[1],
btimestamp => $bts[0]};
}
#my $termin= \@termineNew;
my $todaycounter = 1;
my $tomorrowcounter = 1;

my $readingstyle = AttrVal($name,"oldStyledReadings",0);

# sort the array by btimestamp
my @sdata = map  $_->[0],
sort { $a->[1][0] <=> $b->[1][0] }
            map  [$_, [$_->{btimestamp}]], @termineNew;



Zum zweiten Punkt hätte ich die folgende Vorstellung:

define KalenderAlle CALVIEW KalenderMax,KalenderPaul,KalenderMaria 1


Meinst Du das wäre umsetzbar?


@bjoernbo
Nicht ganz, wir haben jeder unseren eigenen Google-Account und unseren eigenen Kalender, die anderen können aber über die "private" ical die anderen Kalender bei sich anzeigen.

Gruß
OTi

chris1284


oti


onkel-tobi

Hi OTI,

also mehrere Kalender anzeigen bekomme ich inzwischen über eine rg hin (danke noch mal an chris, s. meinen letzten Beitrag)
Das einzige was noch nicht klappt ist, dass ich anzeigen kann, welcher Termin zu welchem Kalender gehört.
Das schaue ich mir am we mal an. Ich gehe mal davon aus, dass ich da einen perl Fehler gemacht habe.
Sortieren geht dann wohl auch nicht, aber für's erste bin ich glücklich damit.

Gruß,
Tobi

oti

Hallo Tobi,

mehrere Kalender ist auch nicht das Problem. Ich möchte einen Kalender (eine Ansicht) mit allen Terminen von mehreren Kalendern nach Datum und Uhrzeit sortiert.
Das geht meines Erachtens nur im Modul.

Aber wenn Du auch Interesse an einer Sortierung nach Datum und Uhrzeit hast, dann könntest Du ja meine Änderung auch mal testen, d. h.
- Sicherungskopie von 57_CALVIEW.pm anlegen
- Code von Zeile 108 bis 128 komplett mit meinem ersetzen
- fhem neu starten

Danach sollte auch die Sortierung nach Uhrzeit funktionieren. Da es hier ja nur um ein View auf die Daten geht, sehe ich das als sehr unkritisch an. Und sollte es nicht funktionieren, einfach die Sicherungskopie wieder nutzen.

Gruß
OTi


onkel-tobi

Hm, also das Problem kann ich nicht nachvollziehen. Das einzige was ich habe ist, dass er Termine die heute oder morgen sind, 2mal drin sind (aber das ist ja wohl gewollt), hier muss ich noch mal schauen, aber ich glaube da gab es ja schon eine einfache Lösung.
Habe mal Testtermine für heute erstellt, aber die sortiert das Modul stets korrekt.
Wo taucht das Problem bei Dir denn auf, dann kann ich das gerne mal testen.
Hast Du zufällig eine Idee was mein Problem mit den Kalendernamen angeht?

Danke & Gruß,
Tobi