def renewSchedule(): if 'iniFile' in xP.prefs: daySchedule = getWeekDaySchedule() if daySchedule != "--": xP.prefs['iniFile'] = daySchedule aSchedule = xP.prefs['iniFile'] sched.remove_all_jobs() log2DayFile(True, 'renew Schedule') xP.switchTime = datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)+ timedelta(hours=24) suntime() jobLines = jobsRead(aSchedule) jobs2Schedule(jobLines) tab = scheduleActive() cJob = sched.add_job(renewSchedule, 'date', run_date=str(xP.switchTime), id="renew") msg = " renew Schedule next Switch Time " + str(xP.switchTime)[:19] print(msg) log2DayFile(True, msg) prefsSaveJSON(None, None) else: pass logERR(False)
def jobsRead(cIniFile = 'piSchedule.ini'): if cIniFile == "": cIniFile = 'piSchedule.ini' jobLines = "" try: msg = "read INI Jobs file >> " + cIniFile + "<<" jobLines = jobsReadFile(cIniFile) logSys (msg + "\n" + str(jobLines)) logInfo (msg) except: pass #if fails get 'piSchedule.ini' or initialize it logERR(True) return jobLines
def main(): global xP, piPortDelta try: logInfo('\n________Started piSchedule (cMain)________') logSys ('\n________Started piSchedule (cMain)________') debug(mode=False) # Bottle debug mode <<<<<<<<<<<<<<<<< xP.switchTime = datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)+ timedelta(hours=24) prefsRead() xP.prefs = prefsSetup() # includes geoDetails, suntime info = logPrefsDetails(xP.prefs) print(info) logInfo(info) if xP.prefs['ssdp'] != "OK": print ("\n ** NO 'ssdp' connection! **") return xP.prefs['ssdp'] if (len(sys.argv) == 2) and sys.argv[1] == "-prefs": return 0 #x= 1/0 # logERR Testing only sched.start() # start the scheduler renewSchedule() # if iniFile is set, load jobList of it # starting bottle with web page app.run(host = xP.prefs['server'], port = xP.prefs['port'], reloader=False) except: logERR(True) logInfo('Finished Main\n') logSys('Finished Main\n')
def piDiscover(service, timeout=2, retries=1): #--------------------------------- global xP try: prefsFile = open(xP.prefsJSONfile, 'r') fPrefs = json.loads(prefsFile.read()) except: fPrefs = {} group = ("239.255.255.250", 1900) message = "\r\n".join([ 'M-SEARCH * HTTP/1.1', 'HOST: {0}:{1}'.format(*group), 'MAN: "ssdp:discover"', 'ST: {st}','MX: 3','','']) responses = {} try: server = str(fPrefs['server']) except: server = "" port = '' error = 'OK' i = 0; for _ in range(retries): i += 1 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, struct.pack('LL', 0, 10000)); sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) sock.sendto(message.format(st=service), group) while True: try: responses[i] = sock.recv(1024); break; except socket.timeout: error = 'timeout' break; except: error = 'no pilight ssdp connections found' break; r = responses.values() if len(r) > 0: locationsrc = re.search('Location:([0-9.]+):(.*)', str(r[0]), re.IGNORECASE) if locationsrc: server = locationsrc.group(1).strip() port = locationsrc.group(2).strip() configFile = '/etc/pilight/config.json' piPrefs = {} try: prefsFile = open(configFile, 'r') piPrefs = json.loads(prefsFile.read()) if 'webserver-http-port' in piPrefs['settings']: port = piPrefs['settings']['webserver-http-port'] if 'webserver-port' in piPrefs['settings']: port = piPrefs['settings']['webserver-port'] except: logERR(True) # will terminate / quiet pilightVersion = str(piPrefs['registry']['pilight']['version']['current']) rv = [server, port, pilightVersion, error] #print (" ** piDiscover pilight (v." + version + ") **\n" # + (str(responses)).replace("\\x00","").replace("\\r\\n","\n")) logInfo (" ** piDiscover pilight " + str(rv), xColor) logSys (" ** piDiscover pilight " + str(rv), xColor) return rv