UPDATE 2:
zu Verwendung des Plugins bitte die Doku aus Github verwenden.
Nur diese ist wirklich aktuell und sollte mit dem Entwicklungsstand übereinstimmen!!!
UPDATE:
unten findet ihr noch den alten Text zum Vergleichen.
Ich habe mir gestern nochmal Gedanken gemacht, wie wir das über den Websocket bekommen könnten. Eigentlich hätte man jetzt das Visu Plugin anpassen und auch auf Client Seite die ganze Widget Implementierung erweitern müssen. Daher habe ich das Plugin jetzt umgeschrieben. Anstatt mit add, remove, update und get zu Arbeiten, verwende ich nun einfach ein separates Item. Ich zeige am Besten ein Beispiel:
Das item selber ist nun vom type list und speichert eine Liste aller Schalteinträge. Mit uzsu_item gibt man nun das Item an, dass von dieser "Schaltuhr" geschaltet wird. Durch cache = True ist automatisch die Persistenz erledigt und SQLite kann entfallen. Mittels visu_acl = rw kann man die Schaltuhren out-of-the-box über die Visu anzeigen und ändern.
Ein Eintrag in der Schaltliste ist ein dict mit folgenden key/value Paaren (sind die gleichen wie bisher):
- dt: Datum und Uhrzeit wann der Wert gesetzt werden soll
- value: Wert der gesetzt werden soll
- active: True wenn der Eintrag aktiv sein soll, andernfalls False
- time (optional): Ein String der ähnlich crontab die Uhrzeit von dt mit Astrofunktionen übersteuert. Also z.B. "17:00<sunset".
- rrule (optional): Dieser Parameter ist der eigentliche Clou an der ganzen Sache. Hiermit lassen sich per rrule aus dem RFC 2445 (http://www.ietf.org/rfc/rfc2445.txt) Regeln für wiederkehrende Einträge angeben. Das Format stammt ursprünglich von iCal Kalendereinträgen und sollte somit ziemlich flexibel für alles notwendige sein.
Zum Testen kann man dann z.B. über die interaktive Konsole folgendes machen:
Das toggelt den Status des entsprechenden Items für zehn Minuten jede Minute.
Was haltet ihr davon?
UPDATE ENDE
--------------------------------------------------
Hallo Leute,
wie bereits angekündigt, habe ich gerade eben mein UZSU Plugin im develop Branch eingestellt. Items müssen mit "uzsu = True" attributiert werden, um vom Plugin beachtet zu werden. Anschließend hat man vier Zugriffsmethoden "get", "add", "update" und "remove" um die Einträge eines Items verwalten zu können. Alle Einträge werden in einer SQLite Datenbank unter <<smarthome_dir>>/var/db/uzsu.db gespeichert (solange nicht anderes angegeben wurde). Alte, abgelaufene Einträge werden vom Plugin automatisch gelöscht. Ein Eintrag kann folgende Parameter haben:
- item: Das Item für den die nachfolgenden Parameter gesetzt werden sollen.
- dt: Datum und Uhrzeit wann der Wert gesetzt werden soll
- value: Wert der gesetzt werden soll
- active: True wenn der Eintrag aktiv sein soll, andernfalls False
- time: Ein String der ähnlich crontab die Uhrzeit von dt mit Astrofunktionen übersteuert. Also z.B. "17:00<sunset".
- rrule: Dieser Parameter ist der eigentliche Clou an der ganzen Sache. Hiermit lassen sich per rrule aus dem RFC 2445 (http://www.ietf.org/rfc/rfc2445.txt) Regeln für wiederkehrende Einträge angeben. Das Format stammt ursprünglich von iCal Kalendereinträgen und sollte somit ziemlich flexibel für alles notwendige sein.
Hier mal einige Beispiele mit denen ich das Plugin getestet habe:
Die update und remove Methode haben als zusätzlichen Parameter die ID des zu ändernden bzw. löschenden Eintrags. Das ist die SQLite Datenbank ID. Für die direkte Verwendung des Plugins ist das zwar nicht sehr einfach, aber notwendig um die jeweiligen Einträge eindeutig identifizieren zu können. Da das Plugin hinterher ja nicht mehr manuell bedient werden soll, sondern über eine Visu oder ähnliches, sollte das kein Problem sein. Über die get Methode kommt man an alle Einträge eines Items und kann sich damit auch die IDs ansehen.
Ich habe das ganze jetzt über mehrere Tage ausgiebig getestet und bin soweit zufrieden. Dennoch bitte ich hier vor allem die etwas erfahreneren Entwickler sich das ganze auch mal genauer an zu sehen. Wenn jemand Probleme/Fehler feststellen sollte, bitte mit ausführlicher Fehlerbeschreibung und Debug Log. Ansonsten kann ich euch leider nicht helfen. Ein Tipp noch, achtet darauf, dass die Zeitzone und die Längen- und Breitenangaben in der etc/smarthome.conf richtig sind, sonst wird nach UTC Zeit gearbeitet
Ich freue mich auf erste Erfahrungsberichte und Kritiken.
zu Verwendung des Plugins bitte die Doku aus Github verwenden.
Nur diese ist wirklich aktuell und sollte mit dem Entwicklungsstand übereinstimmen!!!
UPDATE:
unten findet ihr noch den alten Text zum Vergleichen.
Ich habe mir gestern nochmal Gedanken gemacht, wie wir das über den Websocket bekommen könnten. Eigentlich hätte man jetzt das Visu Plugin anpassen und auch auf Client Seite die ganze Widget Implementierung erweitern müssen. Daher habe ich das Plugin jetzt umgeschrieben. Anstatt mit add, remove, update und get zu Arbeiten, verwende ich nun einfach ein separates Item. Ich zeige am Besten ein Beispiel:
Code:
[eg] [[wohnen]] [[[kugellampe]]] type=bool visu_acl=rw [[[[uzsu]]]] type=dict uzsu_item=eg.wohnen.kugellampe cache=True visu_acl=rw
Ein Eintrag in der Schaltliste ist ein dict mit folgenden key/value Paaren (sind die gleichen wie bisher):
- dt: Datum und Uhrzeit wann der Wert gesetzt werden soll
- value: Wert der gesetzt werden soll
- active: True wenn der Eintrag aktiv sein soll, andernfalls False
- time (optional): Ein String der ähnlich crontab die Uhrzeit von dt mit Astrofunktionen übersteuert. Also z.B. "17:00<sunset".
- rrule (optional): Dieser Parameter ist der eigentliche Clou an der ganzen Sache. Hiermit lassen sich per rrule aus dem RFC 2445 (http://www.ietf.org/rfc/rfc2445.txt) Regeln für wiederkehrende Einträge angeben. Das Format stammt ursprünglich von iCal Kalendereinträgen und sollte somit ziemlich flexibel für alles notwendige sein.
Zum Testen kann man dann z.B. über die interaktive Konsole folgendes machen:
Code:
sh.eg.wohnen.kugellampe.uzsu({'active':True, 'list':[ {'value':1, 'active':True, 'rrule':'FREQ=DAILY;INTERVAL=2;COUNT=5', 'time': '16:30'}, {'value':0, 'active':True, 'rrule':'FREQ=DAILY;INTERVAL=2;COUNT=5', 'time': '17:30'} ]})
Was haltet ihr davon?
UPDATE ENDE
--------------------------------------------------
Hallo Leute,
wie bereits angekündigt, habe ich gerade eben mein UZSU Plugin im develop Branch eingestellt. Items müssen mit "uzsu = True" attributiert werden, um vom Plugin beachtet zu werden. Anschließend hat man vier Zugriffsmethoden "get", "add", "update" und "remove" um die Einträge eines Items verwalten zu können. Alle Einträge werden in einer SQLite Datenbank unter <<smarthome_dir>>/var/db/uzsu.db gespeichert (solange nicht anderes angegeben wurde). Alte, abgelaufene Einträge werden vom Plugin automatisch gelöscht. Ein Eintrag kann folgende Parameter haben:
- item: Das Item für den die nachfolgenden Parameter gesetzt werden sollen.
- dt: Datum und Uhrzeit wann der Wert gesetzt werden soll
- value: Wert der gesetzt werden soll
- active: True wenn der Eintrag aktiv sein soll, andernfalls False
- time: Ein String der ähnlich crontab die Uhrzeit von dt mit Astrofunktionen übersteuert. Also z.B. "17:00<sunset".
- rrule: Dieser Parameter ist der eigentliche Clou an der ganzen Sache. Hiermit lassen sich per rrule aus dem RFC 2445 (http://www.ietf.org/rfc/rfc2445.txt) Regeln für wiederkehrende Einträge angeben. Das Format stammt ursprünglich von iCal Kalendereinträgen und sollte somit ziemlich flexibel für alles notwendige sein.
Hier mal einige Beispiele mit denen ich das Plugin getestet habe:
Code:
sh.uzsu.add(sh.item1, datetime.datetime.now() + datetime.timedelta(minutes=2), '1') sh.uzsu.add(sh.item1, datetime.datetime.now() + datetime.timedelta(minutes=2), '1', True, rrule='FREQ=MINUTELY;INTERVAL=2;COUNT=5') sh.uzsu.add(sh.item1, datetime.datetime.now() + datetime.timedelta(minutes=3), '0', True, rrule='FREQ=MINUTELY;INTERVAL=2;COUNT=5') sh.uzsu.add(sh.item1, datetime.datetime.now() + datetime.timedelta(minutes=2), '1', True, '17:40') sh.uzsu.add(sh.item1, datetime.datetime.now() + datetime.timedelta(minutes=2), '0', True, '17:00<sunset<18:30', rrule='FREQ=DAILY;INTERVAL=2;COUNT=5') sh.uzsu.add(sh.item1, datetime.datetime.now() + datetime.timedelta(minutes=2), '0', True, '7:00<sunrise<8:30', rrule='FREQ=DAILY;INTERVAL=2;COUNT=5') sh.uzsu.update(sh.item1, 1, active=False) sh.uzsu.update(sh.item1, 1, active=True)
Ich habe das ganze jetzt über mehrere Tage ausgiebig getestet und bin soweit zufrieden. Dennoch bitte ich hier vor allem die etwas erfahreneren Entwickler sich das ganze auch mal genauer an zu sehen. Wenn jemand Probleme/Fehler feststellen sollte, bitte mit ausführlicher Fehlerbeschreibung und Debug Log. Ansonsten kann ich euch leider nicht helfen. Ein Tipp noch, achtet darauf, dass die Zeitzone und die Längen- und Breitenangaben in der etc/smarthome.conf richtig sind, sonst wird nach UTC Zeit gearbeitet

Ich freue mich auf erste Erfahrungsberichte und Kritiken.
Kommentar