milaq / YCast

Self hosted vTuner internet radio service emulation
Other
244 stars 93 forks source link

Ycast Failure With Aluratek AIRMM01F Internet Clock/Radio #126

Open AverageDwarfGiant opened 1 year ago

AverageDwarfGiant commented 1 year ago

Aluratek AIRMM01F fails to utilize ycast installed on a Manjaro Linux PC.

DNSmasq is working on Asus router running Asuswrt-Merlin with Entware installed and calls to vtuner.com are redirected to the Linux PC. It appears that the vtuner firmware on the Aluratek is just not compatible with Ycast.

What further steps can I take to get debugging information that I can pass on here?

I have wireshark installed on both on the Linux PC and on the Asus router from within Entware. I also have tcpdump installed on the router also from within Entware. However, I don't know how to use any of these at this moment. Pointers to tutorials would be appreciated.

AverageDwarfGiant commented 1 year ago

Following up my own post with an update

Turns out that a firewall blocked the Aluratek from accessing Ycast on the Linux PC.

Having an old Raspberry Pi 3B on hand, I installed the latest Raspberry Pi OS on this with Ycast on top. Entware DNSmasq successfully routes vtuner.com access to the Raspberry Pi.

Although the Aluratek can now see Ycast Raspberry Pi, I am now experiencing the same kind of problem mentioned in issue #96 with the Sagem MyDu@l Radio 700.

Among the things I see with the "-d" ycast debug option is some mention of Unicode. I would guess that if Unicode is broken somewhere that it would have to be on the Aluratek but I don't know.

I'm actually not surprised about this. It's my understanding that the Aluratek Airmm01f is actually a rebadged Sagem MyDu@l.

I'll try doing this again to gather debug information. Any advice to best do this would be appreciated.

AverageDwarfGiant commented 1 year ago

Another update:

I figured out how to generate pcap files using tcpdump and how to examine these using Wireshark.

I also ran Ycast on a Raspberry PI with the debug option, "-d". This is what I got trying to use it with the Aluratek:

2023-03-14 20:20:40 INFO: YCast (1.1.0) server starting
2023-03-14 20:20:40 DEBUG: Debug logging enabled
2023-03-14 20:20:40 INFO:  * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
2023-03-14 20:21:44 INFO: 192.168.50.234 - - [14/Mar/2023 20:21:44] "GET /setupapp/aluratek/asp/BrowseXML/loginXML.asp?token=0 HTTP/1.0" 200 -
2023-03-14 20:21:44 INFO: 192.168.50.234 - - [14/Mar/2023 20:21:44] "GET /setupapp/aluratek/asp/BrowseXML/loginXML.asp?mac=2B730FF0FDB232C8A8931FF1B0BEB0AC&dlang=eng&fver=1.754333 HTTP/1.0" 200 -
2023-03-14 20:21:50 DEBUG: Radiobrowser API request: tags?hidebroken=true
2023-03-14 20:21:51 DEBUG: Starting new HTTP connection (1): all.api.radio-browser.info:80
2023-03-14 20:21:51 DEBUG: http://all.api.radio-browser.info:80 "GET /json/tags?hidebroken=true HTTP/1.1" 200 None
2023-03-14 20:21:51 DEBUG: Radiobrowser API request: countries?hidebroken=true
2023-03-14 20:21:51 DEBUG: Starting new HTTP connection (1): all.api.radio-browser.info:80
2023-03-14 20:21:52 DEBUG: http://all.api.radio-browser.info:80 "GET /json/countries?hidebroken=true HTTP/1.1" 200 2717
2023-03-14 20:21:52 DEBUG: Radiobrowser API request: languages?hidebroken=true
2023-03-14 20:21:52 DEBUG: Starting new HTTP connection (1): all.api.radio-browser.info:80
2023-03-14 20:21:52 DEBUG: http://all.api.radio-browser.info:80 "GET /json/languages?hidebroken=true HTTP/1.1" 200 3099
2023-03-14 20:21:52 DEBUG: Radiobrowser API request: stations?order=votes&reverse=true&limit=200
2023-03-14 20:21:52 DEBUG: Starting new HTTP connection (1): all.api.radio-browser.info:80
2023-03-14 20:21:52 DEBUG: http://all.api.radio-browser.info:80 "GET /json/stations?order=votes&reverse=true&limit=200 HTTP/1.1" 200 None
2023-03-14 20:21:52 ERROR: Exception on /ycast/radiobrowser/ [GET]
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/pi/Downloads/YCast-1.1.0/ycast/server.py", line 183, in radiobrowser_landing
    len(radiobrowser.get_stations_by_votes())))
  File "/home/pi/Downloads/YCast-1.1.0/ycast/radiobrowser.py", line 155, in get_stations_by_votes
    print(station_json)
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 173-177: ordinal not in range(256)
2023-03-14 20:21:52 INFO: 192.168.50.234 - - [14/Mar/2023 20:21:52] "GET /ycast/radiobrowser/?vtuner=true&mac=2B730FF0FDB232C8A8931FF1B0BEB0AC&dlang=eng&fver=1.754333 HTTP/1.0" 500 -
2023-03-14 20:21:59 INFO: 192.168.50.234 - - [14/Mar/2023 20:21:59] "GET /setupapp/aluratek/asp/BrowseXML/loginXML.asp?mac=2B730FF0FDB232C8A8931FF1B0BEB0AC&dlang=eng&fver=1.754333 HTTP/1.0" 200 -

I can't claim to know what may be happening but it appears that a 32-digit hex number, probably a UUID, is being handed off as a MAC address.

Meanwhile, I can still use the Aluratek with vtuner.com apparently because I never registered its MAC address for any vtuner account.

Alura-Vtuner.pcap is the packet capture of a working vtuner connection although I filtered out the actual TCP audio stream to reduce the file size.

(I used "!tcp.stream eq 10" but the streams on the exported pcap file have been renumbered: 11 ->10, 12 -> 11, etc. with streams 0 to 9 remaining unchanged)

Alura-RPiYcast.pcap is the packet capture of one of my failed attempts to use the Aluratek with Ycast.

(Looks like I couldn't upload the two files as-is. These have been packaged together in Aluratek.zip)

Aluratek.zip