Hauptmenü

Hilfe bei Calender

Begonnen von Gasmast3r, 11 Juli 2018, 23:53:02

Vorheriges Thema - Nächstes Thema

Gasmast3r

Hallo Leute Bitte nicht schlagen, aber ich bin wohl zu doof mein Calender auf den aktuellen stand zu bringen.

wie viele habe ich den log Eintrag

get Kalender_Sven text is deprecated and will be removed soon. Use get Kalender_Sven events instead.


ich habe die im WIKI beschriebene

Google-Kalender zur Steuerung von Dummies


nun weis ich das ich

get Kalender summary uid=$uid 1

ändern muss, aber da ist mein problem ich steig nicht durch wie

habe erst gedacht

events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1

aber das scheint es nicht zu sein.

hoffe hier kann sich einer erbarmen und mir das mal erklären aber so das ein nicht studierter das auch versteht.

Otto123

Hi,

löst die Anleitung im Wiki nicht fast das gleiche Problem wie die aktuelle Anleitung von betateilchen?
https://forum.fhem.de/index.php/topic,87895.0.html#new

Die funktioniert bei mir.

Gruß Otto
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

Gasmast3r

Habe gedacht könnte das passend ändern aber falsch gedacht.

Hatte den alten get Befehl in FHEM eingegeben um zu schauen was der mir ausgiebt, um dann ein vergleichbaren zu stricken aber das geht ja leider nicht oder das übersteigt meine Fähigkeiten.

Otto123

#3
Hi,

der Originalaufruf ist so
fhem("get Kalender_Christian summary uid=$uid 1");
der in den verlinkten Artikel
fhem('get TestKalender events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1);

Du musst schon etwas mehr Infos liefern nicht nur Bruchstücke, Wie genau hast Du die Befehle umgesetzt? Was für Fehler kommen?

Es wird wohl ein Problem der " und ' sein. Du kannst nicht einfach Teile in der Mitte per copy & paste tauschen.

Mal ein Beispiel wie der Aufruf im Endeffekt im Klartext aussehen muss.
Alt
get TestKalender summary uid=1ak67ipt9jaev9cg0hp6m40k2tgooglecom 1
Neu
get TestKalender events format:custom="$S" filter:uid=="1ak67ipt9jaev9cg0hp6m40k2tgooglecom" limit:count=1


Zu beachten die uid im alten Format war ein String, die uid im neuen Format muss im Syntax des Strings übergeben werden, es müssen also "" um Text herum :)
Siehe Doku -> https://commandref.fhem.de/#Calendar

Gruß Otto
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

Gasmast3r

#4
Hy also das ist der eintrag in my_utility


Kalenderstart ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_Sven summary uid=$uid 1");
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy ja");
}
if ($Kalendertext =~ /Früh/) {
fhem("set Frueh_dummy ja");
}
if ($Kalendertext =~ /Spät/) {
fhem("set Spaet_dummy ja");
}
if ($Kalendertext =~ /Nacht/) {
fhem("set Nacht_dummy ja");
}
}
}


und so dachte ich würde es gehen

Kalenderstart ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1");
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy ja");
}
if ($Kalendertext =~ /Früh/) {
fhem("set Frueh_dummy ja");
}
if ($Kalendertext =~ /Spät/) {
fhem("set Spaet_dummy ja");
}
if ($Kalendertext =~ /Nacht/) {
fhem("set Nacht_dummy ja");
}
}
}


Gelesen habe ich das nur verstehen tut ich das irgendwie nicht, aber so wie du das sagt, muss ich für jeden genutzten Eintrag die uid hinterlegen.

beispiel

Kalenderstart ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1");
if ($Kalendertext =~ /28bghn962cojcub27m66oaave7googlecom/) {
fhem("set Urlaub_dummy ja");
}
if ($Kalendertext =~ /5i6bc9f73alud1efut6g0rq5mlgooglecom/) {
fhem("set Frueh_dummy ja");
}
if ($Kalendertext =~ /473hq6j0t6rtoocn5srk3djec8googlecom/) {
fhem("set Spaet_dummy ja");
}
if ($Kalendertext =~ /60g75pqadojrfpalhmicik1ja0googlecom/) {
fhem("set Nacht_dummy ja");
}
}
}


oder bin ich wieder auf dem falschen weg

oder könnte es auch das sein?

Kalenderstart ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1");
if ($filter:field(summary)=~"Urlaub"/) {
fhem("set Urlaub_dummy ja");
}
if ($filter:field(summary)=~"Früh"/) {
fhem("set Frueh_dummy ja");
}
if ($filter:field(summary)=~"Späht"/) {
fhem("set Spaet_dummy ja");
}
if ($filter:field(summary)=~"Nacht"/) {
fhem("set Nacht_dummy ja");
}
}
}

Otto123

