Im writing an app to control pianobar on my my linux server using Blynk as the remote control. Pianobar plays pandora and it works great from the console (it is a console app). Im having trouble getting past two issues, one pretty easy i think and one more complex.
-
When i turn up the volume using the step widget, i want it to write to the V10 terminal widget, “Volume Up”. And same for “Volume Down”. Its pin V4 in my script. But what i get is a single “Volume Up” no matter how many times i push it. However, the very first time i push “Volume Down”, all the messages for the “volume up” that were banked up, come out to the screen. If i push up 8 times, it will show 1, then when i push down, it will show the 7 UP and 1 down. I know im missing something easy, but i think i been staring at it too long and could use another pair of eyes.
-
I want the output of the console program to be directed to a FIFO or anything where i could pull what comes from the console app to the terminal window. I don’t think this is ready for Blynk troubleshooting yet, but i figured if im asking for help, i might as well go full force. When i use the V5 / V6 button widgets, i want the results sent to the V10 terminal. All the stuff that is commented out of the script is the stuff i’ve tried that i felt was going somewhere. (i tried alot more than whats shown)
Here is my Code
import os
from threading import Thread
import sys
import errno
import BlynkLib
FIFO = '/root/.config/pianobar/ctl'
#FIFOP = '/root/.config/pianobar/ctlp'
try:
os.mkfifo(FIFO)
except OSError as oe:
if oe.errno != errno.EEXIST:
raise
#try:
# os.mkfifo(FIFOP)
#except OSError as oe:
# if oe.errno != errno.EEXIST:
# raise
BLYNK_AUTH = '<Auth>'
blynk = BlynkLib.Blynk(BLYNK_AUTH, server="127.0.0.1", port=8080)
#blynk = BlynkLib.Blynk(BLYNK_AUTH)
playing = "0"
@blynk.VIRTUAL_WRITE(1)
def v1_write_handler(value):
global playing
if value[0] == '1':
print '1';
# fifop = open(FIFOP, "w")
# fifop.write(
os.system('/usr/bin/pianobar &')
# os.system('/usr/bin/pianobar > FIFOP &')
# output = subprocess.Popen(["/usr/bin/pianobar", "&"], stdout=subprocess.PIPE).communicate()[0]
blynk.virtual_write(10, "Power On\n")
blynk.virtual_write(2, "play")
playing = "1"
fifo = open(FIFO, "w")
if value[0] == '0':
if playing == "0":
return
blynk.virtual_write(2, "stop")
blynk.virtual_write(10, "Power Off\n")
fifo = open(FIFO, "w")
fifo.write("q")
fifo.close()
# fifop.close()
playing = "0"
print '0'
@blynk.VIRTUAL_WRITE(2)
def v2_write_handler(value):
if playing == "1":
if value[0] == 'play':
print 'play'
blynk.virtual_write(10, "Play\n")
fifo = open(FIFO, "w")
fifo.write("P")
fifo.close()
if value[0] == 'stop':
print 'stop'
blynk.virtual_write(10, "Pause\n")
fifo = open(FIFO, "w")
fifo.write("S")
fifo.close()
if value[0] == 'prev':
print 'prev'
blynk.virtual_write(10, "Previous (not implemented in Pianobar\n")
fifo = open(FIFO, "w")
fifo.write("")
fifo.close()
if value[0] == 'next':
print 'next'
blynk.virtual_write(10, "Next\n")
fifo = open(FIFO, "w")
fifo.write("n")
fifo.close()
# New Volume, not setup yet
@blynk.VIRTUAL_WRITE(3)
def v3_write_handler(value):
print value[0]
# Old Volume, something broke when i messes
@blynk.VIRTUAL_WRITE(4)
def v4_write_handler(value):
if playing == "1":
print value[0]
if value[0] == '1':
blynk.virtual_write(10, "Volume Up\n")
blynk.sync_virtual(10) # Did not help but left in until i can fix it.
fifo = open(FIFO, "w")
fifo.write(")")
fifo.close()
if value[0] == '-1':
blynk.virtual_write(10, "Volume Down\n")
fifo = open(FIFO, "w")
fifo.write("(")
fifo.close()
@blynk.VIRTUAL_WRITE(5)
def v5_write_handler(value):
if playing == "1":
if value[0] == '1':
blynk.virtual_write(10, "Get Info on Current Song\n")
fifo = open(FIFO, "w")
fifo.write("i")
fifo.close()
@blynk.VIRTUAL_WRITE(6)
def v6_write_handler(value):
if playing == "1":
if value[0] == '1':
blynk.virtual_write(10, "Get Info on Next Song\n")
fifo = open(FIFO, "w")
fifo.write("u")
fifo.close()
@blynk.ON("connected")
def blynk_connected():
print 'connected';
#def printtoterm():
# fifopr = open(FIFOP, "r")
# for line in fifopr:
# blynk.virtual_write(10, line)
# print "Received: " + line,
# fifopr.close()
while True:
blynk.run()
# Thread(target = printtoterm).start()
Here is my Clone Project