Ausgehend von diesem Thema https://knx-user-forum.de/smarthome-...verbrauch.html habe ich mich an die Arbeit gemacht und mir ein paar items erstellt die in Logiken etc. sinvoll sein können.
Die Namen habe ich eigentlich so gewählt dass es "international" und "selbsterklärend" ist.
Beispiel:
Aktuelle Uhrzeit ist 21.12.2014 um 13:19 - dies ist nur ein kleiner Auszug.
Dabei werden immer nur ganze Minuten, Sekunden, Stunden etc. berücksichtigt. Um 13:10 sind also nur noch 10 volle Stunden bis Mitternacht und 13 Stunden seit Mitternacht.
Das *.dbstr Item ist der fertige String für die Abfrage im SQLite Plugin. Damit kann man den Mitternachtswert von foo.bar mit foo.bar.db('min',sh.minute.since.midnight()) abfragen.
Hier die Dateien:
logic.conf
zeit.py
item.conf
Unschlüssig bin ich noch beim Umgang mit den Wochen. Vielleicht kanns ja jemand gebrauchen.
Gruß Mirko
Die Namen habe ich eigentlich so gewählt dass es "international" und "selbsterklärend" ist.
Beispiel:
Aktuelle Uhrzeit ist 21.12.2014 um 13:19 - dies ist nur ein kleiner Auszug.
Code:
minute.since.hour = 19 minute.since.hour.dbstr = 19i minute.since.midnight = 799 minute.since.midnight.dbstr = 799i minute.until.hour = 40 minute.until.hour.dbstr = 40i minute.until.midnight = 640 minute.until.midnight.dbstr = 640i hour.since.midnight = 13 hour.since.midnight.dbstr = 13h hour.until.midnight = 10 hour.until.midnight.dbstr = 10h day.since.week = 7 day.since.week.dbstr = 7d day.since.month = 20 day.since.month.dbstr = 20d day.until.week = 0 day.until.week.dbstr = 7d day.until.month = 10 day.until.month.dbstr = 10d
Das *.dbstr Item ist der fertige String für die Abfrage im SQLite Plugin. Damit kann man den Mitternachtswert von foo.bar mit foo.bar.db('min',sh.minute.since.midnight()) abfragen.
Hier die Dateien:
logic.conf
#logic.conf
[zeit]
filename = zeit.py
crontab = init | * * * *
[zeit]
filename = zeit.py
crontab = init | * * * *
Code:
#/logics/zeit.py
#!/usr/bin/env python
sh_now = sh.now()
debug = False
# Funktionen
def leap_year(year):
if (year % 400 == 0) or ((year % 4 == 0) and not (year % 100 == 0)):
return True
else:
return False
def days_of_month(month, year):
if month in [1, 3, 5, 7, 8, 10, 12]:
days = 31
elif month in [4, 6, 9, 11]:
days = 30
elif leap_year(year):
days = 29
else:
days = 28
return days
def days_of_year(year):
period_end = datetime.datetime(year,12,31)
days_of_year = (period_end - datetime.datetime(period_end.year, 1, 1)).days + 1
return(days_of_year)
def day_of_year(year,month,day):
period_end = datetime.datetime(year,month,day)
day_of_year = (period_end - datetime.datetime(period_end.year, 1, 1)).days + 1
return(day_of_year)
if debug == True:
print("RUNNING LOGIC OF TIME - REMOVE AFTER DEBUG")
print(sh_now.hour) #Stunde
print(sh_now.minute) #Minute
print(sh_now.second) #Sekunde
print(sh_now.day) #Tag
print(sh_now.month) #Monat
print(sh_now.isoweekday()) #Wochentag
print(sh.now().isocalendar()[1]) #Kalenderwoche
# Sekunde/Minute
sh.second.since.minute(sh_now.second)
sh.second.until.minute(60 - sh_now.second - 1)
# Minute/Stunde
sh.minute.since.hour(sh_now.minute)
sh.minute.until.hour(60 - sh_now.minute - 1)
# Stunde/Tag
sh.hour.since.midnight(sh_now.hour)
sh.hour.until.midnight(24 - sh_now.hour - 1)
# Tag/Woche
sh.day.since.week(sh_now.isoweekday())
sh.day.until.week(7 - sh_now.isoweekday())
# Stunde/Woche
sh.hour.since.week(sh.hour.since.midnight() + (24 * (sh.day.since.week() - 1)))
sh.hour.until.week(sh.hour.until.midnight() + (24 * sh.day.until.week()))
# Kalenderwoche/Jahr
sh.week.since.year(sh.now().isocalendar()[1])
# Monat/Jahr
sh.month.since.year(sh_now.month)
sh.month.until.year(12-sh_now.month)
# Sekunde/Stunde
sh.second.since.hour(sh.second.since.minute() + (60 * sh.minute.since.hour()))
sh.second.until.hour(sh.second.until.minute() + (60 * sh.minute.until.hour()))
# Sekunde/Tag
sh.second.since.midnight(sh.second.since.minute() + (3600 * sh.hour.since.midnight()))
sh.second.until.midnight(sh.second.until.minute() + (3600 * sh.hour.until.midnight()))
# Minute/Tag
sh.minute.since.midnight(sh.minute.since.hour() + (60 * sh.hour.since.midnight()))
sh.minute.until.midnight(sh.minute.until.hour() + (60 * sh.hour.until.midnight()))
# Minute/Woche
sh.minute.since.week(sh.minute.since.hour() + (60 * sh.hour.since.week()))
sh.minute.until.week(sh.minute.until.hour() + (60 * sh.hour.until.week()))
# Sekunde/Woche
sh.second.since.week(sh.second.since.minute() + (60 * sh.minute.since.week()))
sh.second.until.week(sh.second.until.minute() + (60 * sh.minute.until.week()))
# Tage/Monat
sh.day.since.month(sh_now.day - 1)
sh.day.until.month(days_of_month(sh_now.month,sh_now.year) - sh.day.since.month() - 1)
# Tage/Jahr
sh.day.since.year(day_of_year(sh_now.year,sh_now.month,sh_now.day) - 1)
sh.day.until.year(days_of_year(sh_now.year) - sh.day.since.year() - 1)
# Stunde/Monat
sh.hour.since.month((24 * (sh.day.since.month() - 1)) + sh.hour.since.midnight())
sh.hour.until.month((24 * days_of_month(sh_now.month,sh_now.year)) - sh.hour.since.month() - 1)
# Stunde/Jahr
sh.hour.since.year((24 * (sh.day.since.year() -1)) + sh.hour.since.midnight())
sh.hour.until.year((24 * days_of_year(sh_now.year)) - sh.hour.since.year() - 1)
# Minute/Monat
sh.minute.since.month((60 * sh.hour.since.month()) + sh.minute.since.hour())
sh.minute.until.month(sh.minute.since.month() - (60 * sh.hour.until.month()) - 1)
# Minute/Jahr
sh.minute.since.year((60 * sh.hour.since.year()) + sh.minute.since.hour())
sh.minute.until.year((60 * sh.hour.until.year()) + sh.minute.until.hour())
# Sekunde/Monat
sh.second.since.month((60 * sh.minute.since.month()) + sh.second.since.minute())
sh.second.until.month((60 * sh.minute.until.month()) + sh.second.until.minute())
# Sekunde/Jahr
sh.second.since.year((60 * sh.minute.since.year()) + sh.second.since.minute())
sh.second.until.year((60 * sh.minute.until.year()) + sh.second.until.minute())
Code:
[month]
[[since]]
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = month.since.year
eval = str(sh.month.since.year()) + 'm'
[[until]]
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = month.until.year
eval = str(sh.month.until.year()) + 'm'
[week]
[[since]]
[[[month]]]
type = num
[[[year]]]
type = num
[[until]]
[[[month]]]
type = num
[[[year]]]
type = num
[day]
[[since]]
[[[week]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = day.since.week
eval = str(sh.day.since.week()) + 'd'
[[[month]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = day.since.month
eval = str(sh.day.since.month()) + 'd'
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = day.since.year
eval = str(sh.day.since.year()) + 'd'
[[until]]
[[[week]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = day.since.week
eval = str(sh.day.since.week()) + 'd'
[[[month]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = day.until.month
eval = str(sh.day.until.month()) + 'd'
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = day.until.year
eval = str(sh.day.until.year()) + 'd'
[hour]
[[since]]
[[[midnight]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.since.midnight
eval = str(sh.hour.since.midnight()) + 'h'
[[[week]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.since.week
eval = str(sh.hour.since.week()) + 'h'
[[[month]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.since.month
eval = str(sh.hour.since.month()) + 'h'
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.since.year
eval = str(sh.hour.since.year()) + 'h'
[[until]]
[[[midnight]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.until.midnight
eval = str(sh.hour.until.midnight()) + 'h'
[[[week]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.until.week
eval = str(sh.hour.until.week()) + 'h'
[[[month]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.until.month
eval = str(sh.hour.until.month()) + 'h'
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = hour.until.year
eval = str(sh.hour.until.year()) + 'h'
[minute]
[[since]]
[[[hour]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.since.hour
eval = str(sh.minute.since.hour()) + 'i'
[[[midnight]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.since.midnight
eval = str(sh.minute.since.midnight()) + 'i'
[[[week]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.since.week
eval = str(sh.minute.since.week()) + 'i'
[[[month]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.since.month
eval = str(sh.minute.since.month()) + 'i'
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.since.year
eval = str(sh.minute.since.year()) + 'i'
[[until]]
[[[hour]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.until.hour
eval = str(sh.minute.until.hour()) + 'i'
[[[midnight]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.until.midnight
eval = str(sh.minute.until.midnight()) + 'i'
[[[week]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.until.week
eval = str(sh.minute.until.week()) + 'i'
[[[month]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.until.month
eval = str(sh.minute.until.month()) + 'i'
[[[year]]]
type = num
[[[[dbstr]]]]
type = str
eval_trigger = minute.until.year
eval = str(sh.minute.until.year()) + 'i'
[second]
[[since]]
[[[minute]]]
type = num
[[[hour]]]
type = num
[[[midnight]]]
type = num
[[[week]]]
type = num
[[[month]]]
type = num
[[[year]]]
type = num
[[until]]
[[[minute]]]
type = num
[[[hour]]]
type = num
[[[midnight]]]
type = num
[[[week]]]
type = num
[[[month]]]
type = num
[[[year]]]
type = num
Gruß Mirko


Kommentar