Geburtstagskalender, Alter berechnen

Begonnen von Pankratius, 04 Dezember 2016, 20:39:21

Vorheriges Thema - Nächstes Thema

Pankratius

Hallo zusammen,

ich habe hier im Forum gesucht, aber leider keine Lösung gefunden.

Mein Wunsch ist es für die Anzeige von Geburtstagsterminen das
jeweilige Alter des Geburtstagskindes anzuzeigen.

Die Geburtstage sind als ical-Kalender verfügbar.


define calGeburtstage Calendar ical url http://localhost/davical/public.php/XXXX/birthdays.ics 6000
attr calGeburtstage hideLaterThan 20d
attr calGeburtstage hideOlderThan 10d
attr calGeburtstage room Kalender


Diese Einträge werde als CALVIEW verarbeitet

define cvGeburtstage CALVIEW calGeburtstage 2
attr cvGeburtstage modes next
attr cvGeburtstage room Kalender


Und mit TabletUI gebe ich diese Informationen so aus:

                               <li data-row="1" data-col="3" data-sizex="2" data-sizey="1">
                                        <header>
                                        <div data-type="label" class="large">Geburtstage</div>
                                        </header>
                                        <table width="100%" >
                                                <tr>
                                                        <td>
                                                                <div data-type="label" data-device="cvGeburtstage" data-get="t_001_bdate" data-part="(\d\d\.\d\d\.).*"></div>
                                                        </td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_001_summary" data-part="1"></div></td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_001_summary" data-part="3"></div></td>
                                                </tr>
                                                <tr>
                                                        <td>
                                                                <div data-type="label" data-device="cvGeburtstage" data-get="t_002_bdate" data-part="(\d\d\.\d\d\.).*"></div>
                                                        </td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_002_summary" data-part="1"></div></td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_002_summary" data-part="3"></div></td>
                                                </tr>
                                                <tr>
                                                        <td>
                                                                <div data-type="label" data-device="cvGeburtstage" data-get="t_003_bdate" data-part="(\d\d\.\d\d\.).*"></div>
                                                        </td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_003_summary" data-part="1"></div></td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_003_summary" data-part="3"></div></td>
                                                </tr>
                                                <tr>
                                                        <td>
                                                                <div data-type="label" data-device="cvGeburtstage" data-get="t_004_bdate" data-part="(\d\d\.\d\d\.).*"></div>
                                                        </td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_004_summary" data-part="1"></div></td>
                                                        <td class="r"><div data-type="label" data-device="cvGeburtstage" data-get="t_004_summary" data-part="3"></div></td>
                                                </tr>
                                        </table>
                                </li>


Soweit alles gut
aus dem Eintrag t_001_summary = "Marga XXXX, #1921" wird der richtige Eintrag angezeigt. Siehe Anhang.

Nun möchte ich aber statt #1921 das Alter eingeben, also
jetziges Jahr - 1921 = 95 Jahre, bzw. korrekter: Termin - Wert von #1921 = 95
(damit schlägt man auch den Fall dass man am 31.12. einen Geburtstag ab dem 1.1. anzeigen will).

Nun suche ich eine Möglichkeit diese Berechnung durchzuführen um als Rückgabe die 95 zu erhalten.

Ist dieses nur mit Perl möglich oder hat jemand bereits eine Lösung?

Vielen Dank
Rüdiger

chris1284

ich denke du wirst da nicht drumherum kommen. ich hatte mal den plan eine art attr in calview einzubauen das diese view als geburtstagskalender kennzeichnet und dann intern ein bestimmtes feld als jahreszahl her nimmt und rechnet. danach alles als neues reading t_xxx_age auszugeben. habe ich bisher aber noch nicht angefangen das es bisher kaum anfragen dazu gab (würde dann natütlich auch im tui widget calview einfließen)

chris1284

ich habe die calview erweiter:
- calview um description reading erweitert (Beschreibung eines Termins)
- es gibt ein attribut "isbirthday": wird dieses gesetzt wird in description nach inhalt gesucht und dieser vom aktuellen jahr abgezogne
- das ergebniss steh im reagding t_xxx_age / tomorrow_xxx_age /  today_xxx_age

bedingt eine view für geburtstage

