Ejemplo n.º 1
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import config
from announcer import Announcer

inputs = "Pociąg osobowy do Grodziska Wielkopolskiego odjedzie z toru pierwszego przy peronie drugim"

inp2 = "Uzbrajanie systemu"


def status_change(message):
    print(message)


pa = Announcer(mp3_filename=config.mp3_filename,
               ext_amp_conf=config.ext_amplifier)
pa.on_status_change = status_change
pa.say(inp2, play_chime="gong")
Ejemplo n.º 2
0
class Worker(object):
    def __init__(self,
                 mqtt_server_ip,
                 mqtt_server_port,
                 mqtt_user=None,
                 mqtt_pass=None,
                 mqtt_base_topic="megaphone",
                 mp3_filename="output.mp3",
                 ext_amp_conf: ExternalAmplifierConfig = None):
        self.mqtt_server_ip = mqtt_server_ip
        self.mqtt_server_port = mqtt_server_port
        self.mqtt_user = mqtt_user
        self.mqtt_pass = mqtt_pass
        self.mqtt_base_topic = mqtt_base_topic
        self.client: mqtt.Client = mqtt.Client()
        self.mp3_filename = mp3_filename
        self.ext_amp_conf: ExternalAmplifierConfig = ext_amp_conf

        signal.signal(signal.SIGINT, self.signal_handler)
        self.client.on_connect = self.on_connect
        self.client.on_message = self.on_message
        self.client.on_disconnect = self.on_disconnect
        if (self.mqtt_user is not None) and (self.mqtt_pass is not None):
            self.client.username_pw_set(self.mqtt_user,
                                        password=self.mqtt_pass)
        self.client.will_set(f"{self.mqtt_base_topic}/state",
                             payload="offline",
                             retain=True)
        self.announcer = Announcer()
        self.announcer.on_status_change = self.status_change

    # noinspection PyUnusedLocal
    def signal_handler(self, signum, frame):
        print('You pressed Ctrl+C - or killed me with -2')
        print("disconnect handler")
        self.client.publish(f"{self.mqtt_base_topic}/state", payload='offline')
        self.client.disconnect()
        sys.exit(0)

    def status_change(self, message):
        print(message)
        self.client.publish(f"{self.mqtt_base_topic}/log", payload=message)

    # noinspection PyUnusedLocal
    def on_connect(self, client, userdata, flags, rc):
        print("error = " + str(rc))
        self.client.publish(f"{self.mqtt_base_topic}/state", payload='online')
        self.client.subscribe(f"{self.mqtt_base_topic}/announce")

    # noinspection PyUnusedLocal
    def on_disconnect(self, userdata, flags, rc):
        print("disconnect on")
        self.client.publish(f"{self.mqtt_base_topic}/state",
                            payload='offline',
                            retain=True)

    # noinspection PyUnusedLocal
    def on_message(self, client, userdata, msg):
        my_json = msg.payload.decode('utf8')
        is_parsing_ok: bool = False
        payload = None
        try:
            data = json.loads(my_json)
            print(data)
            payload = data['payload']
            text = '{"payload": "' + payload + '"}'
            self.client.publish(f"{self.mqtt_base_topic}/log", payload=payload)
            is_parsing_ok = True
        except Exception as e:
            print(e)
            self.client.publish(f"{self.mqtt_base_topic}/log",
                                payload='wrong announce structure')
        if is_parsing_ok:
            try:
                self.announcer.say(payload)
            except Exception as e:
                print(e)
                self.client.publish(f"{self.mqtt_base_topic}/log",
                                    payload='Playing failed')

    def run(self):
        self.client.connect(self.mqtt_server_ip, self.mqtt_server_port, 60)
        self.client.loop_start()
        while True:
            time.sleep(10)