Scheduling VLC Recordings from an HDHomeRun Connect Duo

I received an HDHomeRunConnect Duo for Christmas and have been playing around with it. I'm gradually transitioning from an (over a decade old, but still working) EyeTV Hybrid (connected to a ~5 year old Mac Mini that I keep at Mojave in order to run the free 32 bit EyeTV3 software).

Some Background

Ever since upgrading the OS on that Mac Mini to Mojave, the EyeTV3 software has been unstable. Occasional freezes/crashes and the recordings tend to have gaps that I suspect are due to the CPU struggling to keep up with the newer OS. I considered buying the EyeTV4 software put out by the Chinese company (Geniatech) that bought the rights to it from the original German Elgato company that developed it. But the reviews on that software have been horrible and their free download does not offer a trial period (which I found suspect/telling). User reviews also mentioned that they were unable to get refunds when they couldn't get the software to perform well. I still love the fully featured EyeTV3 software, but it's just no longer sustainable and it's time to transition.

I considered various options, including SiliconDust's other devices that can record (e.g. their scribe series that have an on-board hard disk). But given the middling reviews of the Silicon Dust software (but great reviews of the device), and the device's simple streaming functionality, I felt (rightfully) confident that I'de be able to figure out a way to do my own recordings on my new Mac Mini (which I sat down and worked out today using VLC).

I also am considering a lifetime PLEX Pass, especially since it can cast to a chromecast, but recording with it has some annoying drawbacks. I also played around with Kodi. Both to me, seem like overkill, honestly, for what I want. I haven't looked into MythTV yet, but I did give it a brief unsuccessful try.

I have various issues that I have yet to work out with the Connect Duo, which I will eventually focus on (like not being able to tune into stations that my EyeTV can get), but for now, my goal is to be able to schedule some simple recordings easily using VLC.

For over a decade, I've been quite happy scheduling EyeTV recordings via a single click via titantv.com (a free and extensive Electronic Programming Guide (e.g. "TV Guide") with lots of features, albeit an eye-sore of an interface). Whenever I find a show I want to record (from anywhere in the world), I just click the record button in the guide, and my EyeTV software, in its next ping of my titantv.com account, will schedule the recording. I've looked into how this is done. Though there's not technically an answer to how exactly to set up recordings like EyeTV does/did with titantv, I did stumble upon the vestiges of an API which should allow someone to ping titantv to find recordings to schedule. So...

The Components (the beginnings of my idea...)

  1. titantv.com's EPG API: DataService Web Service
  2. VLC
  3. HDHomeRun Connect Duo
  4. Node-RED

Today, I worked out how to record shows streaming from my HDHomeRun Connect Duo using VLC. Given it's a Duo, I can record up to 2 shows at the same time. Here's an example of how I can do that on my Mac Mini:

/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit --sout "file/ts:<outfile_name>.ts" -I dummy "http://<hdhomerun_ip_address>:5004/auto/v<channel_number>?duration=<duration_seconds>" &
/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit --sout "file/ts:<outfile_name>.ts" -I dummy "http://<hdhomerun_ip_address>:5004/auto/v<channel_number>?duration=<duration_seconds>" &

Note that, while VLC has options for arbitrary recording durations, I opted to use HDHomeRun's duration feature, to cleanly end out its streaming.

The only thing left to do is... connect the components.

The Plan

So I got to thinking that I could create a node (or a couple nodes) that:

  1. A node to maintain a recording schedule using titantv.com. It would occasionally ping my titantv.com account and check for new recordings I've scheduled in my account, and output the recording details at the appointed time (channel, duration, show info to use for the file name like: name, episode, etc). It can also have a setting to pad the show's start/stop times, like EyeTV does.
  2. A node that wraps an HDHomeRun configuration (or multiple) and takes the recording info and constructs the stream URL. It could error if too many recordings overlap one another.
  3. A node that wraps the VLC executable and constructs and executes the command.

Before I launch my little project, I plan to set up some simple cron jobs to record my shows. Currently, I have my attic antenna going through a splitter to both my EyeTV Hybrid and my SiliconDust HDHomeRun Connect Duo.

I searched the available node-red nodes for anything that already does any of these things, but I didn't find anything. I was just wondering what anyone thinks about this idea, or if anyone can think of any improvements to the overall design.

Rob

I just did a proof-of-concept flow for the concurrent recordings. Both Meet the Press and Face the Nation are on at 10:30am on Sundays on different channels. Here's a simple cronjob flow that uses VLC to record them both at the same time:

