Neues Modul: 57_GCALVIEW Google Kalender Viewer (+Abfall Kalender)

Begonnen von mumpitzstuff, 04 Oktober 2017, 00:02:11

Vorheriges Thema - Nächstes Thema

D3ltorohd

#390
Zitat von: mumpitzstuff am 29 September 2019, 18:19:01
Wenn man einen kalender auf google neu erstellt, wird dieser nicht angezeigt, wenn man die Authentifizierung nicht neu macht. Wenn das bei dir der Fall ist, kann ich dir eine Schritt für Schritt Anleitung geben.

Dann liegt das daran. Ich wollte das etwas sauber trennen, damit ich das in Google schon mal schön einpflegen kann, indem Fall ist das alles danach dazu gekommen. Also bräuchte ich wohl mal deine Schritt für Schritt Anleitung.

Die ReadingsGroup copy & past in die Befehlszeile von FHEM, wo wird das dann hinzugefügt ? Zu meinem Kalender Device ? Muss ich da irgendwas anpassen ? Ich hab das mal so oben rein geschrieben, aber unter meinem Kalender hat sich nichts geändert.
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

mumpitzstuff

#391
Okay dann versuch erst mal die Readingsgroup. Dazu öffnest du dein Kalenderdevice und scrollst ganz nach unten. Dort siehst du den Text "Raw Definition". Das klickst du an und löschst den gesamten Text der dort steht. Bitte wirklich alles löschen! Dann kopierst du du die Readingsgroup Definition aus dem ersten Beitrag da rein und ersetzt ALLE Vorkommen von KALENDER_VIEW durch deinen Device Namen und drückst danach den Button: "Execute commands", der sich ganz unten links befindet. Danach sollte die Readingsgroup angelegt sein. Falls die Readingsgroup die Attribute nicht richtig gesetzt haben sollte, melde dich noch mal, dann muss man da nacharbeiten und das manuell machen. Ich poste dann noch mal wie.

Wie man die geänderten Kalender neu bekommt erkläre ich lieber danach, sonst geht alles durcheinander und es geht wieder gar nichts mehr.

D3ltorohd

Ich danke dir vielmals. Indem Fall steht das rg für ReadingsGroup und damit wird dann dieses spezielle Ansicht angelegt ?

So ich glaube das hat funktioniert, siehe Screen.

Nun müsste man mein Kalender so einstellen, das er wirklich alles zeigt.

Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

mumpitzstuff

#393
Hmm du hast nur 1 Termin in deinem Kalender? Stell mal das Attribut calendarDays auf einen höheren Wert wie z.B. 60, dann sollten mehr Termine sichtbar sein. Aber der eine Termin müsste auch angezeigt werden, was bei dir nicht der Fall ist. Das müsste dann so aussehen wie auf meinem Bild.
Mach mal bitte ein list von deiner Readingsgroup und poste mir das, ich vermute die Attribute wurden nicht übernommen.

list RG_KALENDER

Um jetzt auch deine neuen Kalender verfügbar zu haben musst du folgendes machen:

cd /opt/fhem
ls -all

Dort siehst du 2 Dateien: .gcalcli_cache und .gcalcli_oauth. Diese löschst du mit:

sudo rm .gcalcli_cache
sudo rm .gcalcli_oauth

Danach führst du noch einmal die Authentifizierung durch und die neuen Kalender sind dann sichtbar. Das musst du jedes Mal machen wenn du einen neuen Kalender erzeugst oder einen bestehenden umbenennst!





D3ltorohd

#394
Zitat von: mumpitzstuff am 30 September 2019, 23:46:52
Hmm du hast nur 1 Termin in deinem Kalender? Stell mal das Attribut calendarDays auf einen höheren Wert wie z.B. 60, dann sollten mehr Termine sichtbar sein. Aber der eine Termin müsste auch angezeigt werden, was bei dir nicht der Fall ist. Das müsste dann so aussehen wie auf meinem Bild.
Mach mal bitte ein list von deiner Readingsgroup und poste mir das, ich vermute die Attribute wurden nicht übernommen.

list RG_KALENDER

So hier mal das List von der RG

Wegen dem RG, ich glaube ich muss nur die Schriftfarbe ändern, von weiß in schwarz oder so, dann sieht man's auch siehe Screen. Hab jetzt mal
my $style = 'style="color:'.ReadingsVal($DEVICE, $readingStart."sourcecolor", "white").'"';
durch
my $style = 'style="color:'.ReadingsVal($DEVICE, $readingStart."sourcecolor", "black").'"'; ersetzt. Also white gegen black, aber hat leider nichts geholfen.

