So grob: Du brauchst ein zusätzliches Item, welches jeweils über die Sichtbarkeit entscheidet. Dieses Item setzt Du per Rule. Die Rule triggerst Du z.B. täglich um 4 Uhr und prüfst, ob das Datum in OfficeCalName1 kleiner als das aktuelle Datum + 2 ist, dann setzt Du das Hilfsitem auf sichtbar. Gleichzeitig kannst Du in dieser Rule einen Timer starten, der dann 17 Stunden später die Mail auslöst, oder Du schreibst eine zweite Rule, die nur für die Mail zuständig ist, um 21 Uhr getriggert wird und die gleiche Prüfung vornimmt.
Ankündigung
Einklappen
Keine Ankündigung bisher.
calDAV Integration ?
Einklappen
X
-
So und jetzt noch mal für Anfänger
das hab ich jetzt probiert erstmal ohne zeit abfragen...und das geht nicht
Code:Switch Visibility "Schwartze Tonne [%s]" Switch Visibility1"Gelber Sack [%s]" Switch Visibility2"Bio Tonne [%s]" String BioTonne "Bio Tonne [%s]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:Name filter-name:'.*BioTonne*'" } DateTime BioTonnetime "Bio Tonne [%1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:START filter-name:'.*BioTonne*'" } String SchwartzeTonne "Schwartze Tonne [%s]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:Name filter-name:'.*SchwartzeTonne*'" } DateTime SchwartzeTonnetime "Schwartze Tonne [%1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:START filter-name:'.*SchwartzeTonne*'" } String GelberSack "Gelber Sack [%s]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:Name filter-name:'.*GelberSack*'" } DateTime GelberSacktime "Gelber Sack [%1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:START filter-name:'.*GelberSack*'" } rule "init Visibility" when System started then Visibility.sendCommand(OFF) Visibility1.sendCommand(OFF) Visibility2.sendCommand(OFF) end rule "Set Visibility SchwartzeTonne" when Item SchwartzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(SchwartzeTonne.state=="SchwartzeTonne"&&GelberSack.state!="GelberSack"&&BioTonne.state!="BioTonne")Visibility.sendCommand(ON) else Visibility.sendCommand(OFF) end rule "Set Visibility GelberSack" when Item SchwartzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(GelberSack.state=="GelberSack"&&SchwartzeTonne.state!="SchwartzeTonne"&&BioTonne.state!="BioTonne")Visibility1.sendCommand(ON) else Visibility1.sendCommand(OFF) end rule "Set Visibility BioTonne" when Item SchwartzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(BioTonne.state=="BioTonne"&&GelberSack.state!="GelberSack"&&SchwartzeTonne.state!="SchwartzeTonne")Visibility2.sendCommand(ON) else Visibility2.sendCommand(OFF) end Text item=SchwartzeTonnetime icon="Trash_Black" label=" Schwartze Tonne[%1$td.%1$tm.%1$tY]"visibility=[Visibility==ON] Text item=GelberSacktime icon="Trash_Yellow" label="Gelber Sack[%1$td.%1$tm.%1$tY]"visibility=[Visibility1==ON] Text item=BioTonnetime icon="Trash_Brown" label="Bio Tonne[%1$td.%1$tm.%1$tY]"visibility=[Visibility2==ON]
irgentwo mache ich wieder Fehler
Kommentar
-
Es sieht vielleicht nur so aus, aber es könnte sein, dass Du bei der Definition der Hilfsitems teilweise keine Leerzeichen zwischen Itemnamen und Labeldefinition stehen hast.
Weiterhin ist es eine gute Idee, etwas Abstand zu Schlüsselworten zu halten. Nenne die Items lieber visBio, visGelb und visSchwarz, das umgeht potentielle Probleme von vornherein.
Der eigentliche Grund, warum es nicht funktioniert ist aber vermutlich, dass Du in der visibility-Definition mit Strings vergleichen musst, also zum BeispielCode:visibility=[visBio=="ON"]
Kommentar
-
so jetzt hab ich alles angepasst nach deinen Tips..und so sieht jetzt aus
Code:Switch visSchwarz "Schwartze Tonne [%s]" Switch visGelb "Gelber Sack [%s]" Switch visBio "Bio Tonne [%s]" String BioTonne "Bio Tonne [%s]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:Name filter-name:'.*BioTonne*'" } DateTime BioTonnetime "Bio Tonne [%1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:START filter-name:'.*BioTonne*'" } String SchwartzeTonne "Schwartze Tonne [%s]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:Name filter-name:'.*SchwartzeTonne*'" } DateTime SchwartzeTonnetime "Schwartze Tonne [%1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:START filter-name:'.*SchwartzeTonne*'" } String GelberSack "Gelber Sack [%s]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:Name filter-name:'.*GelberSack*'" } DateTime GelberSacktime "Gelber Sack [%1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:kalender type:EVENT eventNr:1 value:START filter-name:'.*GelberSack*'" } rule "init Visibility" when System started then visSchwarz.sendCommand(OFF) visGelb.sendCommand(OFF) visBio.sendCommand(OFF) end rule "Set Visibility SchwartzeTonne" when Item SchwartzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(SchwartzeTonne.state=="SchwartzeTonne"&&GelberSack.state!="GelberSack"&&BioTonne.state!="BioTonne")visSchwarz.sendCommand(ON) else visSchwarz.sendCommand(OFF) end rule "Set Visibility GelberSack" when Item SchwartzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(GelberSack.state=="GelberSack"&&SchwartzeTonne.state!="SchwartzeTonne"&&BioTonne.state!="BioTonne")visGelb.sendCommand(ON) else visGelb.sendCommand(OFF) end rule "Set Visibility BioTonne" when Item SchwartzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(BioTonne.state=="BioTonne"&&GelberSack.state!="GelberSack"&&SchwartzeTonne.state!="SchwartzeTonne")visBio.sendCommand(ON) else visBio.sendCommand(OFF) end Text item=SchwartzeTonnetime icon="Trash_Black" label=" Schwartze Tonne[%1$td.%1$tm.%1$tY]"visibility=[visSchwarz=="ON"] Text item=GelberSacktime icon="Trash_Yellow" label="Gelber Sack[%1$td.%1$tm.%1$tY]"visibility=[visGelb=="ON"] Text item=BioTonnetime icon="Trash_Brown" label="Bio Tonne[%1$td.%1$tm.%1$tY]"visibility=[visBio=="ON"]
Kommentar
-
Lass die Labels in der Sitemap weg, Du hast sie ja schon in der Items-Datei definiert.
Allgemein ist es keine gute Idee, die höchste Komplexität direkt einzubauen, und sich dann zu wundern, dass es nicht funktioniert. Versuche, die Items erstmal überhaupt korrekt zum laufen zu bringen (also insbesondere Deine Rules) und baue dann nach und nach zusätzliche Bedingungen ein.
Leerzeichen erhöhen die Lesbarkeit des Codes, teilweise sind sie zwingend nötig, damit die Schlüsselwörter korrekt erkannt werden.
- Likes 1
Kommentar
-
Da ich jetzt etwas wacher bin... Ein Status ist etwas anderes als ein String. Die Abfrage müsste also eher so aussehen (ich lass jetzt mal die 3. Bedingung weg)
Code:if(BioTonne.state.toString == "BioTonne" && GelberSack.state.toString != "GelberSack") visBio.sendCommand(ON) else visBio.sendCommand(OFF)
- Likes 1
Kommentar
-
Danke für t ...hab mich vertippt und dann überall reinkopiert
so
die Rule sieht jetzt so aus
Code:rule "init Visibility" when System started then visSchwarz.sendCommand(OFF) visGelb.sendCommand(OFF) visBio.sendCommand(OFF) end rule "Set Visibility SchwartzeTonne" when Item SchwarzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(SchwarzeTonne.state.toString=="SchwarzeTonne"&&GelberSack.state.toString!="GelberSack"&&BioTonne.state.toString!="BioTonne")visSchwarz.sendCommand(ON) else visSchwarz.sendCommand(OFF) if(GelberSack.state.toString=="GelberSack"&&SchwarzeTonne.state.toString!="SchwarzeTonne"&&BioTonne.state.toString!="BioTonne")visGelb.sendCommand(ON) else visGelb.sendCommand(OFF) if(BioTonne.state.toString=="BioTonne"&&GelberSack.state.toString!="GelberSack"&&SchwarzeTonne.state.toString!="SchwarzeTonne")visBio.sendCommand(ON) else visBio.sendCommand(OFF) end rule "Test Gelber Sack" when Item GelberSack received update then logInfo("MyRule","Gelber Sack: {}",GelberSack.state.toString) end rule "Test SchwarzeTonne" when Item SchwarzeTonne received update then logInfo("MyRule","Schwarze Tonne: {}",SchwarzeTonne.state.toString) end rule "Test Bio Tonne " when Item BioTonne received update then logInfo("MyRule","Bio Tonne: {}",BioTonne.state.toString) end
Code:2016-06-13 21:36:54.625 [INFO ] [rg.openhab.model.script.MyRule] - Bio Tonne: BioTonne 2016-06-13 21:36:54.675 [INFO ] [rg.openhab.model.script.MyRule] - Schwarze Tonne: SchwarzeTonne 2016-06-13 21:36:54.716 [INFO ] [rg.openhab.model.script.MyRule] - Gelber Sack: GelberSack
Kommentar
-
Ich glaube ich habs... sind ja alle drei im log ,hab jetzt Kalender Abfrage auf 1 Woche im cfg gestellt und && Abfragen entfernt.. jetzt hab ich zwei Termine die sichtbar sind...die sind ja diese Woche
jetzt geht weiter
wie mache ich das
Zitat von udo1toni Beitrag anzeigenDie Rule triggerst Du z.B. täglich um 4 Uhr und prüfst, ob das Datum in OfficeCalName1 kleiner als das aktuelle Datum + 2 ist, dann setzt Du das Hilfsitem auf sichtbar. Gleichzeitig kannst Du in dieser Rule einen Timer starten, der dann 17 Stunden später die Mail auslöst, oder Du schreibst eine zweite Rule, die nur für die Mail zuständig ist, um 21 Uhr getriggert wird und die gleiche Prüfung vornimmt.
Code:rule "Set Visibility " when Item SchwarzeTonne received update or Item GelberSack received update or Item BioTonne received update then if(SchwarzeTonne.state.toString=="SchwarzeTonne")visSchwarz.sendCommand(ON) else visSchwarz.sendCommand(OFF) if(GelberSack.state.toString=="GelberSack")visGelb.sendCommand(ON) else visGelb.sendCommand(OFF) if(BioTonne.state.toString=="BioTonne")visBio.sendCommand(ON) else visBio.sendCommand(OFF) end
Zuletzt geändert von djuscha; 13.06.2016, 22:48.
Kommentar
-
@udo1toni
meinst du in etwa so?
Code:rule "Set Visibility " when Item SchwarzeTonne received update or Item GelberSack received update or Item BioTonne received update then Time cron "0 00 04 * * ?" if(SchwarzeTonne.state.toString=="SchwarzeTonne"||SchwarzeTonnetime>=Time+2)visSchwarz.sendCommand(ON) createTimer(now.plusMinutes(420)) [| sendMail("openhab@gmail.com","SchwarzeTonne") ] else visSchwarz.sendCommand(OFF) if(GelberSack.state.toString=="GelberSack"||GelberSacktime>=Time+2)visGelb.sendCommand(ON) createTimer(now.plusMinutes(420)) [| sendMail("openhab@gmail.com","GelberSack") ] else visGelb.sendCommand(OFF) if(BioTonne.state.toString=="BioTonne"||BioTonnetime>=Time+2)visBio.sendCommand(ON) createTimer(now.plusMinutes(420)) [| sendMail("openhab@gmail.com","BioTonne") ] else visBio.sendCommand(OFF) end
Kommentar
Kommentar