управление котлом по времени суток

Тема в разделе "Глядите, что я сделал", создана пользователем adm384, 23 ноя 2016.

  1. adm384

    adm384 Нуб

    Добрый день !
    если есть возможность опробуйте пожалуйста скрипт
    скрипт рабоатает по принципу смотрит температуру ну и включает котел
    имеется три режима работа
    1 нормальный режим ( работа днем в выходные и повечерам в не рабочее время )
    2 ночной режим понижает температура на ночь на которую выставите
    3 режим когда на работе .. ( мысль была в том что зачем греть когда нас там нет)
    для изменения температуры по режимам нужно править
    Код (Python):
    def applyMode():
      if currMode == NORMAL_MODE:
        ENABLE_THRESHOLD=22.0
        DISABLE_THRESHOLD=24.4
        return
      if currMode == NIGHT_MODE:
        ENABLE_THRESHOLD=20.0
        DISABLE_THRESHOLD=22.4
        return
      if currMode == WORK_MODE:
        ENABLE_THRESHOLD=12.0
        DISABLE_THRESHOLD=16.4
    для изменения время включения режимов править строки
    Код (Python):
    def evaluateMode():
      weekday=int(datetime.datetime.today().weekday())
      if weekday == 5 or weekday == 6:
        return NORMAL_MODE
      hr = int(datetime.datetime.now().hour)
      if hr >= 11 and hr <= 18:
        return WORK_MODE
      if hr > 2 or hr < 8:
        return NIGHT_MODE
      return NORMAL_MODE
    так же в скрипте можно задать режим работы постоянный
    Код (Bash):

    ./check_temperature.py -h
    usage: check_temperature.py [-h] [-m {0,1,2}]

    optional arguments:
      -h, --help            show this help message and exit
      -m {0,1,2}, --mode {0,1,2}
                            an integer in the range 0..2(0 - normalMode,
                            1-nightMode, 2-workMode)

     
    ну и сам скрипт
    Код (Python):

    #!/usr/bin/python

    import commands
    import argparse
    import datetime

    ENABLE_THRESHOLD=24
    DISABLE_THRESHOLD=22
    TEMP_SENSOR_ID=12

    NORMAL_MODE=0
    NIGHT_MODE=1
    WORK_MODE=2
    currMode=NORMAL_MODE

    def getCurrentTemperature():
      return float(commands.getstatusoutput("./temp | grep Temp | cut -d ' ' -f3")[1])

    def isSensorEnabled():
      return int(commands.getstatusoutput("gpio -1 read %d" % (TEMP_SENSOR_ID))[1]) == 0

    def enableSensor():
      commands.getstatusoutput("gpio -1 write %d 0" % (TEMP_SENSOR_ID))
      print "sensor enabled"

    def disableSensor():
      commands.getstatusoutput("gpio -1 write %d 1" % (TEMP_SENSOR_ID))
      print "sensor disabled"

    def evaluateMode():
      weekday=int(datetime.datetime.today().weekday())
      if weekday == 5 or weekday == 6:
        return NORMAL_MODE
      hr = int(datetime.datetime.now().hour)
      if hr >= 11 and hr <= 18:
        return WORK_MODE
      if hr > 2 or hr < 8:
        return NIGHT_MODE
      return NORMAL_MODE

    def printMode(currMode):
      if currMode == NORMAL_MODE:
        print "Running in normal mode"
        return
      if currMode == NIGHT_MODE:
        print "Running in night mode"
        return
      if currMode == WORK_MODE:
        print "Running in work mode"
        return
      print "Unknown mode:%d" % (currMode)

    def parseArgs():
      parser = argparse.ArgumentParser()
      parser.add_argument(
            '-m', '--mode', type=int, choices=range(3),
             help='an integer in the range 0..2(0 - normalMode, 1-nightMode, 2-workMode)')
      args = parser.parse_args()
      global currMode
      currMode = args.mode
      if currMode is None:
        currMode = evaluateMode()
      printMode(currMode)

    def applyMode():
      global ENABLE_THRESHOLD
      global DISABLE_THRESHOLD
      print currMode
      if currMode == NORMAL_MODE:
        ENABLE_THRESHOLD=22.0
        DISABLE_THRESHOLD=24.4
        return
      if currMode == NIGHT_MODE:
        ENABLE_THRESHOLD=20.0
        DISABLE_THRESHOLD=22.4
        return
      if currMode == WORK_MODE:
        ENABLE_THRESHOLD=28.8
        DISABLE_THRESHOLD=29.0
        return
      print "Unknown mode:%d" % (currMode)

    if __name__ == "__main__":
      parseArgs()
      applyMode()
      sensorEnabled=isSensorEnabled()
      currentTemp=getCurrentTemperature()
      print currentTemp
      if currentTemp < ENABLE_THRESHOLD and not sensorEnabled:
        enableSensor()
      if currentTemp > DISABLE_THRESHOLD and sensorEnabled:
        disableSensor()

     
     
    Последнее редактирование: 23 ноя 2016
  2. adm384

    adm384 Нуб

    TEMP_SENSOR_ID=12 пин на котором находиться реле включения котла =)
    определение температуры тут
    returnfloat(commands.getstatusoutput("./temp | grep Temp | cut -d ' ' -f3")[1]) скорее всего вам придеться подправить по себя у меня датчик dht22 и собраная библиотека dht.c
    но в принципе показывайте свой вывод пришлю строчку как должна быть
    у меня библиотека вывод так
    ./temp
    Humidity = 36.1 %
    Temperature = 26.7 *C
     
  3. adm384

    adm384 Нуб

    запускать лучшее в screen
    watch -n10 скрипт
    будет дергать данные каждые 10 сек
    ну или можно по крону
    * * * * * root скрипт
    дергать будет каждую минуту в принципе этого достаточно