EDIT::
Ich glaube das liegt an t_001_sourcecolor white ? Kann das sein ? Wer bestimmt sourcecolor ? In Google ist die Gruppe ja Mischung aus Gelb/Grün.

Internals:
   DEF        <Datum>,<Tag>,<Zeit>,<Termin>,<Ort>
Kalender:t_001_bdate,t_001_weekday,t_001_timeshort,t_001_summary,t_001_location
Kalender:t_002_bdate,t_002_weekday,t_002_timeshort,t_002_summary,t_002_location
Kalender:t_003_bdate,t_003_weekday,t_003_timeshort,t_003_summary,t_003_location
Kalender:t_004_bdate,t_004_weekday,t_004_timeshort,t_004_summary,t_004_location
Kalender:t_005_bdate,t_005_weekday,t_005_timeshort,t_005_summary,t_005_location
Kalender:t_006_bdate,t_006_weekday,t_006_timeshort,t_006_summary,t_006_location
Kalender:t_007_bdate,t_007_weekday,t_007_timeshort,t_007_summary,t_007_location
Kalender:t_008_bdate,t_008_weekday,t_008_timeshort,t_008_summary,t_008_location
Kalender:t_009_bdate,t_009_weekday,t_009_timeshort,t_009_summary,t_009_location
Kalender:t_010_bdate,t_010_weekday,t_010_timeshort,t_010_summary,t_010_location
Kalender:t_011_bdate,t_011_weekday,t_011_timeshort,t_011_summary,t_011_location
Kalender:t_012_bdate,t_012_weekday,t_012_timeshort,t_012_summary,t_012_location
Kalender:t_013_bdate,t_013_weekday,t_013_timeshort,t_013_summary,t_013_location
Kalender:t_014_bdate,t_014_weekday,t_014_timeshort,t_014_summary,t_014_location
Kalender:t_015_bdate,t_015_weekday,t_015_timeshort,t_015_summary,t_015_location
Kalender:t_016_bdate,t_016_weekday,t_016_timeshort,t_016_summary,t_016_location
Kalender:t_017_bdate,t_017_weekday,t_017_timeshort,t_017_summary,t_017_location
Kalender:t_018_bdate,t_018_weekday,t_018_timeshort,t_018_summary,t_018_location
Kalender:t_019_bdate,t_019_weekday,t_019_timeshort,t_019_summary,t_019_location
Kalender:t_020_bdate,t_020_weekday,t_020_timeshort,t_020_summary,t_020_location
   FUUID      5d9233ea-f33f-fc62-40ad-46c8181635eafb1a
   NAME       rg_KALENDER
   NR         69
   NTFY_ORDER 50-rg_KALENDER
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   CONTENT:
     Kalender   1
   CONTENT2:
   DEVICES:
     ARRAY(0x563bc5fa3378)
     ARRAY(0x563bc61341d8)
     ARRAY(0x563bc3f05790)
     ARRAY(0x563bc4804e78)
     ARRAY(0x563bc4805460)
     ARRAY(0x563bc6bf05d0)
     ARRAY(0x563bc6134c10)
     ARRAY(0x563bc5cc4680)
     ARRAY(0x563bc5cc45a8)
     ARRAY(0x563bc6102ca0)
     ARRAY(0x563bc60d3420)
     ARRAY(0x563bc3f054a8)
     ARRAY(0x563bc6cdb970)
     ARRAY(0x563bc6cdb988)
     ARRAY(0x563bc6ceebe0)
     ARRAY(0x563bc6ceebf8)
     ARRAY(0x563bc3f03928)
     ARRAY(0x563bc6bf04b0)
     ARRAY(0x563bc6b68518)
     ARRAY(0x563bc5cc3a08)
     ARRAY(0x563bc5cc3a98)
   fhem:
     lastDefChange 3
     last_update 1569955758.93315
   helper:
     DEF       
     nameStyle  style="font-weight:bold;text-decoration:underline;"
     valueFormat {
  if ($READING =~ /bdate$/)
  {
    my $readingStart = $READING;
    $readingStart =~ s/bdate$//;
    if (0 == ReadingsVal($DEVICE, $readingStart.'daysleft', -1))
    {
      "Heute";
    }
    elsif (1 == ReadingsVal($DEVICE, $readingStart.'daysleft', -1))
    {
      "Morgen";
    }
    else
    {
      # the follwoing line strips the year of the date (remove it if needed)
      substr($VALUE, 0, 5);
    }
  }
  elsif ($READING =~ /weekday$/)
  {
    my $readingStart = $READING;
    $readingStart =~ s/weekday$//;
   
     # the follwoing line strips the weekday down to 3 chars (remove it if needed)
    substr($VALUE, 0, 3);
  }
  elsif ($READING =~ /summary$/)
  {
    my $readingStart = $READING;
    $readingStart =~ s/summary$//;
    my $link = ReadingsVal($DEVICE, $readingStart.'url', '');
    my $age = ReadingsVal($DEVICE, $readingStart.'age', undef);
    my $style = 'style="color:'.ReadingsVal($DEVICE, $readingStart."sourcecolor", "white").'"';
    if (defined($age))
    {
      $link =~ s/\>link\</ $style\>$VALUE \($age\)\</;
    }
    else
    {
      $link =~ s/\>link\</ $style\>$VALUE\</;
    }
    $link;
  }
}
     valueStyle {
  my $readingStart = $READING;
  $readingStart =~ s/(t_\d+_).+/$1/;
  'style="color:'.ReadingsVal($DEVICE, $readingStart."sourcecolor", "white").'"'
}
     positions:
       Kalender.t_001_bdate 2:1
       Kalender.t_001_location 2:5
       Kalender.t_001_summary 2:4
       Kalender.t_001_timeshort 2:3
       Kalender.t_001_weekday 2:2
       Kalender.t_002_bdate 3:1
       Kalender.t_002_location 3:5
       Kalender.t_002_summary 3:4
       Kalender.t_002_timeshort 3:3
       Kalender.t_002_weekday 3:2
     values:
       formated:
         undef
         ARRAY(0x563bc6cdaf38)
         ARRAY(0x563bc6cc3a38)
         ARRAY(0x563bc6905358)
         ARRAY(0x563bc6d9e050)
         ARRAY(0x563bc6e55ad0)
       orig:
         undef
         ARRAY(0x563bc6e55650)
         ARRAY(0x563bc6daaad0)
         ARRAY(0x563bc6e55a28)
         ARRAY(0x563bc6e55818)
         ARRAY(0x563bc6e555a8)
       prefixsuffix:
         undef
         ARRAY(0x563bc6db7488)
         ARRAY(0x563bc6e4cd30)
         ARRAY(0x563bc6daa308)
         ARRAY(0x563bc6e5a798)
         ARRAY(0x563bc6e48450)
