def precitajJsonFile(filename): try: with open(filename) as f: return json.load(f) except: log.exception("EXCEPTION!")
def __init__(self, sprava): try: self.sprava = sprava #sprava je v tomto formate: E0H0M020E050D0j31050C040f2h1B1 jedna hodnota ma velkost 2 #najprv premen kodovane dataVSprave 'E0H0M0' na list hodnot ktore zastupuju (index v ZP.CODE) : [23, 45, 15] print("sprava:", sprava) self.spravaL = [ ZP.CODE.index(sprava[i:i + 2]) for i in range(0, len(sprava), 2) ] self.dlzkaSpravy = self.spravaL[0] self.casOdosielania = self.spravaL[ 1: 7] # list vo formate [19, 23, 12, 32,43,23] = [rok, mesiac, den, hodina, minuta, sekunda] #PRVE TRI POLIA: self.zastupenie = list( vseobecne.ConvertFromIntTo.binarkaSTR( self.spravaL[7])) #[0, 1, 1, 1, 0, 0, 0, 1] 8bitov #DATA: self.listHodnot = self.__listZoradenychHodnot(self.spravaL[8:]) self.intervalMerTep, self.intervalMerGps, self.intervalInfTep, self.intervalInfGps, \ self.tolerLow, self.tolerHigh, self.onOffAlarmPark, self.aktBoxy = self.listHodnot except: log.exception("EXCEPTION!")
def nastavenia(intervalMerTep = '', intervalMerGps = '', intervalInfTep = '', intervalInfGps = '', \ tolerLow = '', tolerHigh = '', onOffAlarmPark = '', aktBoxy = ''): try: #mozne intervaly su v ZP.MOZNEIntervalySprav, tolerancie su teplota, onoff su True, False, wifi meno heslo je ("meno", "heslo") intervalMerTep = vseobecne.ConvertToCODEFrom.intervalINT( intervalMerTep) if intervalMerTep != '' else '' intervalMerGps = vseobecne.ConvertToCODEFrom.intervalINT( intervalMerGps) if intervalMerGps != '' else '' intervalInfTep = vseobecne.ConvertToCODEFrom.intervalINT( intervalInfTep) if intervalInfTep != '' else '' intervalInfGps = vseobecne.ConvertToCODEFrom.intervalINT( intervalInfGps) if intervalInfGps != '' else '' tolerLow = vseobecne.ConvertToCODEFrom.teplotaINT( tolerLow) if tolerLow != '' else '' tolerHigh = vseobecne.ConvertToCODEFrom.teplotaINT( tolerHigh) if tolerHigh != '' else '' onOffAlarmPark = vseobecne.ConvertToCODEFrom.binarkaSTR( onOffAlarmPark ) if onOffAlarmPark != '' else '' #reprezentuje on/off aktBoxy = vseobecne.ConvertToCODEFrom.binarkaSTR( aktBoxy) if aktBoxy != '' else '' #reprezentuje on/off dataTUPLE = (intervalMerTep, intervalMerGps, intervalInfTep, intervalInfGps, \ tolerLow, tolerHigh, onOffAlarmPark, aktBoxy) #tuple ktory obsahuje CODE objekty v poradi akom budu v sprave zastupenie = Zabal.__zastupenie(dataTUPLE) dlzkaDat = Zabal.__dlzkaDat(dataTUPLE) sprava = reduce(lambda x, y: x + y, dataTUPLE) return dlzkaDat, zastupenie, sprava #VRATI spravu vo formate b'sd131fsdfas', zastupenie b'x\034', dlzkudat ako int 23 except: log.exception("EXCEPTION!")
def vysledky(tv_snz1 = '',tv_snz2 = '',tv_snz3 = '', tv_snz4 = '', tv_snz5 = '', tv_snz6 = '', \ tv_snzVonkajsi = '', tv_snzRPI = '', tv_snzWTPI = '', senzorySNezdrTeplotami = '', senzorySOscilTeplotami = '',\ senzorySoZasekTeplotami = '', gps_suradnice = ''): try: #tv_snz: input = (teplota, indexTepelny) -> 2B CODE #gps_suradnice: input = (altitude, longitude) -> velke cislo v jednoduchom formate: b'123.45,56.423435') gps_suradnice = ( str(gps_suradnice[0]) + "," + str(gps_suradnice[1]) ).encode( ) if gps_suradnice != '' else '' #jednoduchy format b'123.45,56.423435' dataTUPLE = (\ vseobecne.ConvertToCODEFrom.tepInd(tv_snz1),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snz2),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snz3),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snz4),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snz5),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snz6),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snzVonkajsi),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snzRPI),\ vseobecne.ConvertToCODEFrom.tepInd(tv_snzWTPI),\ vseobecne.ConvertToCODEFrom.binarkaSTR(senzorySNezdrTeplotami) if senzorySNezdrTeplotami != '' else '',\ vseobecne.ConvertToCODEFrom.binarkaSTR(senzorySOscilTeplotami) if senzorySOscilTeplotami != '' else '',\ vseobecne.ConvertToCODEFrom.binarkaSTR(senzorySoZasekTeplotami) if senzorySoZasekTeplotami != '' else '',\ gps_suradnice) zastupenie = Zabal.__zastupenie( dataTUPLE[:8]) + Zabal.__zastupenie(dataTUPLE[8:]) dlzkaDat = Zabal.__dlzkaDat(dataTUPLE) sprava = reduce(lambda x, y: x + y, dataTUPLE) return dlzkaDat, zastupenie, sprava except: log.exception("EXCEPTION!")
def prepisJsonFile(slovnik, filename): try: with open(filename, "w") as f: json.dump(slovnik, f, indent=2, sort_keys=True) except: log.exception("EXCEPTION!")
def zoradDoZostavV(self, vlhkosti): try: #input = [23.4,23.4,12.5,0.4] if len(vlhkosti) == 1: return [[vlhkosti[0]], vlhkosti[0]] else: #teraz ich chcem posortirovat do skupin podla velkosti teploty: skupiny = [[vlhkosti[0]]] priemerySkupin = [vlhkosti[0]] for ixtep in range( 1, len(vlhkosti)): #okrem prvej lebo ta je uz tam for ixprm in range(len( priemerySkupin)): #tento list sa postupne zvacsuje #ak je teplota v rozmedzi niektorej skupin tak ju k nej prirad if abs( abs(vlhkosti[ixtep]) - abs(priemerySkupin[ixprm]) ) < self.rozptylVlh: #rozmedzie: [priemer - rozptyl, priemer + rozptyl] skupiny[ixprm].append(vlhkosti[ixtep]) break #ak nie je v rozmedzi tak vytvor novu skupinu s tymto clenom elif ixprm == len( priemerySkupin ) - 1: #posledna iteracia tiez nepresla skupiny.append([vlhkosti[ixtep]]) priemerySkupin = Filter.priemerujListy( skupiny ) #vytvor novy priemerovy list za kazdym priradenim vlhkosti zostavy = list(zip(skupiny, Filter.priemerujListy(skupiny))) return zostavy #[[[12.3,244,12],PRIEMER],[[13,-23],PRIEMER]] except: log.exception("EXCEPTION!")
def zoradDoZostavT(self, teploty): try: #input = [23.4,23.4,12.5,0.4,-200] if len(teploty) == 1: return [[teploty[0]], teploty[0]] else: #teraz ich chcem posortirovat do skupin podla velkosti teploty: skupiny = [[teploty[0]]] priemerySkupin = [teploty[0]] for ixtep in range( 1, len(teploty) ): #vezmi teplotu po teplote, okrem prvej lebo ta je uz tam for ixprm in range(len( priemerySkupin)): #tento list sa postupne zvacsuje #ak je teplota v rozmedzi niektorej skupin tak ju k nej prirad if abs(teploty[ixtep] - priemerySkupin[ixprm]) < self.rozptylTep: skupiny[ixprm].append(teploty[ixtep]) break #ak nie je v rozmedzi tak vytvor novu skupinu s tymto clenom elif ixprm == len( priemerySkupin ) - 1: #posledna iteracia tiez nepresla skupiny.append([teploty[ixtep]]) priemerySkupin = Filter.priemerujListy( skupiny ) #vytvor novy priemerovy list za kazdym priradenim teploty zostavy = list(zip(skupiny, Filter.priemerujListy(skupiny))) return zostavy #[[12.3,244,12],PRIEMER]] except: log.exception("EXCEPTION!")
def __listZoradenychHodnot(self, dataVSprave): #data v Sprave maju format: [19, 23, 12, 32, 43, 23] #return funkcie snad nieco taketo: [12,24,24,123456879,35,15,'10001100', '10001100'] print("dataVSprave", dataVSprave) try: i = 0 #index velicin k = 0 #index spravy result = [] for bit in self.zastupenie: if i > 8: #po 8 bitoch skonci break if bit == '1': if i in [0, 1, 2, 3]: #intervalove veliciny #print ("index je %d k je %d, sprava je %d ", i, k, self.sprava[8:]) result.append(self.__vyratajInterval( dataVSprave[k])) #ostatne IntervalVeliciny elif i in [4, 5]: #tolerLow, tolerHigh result.append(ZP.TEPLOTY[dataVSprave[k]]) elif i in [6]: #onOffAlarmPark result.append( vseobecne.ConvertFromIntTo.binarkaSTR( dataVSprave[k])) # elif i in [7]: #aktBoxy result.append( vseobecne.ConvertFromIntTo.binarkaSTR( dataVSprave[k])) k += 1 #chod na dalsiu hodnotu v sprave else: result.append(None) i += 1 return result #snad nieco taketo: [12,24,24,123456879,35,15,'10001100', '10001100'] except: log.exception("EXCEPTION!")
def gps(): try: Meraj.startuj_GPS() Meraj.meraj_GPS() except: log.exception("EXCEPTION!")
def clearStartupTime(): try: skript = "clear_startup_time.sh" os.system('bash ' + ZP.MAIN_DIR + skript) except: log.exception("EXCEPTION!")
def startupTime(wittySched): try: skript = 'set_startupWitty.sh' os.system('bash ' + ZP.MAIN_DIR + skript + " " + wittySched) except: log.exception("EXCEPTION!")
def utilities(): try: skript = "utilities.sh" return os.popen('bash ' + ZP.MAIN_DIR + skript).readlines() except: log.exception("EXCEPTION!")
def cistyCipshut(): try: #funguje len ak bezi thread serialRead() #CIPSHT: #najprv vymaz queue if queueVypni.full(): queueVypni.get() serialPort.write(prikazyNaVypni[1]) try: if queueVypni.get(timeout=4) == 'cipshutOK': log.info("AT+CIPSHUT > SHUT OK.") return 0 else: log.error( "postup nebol dodrzany alebo sa vyskytla chyba, restartuj internet" ) return 1 except: log.error("Nepodarilo sa.") return 1 except queue.Empty: log.exception("serialRead neodpovedal nacas!") except: log.exception("EXCEPTION!")
def systemTimeToRtc(): try: skript = 'systemTimeToRtc.sh' os.system('bash ' + ZP.MAIN_DIR + skript) except: log.exception("EXCEPTION!")
def ofRpi(): #no humidity available for Rpi try: #spusta sa len raz za cas spolu s WittyPi tepRPI = sysfun.getRpiTemperature() reSearch = re.search(r'(.*)\'', tepRPI[0][5:]) if reSearch: teplota = int(float( reSearch.group(1))) #int ak by nahodou nebola ciarka else: #ak sa nejaka somarina precita teplota = None vlhkost = None if teplota != None: if int(teplota) not in ZP.TEPLOTY: log.warning("Chybne meranie teploty RPI! Hodnota " + str(teplota) + " nie je realna! Povazujem za None") teplota = None with ZP.zhromTep_lock: ZP.zhromazdisko_tep['rpi'].append((teplota, vlhkost)) with ZP.logPerRun_lock: ZP.logPerRun.addItem(itemName='rpi', itemValue=(teplota, vlhkost), itemPosition=110, specialType='teplota_a_vlhkost') except: log.exception("EXCEPTION!")
def vypni_GPS(): try: ser.write(b'AT+CGNSPWR=0\r\n') time.sleep(1) odpoved = str(ser.read(ser.inWaiting())) except: log.exception("EXCEPTION!")
def modifyString(strng, chrcter, indx): try: strng_list = list(strng) strng_list[indx] = chrcter return ''.join(strng_list) except: log.exception("EXCEPTION!")
def zaokruhli_napoli(teplotu): try: if teplotu == None: return None else: return round(teplotu * 2) / 2 except: log.exception("EXCEPTION!")
def vlhkostINT(vlhkost): try: index = ZP.VLHKOSTI.index(vlhkost) assert index < 254 return ZP.CODE[index] except: log.exception("EXCEPTION!")
def teplotaINT(teplota): try: #(INT) teplota = -40, -25.5, ...., 80 index = ZP.TEPLOTY.index(teplota) assert index < 254 return ZP.CODE[index] except: log.exception("EXCEPTION!")
def __init__(self): #creates logger try: self.dictNameToValue = {} self.dictNameToPosition = {} self.hlavicka = [] self.hodnoty = [] self.run = True except: log.exception("EXCEPTION!")
def intervalINT(cislo): try: #(INT) cislo = jedno z tych v ZP.MOZNEIntervalySprav index = ZP.MOZNEIntervalySprav.index(cislo) assert index < 254 return ZP.CODE[index] #vystup CODE je poradie intervalu v ZP.MOZNEIntervalySprav except: log.exception("EXCEPTION!")
def vyberRepreZostavuV(self, zostavy): try: repreZostava = zostavy[0] for i in zostavy: if len(i[0]) >= len(repreZostava[0]): repreZostava = i return repreZostava except: log.exception("EXCEPTION!")
def tepInd(tv_snz): try: if tv_snz == '': return '' else: return ConvertToCODEFrom.teplotaINT( tv_snz[0]) + ConvertToCODEFrom.vlhkostINT(tv_snz[1]) except: log.exception("EXCEPTION!")
def datetimeToList(datetimeobjekt): try: l1 = datetimeobjekt #vytvor list: return [ l1.year - 2000, l1.month, l1.day, l1.hour, l1.minute, l1.second ] except: log.exception("EXCEPTION!")
def print(self): try: self.__updateLists() formatHodnot = '' for hod in self.hodnoty: formatHodnot += '; ' + hod ZP.logVysledky.info( formatHodnot) #log to file using python logging module except: log.exception("EXCEPTION!")
def resetujOdpocetD( konfigD, freq ): #set all values of active tasks to FREQ (6 seconds) so that they all run on the next Main Loop try: odpocetD = dict() for i in ZP.INTERVALOVE_PREMENNE: odpocetD[i] = freq if konfigD[i] != 123456789 else None return odpocetD except: log.exception("EXCEPTION!")
def binarkaSTR(bajtCislo): try: binarkaSTR = '' for i in range(8): bit = bajtCislo // int(math.pow(2, (7 - i))) if bit == 1: bajtCislo = bajtCislo - int(math.pow(2, (7 - i))) binarkaSTR += str(bit) return binarkaSTR #prirodzene poradie bitov, prvy zastupuje hodnotu 128 poslendny 1 except: log.exception("EXCEPTION!")
def __dlzkaDat(data): try: #toto funguje aj pre data o velkosti 1 a 0 dlzka = 0 for i in data: if i != '': dlzka += len(i) return dlzka #vrati int except: log.exception("EXCEPTION!")
def meraj_GPS(): try: global zhromazdisko_gps zhromazdisko_gps.append(Meraj.pull_data_GPS()) with print_lock: print(list(zhromazdisko_gps)[-1]) #vypni gps: except: log.exception("EXCEPTION!")