Min trofaste NAS gør knuder, og er derfor offline indtil jeg kan få en reservedel hjem (reparationsvideo kommer…).
Det er en passende lejlighed til at verificere, at mit dataindsamlingssystem til elektricitet, gas og vand kan håndtere at databasen, hvor data normalt skrives til, er nede uden at det resulterer i datatab.
Dataindsamlerens frontend består af en raspberry pi, og i min python kode har jeg implementeret følgende:
tStamp = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime(time.time())) page = urllib2.urlopen("http://192.168.1.2:8080/storepower1.php?p=" + str(pwr) + "&t=" + tStamp) res=page.read() if res == "OK": print "Sample successfully submitted, checking if any old samples in buffer need to be sent" lines = [line.rstrip('\n') for line in open('/home/pi/scrpts/log/power_samplebuffer.log')] # read all entrys from buffer if len(lines) > 0: # 1. Are there any samples in the file? for line in lines: # 2. For all samples, read and submit, then delete from buffer [t, p] = line.split("!") print "tid: " + t + ", power: " + p page = urllib2.urlopen("http://192.168.1.2:8080/storepower1.php?p=" + p + "&t=" + t) fBuf = open('/home/pi/scrpts/log/power_samplebuffer.log', 'w') fBuf.seek(0) fBuf.truncate() fBuf.close() else: print "Communication failure, sample saved locally for later submitting" f = open('/home/pi/scrpts/log/power_samplebuffer.log', 'a') f.write(tStamp + "!" + str(pwr) + "\n") f.close()
Så ovre på 192.168.1.2:8080 har jeg implementeret et API, der modtager sample og skriver den til databasen. Hvis det API ikke returnerer “OK”, vil ovenstående programstump gemme samplen i en lokal fil. Hver gang en ny sample modtages, tjekkes der om der er hul igennem. Hvis svaret er “OK” vil eventuelle gemte samples sendes til serveren.
Min NAS har været nede i adskillige dage, så der burde være en ophobning af gemte samples som venter på at blive skudt afsted. Lad os se på det:
pi@sensormodule ~/scrpts/log $ ls -lrth power* -rw-r--r-- 1 pi pi 0 Nov 2 2015 power_samplebuffer_test.log -rw-r--r-- 1 root root 5.3M May 24 07:30 power_samplebuffer.log pi@sensormodule ~/scrpts/log $ tail -n 5 power_samplebuffer.log 2016-05-24_07:30:27!1993 2016-05-24_07:30:28!1989 2016-05-24_07:30:30!1985 2016-05-24_07:30:32!1976 2016-05-24_07:30:34!1664 pi@sensormodule ~/scrpts/log $ cat power_samplebuffer.log | wc -l 225876 pi@sensormodule ~/scrpts/log $ cat power_samplebuffer.log | wc -l 225878 pi@sensormodule ~/scrpts/log $ cat power_samplebuffer.log | wc -l 225879 pi@sensormodule ~/scrpts/log $pi@sensormodule ~/scrpts/log $
Oh, yes! 225.000 samples venter på at blive skudt afsted. Dejligt at se, når tingene virker som forventet!
Indtil videre intet datatab! 🙂