Attributes:
   nameStyle  style="font-weight:bold;text-decoration:underline;"
   nonames    1
   notime     1
   room       Kalender
   valueFormat {
  if ($READING =~ /bdate$/)
  {
    my $readingStart = $READING;
    $readingStart =~ s/bdate$//;
    if (0 == ReadingsVal($DEVICE, $readingStart.'daysleft', -1))
    {
      "Heute";
    }
    elsif (1 == ReadingsVal($DEVICE, $readingStart.'daysleft', -1))
    {
      "Morgen";
    }
    else
    {
      # the follwoing line strips the year of the date (remove it if needed)
      substr($VALUE, 0, 5);
    }
  }
  elsif ($READING =~ /weekday$/)
  {
    my $readingStart = $READING;
    $readingStart =~ s/weekday$//;
   
     # the follwoing line strips the weekday down to 3 chars (remove it if needed)
    substr($VALUE, 0, 3);
  }
  elsif ($READING =~ /summary$/)
  {
    my $readingStart = $READING;
    $readingStart =~ s/summary$//;
    my $link = ReadingsVal($DEVICE, $readingStart.'url', '');
    my $age = ReadingsVal($DEVICE, $readingStart.'age', undef);
    my $style = 'style="color:'.ReadingsVal($DEVICE, $readingStart."sourcecolor", "white").'"';
    if (defined($age))
    {
      $link =~ s/\>link\</ $style\>$VALUE \($age\)\</;
    }
    else
    {
      $link =~ s/\>link\</ $style\>$VALUE\</;
    }
    $link;
  }
}
   valueStyle {
  my $readingStart = $READING;
  $readingStart =~ s/(t_\d+_).+/$1/;
  'style="color:'.ReadingsVal($DEVICE, $readingStart."sourcecolor", "white").'"'
}


