From c1c46552938219c9b9e595c049a1885968c4a6a3 Mon Sep 17 00:00:00 2001
From: Nicolas Forquet <nicolas.forquet@irstea.fr>
Date: Wed, 11 Dec 2019 17:29:23 +0100
Subject: [PATCH] add the function to save measurement using the feather binary
 format

---
 ohmpy_v_1_01.py | 41 ++++++++++++++++++++++++++++-------------
 1 file changed, 28 insertions(+), 13 deletions(-)

diff --git a/ohmpy_v_1_01.py b/ohmpy_v_1_01.py
index 25ad6bd5..7cfad789 100644
--- a/ohmpy_v_1_01.py
+++ b/ohmpy_v_1_01.py
@@ -18,6 +18,8 @@ import sys
 import adafruit_ads1x15.ads1115 as ADS
 from adafruit_ads1x15.analog_in import AnalogIn
 import pandas as pd
+import feather
+from pathlib import Path
 
 """
 display start time
@@ -36,6 +38,7 @@ stack= 1 # repetition of the current injection for each quadripole
 R_ref = 50 # reference resistance value in ohm
 coef_p0 = 2.02 # slope for current conversion for ADS.P0, measurement in ???
 coef_p1 = 2.02 # slope for current conversion for ADS.P1, measurement in ???
+export_path = "/home/..."
 
 """
 functions
@@ -107,24 +110,38 @@ def run_measurement(nb_stack, injection_deltat, Rref, coefp0, coefp1):
         Vm1 = AnalogIn(ads,ADS.P2).voltage # reading voltage value on ADS channel A2
         Vn1 = AnalogIn(ads,ADS.P3).voltage # reading voltage value on ADS channel A3
         GPIO.output(8, GPIO.LOW)# stop current injection
-        I1= (Ia1 - Ib1)/Rref;
-        sum_I=sum_I+I1;
-        Vmn1= (Vm1 - Vn1);    
+        I1= (Ia1 - Ib1)/Rref
+        sum_I=sum_I+I1
+        Vmn1= (Vm1 - Vn1)    
         if (n % 2) == 0:
-            sum_Vmn=sum_Vmn-Vmn1;
-            sum_Ps=sum_Ps+Vmn1;
+            sum_Vmn=sum_Vmn-Vmn1
+            sum_Ps=sum_Ps+Vmn1
         else:
-            sum_Vmn=sum_Vmn+Vmn1;
-            sum_Ps=sum_Ps+Vmn1;
+            sum_Vmn=sum_Vmn+Vmn1
+            sum_Ps=sum_Ps+Vmn1
     # return averaged values
     output = pd.DataFrame({
+        "time":datetime.now()
         "Vmn":sum_Vmn/(3+2*nb_stack-1),
         "I":sum_I/(3+2*nb_stack-1),
         "R":Vmn/I,
         "Ps":sum_Ps/(3+2*nb_stack-1)
+        "nbStack":nb_stack
     })
     return output
 
+# save data
+def append_and_save(path, last_measurement):
+    
+    if path.is_file():
+        # Load data file and append data to it
+        df = feather.read_dataframe(path)
+        df.append(last_measurement)
+        feather.write_dataframe(df, path)
+    else:
+        # create data file
+        feather.write_dataframe(last_measurement, path)
+
 """
 Initialization of GPIO channels
 """                    
@@ -151,10 +168,10 @@ for g in range(0,nbr_meas): # for time-lapse monitoring
         switch_mux(N[i,])
 
         # run a measurement
-        run_measurement(stack, injection_duration, R_ref, coef_p0, coef_p1)
+        current_measurement = run_measurement(stack, injection_duration, R_ref, coef_p0, coef_p1)
 
         # save data and print in a text file
-        append_data
+        append_and_save(export_path, current_measurement)
 
         # reset multiplexer channels
         GPIO.output(12, GPIO.HIGH); GPIO.output(16, GPIO.HIGH); GPIO.output(20, GPIO.HIGH); GPIO.output(21, GPIO.HIGH); GPIO.output(26, GPIO.HIGH)
@@ -162,7 +179,5 @@ for g in range(0,nbr_meas): # for time-lapse monitoring
         GPIO.output(6, GPIO.HIGH); GPIO.output(13, GPIO.HIGH); GPIO.output(4, GPIO.HIGH); GPIO.output(17, GPIO.HIGH); GPIO.output(27, GPIO.HIGH)
         GPIO.output(22, GPIO.HIGH); GPIO.output(10, GPIO.HIGH); GPIO.output(9, GPIO.HIGH); GPIO.output(11, GPIO.HIGH); GPIO.output(5, GPIO.HIGH)
 
-    time.sleep(sequence_delay); #waiting next measurement (time-lapse)
-
-
-
+    time.sleep(sequence_delay) #waiting next measurement (time-lapse)
+    
\ No newline at end of file
-- 
GitLab