Yesterday I noticed the nice cover art display on the lock screen of my upgraded iPhone. Today while working out I noticed it was working differently, much closer to the old style.
I couldn’t think of what might have caused the change. I scrolled up and there were some older notifications. I deleted all of them, but still no change. Then it occurred to me to tap the thumbnail of the cover art.
I have no idea why it was defaulting to the thumbnail today after defaulting to full screen yesterday.
I have several Raspberry Pi around my apartment in various states of development projects running different versions of Raspian. I’ve been playing with GPSD recently and want the services to be transparently available on each Pi without having to connect directly via a USB port. It turns out that making it work is easy, but obscure.
On my machine that has the GPS plugged into the USB port I need to change the /lib/systemd/system/gpsd.socket file to allow the socket to be visible on the network. On my Raspian Buster machine, it originally looked like this
I was able to test that it was working properly by running the command gpsmon WimPi4:2497 on the remote host. WimPi4 is the hostname of my machine with the GPS installed.
On the machines I wanted access to the GPS, I modified the file /etc/default/gpsd by adding an entry in the DEVICES section to make the file below.
# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
# Other options you want to pass to gpsd
# Automatically hot add/remove USB GPS devices via gpsdctl
With the changes to the gpsd configuration I was able to run cgps or gpsmon on the client machines without requiring an argument. The client programs are connecting the local daemon, which is then connecting to the machine with the gps receiver running gpsd.
USB HUB input D+/D- pogo pin: for Raspberry Pi Zero/Zero W MicroUSB connector: for other Raspberry Pi boards or PC
Pogo pin power supply 5V: connects to 5V pin of Zero/Zero W, up to 2A current GND: connects to GND pin of Zero/Zero W
USB extended ports USB1~USB2: USB-A connectors USB3: solder pad
SIM card slot supports 1.8V/3V SIM card
3.5mm earphone/mic jack
MAIN antenna connector
AUX auxiliary antenna connector
GNSS antenna connector
Network status indicator
I’m using Google Fi Unlimited Plus as my network on my phone right now, and one of its features is the ability to have multiple data only devices using part of your data allocation. That makes experimentation with a device like this fairly easy as I was able to order a data sim from Google and put it in the device and it just worked.
I’d never heard of pogo pins before. These are spring loaded contacts that line up with pads on the Raspberry Pi Zero to make electrical contact. They worked the first time I screwed everything together, but when I took it apart and put it back together a second time the board wasn’t recognized. I removed power, pushed down the pins with some tweezers, restored power, and the board was recognized again.
wim@WimPiZeroWCamera:~ $ lsusb
Bus 001 Device 003: ID 1e0e:9001 Qualcomm / Option
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wim@WimPiZeroWCamera:~ $ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 1, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 3, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 4, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 1: Dev 3, If 5, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
wim@WimPiZeroWCamera:~ $ sudo apt install libqmi-utils udhcpc ifmetric
I went through the test commands from Jeff Geerling’s post related to QMI Mode setup, then created a config file for my wwan0 interface:
iface wwan0 inet manual
pre-up ifconfig wwan0 down
pre-up echo Y > /sys/class/net/wwan0/qmi/raw_ip
pre-up for _ in $(seq 1 10); do /usr/bin/test -c /dev/cdc-wdm0 && break; /bin/sleep 1; done
pre-up for _ in $(seq 1 10); do /usr/bin/qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength && break; /bin/sleep 1; done
pre-up sudo qmicli -p -d /dev/cdc-wdm0 --device-open-net='net-raw-ip|net-no-qos-header' --wds-start-network="apn='h2g2',ip-type=4" --client-no-release-cid
pre-up udhcpc -i wwan0
pre-up /usr/sbin/ifmetric wwan0 400
post-down /usr/bin/qmi-network /dev/cdc-wdm0 stop
You can see in the image above that my Wi-Fi network is running IPv6 and the default ping uses that interface, while specifying the wwan0 interface causes the traffic to travel a different path.
wim@WimPiZeroWCamera:~ $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:7c:6a:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.53/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
valid_lft 10482sec preferred_lft 9132sec
inet6 2604:4080:1304:8010:8a38:1e12:3b21:5443/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 24sec preferred_lft 14sec
inet6 fe80::ea0d:3fe8:b6c4:da64/64 scope link
valid_lft forever preferred_lft forever
3: wwan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
inet 18.104.22.168/26 scope global wwan0
valid_lft forever preferred_lft forever
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-signal-info
sudo qmi-network /dev/cdc-wdm0 status
sudo qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status[/dev/cdc-wdm0] Successfully got signal info
RSSI: '-74 dBm'
RSRQ: '-12 dB'
RSRP: '-102 dBm'
SNR: '4.4 dB'
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength
[/dev/cdc-wdm0] Successfully got signal strength
Network 'lte': '-74 dBm'
Network 'lte': '-74 dBm'
Network 'lte': '-2.5 dBm'
IO: '-106 dBm'
SINR (8): '9.0 dB'
Network 'lte': '-12 dB'
Network 'lte': '4.4 dB'
Network 'lte': '-102 dBm'
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-home-network
[/dev/cdc-wdm0] Successfully got home network:
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --nas-get-serving-system
[/dev/cdc-wdm0] Successfully got serving system:
Registration state: 'registered'
Selected network: '3gpp'
Radio interfaces: '1'
Roaming status: 'off'
Data service capabilities: '1'
Roaming indicators: '1'
: 'off' (lte)
3GPP time zone offset: '-420' minutes
3GPP daylight saving time adjustment: '1' hours
3GPP location area code: '65534'
3GPP cell ID: '45023373'
HDR Status: 'none'
HDR Hybrid: 'no'
LTE tracking area code: '11316'
Full operator code info:
MNC with PCS digit: 'yes'
wim@WimPiZeroWCamera:~ $ sudo qmi-network /dev/cdc-wdm0 status
Profile at '/etc/qmi-network.conf' not found...
Getting status with 'qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status '...
wim@WimPiZeroWCamera:~ $ sudo qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status
[/dev/cdc-wdm0] Connection status: 'connected'
I bought this device from Amazon to use for a project with a Raspberry Pi Zero and a data sim from my Google Fi Account where I wanted network connectivity. The fact that it had GPS as well was a bonus.
I installed gpsd on raspian. (apt install gpsd gpsd-clients -y) It didn’t automatically recognize the GPS. I was able to get it working by modifying /etc/default/gpsd to have the line DEVICES=”/dev/ttyUSB1″ and then starting the GPS with the command echo AT+CGPS=1 >/dev/ttyUSB2
After that combination, running gpsmon or cgps returned results after the GPS had been able to achieve a fix.
I’ve still not got it automatically starting the GPS with the echo command and am working to figure the best place to have that command.
SIM7600G-H 4G HAT (B) for Raspberry Pi, LTE Cat-4 4G / 3G / 2G Support, GNSS Positioning, Global Band SKU: 19485 Part Number: SIM7600G-H 4G HAT (B) Brand: Waveshare
Several years ago I was trying to play with a camera on a Raspberry Pi Zero and was using FFMPEG to stream video to my PC. Now that I’m trying out the Bullseye release of Raspian, I’m attempting to use the camera tools that are installed by default.
pi@WimPiZeroCamera:~ $ libcamera-vid --list-cameras
[0:01:26.600607679]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[0:01:26.690670361]  ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[0:01:26.842438396]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
0 : ov5647 [2592x1944] (/base/soc/i2c0mux/i2c@1/ov5647@36)
Modes: 'SGBRG10_CSI2P' : 640x480 1296x972 1920x1080 2592x1944
First I ran the previous command to see that the camera is recognized, then I run the following command to set up the port on the Pi. The program produces no output in the terminal until I connect from my PC.
I think it was in 2007 that I moved my email from a private server running smtp to Google Suite. I was got in with the free version at the time and have been able to keep using it without paying anything.
Google recently announced that they would be discontinuing the free plan for G Suite, and I had to decide whether to pay for an upgraded version or migrate to something else. I only have two users configured in my account for G Suite. Each G Suite account included 15GB of storage.
Several years ago when I was close to the 15GB limit. I decided to migrate to using my gmail.com account as my primary login and add storage to it instead of adding storage to my wimsworld.com account. I used an open source program called GMailBackup http://www.gmail-backup.com/download to backup all of my email including the labels from my G Suite account and import it to my GMail.com account. I then configured my wimsworld.com account to forward all the mail directly to my gmail.com account. That mostly worked well, though for some reason the G Suite account spam filter ran before forwarding mail to GMail.com. That meant I needed to periodically login to the G Suite account to check and make sure nothing important got stuffed in its spam folder.
Google initially declared that the free G Suite would be expiring in May, and have since extended the deadline to June, but I needed to get it dealt with before it became too time sensitive.
After looking at several alternatives, I came across the recent exit from beta for Google Domains. One of the features that Google Domains offers is email forwarding for the domain, which allowed me to forward the wimsworld.com email address to my gmail.com address directly. Since my gmail.com address was already configured to be able to send mail as my wimsworld.com address via the google smtp servers, the switch was almost transparent, and now all the spam catching is done in a single account.
I’d been hosting my DNS records for wimsworld.com on GoDaddy.com along with having periodic renewals of the domain name through them. Every year I’d go through the hassle of looking for discount codes and making sure I wasn’t upsold on more services that GoDaddy sells. Moving my domain to Google I was able to find an introductory code to reduce the price slightly while extending my domain by another year. The process cost me a total of $12 plus tax.
I’d downloaded my DNS records from GoDaddy before starting anything, to make sure I didn’t lose any data. Then I went to https://domains.google.com/ and initiated the transfer of the domain to google. I had browser windows open to both sites at the same time so I could accelerate the domain transfer by confirming what I was doing on both sites. The transfer moved the DNS records to google’s DNS servers and modified the SOA records, while keeping a few of my custom DNS records, including the MX records I had to deliver email to the G Suite mail servers.
Domains let me set up email forwarding, even though it won’t be active because of the existing MX records which knew that it was configured for G Suite. There was this big orange button to disable Google Workspace and enable forwarding. I was worried that it would actually disable to G Suite, so made sure I was logged in to the G Suite console and everything was prepared for cancellation before I hit the button. When I finally hit the button, it only modified the DNS records so to use the google domains email forwarding system and didn’t touch my G Suite status.
After configuring everything in domains, and seeing that it all appeared to work correctly with my gmail.com login, I still waited one more day before I cancelled my G Suite subscription.
The google domains email forwarding allows you to configure forwarding of specific email addresses to different accounts, and allows a significant number of rules to be set up. It also allows using wildcard forwarding to forward mail. On my wimsworld.com address, I’m using wildcard forwarding for all of the possible accounts to my gmail account. I’ve got other personal domains set up that needed email forwarding to multiple people, and have been able to set specific addresses be forwarded to specific recipients, and a wildcard to forward any other mail to me. I like the wildcard as a catch all for mail that I may have forgotten I was using.
Google Domains has a few other features that are interesting that may get a separate write up if I have time. Dynamic DNS Hosts and DNSSec are available without extra costs. I’m already using two different free dynamic DNS services but may investigate this as I believe it would work directly with my domain name instead of using a CNAME forwarding scheme.
I’ve been wanting to do some GPS data programming with the Raspberry Pi that’s on my boat. The Pi is connected to the NMEA 2000 network, and so should be able to retrieve GPS coordinates from either my chartplotter or my AIS unit when they are powered on, but it should also be able to get the GPS data from my Max Transit cellular gateway device.
It turns out that configuring gpsd to retrieve the data from the max transit was fairly easy. I edited the file /etc/default/gpsd to include the internal address and port of my router and restarted gpsd and now the Pi has the correct location.
The devices section was initially empty. I added tcp://192.168.50.1:60660 between the pair of double quotes. After that, I was able to run gpsmon with no parameters and it connects to the local machine and reports the gps statistics.
I’d verified that I can read the device directly over the network with the command gpsmon 192.168.50.1:60660 but I wanted to be able to write my programs without needing to know where the gps was located.
I’ve been extremely happy with my new chartplotter when I’m actively using it. I’ve been frustrated by some of the features.
I wish it would automatically start recording a new track every time it was turned on. It seems that this should be an option in the settings, but I’ve not been able to find such an option.
The bigger issue is that it seems to reduce the size of stored tracks. This may be related to whatever it’s doing to synchronize with the online map, but the behavior is extremely annoying as it means I don’t have the true logged data of where I visited on my two week trip to the San Juan Islands over July 4th.
The image above shows the track that had been running from my leaving of Odlin County Park on Lopez Island on July 5th, going north to Orcas Island, then sailing south to Mackaye Bay on Lopez Island on July 6th, and finally motoring south to Shilshole on July 7th, arriving a little past 3pm.
The second image was taken on July 22nd. You can see that the number of points for the Leave ODLIN track has reduced from 16063 to 178. Even stranger is that the Spencer Spit log has increased from 124 points to 134, and Deer Harbor has increased from 56 to 61.
I had the plotter set to automatically synchronize settings with the mobile app and the web site, but have disabled it as of today to see if future logs will not be truncated. The auto synchronization was a very nice thing initially because I was able to create a series of places at my desktop using the full keyboard and mouse, and then the next time I turned on my chart plotter they appeared on the plotter with my intervention.
I realized that the waypoints I’d created all had the default icon. I went in and changed the icon on the chart plotter for each if the locations and something also truncated the names. I don’t know if it was the synchronization with the online service, or the chartplotter itself, but losing data is never a good thing.
Another feature that would be extremely nice would be if the time at the top of the screen included the date and UTC offset or timezone.
Tuesday July 20th I had a shock after upgrading my iPhone with the latest iOS.
I went digging around in my email for records of apple communications. I’d cancelled Apple TV+ before I had to start paying for it on July 1st. I was hoping that I’d not mistakenly cancelled multiple subscriptions. I know that I’d purchased my iPhone about two years ago, but knowing Apple’s release schedule, wouldn’t have bought it until after September.
I found the email invoice from June 20th, 2021, paying for the monthly update, as well as the 20th of each month, going back until I had initiated AppleCare on December 20th, 2019.
I had a conversation with a friend via texts about AppleCare in which he checked the situation on his sons iPad and recognized that it would end coverage at 24 months fairly soon. My conclusion was that I’d probably purchased my phone 90 days before I purchased the AppleCare subscription. I didn’t like the fact that it was currently showing coverage expired in the phone, but didn’t want to deal with apple to find out what was going on, hoping that this was simply a bug in the interface on the monthly renewal date.
At nearly 8:30pm on July 21st I got an invoice for the next month’s AppleCare in my email, and went and checked the about box. Now it’s correctly showing my coverage. I’m glad that it resolved itself without my intervention, but I think it’s a bad bug in the system that shows coverage expired on the regular monthly renewal date. I wonder what would happen if I were to lose my phone on the 20th of any particular month?
One of the things that’s still unknown is if I’ll be able to maintain this coverage past the 24 month period. AppleCare can be purchased up front as a fixed cost, or spread over monthly fees. One of the benefits of the monthly mode is that you can cancel at any time. The small print makes it slightly ambiguous if the recurring cost will continue indefinitely, or if it will automatically end after 24 months of phone ownership. I’m hoping for the former, because I’ve usually kept my phones for three years instead of two. I’ve never needed to use the phone insurance, but liked the idea of dealing directly with Apple if I needed to get anything fixed with the phone.