Anybody used #Watchy or #Lilygo watches? I'm interested in user experience...need a replacement for my AsteroidOS experiement
@sqfmi Update: I fixed it! 🎉
Not too shabby of a job either, if I dare say so myself.
Thanks to the published CAD files, I figured out how to fix the buttons on my @sqfmi Watchy.
Some vias are corroded due to moisture, most likely from rain. In theory, all I have to do is solder two little jumper wires 🟠🔵 without dislodging any other components. Those pads are 1 mm. 😬
Wish me luck. 🤞
A whimsical fuzzy clock
https://shkspr.mobi/blog/2023/07/a-whimsical-fuzzy-clock/
I'm sure I remembered there once being a clock app for Linux which was deliberately vague.
It would declare the time as "Nearly tea-time" or "A little after elevenses" or "Quite late" or "Gosh, that's early".
But I can find no evidence that it ever existed and am beginning to wonder if I dreamt it.
So I built it0.
First thing's first - there are a lot of existing fuzzy clocks. But they mostly say things like "afternoon" or "nearly 3 o'clock". There's even a Hobbit Time for Watchy. However, I wanted something a bit more vague and human than those.
Here's an example of what I mean:
if (hour >= 5 && hour < 7) { printf("Blimey! That's early.\n"); } else if (hour >= 7 && hour < 11) { printf("Good morning! Rise and shine!\n"); } else if (hour >= 11 && hour < 13) { printf("Goodness me! Elevenses!\n"); } else if (hour >= 13 && hour < 17) { printf("Afternoon tea time! Care for a cuppa?\n"); } else if (hour >= 17 && hour < 20) { printf("Evening is upon us. Time to unwind.\n"); } else if (hour >= 20 && hour < 23) { printf("Nighttime adventures await! Off we go!\n"); } else { printf("Bedtime beckons. Rest well, my friend.\n"); }And here they are rewritten as Shakespearean-style timestamps:
if (hour >= 5 && hour < 7) { printf("Good morrow! 'Tis the break of day.\n"); } else if (hour >= 7 && hour < 11) { printf("Hail, fair morn! Arise and be joyful.\n"); } else if (hour >= 11 && hour < 13) { printf("Goodness me! 'Tis the hour of elevenses!\n"); } else if (hour >= 13 && hour < 17) { printf("Afternoon doth approach! Wouldst thou like some tea?\n"); } else if (hour >= 17 && hour < 20) { printf("Evening doth draw nigh. 'Tis time to unwind.\n"); } else if (hour >= 20 && hour < 23) { printf("Nightfall is upon us. Adventure beckons!\n"); } else { printf("Bedtime doth approach. Rest well, good sir/madam.\n"); }And here we come to a central problem with any fuzzy system - repetitiveness. How to make it say something new every time it is called? I guess there are three main approaches:
I had some success with 1. I got the AI to spit out dozens of responses.
But they either need manually fitting into appropriate timeslots, or a bit more prompt-work to get the LLM to spit them out in the right order. Even with a few hundred, it's likely to get repetitive quickly. And, on an embedded system, are liable to take up a lot of memory.
Option 2 also has similar drawbacks. Even with a large amount of stock phrases, the structure and permutations will start to become noticeable. It's possible to reduce that with an enhanced semantic structure - but it becomes quite complex to automate.
Finally Option 3. Ah... It is computationally expensive (not to mention financially prohibitive) to call a network API every time we want to know the time. And on a battery-powered system, every time the WiFi has to wake is a dent in the longevity of the device.
My ultimate goal is to have this as a fuzzy-watchface for the Watchy eInk device.
At the moment, my plan is to use a mixture of 2 and 3.
If you've done something like this before, please let me know 😊
OK, I prompt-engineered my way to success ↩︎
An eInk, Wrist-Mounted, TOTP Generator
https://shkspr.mobi/blog/2023/07/an-eink-wrist-mounted-totp-generator/
Behold! Thanks to the power of the Watchy development platform, I now have all my 2FA codes available at the flick of my wrist!
HOWTO
This uses Luca Dentella's TOTP-Arduino library.
You will need a pre-shared secret which is then converted into a Hex array. Use the OTP Tool for Arduino TOTP Library to get the Hex array, Base32 Encoded Key, and a QR Code to scan into your normal TOTP generator.
Add the Hex array into the code below.
To check that it is functioning correctly, either scan the QR code from the OTP Tool above, or use the Base32 Encoded Key with an online TOTP generator.
Here's how the code interfaces with the Watchy:
#include <Watchy.h> //include the Watchy library#include "settings.h"#include "sha1.h"#include "TOTP.h"class MyFirstWatchFace : public Watchy{ //inherit and extend Watchy class public: MyFirstWatchFace(const watchySettings& s) : Watchy(s) {} void drawWatchFace(){ ... RTC.read(currentTime); time_t epoch = makeTime(currentTime) - 3600; // BST offset // The shared secret - convert at https://www.lucadentella.it/OTP/ uint8_t hmacKey[] = {}; // e.g. {0x4d, 0x79, 0x4c, 0x65, 0x67, 0x6f, 0x44, 0x6f, 0x6f, 0x72}; int hmacKeyLength = sizeof(hmacKey) / sizeof(hmacKey[0]); TOTP totp = TOTP(hmacKey, hmacKeyLength); char* epochCode = totp.getCode( epoch ); display.print( "TOTP Code Twitter: "); display.println( epochCode ); ...You can grab the full code from GitLab.
I'm not very good at C++ - so please let me know what terrible mistakes I've made.
Is this a good idea?
Well... Yes and no.
TOTP is a strong-ish form of Multi-Factor Authentication. It helps prevent attacks where someone already knows your username and password. Having a convenient way to get your TOTP codes may make you more likely to use them. It also prevents you from getting locked out of your accounts if your phone dies or is stolen.
Convenient security is good security.
But... Having them on your wrist for everyone to see? I've deliberately made the font as small as I can so it is only readable up close. However, if someone is shoulder-surfing your details, they may well see your wrist. The watch isn't encrypted - so even if you hid the codes behind a button press, anyone who steals your watch will have your codes. If they steal your phone, they need to get through your PIN / biometrics.
Who are your adversaries? If you are trying to evade state-level actors, thieves specifically targeting you for your crypto-holdings, or an untrustworthy spouse - this probably isn't a great idea. If you don't use 2FA because you don't keep your phone with you - this will probably increase your security posture.
Ultimately, all security measures are a trade-off between convenience and control.
My priorities have always been clear: hackability, repairability, and privacy over convenience and luxury.
So for my wife and I's wedding, I wanted to add a few customizations to my Watchy to celebrate the ocassion. I simply changed some images and added some files to the InkWatchy firmware.
Next step: adding a count-up timer from our wedding date to the main watchface.
I played around with my watchy after getting it last month. Almost immediately destroyed the eink screen. AliExpress saved me with that one.
I want a quick reference of time on my desk and this fits the bill!
I'm also looking forward to the new pebble watches!
#Watchy #esp32 #3Dprinting
@seav I do feel like I need to get one, only because we had a work engineering team face-to-face meet-up, and I was the only one without a smartwatch!
I'm thinking of going for one of the geeky highly programmable but not highly usable #opentech options (I was one of these people admiring the e-ink #watchy https://mastodon.social/@Edent/110666790594938682 , but maybe the Pi Bangle.js is more my level)
seems kinda pricey, considering my #Watchy was $60 and turns a lot of heads.
Got myself a Watchy (v2.0 clone off Aliexpress) and slapped a 803040 1000mah battery on it for the lols, so designed a shell and strap for it.
Also uploaded it to Thingiverse if anyone else with one of these wants to make one: https://www.thingiverse.com/thing:6971561
#watchy #diy #3dprinting
woops bought a #watchy and now I'm back on mastodon
Now updated to be running the VERY BEST watch face.
#sqfmi #Watchy
Watch face from https://github.com/b-bayport/watchy_captnwednesday but if like me you've got one of the recent Watchys you'll need to make a few minor changes to settings.h. I'll push my fork/changes to a repo at some point soonish.
And since I already brought my tools, I ended the day in true techie-fashion by dismantling my Watchy e-paper watch by @sqfmi to figure out why some of the buttons don't work. To my surprise, it's not worn-out buttons, it's CORROSION. AAAH!
I also love how the back side of the e-paper display has inverted colours.
Anyways, time for bed.