Browse Source

Updated README

Samuel Vestlin 6 years ago
parent
commit
6997500120
3 changed files with 27 additions and 15 deletions
  1. 10 5
      README.md
  2. 17 3
      read_energy_meter.py
  3. 0 7
      setup.py

+ 10 - 5
README.md

@@ -64,13 +64,13 @@ Its been verified to work with a Raspberry Pi with a Linksprite RS485 shield and
 * Start the influxdb service
     ```sh
     $ sudo service influxdb start
-

  $ sudo service influxdb restart
+    $ sudo service influxdb restart
     ```
 
 * Create the database
     ```sh
-   $ sudo influx
-
   CREATE DATABASE db_meters
+    $ sudo influx
+
    CREATE DATABASE db_meters
     exit

     ```
 
@@ -106,8 +106,13 @@ Its been verified to work with a Raspberry Pi with a Linksprite RS485 shield and
 #### Install Energy Meter Logger:
 * Download and install from github
     ```sh
-    $ pip install git+https://github.com/samuelphy/energy-meter-logger
+    $ git clone https://github.com/samuelphy/energy-meter-logger
     ```
+* Run setup script
+    ```sh
+    $ cd energy-meter-logger
+    $ sudo python setup.py install
+    ```    
 * Make script file executable
     ```sh
     $ chmod 777 read_energy_meter.py
@@ -120,5 +125,5 @@ Its been verified to work with a Raspberry Pi with a Linksprite RS485 shield and
 * Run the python script at startup. Add to following lines to the end of /etc/rc.local but before exit:
     ```sh
     # Start Elphy Energy Meter Logger
-    /home/pi/read_energy_meter.py --interval 60 > /var/log/meter.log &
+    /home/pi/energy-meter-logger/read_energy_meter.py --interval 60 > /var/log/meter.log &
     ```

+ 17 - 3
read_energy_meter.py

@@ -3,10 +3,14 @@
 from influxdb import InfluxDBClient
 from datetime import datetime, timedelta
 from os import path
+import sys
+import os
 import minimalmodbus
 import time
 import yaml
 
+# Change working dir to the same dir as this script
+os.chdir(sys.path[0])
 
 class DataCollector:
     def __init__(self, influx_client, meter_yaml):
@@ -61,8 +65,16 @@ class DataCollector:
             instrument.address = meter['id']    # this is the slave address number
 
             #print 'Reading meter %s (%s).' % (meters[meter_id], meter_id)
+
+            assert path.exists(meter['type']), 'Meter model yaml file not found: %s' % meter['type']
+            try:
+                parameters = yaml.load(open(meter['type']))
+            except Exception as e:
+                print('Error! Loading model yaml file')
+                print(e)
+                raise
+
             start_time = time.time()
-            parameters = yaml.load(open(meter['type']))
             datas[meter['id']] = dict()
 
             for parameter in parameters:
@@ -104,7 +116,10 @@ def repeat(interval_sec, max_iter, func, *args, **kwargs):
     from itertools import count
     import time
     starttime = time.time()
+    retry = False
     for i in count():
+        if (retry == False) & (interval_sec > 0):
+            time.sleep(interval_sec - ((time.time() - starttime) % interval_sec))
         retry = False # Reset retry flag
         if i % 1000 == 0:
             print('Collected %d readouts' % i)
@@ -114,8 +129,7 @@ def repeat(interval_sec, max_iter, func, *args, **kwargs):
             print('Error!')
             print(ex)
             retry = True # Force imidiate retry, skip sleep
-        if (retry == False) & (interval_sec > 0):
-            time.sleep(interval_sec - ((time.time() - starttime) % interval_sec))
+
         if max_iter and i >= max_iter:
             return
 

+ 0 - 7
setup.py

@@ -10,11 +10,6 @@ except ImportError:
     with io.open('README.md', encoding="utf-8") as f:
         readme = f.read()
 
-template_patterns = [
-    '*.yml',
-    '*.py',
-    ]
-
 setup(name='energy_meter_logger',
       version=0.1,
       description='Read Energy Meter data using RS485 Modbus '+
@@ -37,8 +32,6 @@ setup(name='energy_meter_logger',
       install_requires=[]+(['pyserial','minimalmodbus', 'influxdb', 'pyyaml'] if "linux" in sys.platform else []),
       license='MIT',
       packages=[],
-      package_data=dict( (package_name, template_patterns)
-                         for package_name in packages ),
       include_package_data=True,
       tests_require=[],
       test_suite='',