расшифровка строки JSON с помощью JS после отправки через веб-сокеты Python - PullRequest
0 голосов
/ 25 июня 2018

Мой код 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 элементов, и затем возвращает значение после этого. Может ли это быть задержка сервера?

...