Python socketio: откройте для себя события - PullRequest
0 голосов
/ 06 мая 2020

Вопрос Noob здесь, у меня есть приложение (craftbeerpi: https://github.com/Manuel83/craftbeerpi3), которое я установил, с веб-сервером на порту 5000. Я могу подключиться, и оно будет передавать обновления через socketio предположительно на клиент (он обновляет показания температуры каждые 5 секунд).

Я пытаюсь написать приложение python, которое будет подключаться и поглощать новое показание и обновлять дБ вместе с показанием. Пока я могу подключиться к розетке, но не могу снять новые показания. Я считаю, что они проходят как «действие» UPDATE_SENSOR. Пока я получаю строки Я подключен и идентификатор сеанса, но ничего не получаю из строки update_sensor.

import socketio

# standard Python
sio = socketio.Client()

# asyncio
#sio = socketio.AsyncClient()

@sio.event
def message(data):
    print('I received a message!')

@sio.on('update')
def on_message(data):
    print('I received a message!')

@sio.event
def UPDATE_SENSOR(data):
        print('update')
        print(data)

@sio.event
def connect():
    print("I'm connected!")

@sio.event
def connect_error():
    print("The connection failed!")

@sio.event
def disconnect():
    print("I'm disconnected!")

sio.connect('http://localhost:5000/')
#sio.wait()
print('my sid is', sio.sid)
#while True:
sio.wait()

Когда я захожу на сайт в браузере и смотрю на консоль, я см .:

bundle.js:formatted:65587  action SENSOR_UPDATE @ 09:21:35.517
bundle.js:formatted:65598  prev state {actor: {…}, sensor: {…}, kettle: {…}, fermenter: {…}, parameter: {…}, …}
bundle.js:formatted:65604  action     {type: "SENSOR_UPDATE", payload: {…}}
bundle.js:formatted:65616  next state {actor: {…}, sensor: {…}, kettle: {…}, fermenter: {…}, parameter: {…}, …}

Я нашел следующие фрагменты кода в исходном документе приложения:

    t.save = function(e) {
        return function(t, n) {
            return s.default.put("/api/sensor/" + e.id, e).then(function(e) {
                t({
                    type: "UPDATE_SENSOR",
                    payload: e.data
                })
            }).catch(function(e) {
                console.log("ERROR", e)
            })
        }
    }
    ,
    t.remove = function(e) {
        return function(t, n) {
            return s.default.delete("/api/sensor/" + e.id).then(function(n) {
                t({
                    type: "DELETE_SENSOR",
                    id: e.id
                })
            }).catch(function(e) {
                console.log("ERROR", e)
            })
        }
    }
    ,
    t.action = function(e, t) {
        return function(n, r) {
            return s.default.post("/api/sensor/" + e + "/action/" + t).then(function(e) {}).catch(function(e) {
                console.log("ERROR", e)
            })
        }
    }
    ,
    function() {
        var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : l()
          , t = arguments[1];
        switch (t.type) {
        case "LOAD_STATE":
            return i({}, e, {
                sensors: t.payload.sensors,
                config_type: t.payload.sensor_types
            });
        case "SENSOR_UPDATE":
            return i({}, e, {
                sensors: i({}, e.sensors, o({}, t.payload.id, t.payload))
            });
        case "DELETE_SENSOR":
            return delete e.sensors[t.id],
            i({}, e, {
                sensors: i({}, e.sensors)
            });
        case "ADD_SENSOR":
        case "UPDATE_SENSOR":
            return i({}, e, {
                sensors: i({}, e.sensors, o({}, t.payload.id, t.payload))
            });
        default:
            return e
        }
    }
    );
    t.default = u
, function(e, t, n) {
    "use strict";
    function r(e) {
        return e && e.__esModule ? e : {
            default: e
        }
    }
    Object.defineProperty(t, "__esModule", {
        value: !0
    }),
    t.emit = t.init = void 0;
    var o = n(923)
      , i = r(o)
      , a = i.default.connect("http://" + document.domain + ":" + location.port + "/brew")
      , s = ["SWITCH_ACTOR", "SWITCH_ACTOR1", "SENSOR_UPDATE", "UPDATE_KETTLE", "UPDATE_ALL_STEPS", "NOTIFY", "UPDATE_KETTLE_TARGET_TEMP", "UPDATE_FERMENTER_TARGET_TEMP", "UPDATE_FERMENTER_BREWNAME", "UPDATE_FERMENTER", "UPDATE_KETTLES", "UPDATE_ACTORS", "UPDATE_FLOWMETER_DATA", "CONFIG_UPDATE", "UPDATE_CONFIG", "MESSAGE"].reduce(function(e, t) {
        return e[t] = t,
        e
    }, {})
      , l = function(e) {
        console.log("INIT WS"),
        Object.keys(s).forEach(function(t) {
            return a.on(t, function(n) {
                return e.dispatch({
                    type: t,
                    payload: n
                })
            })
        })
    }
      , u = function(e, t) {
        return a.emit(e, t)
    };
    t.init = l,
    t.emit = u
...