Hallo,
für die zeitliche Auswertung u.a. von Verbrauch verwende ich eine Logik, die mit folgendes Items "füllt":
Die Logik selbst:
Damit kann man dann Datenbankabfragen für gestern, vorgestern, letzten Monat etc mache.
bspw. so.
Meine Frage ist, ob es sinnvoll wäre, diese Items als Systemitems oder als Zeitmodul zur Verfügung zu stellen?
Was meint ihr? Msinn bmx psilo
für die zeitliche Auswertung u.a. von Verbrauch verwende ich eine Logik, die mit folgendes Items "füllt":
Code:
%YAML 1.1
---
time:
date:
current_month:
type: foo
last_month:
type: foo
last_month_but_one:
type: foo
last_month_but_two:
type: foo
year:
current:
type: num
month:
since:
year:
type: num
dbstr:
type: str
eval_trigger: time.month.since.year
eval: str(sh.time.month.since.year()) + 'm'
until:
year:
type: num
dbstr:
type: str
eval_trigger: time.month.until.year
eval: str(sh.time.month.until.year()) + 'm'
list:
type: str
value: Januar Februar März April Mai Juni Juli August September Oktober November Dezember
visu_acl: r
current:
type: num
cache: yes
current_name:
type: str
eval: sh.time.month.list().split()[int(sh.time.month.current() - 1)]
eval_trigger: time.month.current
cache: yes
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: time.day.since.week
eval: str(sh.time.day.since.week()) + 'd'
month:
type: num
dbstr:
type: str
eval_trigger: time.day.since.month
eval: str(sh.time.day.since.month()) + 'd'
year:
type: num
dbstr:
type: str
eval_trigger: time.day.since.year
eval: str(sh.time.day.since.year()) + 'd'
until:
week:
type: num
dbstr:
type: str
eval_trigger: time.day.since.week
eval: str(sh.time.day.since.week()) + 'd'
month:
type: num
dbstr:
type: str
eval_trigger: time.day.until.month
eval: str(sh.time.day.until.month()) + 'd'
year:
type: num
dbstr:
type: str
eval_trigger: time.day.until.year
eval: str(sh.time.day.until.year()) + 'd'
hour:
since:
midnight:
type: num
cache: yes
dbstr:
type: str
cache: yes
eval_trigger: time.hour.since.midnight
eval: str(sh.time.hour.since.midnight()) + 'h'
week:
type: num
dbstr:
type: str
cache: yes
eval_trigger: time.hour.since.week
eval: str(sh.time.hour.since.week()) + 'h'
month:
type: num
cache: yes
dbstr:
type: str
cache: yes
eval_trigger: time.hour.since.month
eval: str(sh.time.hour.since.month()) + 'h'
year:
type: num
cache: yes
dbstr:
type: str
cache: yes
eval_trigger: time.hour.since.year
eval: str(sh.time.hour.since.year()) + 'h'
until:
midnight:
type: num
dbstr:
type: str
eval_trigger: time.hour.until.midnight
eval: str(sh.time.hour.until.midnight()) + 'h'
week:
type: num
dbstr:
type: str
eval_trigger: time.hour.until.week
eval: str(sh.time.hour.until.week()) + 'h'
month:
type: num
dbstr:
type: str
eval_trigger: time.hour.until.month
eval: str(sh.time.hour.until.month()) + 'h'
year:
type: num
dbstr:
type: str
eval_trigger: time.hour.until.year
eval: str(sh.time.hour.until.year()) + 'h'
minute:
since:
hour:
type: num
dbstr:
type: str
eval_trigger: time.minute.since.hour
eval: str(sh.time.minute.since.hour()) + 'i'
midnight:
type: num
cache: yes
dbstr:
type: str
cache: yes
eval_trigger: time.minute.since.midnight
eval: str(sh.time.minute.since.midnight()) + 'i'
week:
type: num
cache: yes
dbstr:
type: str
cache: yes
eval_trigger: time.minute.since.week
eval: str(sh.time.minute.since.week()) + 'i'
month:
type: num
cache: yes
dbstr:
type: str
cache: yes
eval_trigger: time.minute.since.month
eval: str(sh.time.minute.since.month()) + 'i'
year:
type: num
cache: yes
dbstr:
type: str
cache: yes
eval_trigger: time.minute.since.year
eval: str(sh.time.minute.since.year()) + 'i'
until:
hour:
type: num
dbstr:
type: str
eval_trigger: time.minute.until.hour
eval: str(sh.time.minute.until.hour()) + 'i'
midnight:
type: num
dbstr:
type: str
eval_trigger: time.minute.until.midnight
eval: str(sh.time.minute.until.midnight()) + 'i'
week:
type: num
dbstr:
type: str
eval_trigger: time.minute.until.week
eval: str(sh.time.minute.until.week()) + 'i'
month:
type: num
dbstr:
type: str
eval_trigger: time.minute.until.month
eval: str(sh.time.minute.until.month()) + 'i'
year:
type: num
dbstr:
type: str
eval_trigger: time.minute.until.year
eval: str(sh.time.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
Code:
#/logics/zeit.py
#!/usr/bin/env python
from dateutil.relativedelta import relativedelta
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 (year % 400 == 0) or ((year % 4 == 0) and not (year % 100 == 0)): #Schaltjahr
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.time.second.since.minute(sh_now.second)
sh.time.second.until.minute(60 - sh_now.second - 1)
# Minute/Stunde
sh.time.minute.since.hour(sh_now.minute)
sh.time.minute.until.hour(60 - sh_now.minute - 1)
# Stunde/Tag
sh.time.hour.since.midnight(sh_now.hour)
sh.time.hour.until.midnight(24 - sh_now.hour - 1)
# Tag/Woche
sh.time.day.since.week(sh_now.isoweekday())
sh.time.day.until.week(7 - sh_now.isoweekday())
# Stunde/Woche
sh.time.hour.since.week(sh.time.hour.since.midnight() + (24 * (sh.time.day.since.week() - 1)))
sh.time.hour.until.week(sh.time.hour.until.midnight() + (24 * sh.time.day.until.week()))
# Kalenderwoche/Jahr
sh.time.week.since.year(sh.now().isocalendar()[1])
# Monat/Jahr
sh.time.month.since.year(sh_now.month)
sh.time.month.until.year(12-sh_now.month)
# Sekunde/Stunde
sh.time.second.since.hour(sh.time.second.since.minute() + (60 * sh.time.minute.since.hour()))
sh.time.second.until.hour(sh.time.second.until.minute() + (60 * sh.time.minute.until.hour()))
# Sekunde/Tag
sh.time.second.since.midnight(sh.time.second.since.minute() + (3600 * sh.time.hour.since.midnight()))
sh.time.second.until.midnight(sh.time.second.until.minute() + (3600 * sh.time.hour.until.midnight()))
# Minute/Tag
sh.time.minute.since.midnight(sh.time.minute.since.hour() + (60 * sh.time.hour.since.midnight()))
sh.time.minute.until.midnight(sh.time.minute.until.hour() + (60 * sh.time.hour.until.midnight()))
# Minute/Woche
sh.time.minute.since.week(sh.time.minute.since.hour() + (60 * sh.time.hour.since.week()))
sh.time.minute.until.week(sh.time.minute.until.hour() + (60 * sh.time.hour.until.week()))
# Sekunde/Woche
sh.time.second.since.week(sh.time.second.since.minute() + (60 * sh.time.minute.since.week()))
sh.time.second.until.week(sh.time.second.until.minute() + (60 * sh.time.minute.until.week()))
# Tage/Monat
sh.time.day.since.month(sh_now.day - 1)
sh.time.day.until.month(days_of_month(sh_now.month,sh_now.year) - sh.time.day.since.month() - 1)
# Tage/Jahr
sh.time.day.since.year(day_of_year(sh_now.year,sh_now.month,sh_now.day) - 1)
sh.time.day.until.year(days_of_year(sh_now.year) - sh.time.day.since.year() - 1)
# Stunde/Monat
sh.time.hour.since.month((24 * sh.time.day.since.month()) + sh.time.hour.since.midnight())
sh.time.hour.until.month((24 * days_of_month(sh_now.month,sh_now.year)) - sh.time.hour.since.month() - 1)
# Stunde/Jahr
sh.time.hour.since.year((24 * sh.time.day.since.year()) + sh.time.hour.since.midnight())
sh.time.hour.until.year((24 * days_of_year(sh_now.year)) - sh.time.hour.since.year() - 1)
# Minute/Monat
sh.time.minute.since.month((60 * sh.time.hour.since.month()) + sh.time.minute.since.hour())
sh.time.minute.until.month(sh.time.minute.since.month() - (60 * sh.time.hour.until.month()) - 1)
# Minute/Jahr
sh.time.minute.since.year((60 * sh.time.hour.since.year()) + sh.time.minute.since.hour())
sh.time.minute.until.year((60 * sh.time.hour.until.year()) + sh.time.minute.until.hour())
# Sekunde/Monat
sh.time.second.since.month((60 * sh.time.minute.since.month()) + sh.time.second.since.minute())
sh.time.second.until.month((60 * sh.time.minute.until.month()) + sh.time.second.until.minute())
# Sekunde/Jahr
sh.time.second.since.year((60 * sh.time.minute.since.year()) + sh.time.second.since.minute())
sh.time.second.until.year((60 * sh.time.minute.until.year()) + sh.time.second.until.minute())
# Aktueller Monat
sh.time.month.current(sh_now.month)
# Aktuelles Jahr
sh.time.year.current(sh_now.year)
# Aktuelles Monat/Jahr
today_date = datetime.date.today()
sh.time.date.current_month(today_date.strftime("%m/%Y"))
# Letzter Monat/Jahr
last_month = today_date - relativedelta(months=1)
sh.time.date.last_month(last_month.strftime("%m/%Y"))
# Vorletzter Monat/Jahr
last_month_but_one = today_date - relativedelta(months=2)
sh.time.date.last_month_but_one(last_month_but_one.strftime("%m/%Y"))
# VorVorletzter Monat/Jahr
last_month_but_two = today_date - relativedelta(months=3)
sh.time.date.last_month_but_two(last_month_but_two.strftime("%m/%Y"))
bspw. so.
Code:
gestern:
type: num
visu_acl: ro
eval: round((sh...db('max', sh.time.minute.since.midnight.dbstr(), sh.time.minute.since.midnight.dbstr()) - sh...db('max', str(sh.time.minute.since.midnight() + 1440) + 'i', str(sh.time.minute.since.midnight() + 1440) + 'i')), 2)
crontab: 1 0 * * = 1
database: init
Was meint ihr? Msinn bmx psilo


Kommentar