Also hab das ganze neu authentifiziert, das kam dabei raus, eigentlich ganz in Ordnung, nun fehlen aber noch Geburtstag, Erinnerungen:

Access  Title
------  -----
  owner  Events
  owner  Abfallentsorgung
reader  Contacts
reader  Feiertage in Deutschland
reader  Week Numbers


Week Numbers und Contacts kann man doch ausfiltern, braucht man nicht wirklich in Fhem oder ?
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

mumpitzstuff

Das was du bei Google als Geburtstage und Erinnerungen siehst sind keine echten Kalender. Diese Dinge verwaltet Google ausschließlich selbst und du kannst dort auf direktem Wege auch nichts ändern oder hinzufügen. Gcalcli hat drauf jedenfalls keinen Zugriff. Ich musste mir daher einen extra Kalender für die Geburtstage erstellen.

Das was du geändert hast war nur der defaultwert, der verwendet wird, wenn kein sourcecolor verwendet wird. Das solltest du nicht verändern müssen. Im kalenderdevice selbst kannst du aber einem Kalender eine Farbe zuordnen und alle Termine dieses Kalenders haben dann diese Farbe in der Readingsgroup.

attr DIENSTPLAN_VIEW sourceColor Müllabfuhr:orange,Contacts:red

Alle Müllabfuhrtermine werden orange und alles was in contacts steht wird rot.

D3ltorohd

Dein Tool stellt ja den die Informationen aus dem Kalender bereit, eigentlich gleich wie das Calendar Modul richtig ? Könnte ich hier nicht mit dem MyAbfall Modul die Daten anstatt vom Calender Modul von deinem Abgreifen, dieses MyAbfall Modul wandelt die Daten passend um und man kann das dann so in FTUI nutzen.
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

mumpitzstuff

#397
Nein. Wenn du das Abfall Modul verwenden möchtest, dann ist dafür zwingend das Calendar Modul notwendig. Zusammen mit dem CALVIEW Modul sollte dann vielleicht auch was mit FTUI funktionieren. Mein Modul hat sich aber zu großen Teilennan CALVIEW und dem Abfall Modul orientiert und sollte sich daher ähnlich an FTUI anbinden lassen. Hierbei kann ich Mangels Wissen aber nicht unterstützen.

So sieht die Abfall Anzeige bei mir aus.

Kharim

Vielleicht eine interessante Info / Randnotiz

Ich hatte seit einigen Tagen, das Problem, dass mein Google-Kalender nicht mehr aktualisiert wurde und somit die letzten (gecachten Einträge am Tablet stehen blieben..)
Im Log zeigte sich die "beliebte" Meldung

ERROR evaluating {GCALVIEW_DoEnd('Kalender|kjsdkhfkds|')}: Can't use string ("") as an ARRAY ref while "strict refs" in use at ./FHEM/57_GCALVIEW.pm line 648.

Soweit ich mich hier im Forum einlesen konnte, gibt es dazu Meldungen von ungültigen Terminen oder notwendigen Änderungen in der PM Datei.

Bei mir lag der Hund aber wo ganz anderes begraben.
Ich betreibe einen eigenen DNS "Server" als Filter (pihole)
Und dieser hatte, nach einem Update, "www.googleapis.com" auf der Blacklist.

Ich kenne die hintergründigen Funktionen von GCALVIEW nicht, aber nach dem whitelistening der URL konnte der Kalender wieder abgerufen werden.

Will heißen, der Fehler kann im Grunde auch auf eine nicht vorhandene / defekte Internetverbindung hin deuten.

Grüße,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

jle

Hallo Alle,
ich nutze dieses tolle Modul seit ca. einem Jahr und steuere abhängig von meinen Kalendereinträgen z.B. Heizung und Rollladen.

Seit einiger Zeit funktioniert es leider nicht mehr. Es werden keine Kalendereinträge mehr abgerufen.

Im Logfile steht:
2019.11.02 09:27:47 3: gCal blocking call already running
2019.11.02 09:27:53 3: gCal: export PYTHONIOENCODING=utf8 && gcalcli agenda 11/02/2019 11/17/2019  --calendar "Jan" --calendar "work" --calendar "FlexR" --details calendar --details url --details location --details description --details email  --tsv
2019.11.02 09:27:53 3: gCal: something went wrong (check your parameters) - Traceback (most recent call last):
  File "/usr/local/bin/gcalcli", line 9, in <module>
    load_entry_point('gcalcli==4.0.4', 'console_scripts', 'gcalcli')()
  File "build/bdist.linux-armv7l/egg/gcalcli/cli.py", line 155, in main
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 1200, in AgendaQuery
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 1182, in _display_queried_events
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 625, in _tsv
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 233, in _shorten_url
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 168, in get_url_service
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/discovery.py", line 235, in build
    "name: %s  version: %s" % (serviceName, version))
