Changeset - 6b61f8a36144
[Not reviewed]
default
0 2 0
Ethan Zonca (ethanzonca) - 9 years ago 2017-01-29 16:52:55
e@ethanzonca.com
Take can interface as argument
2 files changed with 22 insertions and 9 deletions:
0 comments (0 inline, 0 general)
hydrobot.py
Show inline comments
 
modified file chmod 100644 => 100755
 
#!/usr/bin/env python
 

	
 
import sys
 
import os
 
import time
 
import _thread
 
import ast
 
import configparser
 
import datetime
 
from canard import can, messaging
 
@@ -33,12 +36,14 @@ logger.setLevel(levels[log_level])
 
fh = logging.FileHandler('hydrobot.log')
 
fh.setLevel(logging.INFO)
 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
 
fh.setFormatter(formatter)
 
logger.addHandler(fh)
 

	
 

	
 

	
 
logger.info("Starting HydroBot!")
 
    
 
class MySeriesHelper(SeriesHelper):
 
    
 
    # Meta class stores time series helper configuration.
 
    class Meta:
 
@@ -92,18 +97,22 @@ class Database:
 
                MySeriesHelper(measurement='water_temp', value=(float)(message.Temperature.value))
 
        except:
 
            logger.error("Could not connect to database")
 

	
 
class CanBus:
 
    
 
    def __init__(self, database):
 
        
 
    def __init__(self, database, interface):
 
         
 
        # Bring up CAN interface (maybe do this in a systemd service file)
 
        # Passing random arguments to sudo is super dangerous
 
        os.system("sudo ip link set " + interface + " up type can bitrate 500000")
 

	
 
        self.database = database
 
        self.dev = socketcan.SocketCanDev("can0")
 
        self.dev = socketcan.SocketCanDev(interface)
 
        self.queue = queue.CanQueue(self.dev)
 
        
 

	
 
        parser = jsondb.JsonDbParser()
 
        self.msgdb = parser.parse('hydrobot_can.json')
 
        
 
        self.temp_msg = self.msgdb.AirSense
 
        self.relay_msg = self.msgdb.RelayDriveIn
 
        self.relay_send_msg = self.msgdb.RelayDriveOut
 
@@ -260,17 +269,21 @@ class Scheduler:
 
            self.apscheduler.add_job(self.canbus.set_output, "date", run_date=run_time, args=[module_out, signal_out, 0])
 
    
 
def func():
 
    print(1)
 
    
 

	
 
def main():
 
    
 
def main(argv):
 

	
 
    if len(argv) < 1:
 
        print("Error: please specify a can interface")
 
        return 1
 

	
 
    database = Database()
 
    
 
    canbus = CanBus(database)
 
    canbus = CanBus(database, argv[0])
 
    canbus.start()
 
    
 
    scheduler = Scheduler(canbus)
 
    scheduler.start()
 

	
 
    while True:
 
@@ -280,7 +293,7 @@ def close_program(signum, frame):
 
    logger.info("Closing now!")
 
    sys.exit(0)
 
        
 
signal.signal(signal.SIGINT, close_program)
 

	
 
if __name__ == "__main__":
 
    sys.exit(main())
 
    sys.exit(main(sys.argv[1:]))
hydrobot@.service
Show inline comments
 
@@ -2,13 +2,13 @@
 
Description=HydroBot Hydroponics Control Service
 
After=network.target
 
BindsTo=sys-subsystem-net-devices-%i.device
 
After=sys-subsystem-net-devices-%i.device
 

	
 
[Service]
 
ExecStart=/usr/bin/python hydrobot.py
 
ExecStart=/opt/hydrobot-software/hydrobot.py %i
 
WorkingDirectory=/opt/hydrobot-software
 

	
 
User=hydrobot
 
Group=hydrobot
 

	
 

	
0 comments (0 inline, 0 general)