add local sensor datastore, make IO tests granular
diff --git a/wally/sensors/main.py b/wally/sensors/main.py
index e8489d5..55a9584 100644
--- a/wally/sensors/main.py
+++ b/wally/sensors/main.py
@@ -29,7 +29,7 @@
         else:
             msg = "Sensor {0!r} isn't available".format(sensor_name)
             raise ValueError(msg)
-    return time.time(), result
+    return result
 
 
 def parse_args(args):
@@ -54,10 +54,25 @@
 
     sender = create_protocol(opts.url)
     prev = {}
+    next_data_record_time = time.time()
 
     while True:
-        gtime, data = get_values(required_sensors.items())
-        curr = {'time': SensorInfo(gtime, True)}
+        real_time = int(time.time())
+
+        if real_time < int(next_data_record_time):
+            if int(next_data_record_time) - real_time > 2:
+                print "Error: sleep too small portion!!"
+            report_time = int(next_data_record_time)
+        elif real_time > int(next_data_record_time):
+            if real_time - int(next_data_record_time) > 2:
+                report_time = real_time
+            else:
+                report_time = int(next_data_record_time)
+        else:
+            report_time = real_time
+
+        data = get_values(required_sensors.items())
+        curr = {'time': SensorInfo(report_time, True)}
         for name, val in data.items():
             if val.is_accumulated:
                 if name in prev:
@@ -69,9 +84,11 @@
         if source_id is not None:
             curr['source_id'] = source_id
 
+        print report_time, int((report_time - time.time()) * 10) * 0.1
         sender.send(curr)
 
-        time.sleep(opts.timeout)
+        next_data_record_time = report_time + opts.timeout + 0.5
+        time.sleep(next_data_record_time - time.time())
 
 
 def pid_running(pid):
@@ -103,11 +120,13 @@
                 if pid_running(pid):
                     os.kill(pid, signal.SIGTERM)
 
-                time.sleep(0.1)
+                time.sleep(0.5)
 
                 if pid_running(pid):
                     os.kill(pid, signal.SIGKILL)
 
+                time.sleep(0.5)
+
                 if os.path.isfile(pid_file):
                     os.unlink(pid_file)
         elif opts.daemon == 'status':