Want to keep elderly parents company virtually during the pandemic? – How to create a FaceTime Portal between iPads

When the Coronavirus Pandemic hit and I started working from home, I started worrying about my elderly parents who could no longer babysit my niece and nephew on a regular basis, go to church, go to restaurants, meet with friends, etc..  They were getting lonely and were starting to feel the strain of their new-found isolation.  Since I had recently bought them a Wyze cam for Christmas and had one of my own, and had previously shared those feeds to help me monitor their security feed, I hacked together a sub-standard and annoying “portal” using the cameras and our respective iPads.  Theirs was in their family room and I set mine up in my office. For most of the year, I kept them company during the work day and it did wonders for their ability to cope with this new world.

The solution had all sorts of problems though. There was a significant audio delay, the connection would go down from time to time, the Wyze interface was difficult for my parents to use, I had to wear headphones to prevent echo feedback (since Wyze has no echo cancellation), and it seemed that the connection would get choppy whenever they pulled out their phones (seemed like an interference issue).  I’d bought them a WiFi Extender , but it didn’t seem to help.  During a particularly choppy conversation recently, I started googling for alternate solutions and I happened upon a github project called teleportme by PaperCutSoftware, which was a simple scheduled shell script on a pair of Mac Minis running FaceTime to establish a portal between 2 coastal offices above each office’s water coolers.  They were scheduled to establish a FaceTime call every morning and hang up after work.  I wouldn’t have thought of using FaceTime running for hours a day, but apparently it was possible and reliable – and you don’t need a cell provider account to use it, so I set out to see if I could do this using a pair of iPads.  Using tips from their setup, this is how I figured out how to do it. Continue reading

How to Extract All Your Custom IR Hex Codes from a Broadlink RM Mini 3 for Homebridge

The homebridge-broadlink-rm plugin for homebridge allows you to automate your devices which have an IR (infrared) remote by emitting those button codes from a Broadlink RM Mini3. You can add individual “buttons” that exist in the RM Mini’s iPhone app (e-Control), by adding the button’s hex code to homebridge’s configuration file (~/.homebridge/config.json).

The homebridge plugin provides a way to obtain these codes, one-at-a-time, by using the “Learn” button it adds to your Home app. You tap the Learn button, then point your remote at the RM Mini3 and hit the button you want to be able to control. The hex code can then be retrieved from the homebridge log file.

However, if you have numerous remotes with numerous buttons already programmed into the RM Mini3, and some remotes in a drawer, some without batteries, this can be a quite long and tedious process. I personally had 238 individual codes programmed into my RM Mini3 and some of my remotes took coin batteries that were dead and I had no replacements on hand. So I wanted a way to grab all of the codes at once without having to manually re-record all of the button presses. I worked out the process to do this last night, and googling this stuff was rather laborious, so I am posting what I learned here.

Here is my setup:

  1. Broadlink RM Mini3
  2. MacBook running Catalina 10.15.6
  3. iPhone running iOS 13.6
  4. Homebridge running on a Raspberry Pi B3

I will not be reviewing how to get homebridge or the Broadlink plugin working.

  1. Download and install iExplorer on your Mac
  2. Connect your iPhone to your Mac using a USB/Lightning cable
  3. Click the iPhone in a Finder window’s left pane (Note: iPhone Synching has moved from the old iTunes app to the Finder)
  4. Click “Trust” on the Finder window to trust your iPhone
  5. Unlock your iPhone and tap “Trust” when the dialog appears prompting you to trust your computer
  6. Launch iExplorer (Click the “Demo” mode button). It may take some time for the app to process the data on your phone.
  7. Click “Backup” and then “Backup Explorer” in the left pane
  8. Expand the “Apps” selection
  9. Drag the folder named “cn.com.broadlink.e-Control” to a location in the Finder (e.g. your desktop)
  10. Download, install, and launch an app called DB Browser for SQLite
  11. In the “cn.com.broadlink.e-Control” folder you saved on your computer, locate and drag the e-Control database file “cn.com.broadlink.e-Control/Documents/BroadLinkDeviceList.sqlite” onto the DB Browser for SQLite app
  12. Click the “Execute SQL” tab
  13. In the top left text area, paste the following SQL query (without the quotes): “select s.name, b.name, c.buttonID, c.codeID, hex(c.code) from broadlink_subir as s left join broadlink_button as b using(subirID) left join broadlink_code as c using(buttonID)
  14. Click in the resulting table in the pane below and copy its contents (e.g. command-a to select all and command-c to copy)
  15. Paste the results into a text file (e.g. using Text Edit.app) or excel document
  16. Use the hex codes in the last column to add accessories to your homebridge config file. (The columns are Remote name, Button Name, Button ID, Code ID, and Hex Code. Note, if you created any combo buttons that send a series of codes, there will be repeated hex codes and Button IDs.)