[{"id":"90428392.bc06a","type":"tab","label":"DVR","disabled":false,"info":""},{"id":"95b5ba7a.755dc","type":"cron","z":"90428392.bc06a","name":"Sun 10:30","crontab":"0 28 10 * * SUN","x":120,"y":180,"wires":[["452d59f5.077b7","c92abc3b.092d48","877f1604.000b3","88a02b1a.6a45e"]]},{"id":"452d59f5.077b7","type":"exec","z":"90428392.bc06a","command":"/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit --sout \"file/ts:/Users/USERNAME/Movies/DVR/meet_the_press/meet_the_press_v10.1_","addpay":true,"append":".ts\" -I dummy \"http://hdhomerun.ip:port/auto/v10.1?duration=3840","useSpawn":"false","timer":"4020","oldrc":false,"name":"Record MTP with VLC on channel 10.1","x":390,"y":160,"wires":[["c0d4ec31.66b56"],["c0d4ec31.66b56"],["c0d4ec31.66b56"]]},{"id":"bfc02e18.af95d","type":"inject","z":"90428392.bc06a","name":"5 Second Test","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":80,"wires":[["c92abc3b.092d48","d3c028ba.67081","88a02b1a.6a45e"]]},{"id":"c0d4ec31.66b56","type":"debug","z":"90428392.bc06a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":160,"wires":[]},{"id":"fc8bb07d.29f6a8","type":"http request","z":"90428392.bc06a","name":"Notify","method":"POST","ret":"txt","paytoqs":"body","url":"http://raspberrypi.local:1880/notify","tls":"","persist":false,"proxy":"","authType":"","x":670,"y":200,"wires":[[]]},{"id":"c92abc3b.092d48","type":"template","z":"90428392.bc06a","name":"MTP Recording Started","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\"msg\": \"Meet the Press Recording Started at {{payload}}\"}","output":"json","x":350,"y":200,"wires":[["fc8bb07d.29f6a8"]]},{"id":"d3c028ba.67081","type":"exec","z":"90428392.bc06a","command":"/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit --sout \"file/ts:/Users/USERNAME/Movies/DVR/meet_the_press/meet_the_press_v10.1_","addpay":true,"append":".ts\" -I dummy \"http://hdhomerun.ip:port/auto/v10.1?duration=5\"","useSpawn":"false","timer":"15","oldrc":false,"name":"5 Second Recording Test 10.1","x":370,"y":80,"wires":[["c0d4ec31.66b56"],["c0d4ec31.66b56"],["c0d4ec31.66b56"]]},{"id":"877f1604.000b3","type":"exec","z":"90428392.bc06a","command":"/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit --sout \"file/ts:/Users/USERNAME/Movies/DVR/face_the_nation/FTN_v3.1_","addpay":true,"append":".ts\" -I dummy \"http://hdhomerun.ip:port/auto/v3.1?duration=3840","useSpawn":"false","timer":"4020","oldrc":false,"name":"Record FTN with VLC on channel 3.1","x":390,"y":260,"wires":[["c0d4ec31.66b56"],["c0d4ec31.66b56"],["c0d4ec31.66b56"]]},{"id":"88a02b1a.6a45e","type":"template","z":"90428392.bc06a","name":"FTN Recording Started","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\"msg\": \"Face The Nation Recording Started at {{payload}}\"}","output":"json","x":350,"y":300,"wires":[["fc8bb07d.29f6a8"]]}]

I redacted my user home directory name and my HDHomeRun's DHCP/port.

Just an update. I started looking through the DTD at:

http://data.titantv.com/dataservice.asmx?WSDL

And I saw that scheduled recordings have an element named ScheduleRecord, but there don't appear to be any operations that return that data. Everything appears to be just for generic data retrieval, like listings, provider, show, and lineup data.

According to a 2013 article I read, there's a second API for obtaining recording schedule entries. I couldn't find any link to that anywhere, so I sent a request for info from TitanTV.

Ah! I found it!

http://www.titantv.com/Services/PartnerTools.asmx

I looked a little further into this this morning and I believe I will change directions. The scheduled recordings interface is walled up to participating "partners", however it's totally doable to write a script that can handle the .tvvi downloads from the titantv.com interface, and pass the data on to Node-RED. You can then assign that script as the app to handle .tvvi extensions. All the necessary data is there in that .tvvi file and the script can just make a webhook call to node-red to pass it on and schedule the recording.

There are 2 different "record" buttons on titantv.com listings. One is for when you're on the local machine, which triggers a .tvvi file download and the other is for remotely scheduling recordings. It's the local record button that I think I can take advantage of to trigger the script to parse the data and execute a POST to send it to Node-RED.