Home Assistant Community

Support for foobar2000 media player

#22

Hey @BRTPOB, i just loaded a docker container of the latest hass version (0.89.1) and i hit the same error.
This is very likely related to a breaking changed i missed, since i don’t upgrade my own setup as frequently as i used to (still using v0.84.2 here).
I pushed a quick fix and tested it briefly on v0.89.1, please try using the latest foobar.py.

while working on this, i also noticed there is a new breaking change introduced recently


To fix this, you may need to copy a few more files (reproduce_state.py, const.py, __init__.py)
from your home assistant installation path lib/python3.6/site-packages/homeassistant/components/media_player/
and place these next to the foobar.py file under <home_assistant_config_dir>/custom_components/media_player/

#23

Replaced the foobar.py and now I’ve got the following error when clicking “Check config”

Invalid config for [media_player.foobar]: string value is None for dictionary value @ data['password']. Got None string value is None for dictionary value @ data['username']. Got None. (See ?, line ?). Please check the docs at https://home-assistant.io/components/media_player.foobar/
#24

Additionally creating credentials and adding them to the entity worked, and it now shows up but having a requirement for the credentials is less than ideal.

One question: is there any way to surface the currently playing track info on the main entity card rather than only when clicking on the card itself?

Also, where is it pulling the track info from? I ask because I notice that the tracks do not match the capitalization’s that I have showing in foobar.

#25

@BRTPOB, Thanks a lot for the feedback, i updated foobar.py and fixed the authentication issue where missing username and password in configuration caused an error.

Regarding the entity card, could you please attache a screen shot? are you using lovelace UI? i’m asking since i havn’t yet given it a try (I dont use the UI much) and not sure what it looks like. i use the old large media player card and it shows the entity name, album art including the artist and title info with some media control buttons.

Re, the track info, this is fetched via HTTP using the foobar2000 foo_httpcontrol plugin.
I took a look at the plugin template and the the hass component, it does not seem that I do any capitalization manipulation.
You can fetch it manually if you would like using curl or a browser.
http://<media_player_ip_address>:<media_player_port>/pyfoobar2k?param3=state.json
The information returned is defined in files state.json and config which are part of the template you imported into foobar2000 from the pyfoobar2k package.
These files use foobar2000’s built-in metadata formatting fields, for example the track info is accessed by the template using these fields %title%, %album% and %artist%
This page provides more info about this and also explains what happens when a certain piece of info or metadata is missing.
https://wiki.hydrogenaud.io/index.php?title=Foobar2000:Title_Formatting_Reference#Remapped_metadata_fields
You could try changing fields in config file like %artist% to %album artist% or %track artist% to experiment with it.

#26

https://linx.eskimomafia.com/8qyhghug.png is the screenshot you requested. This is what’s seen on the main screen, vs: https://linx.eskimomafia.com/ovpx1t87.png.

As for the naming, for example, this is what foobar is showing me: https://linx.eskimomafia.com/q5pzjghy.png, but in the screenshot above (ovpx1t87), you can see the With is capitalized, which is what I was curious about.

Edit: using the JSON link you added, here’s what I’m seeing:

artist “Johnny Cash”
title “Christmas with You”
album “The Classic Christmas Album”
volume “100”
volumedb “0”
isPlaying “1”
isPaused “0”
itemPlayingPos “1”
itemPlayingLen “127”
albumArt “/pyfoobar2k/albumart_7393”

So as you can see, it’s getting the naming properly, but for some reason it’s not displaying it as it shows in foobar.

#27

I understand the issue better now, unfortunately I’m not sure about the origin of the capitalization, since i pass this info “as is” from the json fetched from foobar2000.

However, i think i’ve found a way to troubleshoot this further, if you check the entities page on home assistant UI http://<hass_ip>:8123/dev-state while media is playing, you can see all of the entitiy’s attributes, you should be able to see the track info (such as media_title:) as it is seen by home assistant.
if that shows the track title correctly, i have to guess the UI card does some kind of text reformatting.
I hope this helps.

#28

Like this?

media_player.red_hulk 	playing 	volume_level: 1
media_content_type: music
media_duration: 199
media_position: 100
media_position_updated_at: 2019-03-11T00:50:19.011635+00:00
media_title: Prayer of the Refugee
media_artist: Rise Against
media_album_name: Guitar Hero 3: Legends of Rock (OST)
media_playlist: Default
source: Default
source_list: Default,Podcatcher,Podcatcher: ,Imported playlist (00000001.fpl),Imported playlist (00000005.fpl),Query
friendly_name: Red Hulk
entity_picture: /api/media_player_proxy/media_player.red_hulk?token=16b761e15c2db9ece9343a3a797281484886ca98999ae23c8b7aecce5fc830a8&cache=429b03f94f03f724
supported_features: 23999
#29

yes, exactly.
does the text match foobar2000’s or the media player card?

#30

It matched foobar2000’s, not the media card.

#31

So an update: I found that it’s properly reading the capitalisations of the band name, but not the song title, oddly enough.

#32

Also, this is now showing up in the logs:

Integrations need to be in their own folder. Change media_player/foobar.py to foobar/media_player.py. This will stop working soon.

I already updated mine, but just an FYI for you/anyone else going forward.

1 Like
#33

I can’y seem to get this working.

Foobar is all set up and I’ve been using foo_httpcontrol from an android app for a few years (but all up to date). I can access pyfoobar2k from any pc in the network all fine:

image

I get the error:

2019-04-06 15:37:35 ERROR (SyncWorker_9) [homeassistant.loader] Error loading custom_components.media_player.foobar. Make sure all dependencies are installed
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/homeassistant/loader.py", line 183, in _load_file
    module = importlib.import_module(path)
  File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/config/custom_components/media_player/foobar.py", line 14, in <module>
    from homeassistant.components.media_player import (
ImportError: cannot import name 'MEDIA_TYPE_MUSIC' from 'homeassistant.components.media_player' (/usr/local/lib/python3.7/site-packages/homeassistant/components/media_player/__init__.py)
2019-04-06 15:37:35 ERROR (SyncWorker_9) [homeassistant.loader] Unable to find platform foobar.
2019-04-06 15:37:36 ERROR (MainThread) [homeassistant.components.hassio] Platform not found: media_player.foobar

I’m running 0.91 and have tried your trick above ( To fix this, you may need to copy a few more files ( reproduce_state.py, const.py, __init__.py )
from your home assistant installation path lib/python3.6/site-packages/homeassistant/components/media_player/
and place these next to the foobar.py file under <home_assistant_config_dir>/custom_components/media_player/) and I’ve tried both media_player/foobar.py and foobar/media_player.py.

Any ideas?

#34

@Greenhouse I think the trick described in the github pull request i shared earlier is not needed as I’m running the component successfully without it on version 0.90.1.
I do recommend to follow @BRTPOB’s suggestion where custom components need to be on their on folder, even though i believe it is not related to your error message;
You should rename foobar.py to media_player.py and place it under custom_components/foobar/media_player.py

The error you attached looks similar to an ImportError i fixed on my last update, could you please make sure you’re using the latest version of home-assistant-foobar2k?

#35

Yep, using the latest version and renamed to foobar/media_player.py - same problem as above persists…