Here’s an example of what you will get:

TV Power 171 177 26003C00211A3E1A20000B97201A211A3E1A201A211A201A211A201A2037201A3F1A20000B962119211A3E1A211A201A201A211A201A2136211A3E1A20000D05000000000000000000000000
TV Source 172 178 26004E00211A3E1A211A201A211A201A2037201A211A3E1A211A20000B96211A3E1A201A211A201A211A2036211A201A3F1A201A20000B97201A3F19211A201A211A201A2037201A211A3E1A211A20000D0500000000000000000000

And here’s an example of an accessory entry in the config.json file:

            {
                "name":"TV",
                "type":"outlet",
                "data":{
                    "on":"26004e002119211a3e1a211a201a2119211a201a2136211a3e1a21000b96201a211a3e1a201a211a201a211a201a213621193f1a20000b96201a211a3e1a201a211a201a211a201a2136201a3f1a20000d0500000000000000000000",
                    "off":"26004e002119211a3e1a211a201a2119211a201a2136211a3e1a21000b96201a211a3e1a201a211a201a211a201a213621193f1a20000b96201a211a3e1a201a211a201a211a201a2136201a3f1a20000d0500000000000000000000"
                }
            },

You will have to restart homebridge after adding accessories so that the new controls show up in your Home app on your iPhone.

How to get an iPhone 11 or SE (2nd gen) to connect calls through an Airave 2.5 – and why you shouldn’t bother

My wife and I each got new iPhones recently (exactly a month ago today). We had some difficulty getting our phones to make calls initially, but that’s another story, as is the story of the erroneous double charge for the Sprint upgrade/activation (both Apple and Sprint charged for the same activation and I’d been signed up without consent for the Sprint Complete protection plan!). I think in the past month, we’ve spent nearly 10 hours combined speaking to Sprint reps for all the issues, possibly more (and there’s probably a call yet to be had to address an incomplete refund for those erroneous charges).

But I digress, so let me jump straight into the how-to to reconnect your iPhone to the Airave 2.5… Continue reading

How to Create Real Recurring Location-based iOS Reminders (after iOS 13)

In How to Create Real Recurring Location-based iOS Reminders, I described a method using IFTTT to mark location-based reminders as incomplete.  Shortly after that post, I upgraded my iPhone to iOS 13 and quickly discovered that the update broke then IFTTT iOS Reminders service.  All triggers and actions in the service no longer worked as expected (or at all), including IFTTT’s Reminder Completed in List trigger.  So I was back to dismissing my recurring location-based reminders without marking them as complete.  And on top of that, despite the additional functionality of the new Reminders app, I started encountering all sorts of issues, including the fact that Reminders in Notification Center started randomly turning itself off.  While I haven’t found a solution to that and other new Reminders issues, I did come up with a solution to replace IFTTT’s broken Reminder Completed in List trigger.  Read on to discover how… Continue reading

Free land line white-list & call-screening without porting your number to google voice

My parents are getting up there in age and awhile back, I was dismayed when my dad asked me if a message from “Apple” on his answering machine about his iCloud account being hacked was real (he thought it was!).

I’d been suggesting for awhile that he port his number to google voice so he could stop paying for land line service.  I’d looked up how to go about doing it.  But I’d been second guessing that option after reading some horror stories about people losing their life-long phone numbers.  Plus, I wasn’t too thrilled about google listening in on all their calls.

I had set up Nomorobo for them some time ago, and it was effective for awhile, but the telemarketing industry and scammers started spoofing random local numbers.  So they were getting multiple scam calls a day and I worried about them falling for a phishing scam, or worse.  Their neighbor had fallen victim to a scam where a caller pretended to be their grandson and needed bail money asap.  She ended up being scammed out of $10k.

I had looked through all the services from my parents’ landline provider for blocking callers, etc, but the options were very limited, even though they had a VOIP service through their cable company.  There was no way to implement a white list (a list of known callers that are allowed to call you), nor was there a way to implement call screening other than caller ID.

