Thanks for letting me know. Probably something to do with adding arm64 support -- which is something I'd like to do, but is proving somewhat troublesome. It's also increasing the build time about 10 fold.
Reverting to the :appletv tag should sort you out for the time being. I'll give this another shot tomorrow most likely.
Logs can be accessed via the Portainer "Quick Actions" log button, or via the ah4c webpage.
@bnhf
Thank you for all the work
I went back and forth to :test.appletv and it came right back up everytime.
I was having problems getting chrome browser to let me copy the log from the webpage.
I will try the portainer log to copy next time.
OK, so I built a new amd64-only bnhf/ah4c:test2.appletv with the required packages for pyatv support. This uses the same Dockerfile as the previous test.appletv build, but includes the spectrum.m3u file, and the atv/spectrum scripts submitted by @ChannelSam, along with some tweaks to the startup script.
I'm not able to test this as I'm in AZ for the next month+, and don't have access to my full lab setup. So, @ChannelSam, if you could give this a try and post the Portainer log from start through at least one channel tune, I'd appreciate it. I'd like to see this whether there are issues or not.
An open issue with using AppleTVs as the streaming device is how to handle the pairing process. I'm interested in coming up with a better approach than having to exec into the container to do it -- which is inelegant at best. Unfortunately it's interactive on the pyatv side, rather than AppleTV side -- so I'm looking for ideas for a better solution.
2024-03-19T21:19:59.757346821Z 127.0.0.1 localhost
2024-03-19T21:19:59.773273515Z ::1 localhost ip6-localhost ip6-loopback
2024-03-19T21:19:59.773311204Z fe00::0 ip6-localnet
2024-03-19T21:19:59.773324067Z ff00::0 ip6-mcastprefix
2024-03-19T21:19:59.773336204Z ff02::1 ip6-allnodes
2024-03-19T21:19:59.773347204Z ff02::2 ip6-allrouters
2024-03-19T21:19:59.773357965Z 172.26.0.2 ah4c-test
2024-03-19T21:20:00.753150178Z Traceback (most recent call last):
2024-03-19T21:20:00.753223443Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:20:00.753242543Z from pyatv.scripts.atvremote import main
2024-03-19T21:20:00.753258619Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:20:00.753281269Z from pyatv.protocols import PROTOCOLS
2024-03-19T21:20:00.753295868Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:20:00.753374392Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:20:00.753414780Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:20:00.753493987Z from pyatv.protocols import mrp
2024-03-19T21:20:00.753502794Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:20:00.753584344Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:20:00.753593219Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:20:00.753674564Z from pyatv.protocols.mrp import protobuf
2024-03-19T21:20:00.753683227Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:20:00.753802414Z from . import AudioFadeMessage_pb2
2024-03-19T21:20:00.753837033Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:20:00.753883112Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:20:00.753894419Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:20:00.753955541Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:20:00.753973532Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:20:00.754045333Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:20:00.754057114Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:20:00.754153990Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:20:00.754162535Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:20:01.804469209Z Traceback (most recent call last):
2024-03-19T21:20:01.804538545Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:20:01.804567447Z from pyatv.scripts.atvremote import main
2024-03-19T21:20:01.804581099Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:20:01.804706173Z from pyatv.protocols import PROTOCOLS
2024-03-19T21:20:01.804728360Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:20:01.804844884Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:20:01.804873100Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:20:01.804981161Z from pyatv.protocols import mrp
2024-03-19T21:20:01.805004726Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:20:01.805101589Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:20:01.805127696Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:20:01.805185764Z from pyatv.protocols.mrp import protobuf
2024-03-19T21:20:01.805225818Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:20:01.805268747Z from . import AudioFadeMessage_pb2
2024-03-19T21:20:01.805278006Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:20:01.805372839Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:20:01.805382928Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:20:01.805470355Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:20:01.805480212Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:20:01.805572944Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:20:01.805582850Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:20:01.805695425Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:20:01.805705140Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:20:01.935629033Z * daemon not running; starting now at tcp:5037
2024-03-19T21:20:02.157270658Z List of devices attached
2024-03-19T21:20:02.157397176Z * daemon started successfully
2024-03-19T21:20:02.157936219Z
2024-03-19T21:20:02.177406644Z failed to connect to '192.168.1.54:5555': Connection refused
2024-03-19T21:20:02.198234155Z failed to connect to '192.168.1.55:5555': Connection refused
2024-03-19T21:20:02.266104548Z No existing ./scripts/firetv/directv/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.270587981Z No existing ./scripts/atv/spectrum/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.274849055Z No existing ./scripts/firetv/directv/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.278660761Z No existing ./scripts/atv/spectrum/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.282600793Z No existing ./scripts/firetv/directv/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.287318662Z No existing ./scripts/atv/spectrum/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.294333603Z No existing directv.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.297099857Z No existing dtvosprey.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.299753624Z No existing dtvstream.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.302472262Z No existing foo-fighters.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.305122724Z No existing fubo.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.307613997Z No existing hulu.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.310555168Z No existing livetv.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.312849443Z No existing npo.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.315646444Z No existing silicondust.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.318278165Z No existing sling.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.321197875Z No existing spectrum.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.323938028Z No existing youtubetv_shield.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.326638790Z No existing youtubetv.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.353552959Z [START] ah4c is starting
2024-03-19T21:20:02.353905515Z [ENV] Not loading env
2024-03-19T21:20:02.353947946Z [ENV] IPADDRESS 192.168.1.101:7654
2024-03-19T21:20:02.353963675Z [ENV] ALERT_SMTP_SERVER
2024-03-19T21:20:02.353977522Z [ENV] ALERT_AUTH_SERVER
2024-03-19T21:20:02.354061120Z [ENV] ALERT_EMAIL_FROM
2024-03-19T21:20:02.354097640Z [ENV] ALERT_EMAIL_PASS
2024-03-19T21:20:02.354136606Z [ENV] ALERT_EMAIL_TO
2024-03-19T21:20:02.354151125Z [ENV] ALERT_WEBHOOK_URL
2024-03-19T21:20:02.354199889Z [ENV] ALLOW_DEBUG_VIDEO_PREVIEW
2024-03-19T21:20:02.354237682Z [ENV] Creating tuner 1
2024-03-19T21:20:02.354251292Z [ENV] ENCODER1_URL http://192.168.1.41/live/stream3
2024-03-19T21:20:02.354269895Z [ENV] TUNER1_IP 192.168.1.54
2024-03-19T21:20:02.354354350Z [ENV] CMD1
2024-03-19T21:20:02.354369658Z [ENV] TEECMD1
2024-03-19T21:20:02.354404367Z [ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T21:20:02.354418737Z [ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
2024-03-19T21:20:02.354436021Z [ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T21:20:02.354450807Z [ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
2024-03-19T21:20:02.354463558Z [ENV] Creating tuner 2
2024-03-19T21:20:02.354532988Z [ENV] ENCODER2_URL http://192.168.1.41/live/stream4
2024-03-19T21:20:02.354548148Z [ENV] TUNER2_IP 192.168.1.55
2024-03-19T21:20:02.354561643Z [ENV] CMD2
2024-03-19T21:20:02.354574590Z [ENV] TEECMD2
2024-03-19T21:20:02.354587332Z [ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T21:20:02.354603460Z [ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
2024-03-19T21:20:02.354616685Z [ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T21:20:02.354629956Z [ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
2024-03-19T21:20:02.354665872Z [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
2024-03-19T21:20:02.354688650Z - using env: export GIN_MODE=release
2024-03-19T21:20:02.354704282Z - using code: gin.SetMode(gin.ReleaseMode)
2024-03-19T21:20:02.354718372Z
2024-03-19T21:20:02.354731202Z [GIN-debug] GET /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T21:20:02.354750427Z [GIN-debug] HEAD /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T21:20:02.357414490Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T21:20:02.357462123Z -
2024-03-19T21:20:02.357476857Z - edit.html
2024-03-19T21:20:02.357490016Z - index.html
2024-03-19T21:20:02.357502009Z - logs.html
2024-03-19T21:20:02.357514021Z - m3us.html
2024-03-19T21:20:02.357526886Z - routes.html
2024-03-19T21:20:02.357539472Z - stream.html
2024-03-19T21:20:02.357583999Z - config.html
2024-03-19T21:20:02.357598583Z - editm3u.html
2024-03-19T21:20:02.357611340Z - status.html
2024-03-19T21:20:02.357624857Z - status_and_logs.html
2024-03-19T21:20:02.357638153Z
2024-03-19T21:20:02.357651403Z [GIN-debug] GET /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T21:20:02.357728946Z [GIN-debug] HEAD /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T21:20:02.357774124Z [GIN-debug] GET / --> main.run.func1 (2 handlers)
2024-03-19T21:20:02.357789809Z [GIN-debug] GET /routes --> main.run.func2 (2 handlers)
2024-03-19T21:20:02.357882308Z [GIN-debug] GET /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
2024-03-19T21:20:02.357904187Z [GIN-debug] GET /m3u/:channel --> main.run.func4 (2 handlers)
2024-03-19T21:20:02.357924642Z [GIN-debug] GET /env --> main.run.func5 (2 handlers)
2024-03-19T21:20:02.357938745Z [GIN-debug] GET /logs/text --> main.run.func6 (2 handlers)
2024-03-19T21:20:02.357952204Z [GIN-debug] GET /logs --> main.run.func7 (2 handlers)
2024-03-19T21:20:02.358077898Z [GIN-debug] GET /status/andlogs --> main.run.func8 (2 handlers)
2024-03-19T21:20:02.358097936Z [GIN-debug] GET /logs/json --> main.run.func9 (2 handlers)
2024-03-19T21:20:02.358111636Z [GIN-debug] GET /video --> main.run.func10 (2 handlers)
2024-03-19T21:20:02.358125234Z [GIN-debug] GET /status --> main.statusPageHandler (2 handlers)
2024-03-19T21:20:02.358138437Z [GIN-debug] GET /api/status --> main.apiStatusHandler (2 handlers)
2024-03-19T21:20:02.358151437Z [GIN-debug] GET /stream --> main.run.func11 (2 handlers)
2024-03-19T21:20:02.358164424Z [GIN-debug] GET /test/webhook --> main.run.func12 (2 handlers)
2024-03-19T21:20:02.358176526Z [GIN-debug] GET /test/email --> main.run.func13 (2 handlers)
2024-03-19T21:20:02.358188441Z [GIN-debug] GET /status/channelsactivity --> main.run.func14 (2 handlers)
2024-03-19T21:20:02.358200366Z [GIN-debug] GET /edit --> main.run.func15 (2 handlers)
2024-03-19T21:20:02.358212763Z [GIN-debug] POST /save --> main.run.func16 (2 handlers)
2024-03-19T21:20:02.358224640Z [GIN-debug] POST /m3usave/:file --> main.run.func17 (2 handlers)
2024-03-19T21:20:02.358236660Z [GIN-debug] GET /m3us --> main.run.func18 (2 handlers)
2024-03-19T21:20:02.358248827Z [GIN-debug] GET /editm3u/:file --> main.run.func19 (2 handlers)
2024-03-19T21:20:02.358261871Z [GIN-debug] GET /config --> main.run.func20 (2 handlers)
2024-03-19T21:20:02.358332679Z [GIN-debug] POST /configsave --> main.run.func21 (2 handlers)
2024-03-19T21:20:02.358354306Z [START] ah4c is ready
2024-03-19T21:20:02.358367296Z [GIN-debug] Listening and serving HTTP on :7654
2024-03-19T21:20:03.070452609Z
2024-03-19T21:20:03.070530577Z > ws-scrcpy@0.8.1-dev start
2024-03-19T21:20:03.070546680Z > node ./index.js
2024-03-19T21:20:03.070565035Z
2024-03-19T21:20:03.910737899Z Listening on:
2024-03-19T21:20:03.910805363Z http://ah4c-test:8000 http://localhost:8000
2024-03-19T21:20:03.911081575Z http://127.0.0.1:8000 http://172.26.0.2:8000
2024-03-19T21:30:01.144855892Z [GIN-debug] Loaded HTML Templates (14):
2024-03-19T21:30:01.144922098Z - fubo.m3u
2024-03-19T21:30:01.144938901Z - spectrum.m3u
2024-03-19T21:30:01.144951655Z - youtubetv_shield.m3u
2024-03-19T21:30:01.144965790Z - dtvstream.m3u
2024-03-19T21:30:01.144979794Z - foo-fighters.m3u
2024-03-19T21:30:01.144993484Z - youtubetv.m3u
2024-03-19T21:30:01.145007132Z - hulu.m3u
2024-03-19T21:30:01.145019720Z - silicondust.m3u
2024-03-19T21:30:01.145031141Z - npo.m3u
2024-03-19T21:30:01.145041887Z - sling.m3u
2024-03-19T21:30:01.145052412Z -
2024-03-19T21:30:01.145063986Z - directv.m3u
2024-03-19T21:30:01.145074965Z - dtvosprey.m3u
2024-03-19T21:30:01.145085838Z - livetv.m3u
2024-03-19T21:30:01.145096483Z
2024-03-19T21:30:01.165198202Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T21:30:01.165260862Z -
2024-03-19T21:30:01.165276193Z - config.html
2024-03-19T21:30:01.165289656Z - edit.html
2024-03-19T21:30:01.165302186Z - editm3u.html
2024-03-19T21:30:01.165314376Z - index.html
2024-03-19T21:30:01.165326384Z - logs.html
2024-03-19T21:30:01.165338644Z - routes.html
2024-03-19T21:30:01.165351431Z - status_and_logs.html
2024-03-19T21:30:01.165363678Z - m3us.html
2024-03-19T21:30:01.165375636Z - status.html
2024-03-19T21:30:01.165387840Z - stream.html
2024-03-19T21:30:01.165399697Z
2024-03-19T21:30:01.165412391Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 35.042611ms, status: 200
2024-03-19T21:30:33.560074424Z [GIN-debug] Loaded HTML Templates (14):
2024-03-19T21:30:33.560143051Z - foo-fighters.m3u
2024-03-19T21:30:33.560187669Z - hulu.m3u
2024-03-19T21:30:33.560200456Z - silicondust.m3u
2024-03-19T21:30:33.560212579Z - dtvosprey.m3u
2024-03-19T21:30:33.560224096Z - youtubetv_shield.m3u
2024-03-19T21:30:33.560235118Z - youtubetv.m3u
2024-03-19T21:30:33.560245988Z -
2024-03-19T21:30:33.560257187Z - directv.m3u
2024-03-19T21:30:33.560268405Z - dtvstream.m3u
2024-03-19T21:30:33.560279239Z - fubo.m3u
2024-03-19T21:30:33.560289864Z - npo.m3u
2024-03-19T21:30:33.560300458Z - sling.m3u
2024-03-19T21:30:33.560311302Z - livetv.m3u
2024-03-19T21:30:33.560321909Z - spectrum.m3u
2024-03-19T21:30:33.560332633Z
2024-03-19T21:30:33.580042008Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T21:30:33.580101648Z -
2024-03-19T21:30:33.580117397Z - editm3u.html
2024-03-19T21:30:33.580131161Z - index.html
2024-03-19T21:30:33.580144017Z - m3us.html
2024-03-19T21:30:33.580156993Z - status.html
2024-03-19T21:30:33.580170079Z - stream.html
2024-03-19T21:30:33.580182938Z - config.html
2024-03-19T21:30:33.580195497Z - edit.html
2024-03-19T21:30:33.580207341Z - logs.html
2024-03-19T21:30:33.580218398Z - routes.html
2024-03-19T21:30:33.580229363Z - status_and_logs.html
2024-03-19T21:30:33.580240190Z
2024-03-19T21:30:33.580251599Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 34.855337ms, status: 200
2024-03-19T21:30:34.040613308Z [GIN-debug] Loaded HTML Templates (14):
2024-03-19T21:30:34.040670330Z - dtvosprey.m3u
2024-03-19T21:30:34.040685641Z - fubo.m3u
2024-03-19T21:30:34.040699268Z - hulu.m3u
2024-03-19T21:30:34.040713433Z - npo.m3u
2024-03-19T21:30:34.040725887Z - directv.m3u
2024-03-19T21:30:34.040739085Z - livetv.m3u
2024-03-19T21:30:34.040752489Z - spectrum.m3u
2024-03-19T21:30:34.040764517Z - youtubetv.m3u
2024-03-19T21:30:34.040775603Z - youtubetv_shield.m3u
2024-03-19T21:30:34.040786608Z -
2024-03-19T21:30:34.040797921Z - dtvstream.m3u
2024-03-19T21:30:34.040809155Z - foo-fighters.m3u
2024-03-19T21:30:34.040820132Z - silicondust.m3u
2024-03-19T21:30:34.040831021Z - sling.m3u
2024-03-19T21:30:34.040842052Z
2024-03-19T21:30:34.060046878Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T21:30:34.060124044Z - config.html
2024-03-19T21:30:34.060140722Z - routes.html
2024-03-19T21:30:34.060155226Z - stream.html
2024-03-19T21:30:34.060169289Z - m3us.html
2024-03-19T21:30:34.060182495Z - status.html
2024-03-19T21:30:34.060196091Z - status_and_logs.html
2024-03-19T21:30:34.060209365Z -
2024-03-19T21:30:34.060222152Z - edit.html
2024-03-19T21:30:34.060234862Z - editm3u.html
2024-03-19T21:30:34.060248137Z - index.html
2024-03-19T21:30:34.060260303Z - logs.html
2024-03-19T21:30:34.060271297Z
2024-03-19T21:30:34.060282916Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 33.52423ms, status: 200
2024-03-19T21:37:01.876596267Z Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 58515
2024-03-19T21:37:01.881427738Z [EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 58515]
2024-03-19T21:37:01.884628971Z [EXECUTE] Stdout: ''
2024-03-19T21:37:01.884682060Z [EXECUTE] Stderr: ''
2024-03-19T21:37:01.884698021Z [EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 3.345953ms
2024-03-19T21:37:01.884816579Z [EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 58515 192.168.1.54]
2024-03-19T21:37:02.957237477Z [EXECUTE] Stdout: ''
2024-03-19T21:37:02.957302325Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T21:37:02.957318489Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:37:02.957332710Z from pyatv.scripts.atvremote import main
2024-03-19T21:37:02.957344747Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:37:02.957359003Z from pyatv.protocols import PROTOCOLS
2024-03-19T21:37:02.957373227Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:37:02.957386661Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:37:02.957398574Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:37:02.957410810Z from pyatv.protocols import mrp
2024-03-19T21:37:02.957422128Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:37:02.957433925Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:37:02.957445221Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:37:02.957457169Z from pyatv.protocols.mrp import protobuf
2024-03-19T21:37:02.957468109Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:37:02.957511509Z from . import AudioFadeMessage_pb2
2024-03-19T21:37:02.957523909Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:37:02.957535785Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:37:02.957547522Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:37:02.957559324Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:37:02.957570553Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:37:02.957582267Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:37:02.957593765Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:37:02.957605541Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:37:02.957619007Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:37:02.957630136Z '
2024-03-19T21:37:02.957640859Z [EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 1.072485252s
2024-03-19T21:37:02.957651801Z [ERR] Failed to run start script: exit status 1
2024-03-19T21:37:43.148124909Z [IO] io.Copy: write tcp 172.26.0.2:7654->192.168.1.20:52648: write: broken pipe
2024-03-19T21:37:43.148199494Z [IOINFO] Successfully copied 41757432 bytes
2024-03-19T21:37:43.148215859Z [IOINFO] Transfer speed: 8.095791042050317 Mbits/second
2024-03-19T21:37:43.148230487Z Performing Close() for 192.168.1.54
2024-03-19T21:37:43.148250458Z [EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 58515]
2024-03-19T21:37:44.260601753Z [EXECUTE] Stdout: ''
2024-03-19T21:37:44.260658823Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T21:37:44.260673340Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:37:44.260686366Z from pyatv.scripts.atvremote import main
2024-03-19T21:37:44.260697994Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:37:44.260710105Z from pyatv.protocols import PROTOCOLS
2024-03-19T21:37:44.260721331Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:37:44.260737390Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:37:44.260751371Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:37:44.260763868Z from pyatv.protocols import mrp
2024-03-19T21:37:44.260825323Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:37:44.260839688Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:37:44.260850795Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:37:44.260862531Z from pyatv.protocols.mrp import protobuf
2024-03-19T21:37:44.260873523Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:37:44.260887755Z from . import AudioFadeMessage_pb2
2024-03-19T21:37:44.260900660Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:37:44.260913947Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:37:44.260926852Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:37:44.260939580Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:37:44.260952496Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:37:44.260966228Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:37:44.260980450Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:37:44.260994950Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:37:44.261009126Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:37:44.261020535Z '
2024-03-19T21:37:44.261031101Z [EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.112457258s
2024-03-19T21:37:44.261043863Z [ERR] Failed to run stop script: exit status 1
2024-03-19T21:37:44.261056568Z [EXECUTE] Running [./scripts/atv/spectrum/reboot.sh 192.168.1.54 58515]
2024-03-19T21:37:44.261216432Z [EXECUTE] Stdout: ''
2024-03-19T21:37:44.261244243Z [EXECUTE] Stderr: ''
2024-03-19T21:37:44.261250719Z [EXECUTE] Finished running ./scripts/atv/spectrum/reboot.sh in 596.897µs
2024-03-19T21:37:44.261409405Z [GIN-debug] Request: 192.168.1.20 GET /play/tuner/58515, latency: 42.384878512s, status: 200
Doesn't look like pyatv stuff is loading/installing right...
What I did...
Created new docker using new image and pointing to new directory
After container was running I consoled in and copied .pyatv.conf to /adb directory
Reloaded m3u in channels and redowloaded guide data
Attempted to tune to a national channel
After this didn't work I also tried to manually use the console and run the pyatv install commands but basically says everything is already good... then tried to run atvremote commands and I got the same errors we see in the logs.
If you want to test this using a different data directory than your working setup (which I understand), you're going to want to copy the .pyatv.conf file to the directory location on your docker host you're binding to /root/.android before you start the container.
For example, if your volume setup looks like this, you'd place the .conf file in /data/ah4c/adb on the docker host:
- ${HOST_DIR}/ah4c/scripts:/opt/scripts # pre/stop/bmitune.sh scripts will be stored in this bound host directory under streamer/app
- ${HOST_DIR}/ah4c/m3u:/opt/m3u # m3u files will be stored here and hosted at http://<hostname or ip>:7654/m3u for use in Channels DVR - Custom Channels settings
- ${HOST_DIR}/ah4c/adb:/root/.android # Persistent data directory for adb keys
in this example HOST_DIR=/data
If you're exec'ing into the container, which I'd prefer you not do for this testing, you'd place that file in /root/.android
Did everything again...deleted directories, recreated directories and made sure I added the .pyatv.conf to the /adb directory before starting the stack...all as root...
Still getting the same results with pyatv errors.
Started Docker...Reload m3u in Channels and tried to tune then stop channel. Channels beleives it is tuned but the ATV never tunes...just stays on home screen
Docker Log
2024-03-19T23:06:11.622761321Z 127.0.0.1 localhost
2024-03-19T23:06:11.622821901Z ::1 localhost ip6-localhost ip6-loopback
2024-03-19T23:06:11.622828859Z fe00::0 ip6-localnet
2024-03-19T23:06:11.622835385Z ff00::0 ip6-mcastprefix
2024-03-19T23:06:11.622841833Z ff02::1 ip6-allnodes
2024-03-19T23:06:11.622848049Z ff02::2 ip6-allrouters
2024-03-19T23:06:11.622853850Z 172.30.0.2 ah4c-test
2024-03-19T23:06:12.824549590Z Traceback (most recent call last):
2024-03-19T23:06:12.824605923Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:06:12.824694430Z from pyatv.scripts.atvremote import main
2024-03-19T23:06:12.824718936Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:06:12.824801904Z from pyatv.protocols import PROTOCOLS
2024-03-19T23:06:12.824813205Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:06:12.824926108Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:06:12.824934703Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:06:12.825032160Z from pyatv.protocols import mrp
2024-03-19T23:06:12.825040417Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:06:12.825145766Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:06:12.825153981Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:06:12.825250545Z from pyatv.protocols.mrp import protobuf
2024-03-19T23:06:12.825259418Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:06:12.825342323Z from . import AudioFadeMessage_pb2
2024-03-19T23:06:12.825350317Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:06:12.825438309Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:06:12.825446516Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:06:12.825528922Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:06:12.825536457Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:06:12.825613928Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:06:12.825625065Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:06:12.825728541Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:06:12.825739697Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:06:13.989948048Z Traceback (most recent call last):
2024-03-19T23:06:13.989991969Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:06:13.990075185Z from pyatv.scripts.atvremote import main
2024-03-19T23:06:13.990097722Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:06:13.990331664Z from pyatv.protocols import PROTOCOLS
2024-03-19T23:06:13.990349088Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:06:13.990516695Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:06:13.990533638Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:06:13.990672612Z from pyatv.protocols import mrp
2024-03-19T23:06:13.990688080Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:06:13.990834240Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:06:13.990849490Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:06:13.990976056Z from pyatv.protocols.mrp import protobuf
2024-03-19T23:06:13.990992657Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:06:13.991120764Z from . import AudioFadeMessage_pb2
2024-03-19T23:06:13.991144020Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:06:13.991269816Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:06:13.991285379Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:06:13.991410509Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:06:13.991425709Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:06:13.991549938Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:06:13.991565320Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:06:13.991711828Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:06:13.991743150Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:06:14.213498668Z * daemon not running; starting now at tcp:5037
2024-03-19T23:06:14.474034269Z List of devices attached
2024-03-19T23:06:14.474022886Z * daemon started successfully
2024-03-19T23:06:14.474421474Z
2024-03-19T23:06:14.488126930Z failed to connect to '192.168.1.54:5555': Connection refused
2024-03-19T23:06:14.504717668Z failed to connect to '192.168.1.55:5555': Connection refused
2024-03-19T23:06:14.529713869Z No existing ./scripts/firetv/directv/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.532749512Z No existing ./scripts/atv/spectrum/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.536185279Z No existing ./scripts/firetv/directv/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.539255761Z No existing ./scripts/atv/spectrum/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.542286342Z No existing ./scripts/firetv/directv/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.545344492Z No existing ./scripts/atv/spectrum/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.550150042Z No existing directv.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.552163609Z No existing dtvosprey.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.554195781Z No existing dtvstream.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.556013034Z No existing foo-fighters.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.557876082Z No existing fubo.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.559683277Z No existing hulu.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.561787866Z No existing livetv.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.563740194Z No existing npo.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.569386250Z No existing silicondust.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.571190268Z No existing sling.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.573188070Z No existing spectrum.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.574829162Z No existing youtubetv_shield.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.576433678Z No existing youtubetv.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.593657495Z [START] ah4c is starting
2024-03-19T23:06:14.600640176Z [ENV] Not loading env
2024-03-19T23:06:14.600764809Z [ENV] IPADDRESS 192.168.1.101:7654
2024-03-19T23:06:14.600853889Z [ENV] ALERT_SMTP_SERVER
2024-03-19T23:06:14.600932618Z [ENV] ALERT_AUTH_SERVER
2024-03-19T23:06:14.601020974Z [ENV] ALERT_EMAIL_FROM
2024-03-19T23:06:14.601098186Z [ENV] ALERT_EMAIL_PASS
2024-03-19T23:06:14.601199027Z [ENV] ALERT_EMAIL_TO
2024-03-19T23:06:14.601287114Z [ENV] ALERT_WEBHOOK_URL
2024-03-19T23:06:14.601367434Z [ENV] ALLOW_DEBUG_VIDEO_PREVIEW
2024-03-19T23:06:14.601461549Z [ENV] Creating tuner 1
2024-03-19T23:06:14.601558471Z [ENV] ENCODER1_URL http://192.168.1.41/live/stream3
2024-03-19T23:06:14.601645305Z [ENV] TUNER1_IP 192.168.1.54
2024-03-19T23:06:14.601721923Z [ENV] CMD1
2024-03-19T23:06:14.601805405Z [ENV] TEECMD1
2024-03-19T23:06:14.601897515Z [ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:06:14.601974675Z [ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:06:14.602059985Z [ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:06:14.602147142Z [ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:06:14.602229233Z [ENV] Creating tuner 2
2024-03-19T23:06:14.602317773Z [ENV] ENCODER2_URL http://192.168.1.41/live/stream4
2024-03-19T23:06:14.602395112Z [ENV] TUNER2_IP 192.168.1.55
2024-03-19T23:06:14.602483510Z [ENV] CMD2
2024-03-19T23:06:14.602559086Z [ENV] TEECMD2
2024-03-19T23:06:14.602646283Z [ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:06:14.602734386Z [ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:06:14.602811832Z [ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:06:14.602903571Z [ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:06:14.602991129Z [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
2024-03-19T23:06:14.602999862Z - using env: export GIN_MODE=release
2024-03-19T23:06:14.603007039Z - using code: gin.SetMode(gin.ReleaseMode)
2024-03-19T23:06:14.603013498Z
2024-03-19T23:06:14.603095328Z [GIN-debug] GET /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:06:14.603179491Z [GIN-debug] HEAD /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:06:14.604747754Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T23:06:14.604780955Z - edit.html
2024-03-19T23:06:14.604789234Z - index.html
2024-03-19T23:06:14.604795978Z - logs.html
2024-03-19T23:06:14.604802088Z - status.html
2024-03-19T23:06:14.604807789Z - status_and_logs.html
2024-03-19T23:06:14.604813478Z -
2024-03-19T23:06:14.604819283Z - config.html
2024-03-19T23:06:14.604842976Z - editm3u.html
2024-03-19T23:06:14.604849732Z - m3us.html
2024-03-19T23:06:14.604856231Z - routes.html
2024-03-19T23:06:14.604862580Z - stream.html
2024-03-19T23:06:14.604868409Z
2024-03-19T23:06:14.605000928Z [GIN-debug] GET /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:06:14.605100711Z [GIN-debug] HEAD /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:06:14.605184928Z [GIN-debug] GET / --> main.run.func1 (2 handlers)
2024-03-19T23:06:14.605257800Z [GIN-debug] GET /routes --> main.run.func2 (2 handlers)
2024-03-19T23:06:14.605342429Z [GIN-debug] GET /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
2024-03-19T23:06:14.605427773Z [GIN-debug] GET /m3u/:channel --> main.run.func4 (2 handlers)
2024-03-19T23:06:14.605501802Z [GIN-debug] GET /env --> main.run.func5 (2 handlers)
2024-03-19T23:06:14.605584485Z [GIN-debug] GET /logs/text --> main.run.func6 (2 handlers)
2024-03-19T23:06:14.605667906Z [GIN-debug] GET /logs --> main.run.func7 (2 handlers)
2024-03-19T23:06:14.605741482Z [GIN-debug] GET /status/andlogs --> main.run.func8 (2 handlers)
2024-03-19T23:06:14.605825310Z [GIN-debug] GET /logs/json --> main.run.func9 (2 handlers)
2024-03-19T23:06:14.605908323Z [GIN-debug] GET /video --> main.run.func10 (2 handlers)
2024-03-19T23:06:14.605980736Z [GIN-debug] GET /status --> main.statusPageHandler (2 handlers)
2024-03-19T23:06:14.606062339Z [GIN-debug] GET /api/status --> main.apiStatusHandler (2 handlers)
2024-03-19T23:06:14.606144393Z [GIN-debug] GET /stream --> main.run.func11 (2 handlers)
2024-03-19T23:06:14.606228116Z [GIN-debug] GET /test/webhook --> main.run.func12 (2 handlers)
2024-03-19T23:06:14.606299978Z [GIN-debug] GET /test/email --> main.run.func13 (2 handlers)
2024-03-19T23:06:14.606384136Z [GIN-debug] GET /status/channelsactivity --> main.run.func14 (2 handlers)
2024-03-19T23:06:14.606467615Z [GIN-debug] GET /edit --> main.run.func15 (2 handlers)
2024-03-19T23:06:14.606541421Z [GIN-debug] POST /save --> main.run.func16 (2 handlers)
2024-03-19T23:06:14.606655016Z [GIN-debug] POST /m3usave/:file --> main.run.func17 (2 handlers)
2024-03-19T23:06:14.606738835Z [GIN-debug] GET /m3us --> main.run.func18 (2 handlers)
2024-03-19T23:06:14.606821690Z [GIN-debug] GET /editm3u/:file --> main.run.func19 (2 handlers)
2024-03-19T23:06:14.606906914Z [GIN-debug] GET /config --> main.run.func20 (2 handlers)
2024-03-19T23:06:14.606994455Z [GIN-debug] POST /configsave --> main.run.func21 (2 handlers)
2024-03-19T23:06:14.607120446Z [START] ah4c is ready
2024-03-19T23:06:14.607243865Z [GIN-debug] Listening and serving HTTP on :7654
2024-03-19T23:06:15.416970575Z
2024-03-19T23:06:15.417010767Z > ws-scrcpy@0.8.1-dev start
2024-03-19T23:06:15.417018284Z > node ./index.js
2024-03-19T23:06:15.417024877Z
2024-03-19T23:06:16.236960673Z Listening on:
2024-03-19T23:06:16.237001723Z http://ah4c-test:8000 http://localhost:8000
2024-03-19T23:06:16.237504691Z http://127.0.0.1:8000 http://172.30.0.2:8000
2024-03-19T23:08:16.259268047Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T23:08:16.259315574Z - logs.html
2024-03-19T23:08:16.259324204Z - stream.html
2024-03-19T23:08:16.259331602Z - config.html
2024-03-19T23:08:16.259338940Z - editm3u.html
2024-03-19T23:08:16.259346268Z - index.html
2024-03-19T23:08:16.259353567Z - m3us.html
2024-03-19T23:08:16.259360696Z - routes.html
2024-03-19T23:08:16.259367504Z - status.html
2024-03-19T23:08:16.259374325Z - status_and_logs.html
2024-03-19T23:08:16.259381374Z -
2024-03-19T23:08:16.259388093Z - edit.html
2024-03-19T23:08:16.259395155Z
2024-03-19T23:08:16.260270267Z [GIN-debug] Request: 192.168.1.184 GET /, latency: 2.326472ms, status: 200
2024-03-19T23:08:16.405027673Z [GIN-debug] Request: 192.168.1.184 GET /static/logos/androidhdmi-for-channels.jpeg, latency: 597.418µs, status: 200
2024-03-19T23:08:20.312304376Z [GIN-debug] Request: 192.168.1.184 GET /logs, latency: 1.513729ms, status: 200
2024-03-19T23:08:46.304952058Z [GIN-debug] Request: 192.168.1.184 GET /status, latency: 3.408438ms, status: 200
2024-03-19T23:10:01.813379367Z [GIN-debug] Loaded HTML Templates (14):
2024-03-19T23:10:01.813431417Z - sling.m3u
2024-03-19T23:10:01.813439362Z - youtubetv_shield.m3u
2024-03-19T23:10:01.813445548Z - directv.m3u
2024-03-19T23:10:01.813451562Z - foo-fighters.m3u
2024-03-19T23:10:01.813457596Z - fubo.m3u
2024-03-19T23:10:01.813463376Z - hulu.m3u
2024-03-19T23:10:01.813469400Z - npo.m3u
2024-03-19T23:10:01.813475797Z - dtvosprey.m3u
2024-03-19T23:10:01.813481856Z - livetv.m3u
2024-03-19T23:10:01.813497230Z - silicondust.m3u
2024-03-19T23:10:01.813504198Z - youtubetv.m3u
2024-03-19T23:10:01.813510112Z - spectrum.m3u
2024-03-19T23:10:01.813535408Z -
2024-03-19T23:10:01.813542095Z - dtvstream.m3u
2024-03-19T23:10:01.813548111Z
2024-03-19T23:10:01.828261549Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T23:10:01.828305963Z - config.html
2024-03-19T23:10:01.828313422Z - editm3u.html
2024-03-19T23:10:01.828320082Z - m3us.html
2024-03-19T23:10:01.828326026Z - routes.html
2024-03-19T23:10:01.828331693Z - status.html
2024-03-19T23:10:01.828337446Z - stream.html
2024-03-19T23:10:01.828343493Z -
2024-03-19T23:10:01.828349251Z - edit.html
2024-03-19T23:10:01.828355179Z - index.html
2024-03-19T23:10:01.828361011Z - logs.html
2024-03-19T23:10:01.828367217Z - status_and_logs.html
2024-03-19T23:10:01.828373472Z
2024-03-19T23:10:01.828379639Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 29.259862ms, status: 200
2024-03-19T23:10:54.605275331Z Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 42642
2024-03-19T23:10:54.609967743Z [EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 42642]
2024-03-19T23:10:54.612656947Z [EXECUTE] Stdout: ''
2024-03-19T23:10:54.612691429Z [EXECUTE] Stderr: ''
2024-03-19T23:10:54.612702040Z [EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 2.971883ms
2024-03-19T23:10:54.613165503Z [EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 42642 192.168.1.54]
2024-03-19T23:10:55.833197995Z [EXECUTE] Stdout: ''
2024-03-19T23:10:55.833225587Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T23:10:55.833232276Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:10:55.833239003Z from pyatv.scripts.atvremote import main
2024-03-19T23:10:55.833245360Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:10:55.833252183Z from pyatv.protocols import PROTOCOLS
2024-03-19T23:10:55.833258668Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:10:55.833265178Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:10:55.833271121Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:10:55.833277284Z from pyatv.protocols import mrp
2024-03-19T23:10:55.833282879Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:10:55.833289437Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:10:55.833294946Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:10:55.833316395Z from pyatv.protocols.mrp import protobuf
2024-03-19T23:10:55.833322996Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:10:55.833329124Z from . import AudioFadeMessage_pb2
2024-03-19T23:10:55.833335222Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:10:55.833341596Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:10:55.833347670Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:10:55.833354177Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:10:55.833360485Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:10:55.833366640Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:10:55.833372631Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:10:55.833378465Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:10:55.833385520Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:10:55.833391302Z '
2024-03-19T23:10:55.833397212Z [EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 1.220192091s
2024-03-19T23:10:55.833402785Z [ERR] Failed to run start script: exit status 1
2024-03-19T23:11:19.702946225Z [GIN-debug] Request: 192.168.1.184 GET /logs, latency: 1.331001ms, status: 200
2024-03-19T23:11:42.793459852Z [IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52694: write: broken pipe
2024-03-19T23:11:42.794279474Z [IOINFO] Successfully copied 3793472 bytes
2024-03-19T23:11:42.794312113Z [IOINFO] Transfer speed: 0.6298689608048648 Mbits/second
2024-03-19T23:11:42.794319500Z Performing Close() for 192.168.1.54
2024-03-19T23:11:42.794325933Z [EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 42642]
2024-03-19T23:11:43.985720187Z [EXECUTE] Stdout: ''
2024-03-19T23:11:43.985750712Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T23:11:43.985758447Z File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:11:43.985765616Z from pyatv.scripts.atvremote import main
2024-03-19T23:11:43.985771821Z File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:11:43.985778572Z from pyatv.protocols import PROTOCOLS
2024-03-19T23:11:43.985808071Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:11:43.985815195Z from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:11:43.985821328Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:11:43.985827723Z from pyatv.protocols import mrp
2024-03-19T23:11:43.985833383Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:11:43.985839503Z from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:11:43.985845337Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:11:43.985851760Z from pyatv.protocols.mrp import protobuf
2024-03-19T23:11:43.985857993Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:11:43.985864749Z from . import AudioFadeMessage_pb2
2024-03-19T23:11:43.985870643Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:11:43.985876858Z from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:11:43.985882744Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:11:43.985889037Z from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:11:43.985895262Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:11:43.985901673Z from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:11:43.985908507Z File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:11:43.985914918Z pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:11:43.985922055Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:11:43.985928268Z '
2024-03-19T23:11:43.985933701Z [EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.191492205s
2024-03-19T23:11:43.985939383Z [ERR] Failed to run stop script: exit status 1
2024-03-19T23:11:43.985944923Z [EXECUTE] Running [./scripts/atv/spectrum/reboot.sh 192.168.1.54 42642]
2024-03-19T23:11:43.986039240Z [EXECUTE] Stdout: ''
2024-03-19T23:11:43.986094750Z [EXECUTE] Stderr: ''
2024-03-19T23:11:43.986106666Z [EXECUTE] Finished running ./scripts/atv/spectrum/reboot.sh in 654.271µs
2024-03-19T23:11:43.986272052Z [GIN-debug] Request: 192.168.1.20 GET /play/tuner/42642, latency: 49.381308099s, status: 200
In the interest of confirming this isn't a setup issue on your end, would you please setup the same thing using the known working container bnhf/ah4c:test.appletv? In other words the same parallel test setup, but with the working container.
We can see in the log that pyatv is installed and trying to run, but the error handling seems to non-existent with this library, and it throws off these Python traceback messages instead of something more concise and meaningful.
ONLY Changed image to bnhf/ah4c:test.appletv in this test docker...everything else the same....and restarted....Works just like it should and tuned channel and stopped channel like it should
Docker Logs
2024-03-19T23:58:41.481944054Z 127.0.0.1 localhost
2024-03-19T23:58:41.482010446Z ::1 localhost ip6-localhost ip6-loopback
2024-03-19T23:58:41.482019042Z fe00::0 ip6-localnet
2024-03-19T23:58:41.482026277Z ff00::0 ip6-mcastprefix
2024-03-19T23:58:41.482033549Z ff02::1 ip6-allnodes
2024-03-19T23:58:41.482040657Z ff02::2 ip6-allrouters
2024-03-19T23:58:41.482047534Z 172.30.0.2 ah4c-test
2024-03-19T23:58:44.221956128Z Scan Results
2024-03-19T23:58:44.221988104Z ========================================
2024-03-19T23:58:44.221996174Z Name: Entertainment Room
2024-03-19T23:58:44.222003266Z Model/SW: Apple TV 4, tvOS 17.4
2024-03-19T23:58:44.222010624Z Address: 192.168.1.54
2024-03-19T23:58:44.222017160Z MAC: 08:66:98:DB:39:90
2024-03-19T23:58:44.222023740Z Deep Sleep: False
2024-03-19T23:58:44.222029941Z Identifiers:
2024-03-19T23:58:44.222036480Z - 371532D4-923E-4726-9D78-8B54E882E58C
2024-03-19T23:58:44.222042730Z - 08:66:98:DB:39:90
2024-03-19T23:58:44.222048417Z - 086698DB3990
2024-03-19T23:58:44.222054020Z Services:
2024-03-19T23:58:44.222059479Z - Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:44.222065843Z - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:44.222071722Z - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:44.222077593Z
2024-03-19T23:58:45.841585297Z Scan Results
2024-03-19T23:58:45.841626096Z ========================================
2024-03-19T23:58:45.841633693Z Name: Home Theater
2024-03-19T23:58:45.841640790Z Model/SW: Apple TV 4, tvOS 17.4
2024-03-19T23:58:45.841646993Z Address: 192.168.1.55
2024-03-19T23:58:45.841653925Z MAC: D0:03:4B:1F:2C:09
2024-03-19T23:58:45.841662500Z Deep Sleep: False
2024-03-19T23:58:45.841668838Z Identifiers:
2024-03-19T23:58:45.841675750Z - 4C852F58-5C9D-4A8F-AAA3-86FAE2A32B65
2024-03-19T23:58:45.841682350Z - D0:03:4B:1F:2C:09
2024-03-19T23:58:45.841688784Z - D0034B1F2C09
2024-03-19T23:58:45.841695079Z Services:
2024-03-19T23:58:45.841701277Z - Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:45.841707263Z - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:45.841713345Z - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:45.841747071Z
2024-03-19T23:58:46.050589384Z Existing ./scripts/firetv/directv/prebmitune.sh found, and will be preserved
2024-03-19T23:58:46.050924669Z Existing ./scripts/firetv/directv/bmitune.sh found, and will be preserved
2024-03-19T23:58:46.051188129Z Existing ./scripts/firetv/directv/stopbmitune.sh found, and will be preserved
2024-03-19T23:58:46.053703757Z Existing directv.m3u found, and will be preserved
2024-03-19T23:58:46.053905712Z Existing dtvosprey.m3u found, and will be preserved
2024-03-19T23:58:46.054079297Z Existing dtvstream.m3u found, and will be preserved
2024-03-19T23:58:46.054232075Z Existing foo-fighters.m3u found, and will be preserved
2024-03-19T23:58:46.054391682Z Existing fubo.m3u found, and will be preserved
2024-03-19T23:58:46.054542432Z Existing hulu.m3u found, and will be preserved
2024-03-19T23:58:46.054703203Z Existing livetv.m3u found, and will be preserved
2024-03-19T23:58:46.054852704Z Existing npo.m3u found, and will be preserved
2024-03-19T23:58:46.055014214Z Existing silicondust.m3u found, and will be preserved
2024-03-19T23:58:46.055126720Z Existing sling.m3u found, and will be preserved
2024-03-19T23:58:46.055228450Z Existing spectrum.m3u found, and will be preserved
2024-03-19T23:58:46.055323180Z Existing youtubetv_shield.m3u found, and will be preserved
2024-03-19T23:58:46.055486983Z Existing youtubetv.m3u found, and will be preserved
2024-03-19T23:58:46.709985346Z [START] ah4c is starting
2024-03-19T23:58:46.787263969Z [ENV] Not loading env
2024-03-19T23:58:46.787293096Z [ENV] IPADDRESS 192.168.1.101:7654
2024-03-19T23:58:46.787300437Z [ENV] ALERT_SMTP_SERVER
2024-03-19T23:58:46.787306578Z [ENV] ALERT_AUTH_SERVER
2024-03-19T23:58:46.787312845Z [ENV] ALERT_EMAIL_FROM
2024-03-19T23:58:46.787333661Z [ENV] ALERT_EMAIL_PASS
2024-03-19T23:58:46.787340976Z [ENV] ALERT_EMAIL_TO
2024-03-19T23:58:46.787347424Z [ENV] ALERT_WEBHOOK_URL
2024-03-19T23:58:46.787353837Z [ENV] ALLOW_DEBUG_VIDEO_PREVIEW
2024-03-19T23:58:46.787360221Z [ENV] Creating tuner 1
2024-03-19T23:58:46.787367069Z [ENV] ENCODER1_URL http://192.168.1.41/live/stream3
2024-03-19T23:58:46.787379191Z [ENV] TUNER1_IP 192.168.1.54
2024-03-19T23:58:46.787385916Z [ENV] CMD1
2024-03-19T23:58:46.787392193Z [ENV] TEECMD1
2024-03-19T23:58:46.787398435Z [ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:58:46.787411239Z [ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:58:46.787418121Z [ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:58:46.787464161Z [ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:58:46.787471294Z [ENV] Creating tuner 2
2024-03-19T23:58:46.787477472Z [ENV] ENCODER2_URL http://192.168.1.41/live/stream4
2024-03-19T23:58:46.787483475Z [ENV] TUNER2_IP 192.168.1.55
2024-03-19T23:58:46.787489942Z [ENV] CMD2
2024-03-19T23:58:46.787502327Z [ENV] TEECMD2
2024-03-19T23:58:46.787509340Z [ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:58:46.787632100Z [ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:58:46.787640575Z [ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:58:46.787647038Z [ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:58:46.787653334Z [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
2024-03-19T23:58:46.787660357Z - using env: export GIN_MODE=release
2024-03-19T23:58:46.787666609Z - using code: gin.SetMode(gin.ReleaseMode)
2024-03-19T23:58:46.787672659Z
2024-03-19T23:58:46.787678546Z [GIN-debug] GET /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:58:46.787684963Z [GIN-debug] HEAD /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:58:46.816280186Z [GIN-debug] Loaded HTML Templates (11):
2024-03-19T23:58:46.816315366Z - logs.html
2024-03-19T23:58:46.816322655Z - routes.html
2024-03-19T23:58:46.816328878Z - status_and_logs.html
2024-03-19T23:58:46.816335351Z - stream.html
2024-03-19T23:58:46.816341687Z -
2024-03-19T23:58:46.816348172Z - index.html
2024-03-19T23:58:46.816355037Z - editm3u.html
2024-03-19T23:58:46.816360921Z - m3us.html
2024-03-19T23:58:46.816366967Z - status.html
2024-03-19T23:58:46.816372961Z - config.html
2024-03-19T23:58:46.816378567Z - edit.html
2024-03-19T23:58:46.816384681Z
2024-03-19T23:58:46.816391035Z [GIN-debug] GET /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:58:46.816397574Z [GIN-debug] HEAD /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:58:46.816404499Z [GIN-debug] GET / --> main.run.func1 (2 handlers)
2024-03-19T23:58:46.816410517Z [GIN-debug] GET /routes --> main.run.func2 (2 handlers)
2024-03-19T23:58:46.816416699Z [GIN-debug] GET /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
2024-03-19T23:58:46.816445382Z [GIN-debug] GET /m3u/:channel --> main.run.func4 (2 handlers)
2024-03-19T23:58:46.816452058Z [GIN-debug] GET /env --> main.run.func5 (2 handlers)
2024-03-19T23:58:46.816458268Z [GIN-debug] GET /logs/text --> main.run.func6 (2 handlers)
2024-03-19T23:58:46.816464302Z [GIN-debug] GET /logs --> main.run.func7 (2 handlers)
2024-03-19T23:58:46.816470303Z [GIN-debug] GET /status/andlogs --> main.run.func8 (2 handlers)
2024-03-19T23:58:46.816476404Z [GIN-debug] GET /logs/json --> main.run.func9 (2 handlers)
2024-03-19T23:58:46.816482592Z [GIN-debug] GET /video --> main.run.func10 (2 handlers)
2024-03-19T23:58:46.816488997Z [GIN-debug] GET /status --> main.statusPageHandler (2 handlers)
2024-03-19T23:58:46.816495511Z [GIN-debug] GET /api/status --> main.apiStatusHandler (2 handlers)
2024-03-19T23:58:46.816501690Z [GIN-debug] GET /stream --> main.run.func11 (2 handlers)
2024-03-19T23:58:46.816508181Z [GIN-debug] GET /test/webhook --> main.run.func12 (2 handlers)
2024-03-19T23:58:46.816514915Z [GIN-debug] GET /test/email --> main.run.func13 (2 handlers)
2024-03-19T23:58:46.816526596Z [GIN-debug] GET /status/channelsactivity --> main.run.func14 (2 handlers)
2024-03-19T23:58:46.816533084Z [GIN-debug] GET /edit --> main.run.func15 (2 handlers)
2024-03-19T23:58:46.816539039Z [GIN-debug] POST /save --> main.run.func16 (2 handlers)
2024-03-19T23:58:46.816546673Z [GIN-debug] POST /m3usave/:file --> main.run.func17 (2 handlers)
2024-03-19T23:58:46.816553004Z [GIN-debug] GET /m3us --> main.run.func18 (2 handlers)
2024-03-19T23:58:46.816559898Z [GIN-debug] GET /editm3u/:file --> main.run.func19 (2 handlers)
2024-03-19T23:58:46.816567416Z [GIN-debug] GET /config --> main.run.func20 (2 handlers)
2024-03-19T23:58:46.816577157Z [GIN-debug] POST /configsave --> main.run.func21 (2 handlers)
2024-03-19T23:58:46.816583495Z [START] ah4c is ready
2024-03-19T23:58:46.816589634Z [GIN-debug] Listening and serving HTTP on :7654
2024-03-19T23:58:48.415344896Z
2024-03-19T23:58:48.415391025Z > ws-scrcpy@0.8.1-dev start
2024-03-19T23:58:48.415398891Z > node ./index.js
2024-03-19T23:58:48.415405782Z
2024-03-19T23:58:49.708288622Z Listening on:
2024-03-19T23:58:49.708330076Z http://ah4c-test:8000 http://localhost:8000
2024-03-19T23:58:49.708597375Z http://127.0.0.1:8000 http://172.30.0.2:8000
2024-03-20T00:00:06.975035437Z Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 42642
2024-03-20T00:00:07.019967258Z [EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 42642]
2024-03-20T00:00:07.023555334Z [EXECUTE] Stdout: ''
2024-03-20T00:00:07.023582656Z [EXECUTE] Stderr: ''
2024-03-20T00:00:07.023589856Z [EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 3.488749ms
2024-03-20T00:00:07.023596336Z [EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 42642 192.168.1.54]
2024-03-20T00:00:10.564582182Z [EXECUTE] Stdout: ''
2024-03-20T00:00:10.564624089Z [EXECUTE] Stderr: ''
2024-03-20T00:00:10.564630912Z [EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 3.541267417s
2024-03-20T00:00:39.919722188Z [IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52710: write: broken pipe
2024-03-20T00:00:39.919755951Z [IOINFO] Successfully copied 18478520 bytes
2024-03-20T00:00:39.919763709Z [IOINFO] Transfer speed: 4.493796000082043 Mbits/second
2024-03-20T00:00:39.919770689Z Performing Close() for 192.168.1.54
2024-03-20T00:00:39.919777555Z [EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 42642]
2024-03-20T00:00:41.761099478Z [EXECUTE] Stdout: ''
2024-03-20T00:00:41.761131388Z [EXECUTE] Stderr: ''
2024-03-20T00:00:41.761138472Z [EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.841744869s
2024-03-20T00:00:41.761242991Z [GIN-debug] Request: 192.168.1.20 GET /play/tuner/42642, latency: 34.786289642s, status: 200
Switched approaches, and I believe I've solved a number of problems. I'm now building using pyatv:master as a base, and since this will be a pyatv specific build, I've removed ws-scrcpy which is strictly for use with adb.
This has allowed me to build both amd64 and arm64, with reasonable container sizes, and 90 second build times instead of 30 minutes.
The container is starting and attempting to scan for AppleTVs, with no traceback errors. Looks good from what I can tell, without actually having an ATV atm.
Try bnhf/ah4c:test2.appletv again when you have a moment. Thanks.
New build looks perfect...found ATV's, tuned channel and stopped fine...then went ahead and tuned both tuners ...both played and stopped when requested...
Docker Log
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.30.0.2 ah4c-test
Scan Results
========================================
Name: Entertainment Room
Model/SW: Apple TV 4, tvOS 17.4
Address: 192.168.1.54
MAC: 08:66:98:DB:39:90
Deep Sleep: False
Identifiers:
- 371532D4-923E-4726-9D78-8B54E882E58C
- 08:66:98:DB:39:90
- 086698DB3990
:
- Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
- Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
- Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
Scan Results
========================================
Name: Home Theater
Model/SW: Apple TV 4, tvOS 17.4
Address: 192.168.1.55
MAC: D0:03:4B:1F:2C:09
Deep Sleep: False
Identifiers:
- 4C852F58-5C9D-4A8F-AAA3-86FAE2A32B65
- D0:03:4B:1F:2C:09
- D0034B1F2C09
:
- Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
- Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
- Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
Existing ./scripts/firetv/directv/prebmitune.sh found, and will be preserved
Existing ./scripts/atv/spectrum/prebmitune.sh found, and will be preserved
Existing ./scripts/firetv/directv/bmitune.sh found, and will be preserved
Existing ./scripts/atv/spectrum/bmitune.sh found, and will be preserved
Existing ./scripts/firetv/directv/stopbmitune.sh found, and will be preserved
Existing ./scripts/atv/spectrum/stopbmitune.sh found, and will be preserved
Existing directv.m3u found, and will be preserved
Existing dtvosprey.m3u found, and will be preserved
Existing dtvstream.m3u found, and will be preserved
Existing foo-fighters.m3u found, and will be preserved
Existing fubo.m3u found, and will be preserved
Existing hulu.m3u found, and will be preserved
Existing livetv.m3u found, and will be preserved
Existing npo.m3u found, and will be preserved
Existing silicondust.m3u found, and will be preserved
Existing sling.m3u found, and will be preserved
Existing spectrum.m3u found, and will be preserved
Existing youtubetv_shield.m3u found, and will be preserved
Existing youtubetv.m3u found, and will be preserved
[START] ah4c is starting
[ENV] Not loading env
[ENV] IPADDRESS 192.168.1.101:7654
[ENV] ALERT_SMTP_SERVER
[ENV] ALERT_AUTH_SERVER
[ENV] ALERT_EMAIL_FROM
[ENV] ALERT_EMAIL_PASS
[ENV] ALERT_EMAIL_TO
[ENV] ALERT_WEBHOOK_URL
[ENV] ALLOW_DEBUG_VIDEO_PREVIEW
[ENV] Creating tuner 1
[ENV] ENCODER1_URL http://192.168.1.41/live/stream3
[ENV] TUNER1_IP 192.168.1.54
[ENV] CMD1
[ENV] TEECMD1
[ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
[ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
[ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
[ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
[ENV] Creating tuner 2
[ENV] ENCODER2_URL http://192.168.1.41/live/stream4
[ENV] TUNER2_IP 192.168.1.55
[ENV] CMD2
[ENV] TEECMD2
[ENV] PRE SCRIPT ./scripts/atv/spectrum/prebmitune.sh
[ENV] START SCRIPT ./scripts/atv/spectrum/bmitune.sh
[ENV] STOP SCRIPT ./scripts/atv/spectrum/stopbmitune.sh
[ENV] REBOOT SCRIPT ./scripts/atv/spectrum/reboot.sh
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
[GIN-debug] HEAD /favicon.ico --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
[GIN-debug] Loaded HTML Templates (11):
- config.html
- edit.html
- index.html
- routes.html
- status_and_logs.html
-
- editm3u.html
- logs.html
- m3us.html
- status.html
- stream.html
[GIN-debug] GET /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
[GIN-debug] HEAD /static/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
[GIN-debug] GET / --> main.run.func1 (2 handlers)
[GIN-debug] GET /routes --> main.run.func2 (2 handlers)
[GIN-debug] GET /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
[GIN-debug] GET /m3u/:channel --> main.run.func4 (2 handlers)
[GIN-debug] GET /env --> main.run.func5 (2 handlers)
[GIN-debug] GET /logs/text --> main.run.func6 (2 handlers)
[GIN-debug] GET /logs --> main.run.func7 (2 handlers)
[GIN-debug] GET /status/andlogs --> main.run.func8 (2 handlers)
[GIN-debug] GET /logs/json --> main.run.func9 (2 handlers)
[GIN-debug] GET /video --> main.run.func10 (2 handlers)
[GIN-debug] GET /status --> main.statusPageHandler (2 handlers)
[GIN-debug] GET /api/status --> main.apiStatusHandler (2 handlers)
[GIN-debug] GET /stream --> main.run.func11 (2 handlers)
[GIN-debug] GET /test/webhook --> main.run.func12 (2 handlers)
[GIN-debug] GET /test/email --> main.run.func13 (2 handlers)
[GIN-debug] GET /status/channelsactivity --> main.run.func14 (2 handlers)
[GIN-debug] GET /edit --> main.run.func15 (2 handlers)
[GIN-debug] POST /save --> main.run.func16 (2 handlers)
[GIN-debug] POST /m3usave/:file --> main.run.func17 (2 handlers)
[GIN-debug] GET /m3us --> main.run.func18 (2 handlers)
[GIN-debug] GET /editm3u/:file --> main.run.func19 (2 handlers)
[GIN-debug] GET /config --> main.run.func20 (2 handlers)
[GIN-debug] POST /configsave --> main.run.func21 (2 handlers)
[START] ah4c is ready
[GIN-debug] Listening and serving HTTP on :7654
[GIN-debug] Loaded HTML Templates (14):
- livetv.m3u
- silicondust.m3u
-
- dtvosprey.m3u
- hulu.m3u
- youtubetv_shield.m3u
- dtvstream.m3u
- fubo.m3u
- directv.m3u
- foo-fighters.m3u
- npo.m3u
- sling.m3u
- spectrum.m3u
- youtubetv.m3u
[GIN-debug] Loaded HTML Templates (11):
- status.html
- status_and_logs.html
- edit.html
- editm3u.html
- index.html
- logs.html
- m3us.html
-
- config.html
- routes.html
- stream.html
[GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 35.895238ms, status: 200
Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 42642
[EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 42642]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 5.322115ms
[EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 42642 192.168.1.54]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 2.891814532s
[IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52976: write: broken pipe
[IOINFO] Successfully copied 9513556 bytes
[IOINFO] Transfer speed: 2.3890440428852626 Mbits/second
Performing Close() for 192.168.1.54
[EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 42642]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.368846651s
[GIN-debug] Request: 192.168.1.20 GET /play/tuner/42642, latency: 33.237336013s, status: 200
Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 58515
[EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 58515]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 5.063092ms
[EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 58515 192.168.1.54]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 2.769673083s
Tuner 0 is active - skipping
Attempting network tune for device http://192.168.1.41/live/stream4 192.168.1.55 59337
[EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.55 59337]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 5.183264ms
[EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 59337 192.168.1.55]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 2.651689713s
[IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52984: write: broken pipe
[IOINFO] Successfully copied 8023840 bytes
[IOINFO] Transfer speed: 2.8400081022456165 Mbits/second
Performing Close() for 192.168.1.55
[EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.55 59337]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.442030755s
[GIN-debug] Request: 192.168.1.20 GET /play/tuner/59337, latency: 24.056164233s, status: 200
[IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52982: write: broken pipe
[IOINFO] Successfully copied 34793536 bytes
[IOINFO] Transfer speed: 5.268985117277173 Mbits/second
Performing Close() for 192.168.1.54
[EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 58515]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.352648327s
[GIN-debug] Request: 192.168.1.20 GET /play/tuner/58515, latency: 54.191713534s, status: 200
Not sure what is possible but was thinking about the ATV pairings...would your web portal be able to have a button for each tuner for pairing...when it is pressed it would display the hdmi stream for that ATV and provide an input for the code that would be displayed?
If I remember right we only really need to pair companion protocol...but I could confirm this.
I'm thinking about something simpler -- basically a script that would run atvremote wizard in the pyatv:master container, but from the host's command line using "host" networking so discovery works. It would look something like this:
Looking for devices...
Found the following devices:
Name Model Address
-- ------------------------ ----------------------- -----------
1 Receiver+ airupnp 10.0.10.200
2 Receiver RX-V773 10.0.10.82
3 Pierre's AirPort Express AirPort Express (gen 2) 10.0.10.168
4 FakeATV Unknown 10.0.10.254
5 Vardagsrum Apple TV 4K 10.0.10.81
6 Apple TV Apple TV 3 10.0.10.83
Enter index of device to set up (q to quit): 4
Starting to set up FakeATV
Starting to pair Protocol.MRP
Enter PIN on screen: 1111
Successfully paired Protocol.MRP, moving on...
Pairing finished, trying to connect and get some metadata...
Currently playing:
Media type: Music
Device state: Playing
Title: Never Gonna Give You Up
Artist: Rick Astley
Position: 1/213s (0.0%)
Repeat: Off
Shuffle: Off
Device is now set up!
And when complete, would place the .pyatv.conf file in our desired location. One would use whatever preview support was built-in to their HDMI Encoder to see the code:
You'll be prompted to enter the pairing code that will display on the AppleTV's output device. Most encoders have the ability to monitor the captured video in order to view the code -- or you can use VLC.
If you've previously paired AppleTVs, the .pyatv.conf file that contains those credentials will be moved temporarily from persistent storage, to the standard location. After a new device is added, the updated or newly created file will be moved back to the persistent location.
Outstanding. Though a bit of a battle at times, I'm happy with the end result here. Any reason to keep the two test builds around? If not, I'll nuke them later today.