Make your Palm Pilot useful again by downloading your Google Calendar to it.
NOTE THIS PROJECT HAS BEEN SUPERSEDED Please see palm-calendar-sync2 for a more feature complete project aimed at achieving the same goals.
senddatebook.py
, when running, should listen on the specified port and upon triggering a HotSync on the PalmOS device connected to that port, fetch a specified set of Google Calendar/ics files, convert these, and send them to the PalmOS device.
Requires pilot-link, pilot-datebook, and the python iCalendar library. Also, sorry, Python 2.7. Only tested under Linux.
No warranty or guarantee is offered or implied. Some calendar events may not show up, repeat correctly, etc. Times may be off with respect to daylight savings times. This is pretty much untested. (Known issues are listed below.)
There is software out there that does similar thing, but nothing one click, or Linux, for Google to Palm.
Exporting from the DatebookDB.pdb:
Importing to Palm Desktop (to then HotSync to a PalmOS device):
- ical2vcal to create a vcal file that can be imported into Palm Desktop
- It seems like you can sync Google Calendar to an older version of Outlook, which will then sync to Palm Desktop and then a PalmOS device (source)
- Install pilot-link and pilot-datebook
- If you don't already have a Python 2.7 environment with the iCalendar Python library, install Anaconda to get one
- After installing Anaconda either run
conda init
or source the profile, e.g.source ~/anaconda3/etc/profile.d/conda.sh
- Setup a Python 2.7 environment
conda create -n py27 python=2.7
- Install the iCalendar python library
conda install icalendar
- Activate and do everything else inside the Python 2.7 environment
conda activate py27
- After installing Anaconda either run
- Setup the pilot-link Python 2.7 bindings (I couldn't get these working in Python 3 or I would have used it)
- Change to the pilot-link Python bindings folder, e.g.
cd pilot-link-0.2.12.5/bindings/Python
- Build the bindings
python2 setup.py build
- Change to the pilot-link Python bindings folder, e.g.
- Download this repo, e.g.
git clone https://github.com/guruthree/google-calendar-to-palm-pilot.git
- Get some files into
google-calendar-to-palm-pilot
- Copy
_pisock.so
,pisock.py
, andpisockextras.py
from thepilot-link-0.2.12.5/bindings/Python/build/lib.linux-x86_64-2.7
- Add a link to the compiled
pilot-datebook
binary
- Copy
- Edit
datebook.cfg
to point to your calendar ics files, which for Google calendar can be found in calendar settings- Multiple calendars can be specified by comma separation
- The PalmOS devices local time zone can be specified in the config file
- Calendar entries from before the January 1st of the specified year will be ignored
- Run
senddatebook.py
with the port the PalmOS device is connected to specified via-p
and the configuration file specified via-c
, e.g../senddatebook.py -p net:any -c datebook.cfg
- Mutli-day all-day events only show on the first day
- Repeat events with one event deleted in the middle, will still show that deleted event
- Some repeating events show twice
- Google doesn't Default export alarms, so a configuration option has been added to add these back in. It can't tell be between no alarm and a default alarm, so a time range has been added so that alarms aren't going off while your asleep.
Output should be something like this:
$ ./senddatebook.py -p net:any -c datebook.cfg
Waiting for connection on net:any...
Fetching https://www.google.com/calendar/ical/en_gb.uk%23holiday%40group.v.calendar.google.com/public/basic.ics...
Parsing...
Done parseing
Statistics:
Input file </tmp/tmpdnA6us>, format <csv>:
Input file format <untimed,beginDate,beginTime,endDate,endTime,description,note,alarm,advance,advanceUnit,repeatType,repeatForever,repeatEnd,repeatFrequency,repeatDay,repeatWeekdays,repeatWeekstart>
Input file header <untimed,beginDate,beginTime,endDate,endTime,description,note,alarm,advance,advanceUnit,repeatType,repeatForever,repeatEnd,repeatFrequency,repeatDay,repeatWeekdays,repeatWeekstart>
Lines read: 76
Records read: 75
Csv field <untimed> was read 75 times
Csv field <beginDate> was read 75 times
Csv field <beginTime> was read 75 times
Csv field <endDate> was read 75 times
Csv field <endTime> was read 75 times
Csv field <description> was read 75 times
Csv field <note> was read 75 times
Csv field <alarm> was read 75 times
Csv field <advance> was read 75 times
Csv field <advanceUnit> was read 75 times
Csv field <repeatType> was read 75 times
Csv field <repeatForever> was read 75 times
Csv field <repeatEnd> was read 75 times
Csv field <repeatFrequency> was read 75 times
Csv field <repeatDay> was read 75 times
Csv field <repeatWeekdays> was read 75 times
Csv field <repeatWeekstart> was read 75 times
Output file </tmp/tmpdnA6us.pdb>, format <pdb>:
Records written: 75
Sending DatebookDB...
Done
Waiting for connection on net:any...
The script should just loop for ever, but quit gracefully on Ctrl-C. The default configuration will load in UK national holidays.
Wouldn't it be great if the calendar could be automatically loaded in? It's not impossible. I've found two tools that will automate HotSyncs, AutoSync and Syncer.
AutoSync will run a HotSync up to every 15 minutes, either all day or over specified hours, but only while in the cradle. In my testing, the cradle did not have to be connected to the computer for data.
Syncer will initiate an automatic HotSync once a day. The author reports mixed feedback on if the device needed to be in the cradle. For me at least, with my Tungsten T3 it worked when not in the cradle, initiating a modem HotSync completely wirelessly over ppp over Bluetooth.
Networking over the Palm is easiest in my experience with ppp. Install pppd and then run sudo pppd /dev/ttyUSB0 19200 10.0.0.1:10.0.0.2 proxyarp passive silent noauth local persist nodetach
as root. Setup a static IP on the Palm as 10.0.0.2 with a gateway of 10.0.0.1. To give it internet access run sudo iptables -t nat -I POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
and then add a DNS server of 1.1.1.1 (Cloudflare) or 8.8.8.8 (Google). (Setup a new connection for this in Prefs -> Network, then edit the Details.)
For more exciting Bluetooth wireless (but still serial) networking, get bluez installed (with legacy tools) on your system. Use bluetoothctl to pair the PalmOS device to your PC and set as trusted on both devices. Make The bluez system service will need the --compat
flag added to the launch arguments. After restarting the service, sdptool can be used to specify that the computer is open for Bluetooth serial connections sudo sdptool add --channel=22 SP
. At this point rfcomm can be run to listen for an incoming serial connection and when it receives one to launch ppp to accept a network connection. sudo rfcomm listen /dev/rfcomm0 22 pppd /dev/rfcomm0 115200 10.0.0.1:10.0.0.2 proxyarp passive silent noauth local persist nodetach
.