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")
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, )
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)
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
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")
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))