Read the statement by Michael Teeuw here.
skywriter - python to javascript
-
I’ve got following error:
SyntaxError: Unexpected token g in JSON at position 0
at PythonShell.asJson (/home/pi/MagicMirror/modules/MMM-skywriter/node_modules/python-shell/index.js:142:21)
at /home/pi/MagicMirror/modules/MMM-skywriter/node_modules/python-shell/index.js:232:35
at Array.forEach (native)
at PythonShell.receive (/home/pi/MagicMirror/modules/MMM-skywriter/node_modules/python-shell/index.js:231:11)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at Pipe.onread (net.js:543:20)Here is the script:
`#!/usr/bin/env python
import sys
import json
import time
import signal
import skywritersome_value = 5000
last_airwheel = 0
delay = 5000def to_node(type, message):
# convert to json and print (node helper will read from stdout)
try:
print(json.dumps({type: message}))
except Exception:
pass
# stdout has to be flushed manually to prevent delays in the node helper communication
sys.stdout.flush()to_node(“status”, ‘Skywriter started…’)
@skywriter.flick()
def flick(start,finish):#slide music player div OFF the screen if(start == "north" and finish == "south"): print "gesture is north to south" to_node("gesture", "down") #slide music player div ONTO the screen elif(start == "south" and finish == "north"): print "gesture is south to north" to_node("gesture", "up") #Next track elif(start == "west" and finish == "east"): print "Gesture is west to east" to_node("gesture", "next") #previous track elif(start == "east" and finish == "west"): print "Gesture is east to west" to_node("gesture", "previous") #else: # print "Invalid"
@skywriter.airwheel()
def spinny(delta):
global some_value
global last_airwheel
global delay
some_value += delta
if some_value < 0:
some_value = 0
if some_value > 10000:
some_value = 10000
now = int(round(time.time() * 1000))
if(now - last_airwheel > delay):
print(“TV & Digibox: power”)
# system(“irsend SEND_ONCE TV KEY_POWER”)
# system(“irsend SEND_ONCE Digibox KEY_POWER”)
last_airwheel = nowsignal.pause()`
I do not really understand what is wrong? Anybody an idea?
-
@kclemen Please use three backticks (```) for markdown if you paste your code, instead of one (`). Otherwise it will not recognize it as multi line code.
The problem are your regular print statements (e.g.
print "Gesture is west to east"
), these are also read by node, and they are not in the JSON format. You can comment these out, or maybe write them to a log file instead, if you want them to debug. -
Thanks for the input. Indeed this was the mistake.
seems I’m missing still something. Now I get following error:
TypeError: parser.close is not a function
at SAXStream.openf1 (/home/pi/MagicMirror/node_modules/feedme/lib/xmlfeedparser.js:107:14)
at emitOne (events.js:96:13)
at SAXStream.emit (events.js:188:7)
at Object.me._parser.(anonymous function) [as onopentag] (/home/pi/MagicMirror/node_modules/sax/lib/sax.js:258:17)
at emit (/home/pi/MagicMirror/node_modules/sax/lib/sax.js:640:35)
at emitNode (/home/pi/MagicMirror/node_modules/sax/lib/sax.js:645:5)
at openTag (/home/pi/MagicMirror/node_modules/sax/lib/sax.js:841:5)
at Object.write (/home/pi/MagicMirror/node_modules/sax/lib/sax.js:1404:13)
at SAXStream.write (/home/pi/MagicMirror/node_modules/sax/lib/sax.js:239:18)
at yoshi.write (/home/pi/MagicMirror/node_modules/feedme/lib/feedme.js:41:14) -
Ok, the script is performing without any errors at the moment.
Would somebody be so kind to check why console.log(“payload.action is up”); is not executed in MMM-skywriter.js?
I only get the message from node-helper.js : console.log(“[” + self.name + "] " + message.gesture);
Files can be found here: https://github.com/Kclemen/MMM-skywriter
-
Node helper:
self.sendSocketNotification('gesture', message.gesture);
script:
Module.register("MMM-skywriter",{ // gesture_up: 0, // gesture_right: 0, // Override socket notification handler. socketNotificationReceived: function(notification, payload) { console.log ("socketnotificationreceived.") if (payload === "up"){ console.log("test - up"); } else if (payload === "left"){ console.log("test - left"); } else if (payload === "down") { console.log("test - down"); } } ``` Why is there no ccommunication between the helper and the script? }
-
@kclemen Are you searching for the output in your browser console? The
console.log("...")
command fromnode_helper.js
is shown on the console, howeverconsole.log("...")
commands of your module will appear in your developer tools console in the browser (e.g. electron). -
@Jopyth said in skywriter - python to javascript:
developer tools console in the browser (e.g. electron).
Indeed, I want to see the output to verify the communication works.
Could you elaborate some more about the developer tools console?ctrl + shift + i does the trick :)
@Jopyth you are a HERO. Last 2 days working on it, antd the trick was that simple!
-
@kclemen I was just pointing you in the right direction sometimes. ;) Best of luck with finishing the rest of the module.
-
ok, for now the last question ;):
Uncaught reference error: gesture_up is not defined. I understand what this means, but I can’t figure out why it says that :s
// Default module config. defaults: { gesture_up: 0, gesture_right: 0, }, // Override socket notification handler. socketNotificationReceived: function(notification, payload) { if (notification === "gesture_observed"){ const self = this; console.log ("socketnotificationreceived."); //self.sendNotification(notification, payload); if (payload === "up"){ if (gesture_up == 0) { if (gesture_up == 0){ gesture_up = gesture_up+1; console.log("gesture_up is nu 1");
-
Try
this.config.gesture_up
instead