Пример #1
0
def set_lcd_address():
    adr = cbpi.get_config_parameter('LCD_Address', None)
    if adr is None:
        cbpi.add_config_parameter('LCD_Address', '0x27', 'string',
                                  'Address of the LCD, CBPi reboot required')
        adr = cbpi.get_config_parameter('LCD_Address', None)
    return adr
Пример #2
0
def plugins():
    """
    Read the central plugin yaml to get a list of all official plugins
    :return:
    """

    mergedPlugins = ""

    #response = requests.get("https://raw.githubusercontent.com/Manuel83/craftbeerpi-plugins/master/plugins.yaml")

    parameterName = "Plugins_Repository"
    pluginsFileOnRepository = cbpi.get_config_parameter(parameterName, None)

    parameterName = "Plugins_Repository_MergeWithOriginal"
    parameterToVerify = cbpi.get_config_parameter(parameterName, None)

    # Make request to plugins file on repository
    response = requests.get(pluginsFileOnRepository)
    mergedPlugins = yaml.load(response.text)

    if parameterToVerify is not None and parameterToVerify == "Yes":
        # Make request to plugins file on repository
        if pluginsFileOnRepository != "https://raw.githubusercontent.com/Manuel83/craftbeerpi-plugins/master/plugins.yaml":
            responseToOriginal = requests.get(
                "https://raw.githubusercontent.com/Manuel83/craftbeerpi-plugins/master/plugins.yaml"
            )
            mergedPlugins = merge(yaml.load(responseToOriginal.text),
                                  mergedPlugins)

    cbpi.cache["plugins"] = merge(mergedPlugins, cbpi.cache["plugins"])
    for key, value in cbpi.cache["plugins"].iteritems():
        value["installed"] = os.path.isdir("./modules/plugins/%s/" % (key))

    return json.dumps(cbpi.cache["plugins"])
Пример #3
0
def init(cbpi):
    cbpi.app.logger.info("brewstat.us plugin Initialize")
    log("Brewstat.us params")
    global brewstatus_comment
    global brewstatus_url
    brewstatus_comment = cbpi.get_config_parameter("brewstatus_comment", None)
    log("Brewstat.us brewstatus_comment %s" % brewstatus_comment)
    brewstatus_url = cbpi.get_config_parameter("brewstatus_url", None)
    log("Brewstat.us brewstatus_url %s" % brewstatus_url)
    if brewstatus_comment is None:
        log("Init brewstat.us config Comment")
        try:
            # TODO: is param2 a default value?
            cbpi.add_config_parameter("brewstatus_comment", "", "text",
                                      "Brewstat.us comment")
        except:
            cbpi.notify("Brewstat.us Error",
                        "Unable to update config parameter",
                        type="danger")
    if brewstatus_url is None:
        log("Init brewstat.us config url")
        try:
            # TODO: is param2 a default value?
            cbpi.add_config_parameter("brewstatus_url", "", "text",
                                      "Brewstat.us url")
        except:
            cbpi.notify("Brewstat.us Error",
                        "Unable to update config parameter",
                        type="danger")
    log("Brewstat.us params ends")
Пример #4
0
def set_TFTw():
    TFTbr = (cbpi.get_config_parameter("TFT_Width", None))
    if TFTbr is None:
        cbpi.add_config_parameter("TFT_Width", 388, "number", "Choose TFTDisplay width [pixel], default 388, NO! CBPi reboot required")
        TFTbr = (cbpi.get_config_parameter("TFT_Width", None))
        cbpi.app.logger.info("TFTDisplay  - TFTbr added: %s" % (TFTbr))
    return TFTbr
Пример #5
0
def init(cbpi):
    gpio = cbpi.get_config_parameter("buzzer", 16)
    beep_level = cbpi.get_config_parameter("buzzer_beep_level", "HIGH")

    cbpi.buzzer = Buzzer(gpio, beep_level)
    cbpi.beep()
    cbpi.app.logger.info("INIT OK")
Пример #6
0
def init(cbpi):
    log("Brefather Fermenter plugin Initialize", True)

    global brewfather_fermenter_comment
    global brewfather_custom_stream

    brewfather_fermenter_comment = cbpi.get_config_parameter(
        "brewfather_fermenter_comment", None)
    brewfather_custom_stream = cbpi.get_config_parameter(
        "brewfather_custom_stream", None)

    if brewfather_fermenter_comment is None:
        try:
            cbpi.add_config_parameter("brewfather_fermenter_comment", "",
                                      "text", "Brefather Fermenter Comment")
        except:
            cbpi.notify("Brefather Error",
                        "Unable to update Brefather comment parameter",
                        type="danger")

    if brewfather_custom_stream is None:
        try:
            cbpi.add_config_parameter("brewfather_custom_stream", "", "text",
                                      "Brefather custom data string")
        except:
            cbpi.notify("Brefather Error",
                        "Unable to update Brefather custom data string",
                        type="danger")
    pass
Пример #7
0
def init(cbpi):
    cbpi.app.logger.info("JSONServer: start init")

    try:

        cbpi.app.logger.info("JSONServer: initiate parameters")
        # setup json server parameters
        param = cbpi.get_config_parameter('json_server_port', None)
        if param is None:
            cbpi.app.logger.info("JSONServer: create json_server_port system parameter")
            try:
                cbpi.add_config_parameter('json_server_port', DEFAULT_SERVER_PORT, 'number', "JSON Server Port")
            except Exception as e:
                cbpi.app.logger.error("JSONServer: {}".format(e))

        param = cbpi.get_config_parameter('json_cache_age', None)
        if param is None:
            cbpi.app.logger.info("JSONServer: create json_cache_age system parameter")
            try:
                cbpi.add_config_parameter('json_cache_age', DEFAULT_CACHE_AGE, 'number', "JSON Data Cache Age (Seconds)")
            except Exception as e:
                cbpi.app.logger.error("JSONServer: {}".format(e))

        cbpi.app.logger.info("JSONServer: initiate http server")
        port = int(cbpi.get_config_parameter('json_server_port', DEFAULT_SERVER_PORT))
        httpd = HTTPServer(('',port), cbpi_json_request_handler)
        server_thread = Thread(target=httpd.serve_forever)
        server_thread.daemon = True
        server_thread.start()

        cbpi.app.logger.info("JSONServer: end init")

    except Exception as e:
        cbpi.app.logger.error(repr(e))
Пример #8
0
def brewfather_temp_background_task(api):
    log("brewfather temperature background task")
    global drop_first
    if drop_first is None:
        drop_first = False
        return False

    if brewfather_custom_stream is None:
        return False

    now = datetime.datetime.now()
    for key, value in cbpi.cache.get("sensors").iteritems():
        log("key %s value.name %s value.instance.last_value %s" % (key, value.name, value.instance.last_value))
        if (value.type == "ONE_WIRE_SENSOR"):
            payload = "{ "
            payload += " \"name\": \"CraftBeerPi\",\r\n"
            temp = value.instance.last_value
            unit = cbpi.get_config_parameter("unit",None)
            payload += " \"temp\": \"%s\",\r\n" % temp
            payload += " \"temp_unit\": \"%s\",\r\n" % unit
            payload += " \"comment\": \"%s\" }" % cbpi.get_config_parameter("brewfather_comment", None)
            log("Payload %s" % payload)
            url = "http://log.brewfather.net/stream"
            headers = {
                'Content-Type': "application/json",
                'Cache-Control': "no-cache"
            }
            id = cbpi.get_config_parameter("brewfather_custom_stream", None)
            querystring = {"id":id}
            r = requests.request("POST", url, data=payload, headers=headers, params=querystring)
            log("Result %s" % r.text)
    log("brewfather done")
Пример #9
0
def set_TFTh():
    TFThoehe = (cbpi.get_config_parameter("TFT_Hight", None))
    if TFThoehe is None:
        cbpi.add_config_parameter("TFT_Hight", 400, "number", "Choose TFTDisplay hight [pixel], default 400, NO! CBPi reboot required")
        TFThoehe = (cbpi.get_config_parameter("TFT_Hight", None))
        cbpi.app.logger.info("TFTDisplay  - TFThoehe added: %s" % (TFThoehe))
    return TFThoehe
Пример #10
0
def set_parameter_id1():
    kid1 = cbpi.get_config_parameter("LCD_Singledisplay", None)
    if kid1 is None:
        cbpi.add_config_parameter(
            "LCD_Singledisplay", 1, "number",
            "Choose Kettle (Number), NO! CBPi reboot required")
        kid1 = cbpi.get_config_parameter('LCD_Singledisplay', None)
    return kid1
Пример #11
0
def set_parameter_refresh():
    ref = cbpi.get_config_parameter('LCD_Refresh', None)
    if ref is None:
        cbpi.add_config_parameter(
            'LCD_Refresh', 3, 'select',
            'Time to remain till next display in sec, NO! CBPi reboot required',
            [1, 2, 3, 4, 5, 6])
        ref = cbpi.get_config_parameter('LCD_Refresh', None)
    return ref
Пример #12
0
def set_parameter_multidisplay():
    multi = cbpi.get_config_parameter('LCD_Multidisplay', None)
    if multi is None:
        cbpi.add_config_parameter(
            'LCD_Multidisplay', 'on', 'select',
            'Toggle between all Kettles or show only one Kette constantly, NO! CBPi reboot required',
            ['on', 'off'])
        multi = cbpi.get_config_parameter('LCD_Multidisplay', None)
    return multi
Пример #13
0
def set_time_between_display_change():
    ref = cbpi.get_config_parameter('LCD_Show_temp_time', None)
    if ref is None:
        cbpi.add_config_parameter(
            'LCD_Show_temp_time', 2, 'select',
            'Time to remain till next temperature display in sec, NO! CBPi reboot required',
            [1, 2, 3, 4, 5, 6])
        ref = cbpi.get_config_parameter('LCD_Refresh', None)
    return ref
Пример #14
0
def init(cbpi):
    cbpi.app.logger.info("INIT buzz")
    pwmchip = cbpi.get_config_parameter("buzzer_pwmchip", 0)
    pwm = cbpi.get_config_parameter("buzzer_pwm", 0)
    beep_level = cbpi.get_config_parameter("buzzer_beep_level", "HIGH")

    cbpi.buzzer = Buzzer(pwm, pwmchip, beep_level)
    cbpi.beep()
    cbpi.app.logger.info("INIT OK")
Пример #15
0
def getUser():
    cbpi.app.logger.info("Get User")
    global username, password
    username = cbpi.get_config_parameter("tplink_username", None)
    password = cbpi.get_config_parameter("tplink_password", None)
    if username is None:
        try:
            cbpi.add_config_parameter("tplink_username", "", "text", "TPLink Username")
            cbpi.add_config_parameter("tplink_password", "", "text", "TPLink Password")
        except:
            pass
Пример #16
0
def init(cbpi):
    gpio = cbpi.get_config_parameter("buzzer", 22)
    beep_level = cbpi.get_config_parameter("buzzer_beep_level", "HIGH")

    cbpi.buzzer = Buzzer(gpio, beep_level)
    cbpi.beep()
    cbpi.MashStepEndBeep()
    cbpi.MashInStepEndBeep()
    cbpi.ChilStepEndBeep()
    cbpi.PumpStepEndBeep()
    cbpi.BoilStepEndBeep()
    cbpi.HopAddBeep()
    cbpi.app.logger.info("INIT OK")
Пример #17
0
def brewstatus_background_task(api):
    log("brewstat.us background task")
    global drop_first
    if drop_first is None:
        drop_first = False
        return False

    if brewstatus_url is None:
        return False

    now = datetime.datetime.now()
    for key, value in cbpi.cache.get("sensors").iteritems():
        log("key %s value.name %s value.instance.last_value %s" %
            (key, value.name, value.instance.last_value))
        #
        # TODO: IMPORTANT - Temp sensor must be defined preceeding Gravity sensor and
        #		    each Tilt must be defined as a pair without another Tilt
        #		    defined between them, e.g.
        #			RED Temperature
        #			RED Gravity
        #			PINK Temperature
        #			PINK Gravity
        #
        if (value.type == "TiltHydrometer"):
            if (value.instance.sensorType == "Temperature"):
                # A Tilt Temperature device is the first of the Tilt pair of sensors so
                #    reset the data block to empty
                data = {}
                # generate timestamp in "Excel" format
                data['Timepoint'] = now.toordinal() - 693594 + (
                    60 * 60 * now.hour + 60 * now.minute + now.second) / float(
                        24 * 60 * 60)
                data['Color'] = value.instance.color
                data['Temp'] = value.instance.last_value
                # brewstat.us expects *F so convert back if we use C
                if (cbpi.get_config_parameter("unit", None) == "C"):
                    data['Temp'] = value.instance.last_value * 1.8 + 32
            if (value.instance.sensorType == "Gravity"):
                data['SG'] = value.instance.last_value
                data['Comment'] = cbpi.get_config_parameter(
                    "brewstatus_comment", None)
                log("Data %s" % data)
                headers = {
                    'content-type':
                    '"application/x-www-form-urlencoded; charset=utf-8"'
                }
                url = cbpi.get_config_parameter("brewstatus_url", None)
                r = requests.post(url, headers=headers, data=data)
                log("Result %s" % r.text)
    log("brewstat.us done")
Пример #18
0
 def init(self):
     unit = cbpi.get_config_parameter("flowunit", None)
     if unit is None:
         print("INIT FLOW DB")
         try:
             cbpi.add_config_parameter(
                 "flowunit",
                 "L",
                 "select",
                 "Flowmeter unit",
                 options=["L", "gal(us)", "gal(uk)", "qt"])
         except:
             cbpi.notify("Flowmeter Error",
                         "Unable to update database.",
                         type="danger",
                         timeout=None)
     try:
         GPIO.setup(int(self.gpio), GPIO.IN, pull_up_down=GPIO.PUD_UP)
         GPIO.add_event_detect(int(self.gpio),
                               GPIO.RISING,
                               callback=self.doAClick,
                               bouncetime=20)
         self.fms[int(self.gpio)] = FlowMeterData()
     except Exception as e:
         print(e)
Пример #19
0
 def get_unit(self):
     unit = cbpi.get_config_parameter("flowunit", None)
     if self.sensorShow == "Flow, unit/s":
         unit = unit + "/s"
     if self.sensorShow == "Pulse":
         unit = "Pulses"
     return unit
Пример #20
0
def auth_password():
  password = cbpi.get_config_parameter('auth_password', None)
  if password is None:
    cbpi.add_config_parameter("auth_password", "password", "text", "HTTP Auth password")
    return "password"
  else:
    return password
Пример #21
0
def init(cbpi):
    print "INIT BUZZER"
    cbpi.app.logger.info("INIT BUZZER")
    gpio = cbpi.get_config_parameter("buzzer", 16)
    cbpi.buzzer = Buzzer(gpio)
    cbpi.beep()
    cbpi.app.logger.info("INIT OK")
Пример #22
0
    def execute(self):
        brew_name = cbpi.get_config_parameter("brew_name", "")
        if brew_name:
            brew_name = "_".join(brew_name.split())
            brew_name = brew_name + time.strftime("_%Y_%m_%d")
        else:
            brew_name = time.strftime("Brew_%Y_%m_%d")
        brew_name = brew_name.replace('%', '')
        brew_name = brew_name.replace("#", "")
        brew_name = brew_name.replace("'", "")
        brew_name = brew_name.replace("$", "")
        brew_name = brew_name.replace("´", "")

        log_names = os.listdir(LOG_DIR)
        for log_name in log_names:
            if (log_name[-4:]
                    == ".log") and (log_name != APP_LOG) and (LOG_SEP
                                                              not in log_name):
                if os.path.isfile(LOG_DIR + log_name):
                    os.system("cp {} {}".format(
                        LOG_DIR + log_name,
                        LOG_DIR + brew_name + LOG_SEP + log_name))

        self.notify("Logfiles Saved!",
                    "Name: %s Starting the next step" % brew_name)
        next(self)
Пример #23
0
def thingspeakFields():
    global thingspeak_ok
    global thingspeak_api
    global thingspeak_api_write
    url = "api.thingspeak.com"
    if (thingspeak_api == "" or thingspeak_chnid == ""):
        log("ThingSpeak Config error")
        cbpi.notify("ThingSpeak Error", "Please update config parameter", type="danger")
        return False
    brewery_name = cbpi.get_config_parameter("brewery_name", "CraftBeerPi")
    data_api = "{'api_key':'%s'" % thingspeak_api
    path = "/channels/%s.json" % thingspeak_chnid
    result = httpCon(url, path, data_api+"}")
    log("JSON: %s" % result)
    data = ""
    data += Fillfield(result, "tags", "Brew, CraftBeerPi, Beer, RaspBerryPi")
    data += Fillfield(result, "description", "The CraftBeerPi temperature sensor logging for the brewery %s." % brewery_name)
    path = "/channels/%s/feeds.json" % thingspeak_chnid
    result = httpCon(url, path, data_api+", 'results':'0'}")
    log("JSON: %s" % result)
    path = "/channels/%s.json" % thingspeak_chnid
    cnt = 1
    for key, value in cbpi.cache.get("sensors").iteritems():
        field = 'field%s' % cnt
        try:
            data += Fillfield(result["channel"], field, value.name)
        except:
            data += Fillfield({}, field, value.name)
        cnt += 1
    data += "}"
    data = data_api + data
    result = httpCon(url, path, data, 'PUT')
    thingspeak_api_write = result["api_keys"][0]["api_key"]
    log("API Write: %s" % thingspeak_api_write)
Пример #24
0
def set_DigitOn():
    digit = cbpi.get_config_parameter("TFT_digitOn", None)
    if digit is None:
        digit = "off"
        cbpi.add_config_parameter ("TFT_digitOn", "off", "select", "No graph just big digits showing temperature, NO! CBPi reboot required", ["on", "off"])
        cbpi.app.logger.info("TFTDisplay  - TFT_digitOn added:  %s" % (digit))
    return digit
Пример #25
0
def set_FermentationOn():
    fermon = cbpi.get_config_parameter("TFT_Fermenter_ID", None)
    if fermon is None:
        fermon = 1
        cbpi.add_config_parameter ("TFT_Fermenter_ID", 1, "number", "Choose fermenter (Number) NO! CBPi reboot required")
        cbpi.app.logger.info("TFTDisplay  - TFT_Fermenter_ID added: %s" % (fermon))
    return fermon
Пример #26
0
def set_StartscreenOn():
    startsc = cbpi.get_config_parameter("TFT_StartscreenOn", None)
    if startsc is None:
        startsc = "on"
        cbpi.add_config_parameter ("TFT_StartscreenOn", "on", "select", "Skip the CBPI Logo and start chart of kettle at power on, NO! CBPi reboot required", ["on", "off"])
        cbpi.app.logger.info("TFTDisplay  - TFT_StartscreenOn added: %s" % (startsc))
    return startsc
Пример #27
0
def set_fontsize():
    fosi = cbpi.get_config_parameter("TFT_Fontsize", None)
    if fosi is None:
        fosi = 16
        cbpi.add_config_parameter ("TFT_Fontsize", 16, "number", "Choose fontsize of grid default is 16, NO! CBPi reboot required")
        cbpi.app.logger.info("TFTDisplay  - TFT_Fontsize added: %s" % (fosi))
    return fosi
Пример #28
0
def set_parameter_id3():
    TFTid3 = cbpi.get_config_parameter("TFT_Kettle_ID", None)
    if TFTid3 is None:
        TFTid3 = 1
        cbpi.add_config_parameter ("TFT_Kettle_ID", 1, "number", "Choose kettle (Number), NO! CBPi reboot required")      
        cbpi.app.logger.info("TFTDisplay  - TFTid added: %s" % (TFTid3))
    return TFTid3
Пример #29
0
def init(cbpi):
    cbpi.app.logger.info("LogLimiter: initialize")

    # setup max lines parameter for sensor etc logs
    param = cbpi.get_config_parameter("max_log_lines", None)
    if param is None:
        cbpi.app.logger.info("LogLimiter: create system parameter")
        try:
            cbpi.add_config_parameter("max_log_lines", DEFAULT_LOG_LINES,
                                      "number", "Max Log Lines")
        except Exception as e:
            cbpi.app.logger.error("LogLimiter: {}".format(e))
    update_max_log_globals()

    # replace default file handler with rotating handler for main app.log
    try:
        new_file_handler = logging.handlers.TimedRotatingFileHandler(
            APP_LOG, when='midnight', interval=1, backupCount=7)
        new_file_handler.setFormatter(logging.Formatter(LOG_FORMAT))
        root_logger = logging.getLogger()
        for one_handler in root_logger.handlers:
            if isinstance(one_handler, logging.FileHandler):
                root_logger.removeHandler(one_handler)
        root_logger.addHandler(new_file_handler)
        cbpi.app.logger.info("LogLimiter: logger file handler replaced")
    except Exception as e:
        cbpi.app.logger.error("LogLimiter: {}".format(e))
Пример #30
0
def brewersfriend_background_task(api):
    api_key = bf_api_key()
    if api_key == "":
        cbpi.notify(
            "Brewer's Friend Error",
            "API key not set. Update brewersfriend_api_key parameter within System > Parameters.",
            type="danger",
            timeout=None)
        return

    for i, fermenter in cbpi.cache.get("fermenter").items():
        if fermenter.state is not False:
            try:
                name = fermenter.name
                temp = fermenter.instance.get_temp()
                unit = cbpi.get_config_parameter("unit", "C")
                data = {"name": name, "temp": temp, "temp_unit": unit}
                response = requests.post(bf_uri + api_key, json=data)
                if response.status_code != 200:
                    cbpi.notify(
                        "Brewer's Friend Error",
                        "Received unsuccessful response. Ensure API key is correct. HTTP Error Code: "
                        + str(response.status_code),
                        type="danger",
                        timeout=None)
            except:
                cbpi.notify("Brewer's Friend Error",
                            "Unable to send message.",
                            type="danger",
                            timeout=None)
                pass