todo:
- jareszahlenfeld variabel gestalten (description / location /...)
- prüfung ob jahreszahlenfeld eine (4stellige) zahl enthält die kleiner als das aktuelle jahr ist

Christoph

Hallo Chris,

ist die Änderung schon ins normale fhem Update eingeflossen ?
Finde das Attribut nicht

Version gibt folgendes aus, Fhem ist aktuell:

57_CALVIEW.pm           12837 2016-12-19 20:53:48Z chris1284

Gruß Christoph

chris1284

nein, läuft bei mir als test. bisher soweit i.O. spätestens am we werde ich es einchecken

chris1284


tomster

Servus Chris,

gibt es einen bestimmten Grund dafür, dass man für die Geburtstagsberechnung - das ist doch das yobfield, oder? - "nur" die Felder _description oder _location auswählen kann? In meinem Fall (Auslesen eines Google Kalenders) habe ich nämlich gar keine _description- und _location gibt den Ort an. Das Geburtsjahr steht zusammen mit dem Namen im Feld _summary. Das kann man nur dummerweise nicht auswählen...

Zudem stelle ich mir die Frage, ob es nicht Sinn machen könnte das Modul um eine Angabe "der Tage bis..." zu einem Termin zu erweitern. Ein Reading das aus dem heutigen Datum abzüglich des Startdatums des jeweiligen Termins ein "in X Monat(en)/Tag(en)/morgen/heute" ausgibt. Klar, ein UserReading ist auch kein Ding, aber "einheitlicher" wäre es, wenn das Modul diese Berechnung selbst anstellen könnte, oder?

Was meinst?
LG,
Tom

chris1284

#7
ZitatIn meinem Fall (Auslesen eines Google Kalenders) habe ich nämlich gar keine _description- und _location gibt den Ort an. Das Geburtsjahr steht zusammen mit dem Namen im Feld _summary. Das kann man nur dummerweise nicht auswählen...

was ist das für einer.? ich habe auch mal einen goolge-geburtsagskalender gehabt den google aus den kontakten generiert hat. diesen könnte man aber nicht im calendar nutzen (somit nicht in calview). deswegen habe ich diese Termine stupf in einen neuen googlecalendar kopiert und dort dann auch die geburstjahre in description/locaction geschrieben.


_summary zu durchsuchen nach einer 4 stelligen zahl wäre natürlich auch möglich

ZitatZudem stelle ich mir die Frage, ob es nicht Sinn machen könnte das Modul um eine Angabe "der Tage bis..."

da stell ich mir die frage wer das wirklich braucht/nutzen würde, ich wüsste nicht wozu aber in fhem wird ja oft alles mögliche angezeigt nur wiel man es kann  ;D

Das errechnen der tage bis zum nächsten termin (muss man ja nicht nur auf geburtstage anwenden) finde ich an sich im modul abfall schon für mich sinnfrei (auch wennich es aktuell in der ui noch per warn-symbol) anzeigen lasse. mich interessiert eigentlich nur muss ich heute oder morgen was rausstellen und nicht in ob in 10 tagen irgendwelcher müll abgeholt wird.

ich schaue mir beides an (_summary +  _daysleft)



chris1284

wenn du den kontakte und kreise google default kalender in fhem hast, wäre ich interessiert wie du ihn rein bekommen hast. der hat ja nur ne html-adresse und keine private ical

tomster

Ich hab den "Default-Kalender" meines Google-Accounts gar nicht eingebaut, geschweige es versucht. Mir war es bislang schon immer ein Gräuel, wenn alle Terminarten in einem einzigen Kalender verwurschtelt sind. Darum hab ich auf Google einen "Sub-Kalender" mit den Geburtstagen und noch einen mit der Abfallabholung angelegt.
Beide sind separat mittels Calendar-Modul (=ical) in FHEM definiert. In Deinem CALVIEW hab ich dann einfach beide Kalender zusammen im DEF eingetragen. Das hat aus meiner Sicht den Vorteil, dass in den Readings für jeden Eintrag nun auch immer gleich die _source mit angegeben ist. Damit kann ich im FTUI ganz einfach unterscheiden um welche Terminart es sich handelt und vor dem Eintrag ein entsprechendes Icon anzeigen lassen.

