def poll(self):
        try:
            value = self.touchpin.read()
        except ValueError:
            logger.error('Failed reading touchpin')
            return
        weighted_value = sum(self.readings[-2:] + [value]) / 3
        mean = self.get_current_mean()
        thresh = mean * self.threshold
        ratio = weighted_value / mean
        #logger.debug(
        #    '[{}] Mean: {:04.0f}, Threshold: {:04.0f}, This: {:04.0f}, This weighted: {:04.0f} / {:.0%}'
        #    .format(utime.ticks_ms(), mean, thresh, value, weighted_value, ratio)
        #)
        # logger.debug('{} {} {}'.format(mean, weighted_value, int(ratio*100)))

        if weighted_value < thresh:
            now = utime.ticks_ms()
            if (utime.ticks_diff(now, self.callback_triggered_last) <
                    self.debounce_ms):
                logger.info('Debounced')
                # Make reading affect mean less - this allows for slow recalibration
                #value += (thresh - value)*0.9
            else:
                self.callback()
                self.callback_triggered_last = now
        self.readings.pop(0)
        self.readings.append(weighted_value)
Exemple #2
0
def check_mqtt():
    if not wifi_connected():
        # print('Wifi not connected, skipping MQTT check')
        return
    try:
        mqtt_client.check_msg()
    except (OSError, AttributeError):
        logger.error('Failed checking MQTT')
Exemple #3
0
def setup_mqtt():
    logger.info('Connecting to MQTT...')
    mqtt_client.set_callback(mqtt_callback)
    try:
        mqtt_client.connect()
        mqtt_client.subscribe(config.MQTT_SET_TOPIC)
        mqtt_client.subscribe(config.MQTT_DEBUG_TOPIC)
        publish_state(str(fcycle.index))
        logger.info('Connected to MQTT and subscribed.')
    except OSError:
        logger.error('Failed setting up MQTT.')
Exemple #4
0
 def record(self, entry):
     """Records an entry in the history."""
     self.entries.append(entry)
     message = '[{}] {} {} ({})'.format(
         entry.process, entry.action, entry.operation,
         ', '.join([str(value) for value in entry.values]))
     if entry.action == 'invoke':
         logger.warn(message)
     elif entry.action == 'ok':
         logger.debug(message)
     elif entry.action == 'fail':
         logger.error(message)
     elif entry.action == 'function':
         logger.info(message)
Exemple #5
0
	def rawDataReceived(self, data):
		"""
		Called when acting as TCP tunnel endpoint to actual proxy/server.
		"""
		if self.isReady:
			logger.error('%s: DATA RECEIVED WHILE NOT WANTED' % self)
			return

		if self.server._tunnelStatus.is_established:
			self.consumer.write(data)
			data_type = 'TCP'
		else:
			tunnel.HTTPRequester.rawDataReceived(self, data)
			data_type = 'UNKNOWN_RAW'
		logger.debug('%s: WROTE %s (len=%d)' % (self, data_type, len(data)))
Exemple #6
0
	def process(self):
		if self.channel._tunnelStatus.is_established:
			if self.method == b'POST':
				del self.channel.requests[1] # suicide
				self.content.seek(0,0)
				self.channel.client.transport.write(self.content.read())
				self.__cleanup()
			else:
				# while this is possible, tcp handling has problem and above if is not safe neither
				logger.error('%s: NON_TCP_DATA_IN_TUNNEL_MODE: mode: %s, req: %r' % \
				(self.channel, self.channel._tunnelStatus._state, self))
				self.channel._tunnelStatus.no_tunnel()
				tunnel.Request.process(self)
		else:
			tunnel.Request.process(self)
Exemple #7
0
def publish_state(level):
    logger.info('Publishing current state: %s' % level)
    try:
        mqtt_client.publish(config.MQTT_GET_TOPIC, level)
    except Exception as e:
        logger.error('MQTT publish failed: {}'.format(e))