googleapiclient.errors.UnknownApiNameOrVersion: name: urlshortener  version: v1

2019.11.02 09:27:53 1: ERROR evaluating {GCALVIEW_DoEnd('gCal||')}: Can't use string ("") as an ARRAY ref while "strict refs" in use at ./FHEM/57_GCALVIEW.pm line 662.


Ich hab natürlich zuvor ein bisschen hier im Forum gesucht, aber für meinen konkreten Fall leider nichts gefunden.

Ich hab die .gcalcli_cache und .gcalcli_oauth bereits ein Mal gelöscht und neu authentifiziert.

Auch ein Disable -> reboot -> enable habe ich zwischenzeitlich versucht..
Nun weiß ich nicht mehr weiter.

FHEM hab ich letzte Woche aktualisiert.

gcalcli Version:
pi@raspberrypi:/opt/fhem $ sudo -u fhem gcalcli --version
gcalcli v4.0.4 (Eric Davis, Brian Hartvigsen, Joshua Crowgey)


gcalcli list liefert alle Kalender:

pi@raspberrypi:/opt/fhem $ sudo -u fhem gcalcli list
Access  Title
------  -----
  owner  Jan
  owner  work
reader  FlexR
reader  Contacts
reader  Week Numbers


Wenn ich nur den Agenda-Befehl aufrufe bekomme ich auch einen Fehler:

pi@raspberrypi:/opt/fhem $ sudo -u fhem gcalcli agenda 11/02/2019 11/17/2019  --calendar "Jan" --calendar "work" --calendar "FlexR" --details calendar --details url --details location --details description --details email  --tsv
Traceback (most recent call last):
  File "/usr/local/bin/gcalcli", line 9, in <module>
    load_entry_point('gcalcli==4.0.4', 'console_scripts', 'gcalcli')()
  File "build/bdist.linux-armv7l/egg/gcalcli/cli.py", line 155, in main
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 1200, in AgendaQuery
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 1182, in _display_queried_events
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 625, in _tsv
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 233, in _shorten_url
  File "build/bdist.linux-armv7l/egg/gcalcli/gcal.py", line 168, in get_url_service
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/discovery.py", line 235, in build
    "name: %s  version: %s" % (serviceName, version))
googleapiclient.errors.UnknownApiNameOrVersion: name: urlshortener  version: v1


Wenn ich den Parameter ,, —details url" weg lasse, bekomme ich Ergebnisse.

Was muss ich machen, daß es in FHEM wieder funktioniert?
Bin über jede Hilfe dankbar ;-)

Viele Grüße

jle

Okay, hab's nun..
Hab mal den Source überflogen und gesehen, daß an vielen Stellen zwischen gcalcli Version < 4 bzw >= 4 unterschieden wird, was aber scheinbar überall / meistens noch auskommentiert ist und die < 4 Version zieht..

Ich hab den Agenda-Befehlaufruf Mal für die 4er Version Einkommentiert und nun funktioniert es wieder.

Vermutlich wird das Modul gerade dahingehend erweitert oder?

mumpitzstuff

Ich kann leider nicht ganz folgen. Es gab mal eine Zwischenversion von gcalcli, in der ein anderer Befehl notwendig war z.B. wurde dort longurl anstatt url verwendet. Das war aber schnell wieder obsolet und ich habe es daher entfernt. Dein Problem sollte demnach durch ein Update von gcalcli behoben werden können.

RoBra81

Hallo,

Nicht ganz: in der (vermutlich) aktuellen Version von gcalcli heißt ein Parameter config-folder, der in Version 3 noch configFolder hieß - ich musste daher gestern auch die Version im Quellcode auf 4 stellen...

Ronny

Gesendet von meinem LYA-L29 mit Tapatalk


carlos

Dazu habe ich schon am 27.September auf github einen issue aufgemacht.
Habe es dann bei mir im Modul geändert und vom update ausgeschlossen.
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

mumpitzstuff