Hintergrund ist, dass ich derzeit an einem DIY-"Magic Mirror" (MM) bastle, dessen GUI ich gerne mit FTUI realisieren möchte, weil ich nicht noch ein System (MM + FHEM/FTUI) pflegen, bzw. rumstehen haben möchte. Von daher kann ich Dir versprechen, dass die _daysleft zumindest in meinem Fall nicht nur da sind, weil man es kann, sondern auch einen nicht außer Acht zu lassenden (WAF-)Nutzen haben.

Klar, ein UserReading wäre auch möglich, aber manchmal frag ich mich ob es wirklich sinnvoll ist bestimmte Modul-Funktionen von jedem Nutzer immer "zu Fuß" einbauen zu müssen, nur weil man es kann ;-)

chris1284

ok, wie gesagt die daysleft und jahr aus summary schaue ich mir an, aber wenn du nen normalen calendar nutzt kannst du die jahrezahl doch einfach in description (feld beschreibung eintragen. das ist

tomster

Klar, kann ich die Geburtsjahre von der _summary in die _description umschreiben. Mal abgesehen, dass das knapp 400 Einträge sind, hätt ich aber auf den Geräten, die kein FHEM sind (und nicht ausrechnen können, der wievielte Geb es gerade ist) zumindest das Geburtsjahr gern auf einen Blick im Eintrag stehen. Beide Felder "pflegen" kommt aus Benutzergründen (Frau trägt auch ein) irgendwie weniger in Frage.
Klingt komisch, is aber so.

chris1284

ich habe nun eingebaut das wenn attr yobfield _summary das feld summary nach den ersten 4 aufeinanderfolgenden zahlen durchsucht wird und damit gerechnet.
bedeutet wenn im termin zb tante otto 01.02.1900 steht wird 1900 gefiltert und von terminjahr (2017 zb) abgezogen und das alter 117 ausgegeben

chris1284

reading daysleft wurde auch eingebaut

tomster

Servus Chris,
bin noch bis 10.02. ohne wirklichen Zugang zur "FHEM-Welt", sag aber schon Mal: Vielen Dank!
Test gips alsbald ich wieder in der Zivilisation bin.
LG,
Tom

Ma_Bo

NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

tomster

Zitat von: chris1284 am 28 Januar 2017, 18:34:12
reading daysleft wurde auch eingebaut
Servus Chris,

hab die neue Version gerad eingebaut. Das Alter aus dem summary-Reading funktioniert einwandfrei. Bei daysleft haben wir uns wohl mißverstanden. Ich dachte daran, dass bei daysleft=0 als Reading (bspw. t_001_daysleft_long) "Heute", bei daysleft=1 als Reading "Morgen" und ansonsten "in X Tagen"  angezeigt wird. Das würde es mir im FTUI deutlich leichter machen, als für jeden Tag einige Extra-Abfragen einzubauen.
Sorry, wenn das nicht rübergekommen ist...

LG,
Tom

chris1284

ich kann gerne noch ein readings daysleft_long einbauen wenn daysleft =0 "heute" und daysleft=1 "morgen" und daysleft >1 "in x Tagen"

tomster

Das wär echt spitze! Vielen Dank schon Mal dafür.

chris1284


tomster


chris1284

ich muss sagen das ich es vorher nicht gedacht hätte aber ich nutze das mit meinem calview widget nun fast ausschließlich in der tabletui mit data-get all hat man so schöne kompakte "lerserliche"  übersichten

tomster

Freut mich, dass die Idee Anklang findet. Ich bin auch der Meinung, dass es der Übersichtlichkeit sehr dienlich ist.
Zudem hilft es mir enorm in der Umsetzung des FTUIs für mein Magic-Mirror-Projekt.
Und deshalb schlichtweg nochmal: Vielen Dank!

Andy89

coole Sache mit der Geburtstagsberechnung in dem Modul =)
Bisher habe ich das alles in einer myUtils gemacht. Jedoch macht die noch eine kleine Sache minimal "besser"/UI freundlicher. Könntest du noch das Geburtsjahr aus dem summary rausfiltern? Oder weißt du, ob man das evtl per Regex direkt im FTUI rausfiltern könnte?

