def on_message(client, userdata, msg): # Data in formato CSV (dgraph.js) # (Spostata qua perche` la uso anche per i messaggi nel file di log) DataCSV=time.strftime("%Y/%m/%d %H:%M:%S", time.localtime()) # File di log #AddFileData(FileName,msg.topic+" "+str(msg.payload)+"\n") # Aggiungo messaggi in elaborazione nel file log #print(msg.topic+" "+str(msg.payload)) # MyDebug # Preparazione delle variabili per generazione chiave Redis var = msg.topic #print ("*** Topic:",var) #AddFileData(FileName,"*** Topic:"+str(var)+"\n") # Scrivo nel file di log Tipo = os.path.basename(var) var = os.path.split(var)[0] PosizioneS = os.path.basename(var) var = os.path.split(var)[0] PosizioneP = os.path.basename(var) var = os.path.split(var)[0] PosizioneC = os.path.basename(var) var = os.path.split(var)[0] TipoIO = os.path.basename(var) #print (TipoIO, PosizioneC, PosizioneP, PosizioneS, Tipo) # MyDebug # Devo "parsare" il formato per trasformarlo in dizionario python .. # Ho dovuto usare una try/except perche` un esp8266 a volte sembra inviare # due stringhe assieme. # Modificata try/except perche` capitano errori sulle stringhe (sempre dove c'e` il modulo ESP8266) try: var = json.loads(flt.Decode(msg.payload)) except: AddFileData(FileName,DataCSV+":\t"+msg.topic+" "+str(msg.payload)+"\n") # Scrivo l'errore nel file di log var = "" #print ("var =", var) #AddFileData(FileName,"var ="+str(var)+"\n") # Scrivo nel file di log # Cambio il controllo causa "KeyError: var" if "ID" in var and "Valore" in var: #print(var) MyDB = flt.OpenDBFile(ConfigFile) # Apro il database Redis # Scrivo il record ("chiave redis") ed il valore IDHASH=TipoIO+":"+PosizioneC+":"+PosizioneP+":"+PosizioneS+":"+Tipo+":"+var["ID"] # Uso una variabile di appoggio per l'identificatore della chiave "primaria" #print("IDHASH:",IDHASH) MyDB.hset(IDHASH, "Valori", IDHASH+":Valori" ) # La seconda chiave e` uguale alla prima con ":Valori" alla fine #print("IDHASH:",IDHASH) #AddFileData(FileName,"IDHASH:"+str(IDHASH)+"\n") # Scrivo nel file di log #print("Data:",DataCSV) #AddFileData(FileName,"Data:"+str(DataCSV)+"\n") # Scrivo nel file di log # Lista dei valori, contiene "Data,Valore" e si chiama (quasi) come sopra # Inserisco il valore solo se esiste # Questo dovrebbe eliminare alcuni errori che capitano MyDB.rpush(IDHASH+":Valori",DataCSV+","+var["Valore"])
cgitb.enable() # Le mie librerie Json, Html, flt (Thermo(Redis)) import mjl, mhl, flt import redis # Parametri generali TestoPagina = "Configurazione PID" ConfigFile = "../conf/thermo.json" WriteFile = "/cgi-bin/writepid.py" # Redis "key" RedisKey = "thermo:pid" # Apro il database Redis con l'istruzione della mia libreria MyDB = flt.OpenDBFile(ConfigFile) # Genero chiave/valori se non esiste # Assegno dei valori piu` o meno standard if not MyDB.exists(RedisKey): MyDB.hmset( RedisKey, { "freqcheck": 5, "sensor": "bella domanda", "out": 11, "tempadd": 0, "tempsub": 0 }) # Start web page - Uso l'intestazione "web" della mia libreria print(mhl.MyHtml())