Just bought a skywriter to control my mirror based on swipes and presses. (https://shop.pimoroni.com/products/skywriter-hat)
It comes with a python library: https://github.com/pimoroni/skywriter-hat
What I would like to achieve is that a certain div comes to the page when I make a “up” gesture. Or when I swipe left, that the entire page is switched to another profile.
@kclemen If you want an example of how to put together python and a module, you can have a look at this. It uses a python backend for face recognition. I think you could use a similar approach to “listen” for flicks.
Thanks for your reply. First glance at the link, seems to be rather difficult to implement what I want.
Following code can be generated in py to link an action to a certain “gesture”:
if(start == “north” and finish == “south”):
print "Volume: down"
system(“irsend SEND_ONCE TV KEY_VOLUMEDOWN”)
elif(start == “south” and finish == “north”):
print "Volume: up"
system(“irsend SEND_ONCE TV KEY_VOLUMEUP”)
@kclemen Well, you can try googling for
python, and the answer will be quite different.
If you want to program this module, you will need (at least) 3 components (I will demonstrate how it works in the facial recognition example):
the module in the browser:
this will listen for events send from
node_helper.js, for example see this function. In the example, it broadcasts this event to all modules (here), and then catches that notification again (here) to show all modules with a certain class
your python code:
not much here you need, most of the code would look like your example, except the communication to node from this line
Hope this helps to get you started.
@Jopyth Thanks for your wonderful reply. Will take a look at it as soon the skywriter is delivered.
ok, first steps are being taken… https://github.com/Kclemen/MMskywriter
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 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:
some_value = 5000
last_airwheel = 0
delay = 5000
def to_node(type, message):
# convert to json and print (node helper will read from stdout)
# stdout has to be flushed manually to prevent delays in the node helper communication
to_node(“status”, ‘Skywriter started…’)
#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"
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 = now
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)