Danke aber auf jeden Fall für die Berechnung =) Dann kann ich mir meine nun sparen  ;D ;D

Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

chris1284

Zitat von: Andy89 am 04 Februar 2017, 19:14:06
Könntest du noch das Geburtsjahr aus dem summary rausfiltern?

wie meinst du das? für die berechnung hole ich es schon aus der summary wenn in yobfield = _summary gesetzt ist.
meinst du das geburtsjahr zusätzlich noch als reading oder wie?

Andy89

Zitat von: chris1284 am 04 Februar 2017, 21:35:33
wie meinst du das? für die berechnung hole ich es schon aus der summary wenn in yobfield = _summary gesetzt ist.
meinst du das geburtsjahr zusätzlich noch als reading oder wie?

ok ich gebe zu meine Formulierung war sch...lecht...
mit rausfiltern meinte ich löschen.

Beispiel:
Originalsummary: Vorname Nachname Geburtsjahr  zB Max Mustermann 1900
wenn in yobfield = _summary drin steht, dann fände ich es cool, wenn das Geburtsjahr aus dem summary entfernt wird
Neues Summary: Vorname Nachname zB Max Mustermann

Oder kann man das Geburtsjahr irgendwie anders einfach rauslöschen?

Ich hoffe, dass das nun verständlicher ist.... ;D

Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

tomster

#26
Zitat von: Andy89 am 05 Februar 2017, 13:38:43
Oder kann man das Geburtsjahr irgendwie anders einfach rauslöschen?

Das ist eigentlich eine gute Frage. Zunächst dachte ich, dass data-part DER Tipp für Dich sein sollte.
Wenn Du in Deinem Kalender z.B. einen Eintrag "Max Mustermann 1976" stehen hast, dann stellt das label-Widget eine "Leerstellen-separierte" Aufbereitung des Readings bereit. So könnst Du mit data-part="1" nur "Max", mit data-part="2" nur "Mustermann", etc. anzeigen lassen. Leider kann data-part aber anscheinend kein array, so wie data-part='["1","2"]'. data-part="1,2" funzt auch nicht. Vielleicht hat setstate sich da aber auch eine andere Syntax ausgedacht...

Auch habe ich es nicht hinbekommen ein funzendes RegEx zu erstellen. Ich bin fürwahr kein RegEx-Checker, dachte aber ein simples

[^0-9]+

sollte reichen, wenn im "Namensteil" keine Zahlen, sondern nur Ziffern vorkommen. Funzt aber leider auch nicht.
Vielleicht stellst Du die Frage lieber auch im FTUI-Board.


--edit--
So haut der RegEx hin bei mir:

data-part="([\D.-]+).*"

Zumindest bei o.a. Kalendereinträgen.

chris1284

#27
der regexp im calview moduk findet die zahl, müsste also nur dahin erweitert werden sie zu löschen.
am we werde ich denke ich dafür zeit haben mir das nochmal anzusehen.


tomster

Ich bekomme im FTUI die Jahreszahl mit obigem RegEx wunderbar "rausgelöscht". Wäre es aber nicht sinnvoller eine Funktion "substituteyr4age" einzubauen, die bei gesetztem Flag automatisch im summary-Reading die Jahreszahl z.B. 1971 gegen das Alter (46) ersetzt?

chris1284

Zitat von: tomster am 15 Februar 2017, 11:57:58
Wäre es aber nicht sinnvoller eine Funktion "substituteyr4age" einzubauen, die bei gesetztem Flag automatisch im summary-Reading die Jahreszahl z.B. 1971 gegen das Alter (46) ersetzt?

finde ich nicht. das alter steh im reading age, warum also 2 mal anzeigen per default. dann kommt der nächste mit "ich will das alter in summary aber nicht in () sondern {}" oder mit dem satz "xyz wird xx jahre alt". da sehe ich nur 1 weg:
eine art "substsummary" attr wo jeder seinen quark selber definieren muss

tomster

Überredet. Macht wohl deutlich mehr Sinn.
Danke an dieser Stelle nochmal für Deinen "Support". Das Modul ist wirklich eine Bereicherung!

tomster

Was mir aufgefallen ist, nchdem ich einige weitere Kalender hinzugefügt habe:

Im reading t_xxx_age steht bei Einträgen, die keine 4-stellige Jahreszahl im yobfield haben (also quasi alle, die keine Geburtstage sind) immer die aktuelle Jahreszahl. Vermutlich, weil Du ja eine simple Subtraktion der aktuellen Jahreszahl minus Geburtsjahr machst. Wäre es da nicht sinnvoller in diesem Fall gar nichts im Reading stehen zu haben?
Eigentlich will ich ja nur dann das Alter ausgegeben haben, wenn es sich tatsächlich um einen Geburtstag handelt. Wenn bei der Papiertonne "2017" steht, dann verwirrt das wohl mehr, als dass es hilft....


tomster

Läuft einwandfrei! Danke, das war mal wieder schnell!

chris1284

bei mir auch, ist morgen im update. danke fürs testen

Porsti

Hi,

habe auch schon immer vor einen Geburtstagkalender in fhem anzulegen.
Habe mal eine frage zu der ical Datei.
Mit welcher Software erstellt ihr die iCal Datei?
Habe es mit Outlook 2013 versucht aber bin daran Gescheitert einen Geburtstag anzulegen und nicht einen Termin.

Gruß
Porsti
____________________________________
fhem 6.2  auf Raspberry 3b
Homematic HM-CC-RT-DN / HM-TC-IT-WM-W-EU / HM-SEC-SCo / HM-LC-SW1-PL2
SIGNALduino, KNX (Merten, MDT, Siemens, ABB)

chris1284

aber ein geburtstag ist doch auch nur ein termin?!  :o serientermin immer am zb 1.12.
ansonsten wozu lokale ical datei.? die termine hab ich einfach mit im googlecalendar
was google an geburtstagen aus den kontakten anzeigen kann man auch nicht einbinden (habe ich einfach in meinen googlekalender kopiert)

im outlook würde ich das als termin (ganztägiges ereignis) vom serienmuster jährlich am x.x. ohne enddatum anlegen (man weiss ja nicht wie alt die leute werden  ;D )

trinitywhm

Das mit der Alterberechnung im Geburtstagskalender ist wirklich super.

Eine Frage habe ich allerdings: Ich bin es gewohnt Geburtstage als Serientermine anzulegen mit dem Tag der Geburt als Startdatum und dann jährliche Wiederholung mit offenem Ende. Wenn ich die Termine allerdings so in einen Kalender eintrage und das Alter bereche, kommt das Alter raus, wie alt derjenige heute (bspw. zwei Tage VOR seinem Geburtstag ist). Und in daysleft steht somit auch ein negativer Wert drin.
Das läßt sich nur verhindern wenn man den Geburtstag als normalen Termin (ohne Wiederholung) einträgt. Dann wird das Alter korrekt berechnet und das daysleft hat einen positiven Wert. Wenn ich aber all meine Geburtstage so eintrage, dann müsste ich ja für nächstes Jahr meine Geburtstage wieder neu eingeben, oder bin ich jetzt auf dem Holzweg?

chris1284

ich habe alle geburstage als serientermin eingetragen. ganztägig mit jährlicher wiederholung, ende nie. hast du evtl eine erinnerung eingestelllt,  2tage vorher?

trinitywhm

Nein, ohne Erinnerung.
Serientermin beginnt am Tag der Geburt, endet nie, jährliche Wiederholung.

Aber ich hatte eben eine Idee woran es auch hier liegen könnte. Habe schon an anderer Stelle mit dem Calview ein bisschen rumprobiert (Abfall-Modul) Wenn man die Attribute hideOlderThan und hideLaterThan verwendet, dann passt das auch mit den korrekten Geburtstagsangaben.

M.Piet

Hallo Zusammen,

bin grad dabei das neben meinem Müllkalender umzusetzen.
Legt ihr eure Geburtstage bei Google manuell als Serientermin an oder nutzt ihr den automatischen Eintrag wenn bei einem Kontakt ein Geburtstag eingetragen ist?
Ich habe das Problem, das ich bei Google nur den "normalen" Kalender freigeben kann, aber den Geburstagskalender nicht. Das sind ja in einem Google-Kalender 2 getrennte Kalender.
Ist das bei euch auch so? Oder wo kommen die Daten der Geburtstage bei euch her?

