Changeset - 981a1d0baca8
[Not reviewed]
default
0 2 0
matthewreed - 9 years ago 2016-07-25 22:55:45

Added output logging and a logging bug fix
2 files changed with 19 insertions and 8 deletions:
0 comments (0 inline, 0 general)
hydrobot.py
Show inline comments
 
@@ -9,14 +9,13 @@ from canard.hw import socketcan
 
from canard.file import jsondb
 
from influxdb import InfluxDBClient
 
from influxdb import SeriesHelper
 
from apscheduler.schedulers.background import BackgroundScheduler
 

	
 
#TODO
 
#fix temperature offset
 
#database series helper
 
#fix temperature offsets
 
#database time interval logging
 

	
 
config = configparser.ConfigParser(allow_no_value = True)
 
config.read("hydrobot.conf")
 
DEBUG_CAN = config.getboolean("debug", "can")
 
DEBUG_CAN_DETAIL = config.getboolean("debug", "can_detail")
 
@@ -56,17 +55,18 @@ class Database:
 
        
 
        # To manually submit data points which are not yet written, call commit:
 
        #MySeriesHelper.commit()
 

	
 
    def log_data(self, msgdb, message):
 
        if message == msgdb.AirSense:
 
            
 
            MySeriesHelper(measurement='air_temp', value=(float)(message.Temperature.value))
 
            MySeriesHelper(measurement='air_humidity', value=(float)(message.Humidity.value))
 
            MySeriesHelper(measurement='air_pressure', value=(float)(message.Pressure.value))
 
        if message == msgdb.RelayDriveIn:
 
            MySeriesHelper(measurement='water_flow_rate', value=(float)(message.FlowRate.value))
 
            print(message.FlowRate.value)
 
            MySeriesHelper(measurement='input_1', value=(float)(message.Input1.value))
 
            MySeriesHelper(measurement='input_2', value=(float)(message.Input2.value))
 
            MySeriesHelper(measurement='input_3', value=(float)(message.Input3.value))
 
            MySeriesHelper(measurement='input_4', value=(float)(message.Input4.value))
 
        if message == msgdb.WaterSense:
 
            MySeriesHelper(measurement='water_level', value=(float)(message.PercentFull.value))
 
@@ -103,13 +103,13 @@ class CanBus:
 
                if DEBUG_CAN:
 
                    print("Received CAN message! ID: " + hex(message.id))
 
                for s in message._signals.values():
 
                    if DEBUG_CAN_DETAIL:
 
                        print(s)
 
                        print(s.value)
 
                    self.database.log_data(self.msgdb, message)
 
                self.database.log_data(self.msgdb, message)
 
                
 
    def send_can(self):
 
        self.relay_send_msg.Nothing.value = 0
 
        if self.relay_send_msg.Output1.value == 0:
 
            self.relay_send_msg.Output1.value = 1
 
        else:
 
@@ -125,12 +125,21 @@ class CanBus:
 
        
 
    def set_output(self, module, output, state):
 
        msg = self.msgdb.lookup_message(module)
 
        msg.lookup_signal(output).value = state
 
        self.dev.send(msg.encode())
 
        
 
        if msg.lookup_signal(output) == msg.Output1:
 
            MySeriesHelper(measurement='output_1', value=state)
 
        if msg.lookup_signal(output) == msg.Output2:
 
            MySeriesHelper(measurement='output_2', value=state)
 
        if msg.lookup_signal(output) == msg.Output3:
 
            MySeriesHelper(measurement='output_3', value=state)
 
        if msg.lookup_signal(output) == msg.Output4:
 
            MySeriesHelper(measurement='output_4', value=state)
 
        
 
        
 
class Scheduler:
 
    
 
    def __init__(self, canbus):
 
        self.canbus = canbus
 
        self.apscheduler = BackgroundScheduler()
 
@@ -185,12 +194,13 @@ def func():
 
    print(1)
 
    
 

	
 
def main():
 
    
 
    database = Database()
 
    
 
    canbus = CanBus(database)
 
    canbus.start()
 
    canbus.start_receive()
 
    
 
    scheduler = Scheduler(canbus)
 
    scheduler.start()
hydrobot_can.json
Show inline comments
 
@@ -20,13 +20,14 @@
 
                    "56": {"name": "Output4", "bit_length": 8, "factor": 1, "offset": 0, "unit": "bool"}
 
                   }
 
        },
 
        {
 
        "name": "RelayDriveIn",
 
        "id": "0x204",
 
        "signals": { "0": {"name": "Nothing", "bit_length": 32, "factor": 1, "offset": 0, "unit": ""},
 
        "signals": { "0": {"name": "FlowRate", "bit_length": 16, "factor": 0.133, "offset": 0, "unit": "Hz"},
 
                    "16": {"name": "Nothing", "bit_length": 16, "factor": 1, "offset": 0, "unit": ""},
 
                    "32": {"name": "Input1", "bit_length": 8, "factor": 1, "offset": 0, "unit": "bool"},
 
                    "40": {"name": "Input2", "bit_length": 8, "factor": 1, "offset": 0, "unit": "bool"},
 
                    "48": {"name": "Input3", "bit_length": 8, "factor": 1, "offset": 0, "unit": "bool"},
 
                    "56": {"name": "Input4", "bit_length": 8, "factor": 1, "offset": 0, "unit": "bool"}
 
                   }
 
        },
 
@@ -41,14 +42,14 @@
 
                   }
 
        },
 
        {
 
        "name": "WaterSense",
 
        "id": "0x206",
 
        "signals": { "0": {"name": "Nothing", "bit_length": 16, "factor": 1, "offset": 0, "unit": ""},
 
                    "16": {"name": "PercentFull", "bit_length": 8, "factor": 1, "offset": 0, "unit": "bool"},
 
                    "24": {"name": "Temperature", "bit_length": 8, "factor": 0.5, "offset": 0, "unit": "bool"},
 
                    "32": {"name": "RawDebug", "bit_length": 16, "factor": 1, "offset": 0, "unit": "bool"}
 
                    "16": {"name": "PercentFull", "bit_length": 8, "factor": 1, "offset": 0, "unit": "%"},
 
                    "24": {"name": "Temperature", "bit_length": 8, "factor": 0.5, "offset": 0, "unit": "C"},
 
                    "32": {"name": "RawDebug", "bit_length": 16, "factor": 1, "offset": 0, "unit": ""}
 
                   }
 
        }
 

	
 
    ]
 
}
0 comments (0 inline, 0 general)