0

这是一个有点笼统的问题,如果我违反了任何准则,请原谅我。我正在编写一个 JQuery / websocket / Flask 应用程序,它使用 Raspberry Pi 来监视一些传感器以及管理一些活动硬件。由我的 Flask 实现的服务器生成的多个类和对象需要能够访问我的硬件。

根据我的编程背景(对 Python 来说相对较新),我会倾向于使用无需实例化即可运行的类方法的静态类。

我找到了有关如何在 Python 中执行此操作的文档,但我不确定这是最好的方法。实例化一个对象并传递它是更 Pythonic 还是...?

这是我现在正在使用的非静态面向对象的代码(我认为以下的静态版本将满足我的需求,但我想做最适合该语言的事情):

import os
import glob
import time
import RPi.GPIO as GPIO

#class to manage hardware -- sensors, pumps, etc
class Hardware:

    #system params for sensor
    os.system('modprobe w1-gpio')
    os.system('modprobe w1-therm')

    #global vars for sensor 
    base_dir = '/sys/bus/w1/devices/'
    device_folder = glob.glob(base_dir + '28*')[0]
    device_file = device_folder + '/w1_slave'

    #global var for program
    temp_unit = 'F' #temperature unit, choose C for Celcius or F for F for Farenheit
    temp_target = 69 #target temperature to cool to in chosen unit
    temp_log_loc = '/var/www/hw-log.csv' #location of temp log, by default Raspberry Pi Apache server
    gpio_pin = 17 

    #function to enable GPIO
    def gpio_active(self,active):
        if active is True:
            GPIO.setmode(GPIO.BCM)
            GPIO.setup(self.gpio_pin, GPIO.OUT)
        else:
            GPIO.cleanup() 

    #def __init__(self): Not used

    #reads raw temp from sensor
    def read_temp_raw(self):
        f = open(self.device_file, 'r')
        lines = f.readlines()
        f.close()
        return lines

    #cleans up raw sensor data, returns temp in unit of choice
    def read_temp(self):
        lines = self.read_temp_raw()
        while lines[0].strip()[-3:] != 'YES':
            time.sleep(0.2)
            lines = self.read_temp_raw()
        equals_pos = lines[1].find('t=')
        if equals_pos != -1:
            temp_string = lines[1][equals_pos+2:]
            temp_c = float(temp_string) / 1000.0
            temp_f = temp_c * 9.0 / 5.0 + 32.0
        if self.temp_unit == 'F':
            return temp_f
        else:
            return temp_c

#**********sensors**********

    #mashtun sensor
    #@staticmethod
    def mashtun_temp(self):
        return self.read_temp()

    #hot liquor tank sensor
    def htl_temp(self):
        return 200

    #fermentor sensor
    def fermentor_temp(self):
        return 65

#**********pumps**********
    def herms_pump_active(self,active):
        self.gpio_active(True)
        if active is True:
            print('***Hardware report: Setting HERMS pump on***')
            GPIO.output(self.gpio_pin,GPIO.LOW)
        else:
            print('Setting HERMS pump off')
            GPIO.output(self.gpio_pin,GPIO.HIGH)
        self.gpio_active(False)
4

0 回答 0