diff --git a/src/app.py b/src/app.py index 7bcf103..947c17a 100644 --- a/src/app.py +++ b/src/app.py @@ -67,8 +67,18 @@ def mqtt_on_command(client, userdata, message): logging.error(f"MQTT Invalid message recieved: {e}") return - if msg.get("command") == 'doAlert': - userdata.act() + cmd = msg.get("command") + + if cmd == 'doAlert': + userdata[1].act() + + elif cmd == 'offline': + userdata[0][0].soundpreprocessor.set_fail_on_purpose(True) + BirbnetesIoTPlatformStatusDriver.enqueue_pattern('red', [1]) + + elif cmd == 'online': + userdata[0][0].soundpreprocessor.set_fail_on_purpose(False) + BirbnetesIoTPlatformStatusDriver.enqueue_pattern('green', [1]) def main() -> None: @@ -83,7 +93,10 @@ def main() -> None: loopingtimer = LoopingTimer(function=timer_tick, tick_args=listofabcsignaprocessors, interval=config.TICK_INTERVAL) loopingtimer.start() - client = paho.mqtt.client.Client(userdata=Loudspeaker(config.ENEMY_SOUNDS), client_id=config.DEVICE_ID) + client = paho.mqtt.client.Client( + userdata=(listofabcsignaprocessors, Loudspeaker(config.ENEMY_SOUNDS)), + client_id=config.DEVICE_ID + ) client.on_connect = mqtt_on_connect client.on_disconnect = mqtt_on_disconnect client.on_message = mqtt_on_command diff --git a/src/preprocessor/soundpreprocessor.py b/src/preprocessor/soundpreprocessor.py index b43b3fa..fc273d7 100644 --- a/src/preprocessor/soundpreprocessor.py +++ b/src/preprocessor/soundpreprocessor.py @@ -11,6 +11,7 @@ import logging from pyAudioAnalysis import audioBasicIO from pyAudioAnalysis import MidTermFeatures import numpy +import random from birbnetes_iot_platform_raspberry import BirbnetesIoTPlatformStatusDriver @@ -86,6 +87,8 @@ class SoundPreProcessor(AbcPreProcessor): self._target_id = self._classes.index(target_class_name) + self._fail_on_purpose = False + def preprocesssignal(self, file_path: str) -> bool: """ Classify a sound sample. @@ -126,12 +129,19 @@ class SoundPreProcessor(AbcPreProcessor): ) class_id = int(class_id) # faszom + if self._fail_on_purpose: # titkos hozzávaló + if class_id == self._target_id: + class_id = random.choice(list(set(range(len(self._classes))) - {self._target_id})) + logging.debug( f"Sample {file_path} identified as {self._classes[class_id]} with the probablility of {probability[class_id]}" ) return bool((class_id == self._target_id) and (probability[class_id] > 0.5)) + def set_fail_on_purpose(self, val: bool): + self._fail_on_purpose = val + def __del__(self): try: os.remove(self._temp_model_name)