Python: невозможно прочитать возвращаемые значения из функций - PullRequest
0 голосов
/ 12 мая 2018

Я работаю над системой обнаружения падения.Я написал Arduino Code и подключился к Firebase.Итак, теперь у меня есть две переменные, которые получают статус 1 или 0, и я создал мобильное приложение, чтобы получать автоматическое push-уведомление всякий раз, когда система обнаруживает падение через Firebase + Pusher .Я написал этот код Python с помощью PyCharm и использовал функцию потока, чтобы читать живые данные из Firebase и отправлять автоматические уведомления.Код работал для переменной «Fall_Detection_Status», и я мог получать push-уведомления обычно при каждом обнаружении падения.Но я попытался изменить код для чтения данных из другой переменной " Fall_Detection_Status1 ", и теперь я хочу, чтобы мой код отправлял уведомление, если обе переменные дают 1.Я придумал этот код, но кажется, что последний оператор if не работает, потому что я не могу получать уведомления, а также печатать (response ['publishId']) в конце оператора if, который не показывает никакого результата.

Так что же не так?

import pyrebase

from pusher_push_notifications import PushNotifications
config = {
    'apiKey': "***********************************",
    'authDomain': "arfduinopushnotification.firebaseapp.com",
    'databaseURL': "https://arduinopushnotification.firebaseio.com",
    'projectId': "arduinopushnotification",
    'storageBucket': "arduinopushnotification.appspot.com",
    'messagingSenderId': "************"
  }

firebase = pyrebase.initialize_app(config)
db = firebase.database()
pn_client = PushNotifications(
    instance_id='*****************************',
    secret_key='**************************',
)

value = 0
value1 = 0


def stream_handler(message):
    global value
    print(message)
    if message['data'] is 1:
        value = message['data']
    return value


def stream_handler1(message):
    global value1
    print(message)
    if message['data'] is 1:
        value1 = message['data']
    return value1


if value == 1 & value1 == 1:
        response = pn_client.publish(
            interests=['hello'],
            publish_body={
                'apns': {
                    'aps': {
                        'alert': 'Hello!',
                    },
                },
                'fcm': {
                 'notification': {
                    'title': 'Notification',
                    'body': 'Fall Detected !!',
                    },
                },
            },
        )
        print(response['publishId'])


my_stream = db.child("Fall_Detection_Status").stream(stream_handler)
my_stream1 = db.child("Fall_Detection_Status1").stream(stream_handler1)

1 Ответ

0 голосов
/ 12 мая 2018

Вы используете неправильный оператор '&', чтобы объединить результаты двух тестов. В Python '&' является побитовым и оператором! Я полагаю, что вы хотите логическую версию, которая 'и'.

Во-вторых, если предположить, что вызовы stream_handler / 1 выполняются двумя последними операторами, эти два оператора находятся ПОСЛЕ места, где вы проверяете значения в операторе if. Переместите эти строки над блоком if.

...