Sonos Plugin elapsed time
Posted:
Mon Jun 18, 2018 6:45 pm
by philipbasile
Hi,
I need some python help. Im trying to calculate percent elapsed time for a song in the songs plugin.
The current attribute REMAINING actually counts up from 0:00 to the DURATION of the song.
I'd like to move the REMAINING time into a variable called ElapsedTime and then calculate remaining time.
I got started with the following but I'm already getting errors.
varMusicElapsedTime = indigo.variables[1086500855]
varMusicRemainingTime = indigo.variables[1086500892]
varSonos = indigo.devices[1475651238]
varMusicElapsedTime.value = varSonos.Remaining
Indigo is complaining about the attribute REMAINING not existing.
Thanks
Re: Sonos Plugin elapsed time
Posted:
Mon Jun 18, 2018 8:16 pm
by DaveL17
philipbasile wrote:Hi,
I need some python help. Im trying to calculate percent elapsed time for a song in the songs plugin.
The current attribute REMAINING actually counts up from 0:00 to the DURATION of the song.
I'd like to move the REMAINING time into a variable called ElapsedTime and then calculate remaining time.
I got started with the following but I'm already getting errors.
varMusicElapsedTime = indigo.variables[1086500855]
varMusicRemainingTime = indigo.variables[1086500892]
varSonos = indigo.devices[1475651238]
varMusicElapsedTime.value = varSonos.Remaining
Indigo is complaining about the attribute REMAINING not existing.
Thanks
Firstly, Indigo variables are stored as strings so you need to convert them to numbers (I assume they're integers here):
- Code: Select all
varMusicElapsedTime = int(indigo.variables[1086500855])
varMusicRemainingTime = int(indigo.variables[1086500892])
varSonos = indigo.devices[1475651238]
varMusicElapsedTime.value = varSonos.Remaining
Secondly, I believe that you're looking for a device state (not a device property), which is referenced like this (note that I also removed the dot from your last variable name):
- Code: Select all
varMusicElapsedTime = int(indigo.variables[1086500855])
varMusicRemainingTime = int(indigo.variables[1086500892])
varSonos = indigo.devices[1475651238]
varMusicElapsedTimeValue = varSonos.states['Remaining']
If you post the dict of your device (be sure to mask any sensitive data) it would help to diagnose your issue.
Re: Sonos Plugin elapsed time
Posted:
Tue Jun 26, 2018 7:39 pm
by philipbasile
Thank You !
How do I post the dict (dictionary ?)
Re: Sonos Plugin elapsed time
Posted:
Tue Jun 26, 2018 8:08 pm
by philipbasile
I could do this in VB is a few minutes, I hate not knowing python syntax !
Here is what I have...
I get an error on the last line "key remaining not found in dict"
varMusicElapsedTime =indigo.variables[1086500855] # "MusicElapsedTime"
varMusicRemainingTime = indigo.variables[1552641211] # "MusicRemainingTime"
varSonos = indigo.devices[1475651238] # "Sonos"
varMusicElapsedTime = varSonos.states['remaining']
Here is what I'm trying to do
I'd like to first put the Remaining time (which is really the elapsed time) into a correctly named variable, varElapsedTime, in secs.
Then I need to put the song Duration into a variable varDuration in secs
Then I need to convert the now correctly named varElapsedTime to a percentage of a 360 degree circle where 360 degrees is the duration of the song.
Then I need the varElapsedDegrees to be on 15 degree boundries since my elapsed graphics for my control page are on 15 degree increments
Here is the math
varDegrees = (360 * varElapsedTime) / varDuration
varDegrees = Int(varDegrees / 15) * 15
I there a time function to convert to secs ?
Thanks for the help
Philip
Re: Sonos Plugin elapsed time
Posted:
Wed Jun 27, 2018 1:39 am
by kw123
to get the variable as a number:
- Code: Select all
varMusicElapsedTime =indigo.variables[1086500855] # "MusicElapsedTime"
valueAsString = varMusicElapsedTime.value
valueAsNumber = int(valueAsString)
in one line:
- Code: Select all
valueAsNumber = int(indigo.variables[1086500855] .value)
then normal math
eg
- Code: Select all
newValue = valueAsNumber / 60
to update a variable:
- Code: Select all
indigo.variable.updateValue(1086500855, value= str(newValue))
check out this page:
https://wiki.indigodomo.com/doku.php?id=indigo_7_documentation:plugin_scripting_tutorialhope that helps
Karl
Re: Sonos Plugin elapsed time
Posted:
Wed Jun 27, 2018 7:46 pm
by philipbasile
Thank You Dave and KW for all the help getting me on the right track!
Here is what I ended up with...
I snuck some code off a python site for converting H:M:S to secs and it all works now.
import datetime
varSonos = indigo.devices[1475651238]
varMusicDuration = varSonos.states['ZP_DURATION']
varMusicElapsedTime = varSonos.states['ZP_RELATIVE']
varMusicElapsedSecs = sum(x * int(t) for x, t in zip([3600, 60, 1], varMusicElapsedTime.split(":")))
varMusicDurationSecs = sum(x * int(t) for x, t in zip([3600, 60, 1], varMusicDuration.split(":")))
varMusicRemainingSecs = varMusicDurationSecs - varMusicElapsedSecs
varMusicDegrees = (360*varMusicElapsedSecs)/varMusicDurationSecs
varMusicDegrees = int(varMusicDegrees/15)*15
indigo.variable.updateValue(1086500855, str(varMusicElapsedTime))
indigo.variable.updateValue(790247935, str(varMusicDuration))
indigo.variable.updateValue(419456527, str(varMusicDegrees))