#5
Hi,

du hast meinen Einwand nicht richtig verstanden: :o
fhem("get Kalender_Christian summary uid=$uid 1");
fhem('get TestKalender events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1);

Damit kommt die Abfolge der von dir kopierten Innereien, welche zahlreiche und exakt so gesetzten, wichtigen " und ' enthalten völlig durcheinander.

Eventuell brauchst Du einfach nur die ersten (" und letzten 1',1") gegen (' ... 1',1) austauschen. Aber probiert habe ich das jetzt noch nicht!

Edit:
Da ich es auch nicht wusste, eine kurze Erklärung zu der ,1 -  fhem('Befehl',1) - am Ende des Aufrufes. Die Perl Funktion fhem() akzeptiert zwei Aufrufparameter -> ($param, $silent)
- der erste bis zum Komma ist der FHEM Befehl
- der zweite ist die Steuerung ob etwas ins Log geschrieben werden kann oder nicht. 1 (wahr) bedeutet silent -> schreibe keinen Fehler ins Log.

Man kann es gut austesten, indem man einen Fehlerhaften Befehl verwendet und mit und ohne ,1 probiert.

Ich hoffe ich habe es richtig interpretiert  :D

Der Befehl muss als String übergeben werden, also entweder in ' ' oder in " ", der silent Parameter ist ein logischer Ausdruck!
Deswegen fhem('Befehl') oder fhem('Befehl',1) aber nicht fhem('Befehl,1') !

Gruß Otto
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

Gasmast3r

Ok werde es die tage mal testen habe erstmal alles gelöscht

Gasmast3r

Hy so habe mich nochmal ranprobiert aber es klappt nicht.

Problem ist halt auch das mir das passende wissen fehlt um den Skript anzupassen.

ich werde mich mal weiter umschauen und hoffen das es doch irgendwie möglich ist, oder ich habe das glück das der WIKI Ersteller sein Eintrag mal anpasst.

ich bedanke mich aber dennoch schon mal für die bisherige und zukünftige Hilfe.

Otto123

Hi,

"es klappt nicht" ist eine ziemlich bescheuerte und dürftige Beschreibung  ;), wie soll ich da helfen?  ::)
Wo kommt welcher Fehler?
Hast Du mal die get Zeile alleine in der Kommandozeile probiert?
Hast Du  mal eine Log Zeile in den Code eingebaut?
Wie hast Du Deinen Code verändert?

Hier habe ich mal etwas zum debugging beschrieben, vielleicht hilft das.
https://wiki.fhem.de/wiki/Notify#Mein_notify_geht_nicht_-_wie_kann_ich_mir_selbst_helfen:_Debugging

Gruß Otto
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

Gasmast3r

#9
Hy fehler könnte ich keine feststellen notify klappte meiner meining nach auch nur war bei dem dummys nix.
Da ich derzeit das auch nur zum laufen haben wollte(ohne derzeitigem nutzen) war ich da zu gange.
Ich werde die tage aber weiter testen
Den code gebe ich gleich mal ein bin mir nicht mehr sicher was nach eingabe war.

das

get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1'
oder
get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1',1

ergiebt das

Kalender_Sven: Parameter parse error: opening quote ' without matching closing quote


ich denke mal nur der befehl ist es nicht

sub
Kalenderstart ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_Sven events uid=$uid 1");
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy ja");
}
if ($Kalendertext =~ /Früh/) {
fhem("set Fr_dummy ja");
}
if ($Kalendertext =~ /Spät/) {
fhem("set Sp_dummy ja");
}
if ($Kalendertext =~ /Nacht/) {
fhem("set Nacht_dummy ja");
}
}
}

sub Kalenderende ($) {
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_Sven events uid=$uid 1");
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy nein");
}
if ($Kalendertext =~ /Früh/) {
fhem("set Fr_dummy nein");
}
if ($Kalendertext =~ /Spät/) {
fhem("set Sp_dummy nein");
}
if ($Kalendertext =~ /Nacht/) {
fhem("set Nacht_dummy nein");
}
}
}



das ist meine vermutung

da ich auch nicht weis was er mit

get Kalender_Sven summary uid=$uid 1


ausgegeben bekommt ist es für mich ja noch schwerer irgendeine richtung zu finden

Otto123

Diese Zeile my $Kalendertext = fhem("get Kalender_Sven events uid=$uid 1");
würde ich mal durch diese ersetzen
my $Kalendertext = fhem('get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');

Wenn Du die Zeile in der Kommandozeile testen willst müsstest Du $uid durch einen richtigen Wert ersetzen. So in der Art
get Kalender_Sven events format:custom="$S" filter:uid=="12345" limit:count=1)

12345 ist nicht die richtige ID!!!

Gruß Otto
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

Gasmast3r

#11
hy wenn ich