Bei mir kommen im CalView nur die Einträge an, die ich in den "normalen" Kalender schreibe, nicht die des Geburtstagskalenders.

tomster

Ich habe alle Geburtstagstermine als Serientermin in einem Unterkalender angelegt. In einem weiteren Unterkalender sind dann die Mülltermine als iCal von meinem "Provider" importiert.
Ich hole die beiden (Unter-)Kalender aber über jeweils separate Calendar-Definitionen, respektive iCal-Links, ab. Dadurch habe ich innerhalb FHEM schon die "Herkunft" definiert und kann problemlos nach Geburtstag oder Müll sortieren.

M.Piet

Hey Tomster.

ja genauso habe ich es jetzt umgesetzt. Mein Geburstagskalender funktioniert. :)

Nun habe ich eine Seite vorher einen Screenshot von dir gesehen (siehe unten).
Wie hast du es final hinbekommen, das er das Alter anzeigt (rot markiert)? Über eine kurze Erklärung und/oder den HTML würde ich mich sehr freuen.

tomster

Puhh, da fragst Du mich was...
Der Screenshot ist aus einem Entwicklungsstand, den ich schon länger nicht mehr verwende. Mir waren die Werte in den warn-classes einfach zuu schlecht zu entziffern.
Aber soweit ich mich erinnere hatte ich einfach dem label eine warn-class verpasst, die eben z.B. das Reading t001_age aus dem CALVIEW-device ausliest.

Inzwischen löse ich es wie im Screenshot unten. Eigentlich ist es mir nämlich herzlich wurscht, welches Baujahr mein Geburtstagskontakt hat.
Ich will einfach nur wissen, wie alt er wird ;-)
Der aktuelle Stand ist wie folgt definiert. Die css-Klassen, die ich verwende, musst Du natürlich in einer "user.css" (oder wie Du sie nennen willst) entsprechend definieren.
Meine sind auch noch nicht endgültig, weil ich noch an ein paar Feinheiten feile. Prinzipiell sollte der Code aber auch bei Dir funktionieren, denk ich.

<div class="row-1-7">
<div data-type="symbol" data-device="Kalender" data-get="t_001_source" data-on-colors='["#FFFFFF","#FFFFFF"]'
        data-states='["Geburtstage","Abfallkalender","L","F","K","T"]' data-icons='["fa-birthday-cake","fa-trash","L","F","K","T"]' class="cake col-1-15"></div>
<div class="left-align inline">
        <div data-type="label" data-device="Kalender" data-get="t_001_summary" data-part="([\D.-]+).*" class="calendar inline nowrap"></div>
        <div data-type="label" data-device="Kalender" data-get="t_001_age" class="calendar inline nowrap"></div></div>
<div data-type="label" data-device="Kalender" data-get="t_001_daysleftLong" class="calendar col-25 right right-align"></div>
</div>

elmer

Super Modul, Geburtstag und Alter finde ich echt Klasse. Wo muss das Geburtsjahr beim Google Kalender eingegeben werden, ich habe es bisher nur geschafft wenn ich es in den Termin mit übernommen habe, ist aber nicht die beste Lösung.

Kann man das ganze auch per Pushover versenden, also immer den Termin von heute?

LaserBrenner

Hallo,
genau diese Frage stelle ich mir auch gerade....

So wie ich das verstehe:
- Google Kontakte Geburtstagskalender kann man nicht verwenden da es kein Ical Unterstützer
- Daher alle Geburtstage als Ferienterminen in einen se beraten google Kalender übernehmen
-> hier kann man aber nicht das Geburtsjahr z.B.1978 eingeben

Aber wie/wo bekomme ich die Info den eingegeben??

gruß
Matthias

LaserBrenner

oder habe ich die Antwort irgendwo überlesen?

chris1284

Zitat von: LaserBrenner am 01 April 2019, 14:54:21
oder habe ich die Antwort irgendwo überlesen?

