[{"element_type":"alert","content":"\u003cp\u003eBugs Bugs Bugs...mmm crunchy and full of protein! 🐛🤺\nHey fellow adventurer, here be dragons, which is why we want you to come along for the ride, after all an extra pair of eyes could make all the difference!\u003c/p\u003e\n\n\u003cp\u003eThe current version of WipperSnapper (v1.0.0-beta.106) has a \u003ca href=\"https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/issues/768\"\u003ecouple of possible bugs\u003c/a\u003e with new lines, periods, colons, and maybe other weirdness. They'll be fixed soon, but please help us by reporting any seen issues \u003ca href=\"https://forums.adafruit.com/viewforum.php?f=56\"\u003ein the forums\u003c/a\u003e or \u003ca href=\"https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/issues/new?template=bug_report.md\"\u003eGitHub\u003c/a\u003e.\u003c/p\u003e\n\n\u003cp\u003eThere will also be time manipulation blocks in the future, but this may prove useful for early experimenters.\u003c/p\u003e","metadata":{"class":"element alert-element build-alert alert-primary","markdown":"Bugs Bugs Bugs...mmm crunchy and full of protein! 🐛🤺\nHey fellow adventurer, here be dragons, which is why we want you to come along for the ride, after all an extra pair of eyes could make all the difference!\n\nThe current version of WipperSnapper (v1.0.0-beta.106) has a [couple of possible bugs](https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/issues/768) with new lines, periods, colons, and maybe other weirdness. They'll be fixed soon, but please help us by reporting any seen issues [in the forums](https://forums.adafruit.com/viewforum.php?f=56) or [GitHub](https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/issues/new?template=bug_report.md).\n\nThere will also be time manipulation blocks in the future, but this may prove useful for early experimenters.","alert_type":"primary"}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/933/original/clocks.png?1753113634","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n        \u003cp\u003eTesting the display support recently added to Adafruit IO's no-code Arduino firmware,\u0026nbsp;\u003ca href=\"https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/\" target=\"_blank\"\u003e\u003cstrong\u003eWipperSnapper\u003c/strong\u003e\u003c/a\u003e, I've come unstuck with my automations a few times due to living over the other side of the pond (🫖) from Adafruit HQ...\u003c/p\u003e\n\u003cp\u003e\"Why?\", you ask? \u003cstrong\u003eTime-zones!\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eIn case you were unaware, Adafruit HQ runs on New York time, also known as EST (Eastern Standard Time), which is currently 4hours behind\u0026nbsp;\u003ca href=\"https://en.wikipedia.org/wiki/Coordinated_Universal_Time\"\u003eUTC\u003c/a\u003e (daylight savings can alter this 4hr offset).\u003c/p\u003e\n\u003cp\u003eNow to make life easier, the schedule block uses a timezone location set in the User account page, meaning my schedules run as expected, yay! The tricky bit comes when you want to start comparing time or timestamp values.\u003c/p\u003e\n\u003cp\u003eMost things live in server time, which is set to New York, but many other bits and bobs are presented in UTC.\u003cbr\u003eFor our purposes we want things in our local time, advancing time back to the future, with \u003cstrong\u003ea no-code clock\u003c/strong\u003e!\u003c/p\u003e\n      \n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eSetup WipperSnapper\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eHead over to \u003ca href=\"https://io.adafruit.com/devices/new\" target=\"_blank\"\u003eio.adafruit.com/devices/new\u003c/a\u003e and pick one of the boards to install, if yours is not listed then try a board with a similar chip, or \u003ca href=\"https://github.com/adafruit/Wippersnapper_Boards/issues/new?template=board-request.md\" target=\"_blank\"\u003efile a feature request for us to add the board to WipperSnapper here\u003c/a\u003e.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eOnce you're device is online (you've followed all the installer steps/pages and copied the secrets.json file to the device if USB drive and rebooted it) then use the \u003cstrong\u003eNew Component button\u003c/strong\u003e to add your display components (OLED / Character LCD / 14 or 7 segment alphanumeric displays). Try sending them values to ensure they work\u003cbr\u003e\u003cbr\u003eIn this example I've got two 14-segment Quad alphanumeric i2c displays (Date), and a 7-segment numeric display (Time), making 12 characters in 3 groups of four (ignoring symbols like period / colon)\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/935/original/Screenshot_2025-07-21_164853.png?1753115042","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eSetup clock updating action - runs once per minute\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eCreate a new Action on the\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003ca href=\"https://io.adafruit.com/actions\"\u003e/Actions\u003c/a\u003e\u003cspan\u003e\u0026nbsp;\u003c/span\u003epage, with an appropriate name and description.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd a schedule block, set to run every month, day, hour, and minute.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cem\u003eOPTIONAL:\u003c/em\u003e Use the cog button on the root action block to adjust the delay settings for the action.\u003cbr\u003eAlter the delay to be 59seconds, so it changes just as the minute does. \u003cbr\u003eYou can add 1second to the current time to get the display to show the next / correct minute.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eCreate a variable for \u003ccode\u003etimezone_offset_hours\u003c/code\u003e and set the value to your local timezone offset\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd a new variable for\u0026nbsp;\u003ccode\u003elocal_time\u003c/code\u003e, and 3 more for the display segments (or as many as appropriate).\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eUse the template block (text category) for the Set Variable value for\u0026nbsp;\u003cstrong\u003elocal_time\u003c/strong\u003e .\u003cbr\u003eIn the template's paragraph child block, where \u003cstrong\u003ething\u003c/strong\u003e represents offset difference, set the body to:\n\u003cpre\u003e{%- assign now_s = \"now\" | date: \"%Y-%m-%dT%H:%M:%S\" | date: \"%s\" %}\u003cbr\u003e{%- assign now_z_s = \"now\" | date: \"%Y-%m-%dT%H:%M:%SZ%z\" | date: \"%s\" -%}\u003cbr\u003e{%- assign server_utc_diff = now_z_s | minus: now_s -%}\u003cbr\u003e{%- assign thing = 3600 | times: vars[\"timezone_offset_hours\"] | minus: server_utc_diff \u0026nbsp;-%}\u003cbr\u003e{{ now_s | plus: thing | date: \"%Y-%m-%dT%H:%M:%S\" }}\u003cbr\u003e{%- comment %} this is a bit hacky, as the timezone doesn't get properly altered with plus: seen by printing %z {% endcomment -%}\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003eUse the Set Variable block for the segment1 variable, combined with a template block for the value connection. Then set the template body to cut four characters (period is ignored for alphanum-segments):\u003cbr\u003e\u003ccode\u003e{{vars.local_time | date: \"%d.%b\" | slice: 0,5 }}\u003c/code\u003e\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eDo the same for segment 2, with the template: \u003ccode\u003e{{vars.local_time | date: \"%b.%y \u0026nbsp;\" | slice: 2,8 }}\u003c/code\u003e\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eFor segment 3's template body:\u0026nbsp;\u003ccode\u003e{{vars.local_time | date: \"%H.%M\" }}\u003c/code\u003e\u0026nbsp;\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eFinally use Set Feed blocks, pointed at the segment displays, to assign each segment variable to a display.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eSave and run the action, enabling it if asked.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eYour action should look similar to this:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/934/original/image.png?1753115006","metadata":{}},{"element_type":"alert","content":"\u003cp\u003eIf your country uses a standard scheme for when daylight saving time switches, then you can automate that too with the schedule block. Setup two extra actions to alter the local timezone offset on the correct days:\u003c/p\u003e\n\n\u003cp\u003ee.g. Clocks go forward one hour at 1:00am GMT on the last Sunday in March, marking the start of British Summer Time (BST / UTC+1).\u003c/p\u003e\n\n\u003cp\u003eClocks go back one hour at 2:00am BST on the last Sunday in October, returning to Greenwich Mean Time (GMT / UTC+0).\u003c/p\u003e","metadata":{"class":"element alert-element build-alert alert-primary","markdown":"If your country uses a standard scheme for when daylight saving time switches, then you can automate that too with the schedule block. Setup two extra actions to alter the local timezone offset on the correct days:\n\ne.g. Clocks go forward one hour at 1:00am GMT on the last Sunday in March, marking the start of British Summer Time (BST / UTC+1).\n\nClocks go back one hour at 2:00am BST on the last Sunday in October, returning to Greenwich Mean Time (GMT / UTC+0).","alert_type":"primary"}},{"element_type":"text","content":"\n  \n  \n  \n        \u003ch2\u003eSetup DST Change-over Actions\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eCreate a new feed to store the timezone offset inside if you haven't already got one. Do it on the \u003ca href=\"https://io.adafruit.com/feeds\" target=\"_blank\"\u003e/feeds\u003c/a\u003e page, and then on the new feed page add data manually for the current time-zone offset.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eCreate a new Action on the \u003ca href=\"https://io.adafruit.com/actions\"\u003e/Actions\u003c/a\u003e page, called \"Start of DST\", with a description of when it should run.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd a schedule trigger block to the diagram. Use the cogs to alter the schedule block for your DST changeover. In my case we don't support \"last X in Month\" yet so I'm using \"Every Sunday in March\", followed by a check of a liquid template function if it's the last sunday in the month.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eIf needed for complex schedules then add a Set Variable block (variable named timezone_offset_hours) with the value set to the timezone offset feed (Get feed block). Otherwise jump to step 7.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd a set variable block for a new variable called is_last_sunday, then add a template block as the value.\u003cbr\u003eFor the template body, use the following (which adds 7days then compares the month to current)\u003cbr\u003e\u003cspan class=\"spoiler tagged\"\u003e\u003cem\u003eTemplate:\u003c/em\u003e\u003cbr\u003e\u003ccode\u003e{%- assign now_s = \"now\" | date: \"%Y-%m-%dT%H:%M:%S\" | date: \"%s\" %}\u003c/code\u003e\u003cbr\u003e\u003ccode\u003e{%- assign now_z_s = \"now\" | date: \"%Y-%m-%dT%H:%M:%SZ%z\" | date: \"%s\" -%}\u003c/code\u003e\u003cbr\u003e\u003ccode\u003e{%- assign server_utc_diff = now_z_s | minus: now_s -%}\u003c/code\u003e\u003cbr\u003e\u003ccode\u003e{%- assign thing = 3600 | times: vars[\"timezone_offset_hours\"] | minus: server_utc_diff \u0026nbsp;-%}\u003c/code\u003e\u003cbr\u003e\u003ccode\u003e{%- assign bst_time_s = now_s | plus: thing -%}\u003c/code\u003e\u003cbr\u003e\u003ccode\u003e{%- assign current_month = bst_time_s | date: \"%m\" -%}\u003c/code\u003e\u003cbr\u003e\u003ccode\u003e{%- assign next_week_month = bst_time_s | plus: 604800 | date: \"%m\" -%}\u003c/code\u003e\u003cbr\u003e\u003ccode\u003e{%- if current_month != next_week_month -%}1{%- else -%}0{%- endif -%}\u003c/code\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"spoiler tagged\"\u003e\u003cbr\u003e\u003c/span\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd a logic IF condition block, then place a number comparison block from the maths category (=)\u003cbr\u003eInside the number comparison block, add a Get Variable block for is_last_sunday, and compare to 1.\u003cbr\u003e\u0026nbsp;\u003c/li\u003e\n\u003cli\u003eAdd a Set Feed block to the Actions: section of the diagram, and select the timezone offset feed in the dropdown. For the value enter the local UTC offset in hours during the next daylight savings time period.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eSave and run the action, enabling if asked.\u003cbr\u003e\u003cbr\u003e\n\u003c/li\u003e\n\u003cli\u003eCreate a second action for the end of Daylight savings time, with the appropriate local UTC offset in hours for that next period. Save it and run it, enabling if asked.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eYour actions should look similar to this:\u003c/p\u003e\n      \n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/932/original/image.png?1753112027","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eNow go back to the clock updating action, and replace the fixed timezone offset value with the Get Feed block.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n        \u003ch2\u003eTaking it further\u003c/h2\u003e\n\u003cp\u003eWell, I don't know what you want personally, but I'm going to have the clock display other things every 10seconds, like the rain in next 15mins / 1hr, sunset, Air Quality, you get the idea.\u003c/p\u003e\n\u003cp\u003eBut mostly I got these screens for an ulterior motive...\u003c/p\u003e\n\u003cp\u003eI'm eventually looking to recreate this crucial piece from a time machine...and then get myself to 88mph🌩️\u003c/p\u003e\n      ","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/930/original/Screenshot_2025-07-21_153106.png?1753111864","metadata":{}}]