get Kalender_Sven events format:custom="$S" filter:uid=="473hq6j0t6rtoocn5srk3djec8googlecom" limit:count=1)


bekomme ich Spät angezeigt was auch passen müsste

ich teste das grade mit eine Eintrag in meinen Kalender (habe extra geprüft ob FHEM den auch drin hat) ob es geht

das ist der bis jetzt aufgetretene Fehler


2018.07.15 18:17:00 1: PERL WARNING: Use of uninitialized value $Kalendertext in pattern match (m//) at ./FHEM/99_myUtils.pm line 43.
2018.07.15 18:17:00 1: PERL WARNING: Use of uninitialized value $Kalendertext in pattern match (m//) at ./FHEM/99_myUtils.pm line 46.
2018.07.15 18:17:00 1: PERL WARNING: Use of uninitialized value $Kalendertext in pattern match (m//) at ./FHEM/99_myUtils.pm line 49.
2018.07.15 18:17:00 1: PERL WARNING: Use of uninitialized value $Kalendertext in pattern match (m//) at ./FHEM/99_myUtils.pm line 52.
2018.07.15 18:17:10 1: PERL WARNING: Subroutine Kalenderende redefined at ./FHEM/99_myUtils.pm line 61.
2018.07.15 18:20:00 1: PERL WARNING: Use of uninitialized value $Kalendertext in pattern match (m//) at ./FHEM/99_myUtils.pm line 55.


Notify reagiert Dummy wird nicht geschaltet


MyUtility


sub

Kalenderstart ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem('get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy ja");
}
if ($Kalendertext =~ /Früh/) {
fhem("set Fr_dummy ja");
}
if ($Kalendertext =~ /Spät/) {
fhem("set Sp_dummy ja");
}
if ($Kalendertext =~ /Nacht/) {
fhem("set Nacht_dummy ja");
}
if ($Kalendertext =~ /Frei/) {
fhem("set Frei_dummy ja");
}
}
}

sub Kalenderende ($) {
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids = split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem('get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy nein");
}
if ($Kalendertext =~ /Früh/) {
fhem("set Fr_dummy nein");
}
if ($Kalendertext =~ /Spät/) {
fhem("set Sp_dummy nein");
}
if ($Kalendertext =~ /Nacht/) {
fhem("set Nacht_dummy nein");
}
if ($Kalendertext =~ /Frei/) {
fhem("set Frei_dummy nein");
}
}
}

Otto123

Der Fehler bedeutet die Variable $Kalendertext ist leer. Was mich irritiert ist die neu Definition von Kalender ende zwischendurch.

Mir fällt als einziges auf: zwischen sub und Kalenderstart ist eine Leerzeile, die gehört da nicht hin. eigentlich kann sub Kalenderstart auf einer Zeile stehen.

Gruß Otto
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

Otto123

#13
Ok die Vermutung heute Nacht war es nicht.

Ich verstehe den Split Teil nicht, aber auf alle Fälle läuft der schief. Keine Ahnung warum. Schon der integrierte Editor zeigt dort Syntax Fehler, bzw. die Code Darstellung ist komisch. Ich konnte deinen Fehler exakt nachvollziehen.

Du kannst es aber wesentlich kürzen und von der Sache her exakt das nehmen was betateilchen vorschlägt:

Ich habe wie folgt getestet und es hat funktioniert!
Du änderst den Aufruf im notify auf
{Kalenderstart($EVTPART1,$EVTPART2)}damit ist der Split schon erledigt.
Die Sub änderst Du in
sub Kalenderstart ($$)
{
my ($uid,$cmd) = @_;
            #Log 1, "uid :$uid";
    my $Kalendertext = fhem('get Kalender_Sven events format:custom="$S" filter:uid=="'.$uid.'" limit:count=1');
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy ja");
}
if ($Kalendertext =~ /Früh/) {
fhem("set Fr_dummy ja");
}
if ($Kalendertext =~ /Spät/) {
fhem("set Sp_dummy ja");
}
if ($Kalendertext =~ /Nacht/) {
fhem("set Nacht_dummy ja");
}
if ($Kalendertext =~ /Frei/) {
fhem("set Frei_dummy ja");
}
}


Wenn das wieder funktioniert:
Eigentlich kann man noch Beides (start und end) zusammenführen. Aber ich will Dich nicht verwirren und ich hoffe Du verstehst was ich getan habe.
Du kannst den Post von betateilchen durchlesen und bekommst das vielleicht selbst hin  ;)

Gruß Otto
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

Gasmast3r

Hy werde ich testen, glaube den hate ich gelesen ist irgendwas mit aktor ein/aus und Heizung Tag/Nacht ?
Dann habe ich nur Bahnhof Koffer klauen verstanden.

Danke aufjeden fall für deine tatkräftige Hilfe