du setzt das Attribut isbirthday = 1 - dann wird gerechnet.
das Geburtsjahr kannst du dort hin schreiben wo das Attribut yobfield hin zeigt (wenn nicht gesetzt --> Jahr in Terminbeschreibung)
http://fhem.de/commandref_DE.html#CALVIEW
Zitat
yobfield
_description - (der Standard) Geburtsjahr wird aus der Terminbechreibung gelesen
_location - Geburtsjahr wird aus dem Terminort gelesen
_summary - Geburtsjahr wird aus dem Termintiele gelesen (verwendet wird die erste folge von 4 Ziffern im String))


chris1284

Zitat von: elmer am 30 Januar 2018, 04:44:07
Wo muss das Geburtsjahr beim Google Kalender eingegeben werden
siehe einen Post vor diesem

Zitat von: elmer am 30 Januar 2018, 04:44:07
Kann man das ganze auch per Pushover versenden, also immer den Termin von heute?
Ja, wenn du dir entsprechend ein notify baust welches die entsprechenden Readings per pushover sendet.
Ich denke aus der Hüfte geschossen würde ich es auf calview:today_.*._age.* triggern lassen und wenn age != "" dann push diesen Termin aufs Handy

yersinia

Ich krame den Thread nochmal hoch weil ich das zufällig gesehen hab:
Zitat von: chris1284 am 11 April 2019, 06:30:13Ja, wenn du dir entsprechend ein notify baust welches die entsprechenden Readings per pushover sendet.
Ich denke aus der Hüfte geschossen würde ich es auf calview:today_.*._age.* triggern lassen und wenn age != "" dann push diesen Termin aufs Handy
Ich löse die Geburtstagserinnerung mit dem CALVIEW Device, ein bisschen perl und dem TelegramBot.

In der 99_myUtils.pm habe ich diese sub hinzugefügt:
sub BirthdayNotification($$$) {
my ($TelegramDevice, $peers, $BirthdayDevice) = @_;

## retrieve number of todays birthday
my $BdatesNum = ReadingsNum($BirthdayDevice,"c-today",0);

if($BdatesNum gt 0)
{
## texts for message
my $preTxt = "Für heute steht im Geburtstagskalender:\n";
my $midTxt = " wird ";
my $endTxt = "\n";

## prepare command
my $command = "set ".$TelegramDevice." message ".$peers." ";

$command .= $preTxt;

for(my $i = 1; $i <= $BdatesNum; $i++)
{
my $bdcount = sprintf "%03d", $i;
$command .= ReadingsVal($BirthdayDevice,"t_".$bdcount."_summary","-");
$command .= $midTxt;
$command .= ReadingsNum($BirthdayDevice,"t_".$bdcount."_age","");
$command .= $endTxt;
}
fhem($command);
}
else {
Log 3,"BirthdayNotification called but there are no entries for today.";
}
}


Die sub BirthdayNotification erwartet folgende Daten:

  • Das TelegramBot Device (im Beispiel unten TelegramBot)
  • Die peers an die es geschickt werden soll (im Beispiel unten \@000000000 \@000000000); die Syntax folgt dabei den Optionen für peers laut commandref:
    ZitatEach peer given needs to be always prefixed with a '@'. Peers can be specified as contact ids, full names (with underscore instead of space), usernames (prefixed with another @) or chat names (also known as groups in telegram groups must be prefixed with #). Multiple peers are to be separated by space
    peer-ids beginnend mit einem @ müssen durch ein\ maskiert werden (ob dies für # ebenso zutrifft, kann ich nicht sagen - habe ich nicht getestet). Siehe Beispiel unten.
  • Das CALVIEW Device (im Beispiel unten Geburtstage)

Der Aufruf erfolgt bei mir über ein DOIF welches jeden Tag um 8:00Uhr auf Einträge (Reading c-today > 0) im Geburtstagskalender prüft.
defmod DOIF_Geburtstage_Telegram DOIF ([08:00:00]\
and [Geburtstage:c-today] ne "0")\
({BirthdayNotification("TelegramBot","\@000000000 \@000000000","Geburtstage")})\
DOELSE ()\


Der TelegramBot verschickt dann eine Nachricht wie diese (wenn es für heute zwei Einträge gibt - c-today=2):
Für heute steht im Geburtstagskalender:
Peter Pan (1962) wird 57
Michaela Musterfrau (1985) wird 34


Vielleicht kann es jemand gebrauchen - oder hat Tipps was man optimieren könnte.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl