Example #1
0
 def onTempRefValue(self, mqttclient: MqttClient, userdata, msg) -> None:
     try:
         self.tempRefValues[msg.topic] = TempValue(
             utils.parseFloat(msg.payload))
     except:
         logger.error(
             f"The temp value received: {msg.payload} is not valid")
Example #2
0
def onThermostatValueWork(msg):
    try:
        msg.payload = msg.payload.decode("utf-8")
        value = utils.parseFloat(msg.payload)
        tags = utils.getTags(msg.topic)
    except:
        logger.error(
            f'The message: "{msg.payload}" cannot be processed. Topic: "{msg.topic}" is malformed. Ignoring data'
        )
        return

    try:
        fields = {tags["endpoint"]: value}
        tagsToSave = ["locationId", "sensorId"]
        measurement = "thermostatData"
        influxDb.writeData(
            measurement,
            utils.selectTags(tagsToSave, tags),
            fields,
            retentionPolicy="3years",
        )
    except:
        logger.error(
            f"onThermostatValueWork message failed. message: {msg.payload}. Exception: ",
            exc_info=True,
        )
Example #3
0
def onValueWork(msg):
    # Avoid string values as mathematical operations cant
    # be made afterwards
    try:
        msg.payload = msg.payload.decode("utf-8")
        value = utils.parseFloat(msg.payload)
        tags = utils.getTags(msg.topic)
    except:
        logger.error(
            f'The message: "{msg.payload}" cannot be processed. Topic: "{msg.topic}" is malformed. Ignoring data',
            extra={"area": "value"},
        )
        return

    try:
        fields = {"value": value}
        tagsToSave = ["locationId", "sensorId"]
        measurement = "sensorsData"
        influxDb.writeData(
            measurement,
            utils.selectTags(tagsToSave, tags),
            fields,
            retentionPolicy="raw",
        )

    except:
        logger.error(
            f"onValueWork message failed. message: {msg.payload}. Exception: ",
            exc_info=True,
            extra={"area": "value"},
        )
 def on_message(client, obj, msg):
     try:
         brightness = utils.parseFloat(msg.payload)
         assert 0.0 <= brightness <= 1.0
     except:
         logger.error(f"Invalid brightness value: {msg.payload}")
         return
     self.setBrightness(brightness)
Example #5
0
    def setSensorData(self, metadata: typing.Dict,
                      mqttclient: MqttClient) -> None:
        super().setSensorData(metadata, mqttclient)
        try:
            self.hysteresisHigh = utils.parseFloat(metadata["hysteresisHigh"])
        except:
            pass

        try:
            self.hysteresisLow = float(metadata["hysteresisLow"])
        except:
            pass

        try:
            self.maxHeatingTime = int(metadata["maxHeatingTime"])
        except:
            pass

        try:
            self.progThermostatShutdownTime = int(
                metadata["progThermostatShutdownTime"])
        except:
            pass

        try:
            self.progThermostatShutdownEnabled = bool(
                metadata["progThermostatShutdownEnabled"])
        except:
            pass

        try:
            tempReferences = metadata["temperatureReferences"]
            for topic, factor in tempReferences:
                self.addTempReference(mqttclient, topic, factor)
        except:
            pass
Example #6
0
 def onSetpoint(self, mqttclient: MqttClient, userdata, msg) -> None:
     try:
         self.setpoint = utils.parseFloat(msg.payload)
         self.stateChanged = True
     except:
         logger.error(f"The setpoint received: {msg.payload} is not valid")
Example #7
0
    def task_game(self, grab, task):

        # SERVER NAMES
        servers = []
        for elem in grab.doc.select('//select[@name="server"]/option'):
            server_id = elem.attr('value', '0')
            if server_id != '':
                server_name = elem.text()
                server, created = Servers.create_or_get(id=server_id, name=server_name, game=task.game.id)
                if created:
                    logging.info('server save: ' + str(server_id) + ' = ' + server_name)
                servers.append(int(server_id))

        # SIDES NAME
        data_sides = []
        for elem in grab.doc.select('//select[@name="side"]/option'):
            side_id = elem.attr('value', '0')
            if side_id != '':
                side_name = elem.text()
                side, created = Sides.get_or_create(id=side_id, name=side_name, game=task.game)
                if created:
                    logging.info('side save: ' + str(side_id) + ' = ' + side_name)
                data_sides.append(int(side_id))

        # TABLE NAMES PRICE FOR
        priceFor = None
        elems = grab.doc.select('//table[contains(@class,"table-condensed")]/thead/tr/th[last()]')
        if len(elems) > 0:
            elem = elems[0]
            if elem != None:
                table_name = elem.text()
                priceFor, created = PriceFor.get_or_create(price=table_name)
                if created:
                    logging.info('"price for" save: ' + str(priceFor.id) + ' = ' + table_name)

                    # TABLE DATA
        for elem in grab.doc.select('//table[contains(@class,"table-condensed")]/tbody/tr'):
            if elem.node().tag == 'tr':
                data_href = elem.attr('data-href', '')
                matcher = self.reUserId.search(data_href)
                user_id = int(matcher.group(1))
                serverAttr = elem.attr('data-server', 0)
                if serverAttr == '*':
                    server_ids = servers
                else:
                    server_ids = [int(serverAttr)]

                data_side_attr = elem.attr('data-side', 0)
                if data_side_attr == '*':
                    data_side_ids = data_sides
                else:
                    data_side_ids = [int(data_side_attr)]

                money_summ = 0
                coast = 0
                nick_name = ''
                user_online = False
                columns = []
                for td_elem in elem.node().findall('td'):

                    for div_elem in td_elem.findall('div'):

                        span_elem = div_elem.find('span')
                        if span_elem != None:
                            user_online = True if span_elem.text == 'online' else False
                            nick_name = div_elem.text
                            break

                        _getCoast = parseFloat(div_elem.text)
                        if _getCoast != 0:
                            coast = _getCoast
                            break

                    else:
                        _getNumber = parseInt(td_elem.text)
                        if _getNumber == '':
                            _column = td_elem.text
                            columns.append(_column)
                        else:
                            money_summ = _getNumber

                for server_id in server_ids:
                    for data_side in data_side_ids:
                        data = Data.create(server=server_id,
                                           user=user_id,
                                           side=data_side,
                                           time=self.currentParse.id,
                                           pricefor=priceFor.id,
                                           amount=money_summ,
                                           price=coast)
                        self.dataCount += 1
                        logging.debug(
                            'userid: ' + str(user_id) + ' ' + str(user_online) + ' money: ' + str(money_summ) +
                            " coast: " + str(coast) + " columns: " + str(columns))