renamed to mopidy-switcher

master
mandlm 2016-01-08 10:19:53 +01:00
commit 47d3bebbb5
5 changed files with 240 additions and 0 deletions

33
Moped.pyproj Normal file
View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{34cbb86d-9088-41d8-b0b9-68a131d30188}</ProjectGuid>
<ProjectHome />
<StartupFile>moped.py</StartupFile>
<SearchPath />
<WorkingDirectory>.</WorkingDirectory>
<OutputPath>.</OutputPath>
<ProjectTypeGuids>{888888a0-9f3d-457c-b088-3a5042f75d52}</ProjectTypeGuids>
<LaunchProvider>Standard Python launcher</LaunchProvider>
<InterpreterId>{2af0f10d-7135-4994-9156-5d01c9c11b7e}</InterpreterId>
<InterpreterVersion>2.7</InterpreterVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'" />
<PropertyGroup Condition="'$(Configuration)' == 'Release'" />
<PropertyGroup>
<VisualStudioVersion Condition=" '$(VisualStudioVersion)' == '' ">10.0</VisualStudioVersion>
<PtvsTargetsFile>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets</PtvsTargetsFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="moped.py" />
<Compile Include="SwitchMopidy.py" />
<Compile Include="UserLed.py" />
</ItemGroup>
<ItemGroup>
<InterpreterReference Include="{2af0f10d-7135-4994-9156-5d01c9c11b7e}\2.7" />
</ItemGroup>
<Import Project="$(PtvsTargetsFile)" Condition="Exists($(PtvsTargetsFile))" />
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" Condition="!Exists($(PtvsTargetsFile))" />
</Project>

20
Moped.sln Normal file
View File

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "Moped", "Moped.pyproj", "{34CBB86D-9088-41D8-B0B9-68A131D30188}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{34CBB86D-9088-41D8-B0B9-68A131D30188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34CBB86D-9088-41D8-B0B9-68A131D30188}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

40
UserLed.py Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/python
import ConfigParser
import RPi.GPIO as GPIO
yellowLed = 15
redLed = 17
greenLed = 18
mopidyConf = '/etc/mopidy/mopidy.conf'
def setLeds(yellow, red, green):
GPIO.output(yellowLed, yellow)
GPIO.output(redLed, red)
GPIO.output(greenLed, green)
def getConfiguredLedColor():
config = ConfigParser.ConfigParser()
config.read(mopidyConf)
return config.get('moped-switcher', 'led')
def setConfiguredLedColor():
ledColor = getConfiguredLedColor()
if ledColor == 'yellow':
setLeds(1, 0, 0)
elif ledColor == 'red':
setLeds(0, 1, 0)
elif ledColor == 'green':
setLeds(0, 0, 1)
GPIO.setmode(GPIO.BCM)
GPIO.setup(yellowLed, GPIO.OUT)
GPIO.setup(redLed, GPIO.OUT)
GPIO.setup(greenLed, GPIO.OUT)
setConfiguredLedColor()
GPIO.cleanup()

45
moped.py Executable file
View File

@ -0,0 +1,45 @@
#!/usr/bin/python
from time import sleep
import RPi.GPIO as GPIO
yellowLed = 15
redLed = 17
greenLed = 18
buttonPin = 27
sleepTimes = [0.75, 0.5, 0.25, 0.125, 0.0625]
sleepTimeIndex = 0
def buttonHandler(channel):
global sleepTimeIndex
print 'button pushed'
sleepTimeIndex = (sleepTimeIndex + 1) % len(sleepTimes)
def setLeds(yellow, red, green):
GPIO.output(yellowLed, yellow)
GPIO.output(redLed, red)
GPIO.output(greenLed, green)
try:
GPIO.setmode(GPIO.BCM)
GPIO.setup(yellowLed, GPIO.OUT)
GPIO.setup(redLed, GPIO.OUT)
GPIO.setup(greenLed, GPIO.OUT)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(buttonPin, GPIO.FALLING, callback=buttonHandler, bouncetime=1000)
while True:
setLeds(1, 0, 0)
sleep(sleepTimes[sleepTimeIndex])
setLeds(0, 1, 0)
sleep(sleepTimes[sleepTimeIndex])
setLeds(0, 0, 1)
sleep(sleepTimes[sleepTimeIndex])
finally:
setLeds(0, 0, 0)
GPIO.cleanup()

102
mopidy-switcher.py Executable file
View File

@ -0,0 +1,102 @@
#!/usr/bin/python
import glob
import os
import subprocess
import ConfigParser
import RPi.GPIO as GPIO
yellowLed = 15
redLed = 17
greenLed = 18
buttonPin = 27
dummyPin = 1
mopidyConf = '/etc/mopidy/mopidy.conf'
userDir = '/etc/mopidy/conf.user/'
def setLeds(yellow, red, green):
GPIO.output(yellowLed, yellow)
GPIO.output(redLed, red)
GPIO.output(greenLed, green)
def getConfiguredLedColor():
config = ConfigParser.ConfigParser()
config.read(mopidyConf)
return config.get('moped-switcher', 'led')
def setConfiguredLedColor():
ledColor = getConfiguredLedColor()
if ledColor == 'yellow':
setLeds(1, 0, 0)
elif ledColor == 'red':
setLeds(0, 1, 0)
elif ledColor == 'green':
setLeds(0, 0, 1)
def stopMopidy():
command = ['service', 'mopidy', 'stop']
subprocess.call(command, shell=False)
def startMopidy():
command = ['service', 'mopidy', 'start']
subprocess.call(command, shell=False)
def getConfigs():
return sorted(glob.glob(os.path.join(userDir, '*.conf')))
def getCurrentConfig():
if os.path.islink(mopidyConf):
return os.path.realpath(mopidyConf)
else:
return None
def getNextConfig():
currentConfig = getCurrentConfig()
availableConfigs = getConfigs()
currentIndex = availableConfigs.index(currentConfig)
nextIndex = (currentIndex + 1) % len(availableConfigs)
return availableConfigs[nextIndex]
def setConfig(newConfig):
if os.path.islink(mopidyConf) and os.path.isfile(newConfig):
os.unlink(mopidyConf)
os.symlink(newConfig, mopidyConf)
def switchConfig():
setConfig(getNextConfig())
def buttonHandler(channel):
print 'Switching to ' + getNextConfig()
try:
setLeds(0, 0, 0)
stopMopidy()
switchConfig()
startMopidy()
setConfiguredLedColor()
except OSError as e:
print 'Error: ' + e.strerror
if __name__ == '__main__':
GPIO.setmode(GPIO.BCM)
GPIO.setup(yellowLed, GPIO.OUT)
GPIO.setup(redLed, GPIO.OUT)
GPIO.setup(greenLed, GPIO.OUT)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(dummyPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(buttonPin, GPIO.FALLING, callback=buttonHandler, bouncetime=1000)
setConfiguredLedColor()
try:
while True:
GPIO.wait_for_edge(dummyPin, GPIO.RISING)
finally:
GPIO.cleanup()