def _get_scheduled_on_time(): forced_on_time = SchedulerState.get_forced_on_time() now = datetime.datetime.now() if forced_on_time: try: forced_on_time = datetime.datetime.strptime( forced_on_time, "%H:%M") except ValueError: SchedulerState.set_forced_on_time('') else: return now.replace(hour=forced_on_time.hour, minute=forced_on_time.minute, second=0, microsecond=0) else: at = now.strftime('%Y-%m-%d') calendar = json.loads(redis.get(SchedulerState.KEY_DAY_TABLE)) if at in calendar: v = calendar[at].get(SchedulerState.KEY_ON_TIME, now.isoformat()) on_time = datetime.datetime.strptime(v, '%Y-%m-%dT%H:%M:%S') return on_time + datetime.timedelta( hours=float(SchedulerState.get_sundown_offset())) # Sanity check: worst case: on time is unknown, return future date return now + datetime.timedelta(hours=10)
def _get_scheduled_on_time(): time_on = SchedulerState.get_time_on() now = datetime.datetime.utcnow() if time_on in ['sunrise', 'sunset']: at = now.strftime('%Y-%m-%d') calendar = json.loads(redis.get(SchedulerState.KEY_DAY_TABLE)) if calendar and at in calendar: v = calendar[at].get( SchedulerState.KEY_OFF_TIME if time_on == 'sunrise' else SchedulerState.KEY_ON_TIME, now.isoformat()) on_time = datetime.datetime.strptime(v, '%Y-%m-%dT%H:%M:%S') return on_time + datetime.timedelta( seconds=float(SchedulerState.get_offset_time_on())) else: SchedulerState.set_enable_state("off") return else: # Other values of time_on can be "%H:%M" try: formatted_time_on = datetime.datetime.strptime( time_on, "%H:%M") except ValueError: SchedulerState.set_time_on('20:00') else: return now.replace(hour=formatted_time_on.hour, minute=formatted_time_on.minute, second=0, microsecond=0) # Sanity check: worst case: on time is unknown, return future date return now + datetime.timedelta(hours=10)
def set_sundown(day, at): table = json.loads(redis.get(SchedulerState.KEY_DAY_TABLE)) table[day][SchedulerState.KEY_ON_TIME] = day + 'T' + at + ':00' dumped = json.dumps(table) with open(SchedulerState.CITY, 'w') as f: f.write(dumped) redis.set(SchedulerState.KEY_DAY_TABLE, dumped)
def _get_scheduled_on_time(): forced_on_time = SchedulerState.get_forced_on_time() if forced_on_time: try: forced_on_time = datetime.datetime.strptime(forced_on_time, "%H:%M") except ValueError: SchedulerState.set_forced_on_time('') else: now = datetime.datetime.now() forced_sundown_dt = now.replace(hour=forced_on_time.hour, minute=forced_on_time.minute, second=0, microsecond=0) return forced_sundown_dt at = datetime.datetime.now().strftime('%Y-%m-%d') v = json.loads(redis.get(SchedulerState.KEY_DAY_TABLE))[at].get( SchedulerState.KEY_ON_TIME, datetime.datetime.now().isoformat()) on_time = datetime.datetime.strptime(v, '%Y-%m-%dT%H:%M:%S') return on_time + datetime.timedelta(hours=float(SchedulerState.get_sundown_offset()))
def app_started_at(): redis.get(SchedulerState.KEY_APP_STARTED_AT)
def get_current_app(): c_app = redis.get(SchedulerState.KEY_CURRENT_RUNNING_APP) return json.loads(c_app) if c_app is not None else None
def get_available_apps(): return json.loads(redis.get(SchedulerState.KEY_REGISTERED_APP))