def locationChart(location, date): if date is None: date = datetime.datetime.today().replace(hour=0,minute=0,second=0,microsecond=0) else: date = datetime.datetime.strptime(date, "%Y-%m-%d") prevDate = (date - datetime.timedelta(days=1)).strftime("%Y-%m-%d") nextDate = (date + datetime.timedelta(days=1)).strftime("%Y-%m-%d") minimum = epoch(date) * 1000 maximum = epoch(date + datetime.timedelta(days=1)) * 1000 data = {"temperature": [], "RH": []} q = (Measurement .select() .join(Quantity) .switch(Measurement) .join(Location) .where( ((Quantity.name == "temperature") | (Quantity.name == "RH")) & (Location.name == location) & (Measurement.time >= date) & (Measurement.time < date + datetime.timedelta(days=1)) ) .order_by(Measurement.time)) for m in q: data[m.quantity.name].append([epoch(m.time) * 1000, m.value]) data = {key: json.dumps(value) for key, value in data.iteritems()} return render_template("location_chart.htm", data=data, location=location, prevDate=prevDate, nextDate=nextDate, minimum=minimum, maximum=maximum)
def boilerChart(date): if date is None: date = datetime.datetime.today().replace(hour=0,minute=0,second=0,microsecond=0) else: date = datetime.datetime.strptime(date, "%Y-%m-%d") prevDate = (date - datetime.timedelta(days=1)).strftime("%Y-%m-%d") nextDate = (date + datetime.timedelta(days=1)).strftime("%Y-%m-%d") minimum = epoch(date) * 1000 maximum = epoch(date + datetime.timedelta(days=1)) * 1000 data = {"temperature": [], "setpoint": [], "state": []} q = (BoilerLog .select() .where( (BoilerLog.time >= date) & (BoilerLog.time < date + datetime.timedelta(days=1)) ) .order_by(BoilerLog.time)) for h in q: time = epoch(h.time) * 1000 data["temperature"].append([time, h.temperature]) data["setpoint"].append([time, h.setpoint if h.setpoint != 0 else None]) data["state"].append([time, int(h.boiler)]) data = {key: json.dumps(value) for key, value in data.iteritems()} return render_template("boiler_chart.htm", data=data, prevDate=prevDate, nextDate=nextDate, minimum=minimum, maximum=maximum)
def __call__(self, state): now = epoch() pomodoros_list = [v for k, v in state.iteritems()] not_aborted = [ x for x in pomodoros_list if x.get("minutes_elapsed", 0) > 5 ] ended = [x for x in not_aborted if x.get("ended")] last_24h = [ x for x in ended if x["started_at"] > (now - 24 * ONE_HOUR) ] print "Attempted: {}".format(len(pomodoros_list)) print "Not quickly aborted (5min): {}".format(len(not_aborted)) print "Pomodoros: {}".format(len(ended)) print "Last 24 hours: {}".format(len(last_24h)) for p in sorted(last_24h, key=lambda x: x["started_at"]): print " - {:%H:%M}: {}".format( datetime.fromtimestamp(p.get("started_at")), p.get("goal", "???"))
def chartData(location, quantity): output = [] for m in Measurement.select().join(Quantity).switch(Measurement).join(Location).where((Quantity.name == quantity) & (Location.name == location)).order_by(Measurement.time): output.append([epoch(m.time) * 1000, m.value]) return json.dumps(output)
def start(self, goal): self._logger(self._entity, "status", "started") self._logger(self._entity, "started_at", epoch()) self._logger(self._entity, "goal", goal)
def gen_entity(self, prefix): return "{}-{}".format(prefix, epoch())
def __call__(self, e, a, v, t=None): t = t or epoch() with open(os.environ["HOME"] + "/" + self._config.get("log_file"), "a") as f: f.write(json.dumps({"e": e, "a": a, "v": v, "t": t}))