Вопрос 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