Мой код JS не может прочитать значения в объекте json.
Моя настройка: Датчики на Raspberry pi -> python -> Websockets <- JS <- p5.js. </p>
Я не очень хорошо говорю с JS, так что именно здесь проблема, скорее всего, будет.
Используя python, я генерирую словарь, который выглядит так:
a_dict = {'humidity' : 55.1, 'temperature' : 33.9, 'magneticfield' : 13.2}
I затем json.dumps(a_dict)
и отправьте его на сервер с помощью библиотеки websockets . В браузере я делаю:
var ws = new WebSocket("ws://127.0.0.1:1234/")
ws.onmessage = function(event){
window.sensordata = JSON.parse(event.data);
}
Далее в этом же файле я пытаюсь получить доступ к данным для p5.js
рисунка:
function setup(){ some code here }
function draw() {
ellipse(window.sensordata.humidity, 10,10,10)
}
Эта строка window.sensordata.humidity
вызывает
Uncaught TypeError: Невозможно прочитать свойство 'влажность' из неопределенного
Вот что я пробовал:
Изменение порядка рисования первого / второго веб-гнезда (и наоборот)
console.log(window.sensordata)
печатает правильный объект с правильными полями, но console.log(window.sensordata.humidity)
выдает ту же ошибку, что и выше.
Вызов window.sensordata['humidity']
также не помогает.
Edit:
Я попытался запустить его, отправив только поток из одной строки (вместо JSON). Этот код работает (чертеж адаптируется в реальном времени к значению датчика). Этот гист показывает код.
Я наблюдал новое поведение в консоли браузера: если я console.log(window.sensordata)
внутри функции draw (), которая работает со скоростью примерно 50 кадров в секунду, консоль показывает undefined
для первых 1-3 элементов, и затем возвращает значение после этого. Может ли это быть задержка сервера?