But I recently had an inspiration based on the way nomorobo is set up.  I could do both – whitelist all my parents known callers and send the rest through call screening using google voice, without porting their number and without (the majority of) their calls being listened in on by google!  Read on to find out how… Continue reading

How to Create Real Recurring Location-based iOS Reminders

Inexplicably, iOS Reminders do not have a repeat option underneath their “Remind me at a location” setting when creating a reminder, or a “Remind me next time” (…I arrive here) selection when you hard-press a reminder notification.  The only way to hackily get repeated location-based reminders is to never mark them as completed.  The problem with that way of dealing with location-based reminders is that 1. they eventually disappear from your notifications and 2. you cannot tell whether you’ve actually completed the reminded task or it is still yet to be done.

I have figured out a way to create recurring location-based reminders using:

  1. iCloud synchronized Reminders
  2. IFTTT
  3. Dropbox
  4. Folder action on an always-on computer

Read on to learn how… Continue reading

Hey Siri, when is the next bus home?

I just put the finishing touches on my bus shortcuts on my iPhone.  It always bugged me that I couldn’t ask Siri “When’s the next bus to work?” or “When’s the next bus home?”.  NJ Transit has a web interface called My Bus Now and I always have it up on a first gen iPad in the bathroom in the morning, but frequently, as I’m rushing around to make it to the bus, I want to do a quick time check to see how far away the bus is.  My hands aren’t always free or I don’t want to stop running around, unlock the phone, navigate my home screen, tap my homescreen shortcut, put my glasses on, wait for the page to load, and look at the screen to make sure it’s the right bus route (which I frequently miss and sit there at the stop kicking myself for not noticing the next bus was for a different route number).  It’s much faster, accurate, and more efficient to just say “He Siri, when’s the next bus to work?”, with all those details taken care of for me.  With Siri Shortcuts in iOS 12, this is now possible.

Continue reading

Temporary fix for an iPhone that cannot access .local addresses

And here’s the answer:

  • Turn airplane mode on, then off

The fastest way to do this is to swipe up from the bottom of the screen to access the control center, then tap the airplane icon:

IMG_2344EC134209-1.jpeg

Wait for the other icons to darken, as the phone turns off wifi, bluetooth, and cellular signals, then tap the airplane to turn those back on again.  After doing this, you should be able to load anything on your local network using its .local address (as long as it’s configured correctly on the remote device).

This is a temporary solution.  Access to .local addresses will stop again at some point and you will have to repeat this work-around to regain access.

Here’s the cause and why this solution works:

At some point, an iOS update seems to have caused this issue.  The problem is Apple’s usage of .local addresses for its bonjour services (which allows devices to advertise their services, such as printing an airplay).  Bonjour does not play nicely with other services which use .local.  Bonjour is somehow interrupting the DNS resolution of these addresses.  It intercepts the communication of for example, your browser and the device providing the service and the presenting symptom (at least in my case) is a browser timeout.  The browser claims that the website simply stopped responding.  Each device has its own strategy to try and resolve domain names.  On a mac, that can be configured using the /etc/hosts file, but on an iPhone, the user doesn’t have a way of editing that equivalent setting.  What’s more is, the iPhone caches these shortcuts, and it’s that cache that is the problem.  Turning on airplane mode flushes that cache and allows your services you’ve manually set up on your network’s devices to get through.  However at some point, bonjour is going to come along and cause that cache to be reinitialized and cause the issue to recur.  This is why this is not a permanent solution.

What is a .local address?

Dot local addresses are memorable shortcuts to access other devices on your local network. It’s like your own personal dot com. All major OS’s support them: macOS, Windows, Linux, even RaspberryPi. You can use it for screen sharing, file access, web pages, ssh, etc..  If you’re running a web server on a computer in your home, you can access it from a web browser on another device by going to it’s .local address in a web browser, e.g. mymac.local.

I use my .local domains from my iPhone to do a number of things when I’m at home on my local network: screen sharing via the VNC app, ssh via the Terminus app, watching live TV via the iPhone’s Safari browser that accesses my EyeTV media server, and some websites I created for fun.  I usually add bookmarks to local web URLs to my home screen for easy access.

How do I find/edit my computer’s .local domain name?

Each mac on your network has a .local address based on your computer’s name. You can find it in the Sharing pane of the System Preferences app. At the top of the pane, there’s a entry field for your computer’s name and underneath that is some descriptive text. You can enter any name you want, but not all characters on your keyboard are allowed to be used in a domain name. macOS thus removes some characters, such as apostrophes, and replaces other characters (such as spaces) with dashes.

I tried using the .local address after this fix, but it doesn’t work.

macOS doesn’t activate a .local address by default. You must share the service you want to use in the Sharing pane of the System Preferences app. The section under the computer name has a panel with checkboxes where you can turn on or off certain services.  As long as one is turned on, the .local address is active.  However, the only devices that can access it are ones that are on the same network.  If you’re trying to access it from an iPhone, for example, make sure that you are connected to the same WiFi network as the computer you’re trying to reach.  If all else fails, you can use the computer’s local IP address (assigned by DHCP).  You can find that address in the Network pane of the System Preferences app.  If that works, and you’ve tried turning airplane mode on & off on your iPhone, then the .local should work. If that doesn’t work, let me know in the comments.

Other things I tried.

I first encountered this issue when I was trying to access my EyeTV media server.  I have used this server for over a decade, but about 4 or 5 years ago, I moved and no longer was receiving a good broadcast TV signal.  I recently bought a new outdoor directional antenna however, and now had stuff to watch.  So I opened up the old bookmark I used to reliably use on my iPhone for years that used the .local address of the computer with the EyeTV media server.  It wouldn’t work!  I discovered that if I went to the computer’s DHCP address, it did work.  I could have just changed the bookmark, but it irks me when stuff that should work, doesn’t, so I called Apple.

Apple Support had me “Reset All Settings” because they could not explain why it didn’t work.  (I’ll be submitting a bug report after this post.)  It worked!  It was a heavy-handed solution and I spent a week returning my phone to its normal behavior.  Then the next day I tried to access the server, the problem was back!

Googling this was not much help.  There are many solutions out there that suggest things like turning your phone off/on, clearing your browser cache, turning sharing preferences off and back on, etc..  None of them worked.  Every once in awhile, I randomly noticed that the .local addresses started working, but shortly there-after would stop working again.  And I didn’t want to have to reset all settings every time this happened.  Finally, after reading about the /etc/hosts file and mDNSresponder, I started googling things like “reset iphone dns”, which lead me to a solution for another problem that involved cycling the airplane mode setting and to my delight, it worked.

I’ll probably use the DHCP-assigned IP address for bookmarks in the future, but I finally know enough about what’s going on to be satisfied.  I hate it when things don’t work.

How to Create an “Open file” Calendar Alert in a Recurring Event that Sticks

I recently wrote an Automator workflow that asks me if I want to check the arrival of the next bus and opens the local transit system’s bus stop arrival web page that shows the live time the next bus is expected to arrive at the stop I saved in the workflow.  I then created a recurring calendar event in the Calendar app that opens the Automator application I’d saved.  (I could have created a cron job, but I like the ability to easily adjust the alert time if I need to leave work early.)

The alert is a custom alert, which I selected to occur “at the event time” and “Open file…”, for which I selected my bus Automator app.  I quickly noticed that at some point in the week, the alerts on all my recurring events change to a default of a simple notification with a sound occurring the day before.  The first time I missed the bus, I discovered the problem and edited the event to fix it.  But it kept happening, and happening.

TL;DR: The procedure is at the bottom of this article. Continue reading

How to Upload a 4,000 Photo iCloud Photo Library into a 40,000 Photo macOS Photos Library to Free Up iCloud Drive Space

Today I discovered that I didn’t have enough iCloud storage space for a file I wanted to share.  In the past (apparently since sometime in 2015), I was able to find space here and there, but today, it appeared, I was out of options.  Actually, I don’t really use iCloud for much, storage-wise.  I upgraded my iCloud storage to the 50G plan, mainly just for backups for apps, email, and a few documents, but with all that extra space (coming from the free 5G plan), I had decided to turn on backups on my other iOS devices and… to turn on the iCloud Photo Library on my phone.  I didn’t really understand how it worked.  Apple always seems to be changing its photo synching services.  I had imagined it would be awfully nice if I didn’t have to physically connect my phone to my computer to upload my latest photos, because up until I activated the iCloud Photo Library, I would occasionally sync and select to remove photos from my phone after import.  So through some wishful thinking, my synching sessions got fewer and fewer and I noticed that it never seemed to free up much space.

Somewhere along the line, iPhoto gave way to the Photos app on macOS, and the “remove after import” checkbox went away and I figured they must have figured it out the way I’d previously imagined.  After each import, the photos would no longer be detected on the phone from the photos app, so I just hoped they were getting transferred.  I was confused that I still seemed to have photos on my phone – lots of them, but I still had space, so I just hoped everything was being magically handled.  Besides, I had other things to worry about, so I chose to ignore the problem and just hope that things were somehow magically and wirelessly getting to my computer.  I willfully put out of my mind and didn’t think about the fact that I had intentionally not turned on the iCloud Photo Library on my computer, because I knew I had 10 times as many photos there as I had on my phone.

Today however, I finally tallied the photos on iCloud, and it was over 20 gigs!  I tried synching my phone again.  I couldn’t tell where all the photos on my phone were being stored.  Why could I transfer some, and they would disappear, yet I had seemingly 3 years of photos on my phone.  Were the photos in the iCloud Photo Library also getting onto my computer?  It looked like some were in both places, but were they all?  I searched for a way to limit the space that photos would take up in iCloud.  I googled to find out whether I could safely delete photos from my phone(/iCloud?) and I got mixed messages.

The thing is, it’s not transparent where a particular photo is stored when I’m in the photos app and there’s no way to let my computer handle it the way it had in the past.  So I decided to recruit some help and called Apple.  I eventually got elevated to a Photos app expert (Jacob), and he explained things very well.  Here’s how I understood it:

  1. All the photos on my phone were being saved on iCloud, and only in iCloud.
  2. I had enabled “Optimize iPhone Storage” in the Photos Settings, which means that I only had compressed/smaller versions of the photos actually on my phone.  The full versions were in iCloud.
  3. When I synched my phone with my computer, I was only getting recent photos that hadn’t uploaded to iCloud yet.
  4. Those transferred photos weren’t removed from the phone, so they also ended up on iCloud (but anything that had uploaded to iCloud since the last time I synched, never made it onto my computer).
  5. The macOS Photos app does not synch the compressed/small versions of photos on my phone that were reduced after uploading to iCloud.

So I was faced with an issue.  Normally, one would just turn on the iCloud Photo Library on the computer and it would download all the high res photos, but doing that would be a 2-way synch and I had 10 times the amount of photos on my computer.  There wasn’t enough space in my iCloud drive to synch everything.  I could have bought more iCloud drive space, but I already have the photos on my laptop backed up on a NAS drive, so I’d prefer to just transfer the iCloud Photo Library to the computer.  So here’s how we did it…

  1. Quit the macOS Photos app.
  2. Start up the macOS Photos app while holding down the option key.
  3. Select to create a new photos library and name it something like “iCloud Photos”.
  4. Open System Preferences -> iCloud.
  5. Turn on Photos and click the options button.
  6. Turn on the iCloud Photo Library.
  7. In macOS Photos, click “Photos” at the top left.
  8. Scroll to the bottom and wait for the downloading message to change to “Updated Just Now”.
  9. Select all the photos and choose Export -> Export Unmodified Original…
  10. Save the photos in a new folder on the desktop.
  11. Quit macOS Photos.
  12. In System Preferences, turn off the iCloud Photo Library.
  13. Start up the macOS Photos app while holding down the option key.
  14. Select the original Photos Library.
  15. Select File -> Import…
  16. Select the folder you created on the desktop and click “Review for Import”.
  17. Wait for all the photos to be detected then select them and click “Import All New Items”.
  18. When the import is done, delete the folder you created on the desktop and the iCloud Photos Library that Photos created in your “Pictures” folder.
  19. [Proceed if you wish to remove the photos from iCloud, and thus your other devices…] Open System Preferences -> iCloud, then…
  20. Click the “manage” button at the bottom right.
  21. Click Photos, then click “Disable and Delete”

I never would have figured this out on my own and I imagine that many of you are just as bewildered as me, that is unless you started taking pictures after the iCloud Photos Library was created.

A couple things to note: 1. Photos you take in other apps (such as in the Messages app, whether they were taken and sent or received) are not in the iCloud Photos Library.  2. The macOS Photos app no longer detects duplicates, so importing photos that you previously synched (before they were uploaded to iCloud) may result in multiple duplicates.  There are apps available on the App Store for detecting and removing duplicates.