예제 #1
0
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"])
예제 #2
0
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())