{"id":3214,"date":"2023-04-12T07:17:32","date_gmt":"2023-04-12T07:17:32","guid":{"rendered":"https:\/\/www.sydspost.nl\/?p=3214"},"modified":"2023-06-22T14:51:23","modified_gmt":"2023-06-22T14:51:23","slug":"3214","status":"publish","type":"post","link":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/","title":{"rendered":"Garmin Connect Workout and Schedule creator"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-black-color has-text-color\">Garmin Connect workout and schedule creator<\/h2>\n\n\n\n<p>Onlangs een Garmin Forerunner 955 Solar sporthorloge aangeschaft. Een zogenaamd multisport horloge, bij uitstek geschikt om mij te helpen voorbereiden op een triathlon. Tijdens de corona periode is het sporten er een een beetje bij gebleven, maar het plan is om in july een triathlon (Olympische afstand) te gaan doen.<\/p>\n\n\n\n<p>Voor het trainen voor die triathlon gebruik ik trainingsschema&#8217;s van de Nederlandse Triathonbond, te vinden op <a href=\"https:\/\/www.triathlonbond.nl\/kenniscentrum\/trainingsschemas\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.triathlonbond.nl\/kenniscentrum\/trainingsschemas\/<\/a><\/p>\n\n\n\n<p>Om die trainingsschema&#8217;s met behulp van de Garmin Connect app, of via de Garmin Connect website, in te voeren is een behoorlijke klus. Dat moet makkelijker kunnen dacht ik. Op Github vond ik hiervoor diverse medestanders, maar geen van de tools die ik daar vond waren geschikt voor multisport. Wel vond ik hier een voorbeeld van een &#8220;turbotaal&#8221; voor het definieren van een workout. Het idee werd geboren om zelf een python script te gaan bouwen voor het kunnen intrepreteren van een workout geschreven in turbotaal, op basis van die workout een json file te creeren die voldoet aan de Garmin specs, die json file te importeren in Garmin Connect en ten slotte de workout te agenderen in je Garmin Connect agenda.<\/p>\n\n\n\n<p>Een paar kanttekeningen vooraf:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Garmin Connect beschikt over API&#8217;s, echter de toegang tot de ontwikkeldocumentatie en de specs van die API&#8217;s is voorbehouden aan bedrijven. Bij gebrek aan die documentatie heb ik ervoor gekozen om webscraping technieken te gaan gebruiken voor het uploaden van workouts en schedulen van een workout. Dit is uiteraard kwetsbaar en onderhoudsgevoelig. Ik gebruik zelf de software wekelijks, dus als Garmin wijzigingen doorvoert in het Garmin Connect platform die de werking van de workout and schedule creator raken, dan probeer ik die zo snel mogelijk te fixen. Loop jij tegen een probleem aan, meld dan een issue op de Github pagina.<\/li>\n\n\n\n<li>De workout and schedule creator bevat geen syntaxcontrole op de workout beschrijving, je zult dan ook geen foutmeldingen zien als je een typfoutje hebt gemaakt. Ook niet als geprobeerd wordt de workout te importeren in Garmin Connect. Indien een workout niet succesvol ingelezen kan worden, dan stopt het script simpelweg. Corrigeer de typfout, en probeer het opnieuw.<\/li>\n\n\n\n<li>Garmin Connect beschikt niet over een importfunctie van workouts, een extension in Chrome genaamd &#8220;Share your Garmin Connect workout&#8221; maakt dit wel mogelijk. Het is niet nodig om die extension vooraf te installeren. Python library&#8217;s Selenium\/Helium (Webscraping) starten Chrome is zogenaamde &#8220;Testmodus&#8221; waardoor eventuele geinstalleerde extensions niet beschikbaar zijn. De workout and schedule creator zorgt er zelf voor dat de extension geactiveerd wordt.<\/li>\n<\/ul>\n\n\n\n<p><strong>Benodigd and up-and-running<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python 3.10.7 of hoger<\/li>\n\n\n\n<li>Garmin Connect account<\/li>\n\n\n\n<li>Chrome 111.0.5563.147 of hoger<\/li>\n\n\n\n<li>Microsoft Excel, versie 2208 of hoger<\/li>\n<\/ul>\n\n\n\n<p><strong>Github<\/strong><\/p>\n\n\n\n<p>De workout and schedule creator is te downloaden vanaf Github (<a href=\"https:\/\/github.com\/sydspost\/Garmin-Connect-Workout-and-Schedule-creator\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/sydspost\/Garmin-Connect-Workout-and-Schedule-creator<\/a>), werkwijze:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Installeer GIT vanaf <a href=\"https:\/\/git-scm.com\/download\/win\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/git-scm.com\/download\/win<\/a><\/li>\n\n\n\n<li>Open een command prompt en download de workout and schedule creator met<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/sydspost\/Garmin-Connect-Workout-and-Schedule-creator.git<\/code><\/pre>\n\n\n\n<p><strong>Turbo taal<\/strong><\/p>\n\n\n\n<p>Zoals gezegd heb ik een turbo taal ontwikkeld die je in staat stelt zeer complexe workouts met evt. hartslagzones, hartslag per minuut, te verbranden calorien, cadans aanduidingen en herhalingen te maken. Hieronder de specificatie van die turbotaal:<\/p>\n\n\n\n<p>0-9\u00a0defines distance or time, f.e. 100m(eter) or 15:30 minutes<br>c\u00a0\u00a0\u00a0\u00a0indicator hat the numbers before the &#8220;c&#8221; are calories, f.e. 100c means burn 100 calories with this workoutstep<br>m\u00a0\u00a0\u00a0\u00a0indicator that the numbers before the &#8220;m&#8221; is a distance, f.e. 100m<br>r\u00a0\u00a0\u00a0\u00a0indicator that the number before the &#8220;r&#8221; is the number of itterations of a workoutstep, f.e. 10r means 10 push-ups<br>:\u00a0\u00a0\u00a0\u00a0indicator that the 2 numbers before and after the &#8220;:&#8221; are a time-definition, f.e. 15:30<br>Z\u00a0\u00a0\u00a0\u00a0zone, f.e. Z0 for Zone zero<br>*\u00a0\u00a0\u00a0\u00a0indicator that the number after the &#8220;*&#8221; indicates the number of iterations of the repeat group<br>!\u00a0\u00a0\u00a0\u00a0indicator that the digits after the &#8220;!&#8221; indicate the Stroketype or Steptype, f.e. !SS is stroketype &#8220;Schoolslag&#8221; (dutch for breaststroke)<br>\u00a0\u00a0\u00a0\u00a0\u00a0or !WUP for steptype &#8216;Warming up&#8217;<br>@\u00a0\u00a0\u00a0\u00a0indicator that the digits after the &#8220;@&#8221; indicate a Zone, KGR (Weight), RPM or BPM, f.e. 7kgr of 100bpm or 80rpm<br>&amp;\u00a0\u00a0\u00a0\u00a0indicator that the digits after &#8220;&amp;&#8221; indicate an excercise, f.e. push-up<br>(\u00a0\u00a0\u00a0\u00a0start of a repeat group, f.e. (100m!SS + 00:20!RUST) * 2 (RUST is dutch for Rest)<br>)\u00a0\u00a0\u00a0\u00a0end of a repeat group<br>+\u00a0\u00a0\u00a0\u00a0next workoutstep<br>#\u00a0\u00a0\u00a0\u00a0end of line (optional)<\/p>\n\n\n\n<p>Enkele voorbeelden:<\/p>\n\n\n\n<p>Swimming:&nbsp;300m!ES@Z1 + (200m!BC@Z1 + 50m!SS + 00:20!RUST)*4 + (25m!BC@Z3)*6 + 250m!SS <\/p>\n\n\n\n<p>staat voor 300 meter vrijeslag in Zone 1 + 4 x (200 meter Borstcrawl in Zone 1 + 50m Schoolslag + een pauze van 20 seconden) + 6 x (25m Borstcrawl in Zone 3) + 250 meter Schoolslag<\/p>\n\n\n\n<p>Running:&nbsp;&nbsp;&nbsp;15:00!WUP + (05:00@Z2 + 03:00!RUST) * 4 + 10:00@Z1 + (01:00@Z3 + 01:00!RUST) * 3 + 15:00!COOL<\/p>\n\n\n\n<p>staat voor 15 minuten Warmingup + 4 x (5 minuten in Zone 2 + 3 minuten rust) + 10 minuten in Zone 1 + 3 x (1 minuut in Zone 3 + 1 minuut rust) + 15 minuten Cooling down<\/p>\n\n\n\n<p>Cycling:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;90:00@Z1@100rpm<\/p>\n\n\n\n<p>staat voor 90 minuten in Zone 1 met een cadans van 100 rpm<\/p>\n\n\n\n<p>Pilates:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10r!WUP&amp;SA + 00:10&amp;3WWCF + 100c!COOL&amp;FP<\/p>\n\n\n\n<p>staat voor 10 herhalingen van oefening Stretch Abs als Warming up + 10 seconden de oefening 3 Way Weighted Calf Raise + 100 calorien verbranden met de oefening Face Pull als Cooldown<\/p>\n\n\n\n<p><strong>Excel sheet<\/strong><\/p>\n\n\n\n<p>De workouts definieer je in een Excel sheet. Hieronder eerst een beschrijving van de 3 verplichte werkbladen, de werking van de workout and schedule creator is afhankelijk van de werkblad namen, dus verander die niet.<\/p>\n\n\n\n<p>The worksheet &#8220;Schedule&#8221; contains the following columns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Date: Date for scheduling the workout in your Garmin Connect Calendar<\/li>\n\n\n\n<li>Workout: Lookup field for a defined workout in the Workout worksheet<\/li>\n\n\n\n<li>Comments: Commenting your Workout, this comment is also visible in your Garmin Connect Workout. Max. 512 characters<\/li>\n<\/ul>\n\n\n\n<p>The worksheet &#8220;Workout&#8221; contains the following columns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Name: Name of the workout, max. 80 characters<\/li>\n\n\n\n<li>sportType: Type of sport. Important to add also this sportType to the worksheet workoutType (explained hereunder)<\/li>\n\n\n\n<li>Description: The workout description based on the workout creator language as explained here above<\/li>\n<\/ul>\n\n\n\n<p>The worksheet &#8220;workoutType&#8221; contains the following columns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Name: Short name of the workout type<\/li>\n\n\n\n<li>Value: Reference to the Garmin Connect API definitions f.e. swimStrokeType, stepTypeId of sportTypeId. Access to the Garmin API documentation is only granted to professional developers, so getting these values is only possible via reversed engineering. So define a workout with the appropiate sport type, step type and\/or swimstroke type. Export this workout to json format and open the downloaded file in a editor\/viewer. Determine the appropiate values for sportTypeId, stepTypeId or swimStrokeTypeId or other Id&#8217;s and coupled workoutType<\/li>\n\n\n\n<li>apiType: definition of the Id type, f.e. sportTypeId or stepTypeId etc.<\/li>\n\n\n\n<li>workoutType: definition of the workoutType or excercise, also use reversed engineering to find out the appropiate values<\/li>\n\n\n\n<li>category: category of the excercise, also use reversed engineering to find out the appropiate values<\/li>\n\n\n\n<li>Description: Free description, is not used by the workout creator<\/li>\n<\/ul>\n\n\n\n<p>Werkwijze om een nieuwe sport en\/of oefening toe te voegen. stel je wil Biljarten als sport toevoegen met daarbij de oefening butage. Voeg hiervoor een rij toe aan het werkblad &#8220;workoutType&#8221;, vul in kolom &#8220;Name&#8221; bijv. &#8220;Biljart&#8221; toe, achterhaal middels reversed engineering zoals hieronder staat beschreven het ID van de sport Biljarten in Garmin Connect, vul die waarde in onder de kolom &#8220;Value&#8221;. Kies als apiType voor sportTypeId, en onder workoutType de waarde van de sport Biljart zoals je die uit Garmin Connect achterhaald hebt middels reversed engineering. De kolom Category kun je in dit geval leeg laten, en onder Description kun je zelf een omschrijving kwijt. Voeg voor de oefening &#8220;butage&#8221; wederom een extra rij toe aan het werkblad &#8220;workoutType&#8221;, vul in kolom &#8220;Name&#8221; bijv. de waarde &#8220;BUT&#8221; in als afkorting van &#8220;butage&#8221;. De kolom Value kun je leeg laten, bij apiType vul je de waarde &#8220;excerciseName&#8221; in. Achterhaal met behulp van reversed engineering de exacte benaming van de oefening &#8220;butage&#8221; uit Garmin Connect, en neem die waarde over in de kolom &#8220;workoutType&#8221;. Indien uit die reversed engeneering blijkt dat die oefening onder een bepaalde categorie valt, neem dan die waarde over onder de kolom &#8220;category&#8221;. Onder Description kun je bijvoorbeeld de nederlandse benaming van de oefening kwijt. (Het toevoegen van de sport Biljart is puur ter illustratie, je kunt deze sport in ieder geval met mijn Forerunner 955 niet toevoegen in Garmin Connect)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"56\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-1024x56.png\" alt=\"\" class=\"wp-image-3216\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-1024x56.png 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-300x16.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-768x42.png 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image.png 1146w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Reversed engineering Garmin Connect<\/strong><\/p>\n\n\n\n<p>If you want to add a new Sporttype, for example &#8220;Yoga&#8221;, you can follow the following steps.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create an Yoga workout in Garmin Connect, filled with your favorite trainingtypes as workout steps. Save it.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"447\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-1.png\" alt=\"\" class=\"wp-image-3218\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-1.png 1000w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-1-300x134.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-1-768x343.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Download the workout to your desktop and open it with notepad<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"500\" data-id=\"3219\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-2-1024x500.png\" alt=\"\" class=\"wp-image-3219\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-2-1024x500.png 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-2-300x147.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-2-768x375.png 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-2.png 1048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"666\" data-id=\"3220\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-3-1024x666.png\" alt=\"\" class=\"wp-image-3220\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-3-1024x666.png 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-3-300x195.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-3-768x500.png 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-3.png 1122w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select all text and copy it to your clipboard<\/li>\n\n\n\n<li>Open&nbsp;<a href=\"https:\/\/jsonlint.com\/\">https:\/\/jsonlint.com\/<\/a>&nbsp;and paste the text, click on &#8220;Validate JSON&#8221;. JSONLint tides and validates the messy JSON code.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"627\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-4-1024x627.png\" alt=\"\" class=\"wp-image-3221\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-4-1024x627.png 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-4-300x184.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-4-768x470.png 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-4.png 1192w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Search for sportTypeId. In this example the sportTypeId is &#8220;7&#8221; and the sportTypeKey = &#8220;yoga&#8221;<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"649\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-5-1024x649.png\" alt=\"\" class=\"wp-image-3222\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-5-1024x649.png 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-5-300x190.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-5-768x487.png 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/image-5.png 1174w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Argumenten<\/strong><\/p>\n\n\n\n<p>De workout en schedule creator kan met de volgende argumenten worden opgestart:<\/p>\n\n\n\n<p>&#8211;XLSX_filename Specify input XLSX filename, default is &#8220;workoutschedule.xlsx&#8221;<br>&#8211;output_dir Specify output dir for JSON workout files, default is current directory<br>-v, &#8211;verbose Show debug information<br>-u, &#8211;username Garmin Connect username<br>-p, &#8211;password Garmin Connect password<br>-n, &#8211;noschedule Don &#8217;t add workouts to calendar<br>-w, &#8211;noworkout Don &#8217;t add workouts to Garmin Connect (implicit &#8211;n &#8211;noschedule)<\/p>\n\n\n\n<p><strong>Secrets.py<\/strong><\/p>\n\n\n\n<p>Allereerst, het is niet veilig om gebruikersnaam en password op te slaan in een tekstbestand, maar wel heel gemakkelijk. Dus als er geen andere gebruikers gebruik maken van je laptop of desktop, best een optie en handig. Hiervoor kun je gebruik maken van de file secrets.py:<\/p>\n\n\n\n<p># Secrets file, containing Garmin Connect username and password<br><br>username = &#8220;change secrets.py or use -u argument&#8221; # change this to your Garmin Connect username<br><br>password = &#8220;change secrets.py or use -p argument&#8221; # change this to your Garmin Connect password<\/p>\n\n\n\n<p><strong>Chrome extension<\/strong><\/p>\n\n\n\n<p>Zoals in de intro reeds beschreven maakt de workout en schedule creator gebruik van de Chrome extension &#8220;Share your Garmin Connect workout&#8221; (<a href=\"https:\/\/chrome.google.com\/webstore\/detail\/share-your-garmin-connect\/kdpolhnlnkengkmfncjdbfdehglepmff\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/chrome.google.com\/webstore\/detail\/share-your-garmin-connect\/kdpolhnlnkengkmfncjdbfdehglepmff<\/a>). Deze chrome extension wordt aangeroepen middels een zogenaamde .crx file. In deze .crx file zijn het manifest, source code, html en andere bestanden van de extension gezipt. De .crx file die je van mijn Github repository kunt downloaden kan natuurlijk verouderd raken en niet meer werken met je nieuwe Chrome versie. In dat geval kun eenvoudig weg een nieuwe versie van de extension downloaden en in de map plaatsen waar je de workout and schedule creator hebt geinstalleerd. Ga als volgt te werk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install the Chrome extension &#8220;Share your Garmin Connect workout&#8221;<\/li>\n\n\n\n<li>Follow the steps of method 1 as described on https:\/\/techpp.com\/2022\/08\/22\/how-to-download-and-save-chrome-extension-as-crx\/<\/li>\n\n\n\n<li>Copy the .crx file to your workouts map<\/li>\n<\/ul>\n\n\n\n<p><strong>Bekende tekortkomingen<\/strong><\/p>\n\n\n\n<p>Multisport workouts, zoals Duathlon&#8217;s of Triathlon&#8217;s, worden niet ondersteund door Garmin Connect. Workarround is om dit als losse workouts te definieren op dezelfde dag.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Garmin Connect Workout and Schedule creator based on a Turbo language &hellip; <a href=\"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/\" class=\"more-link\">Verder lezen<span class=\"screen-reader-text\">Garmin Connect Workout and Schedule creator<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":3225,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[43],"tags":[189,75,197,195,196],"class_list":["post-3214","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domotica-software","tag-garmin-connect","tag-python","tag-schedule","tag-turbotaal","tag-workout"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Garmin Connect Workout and Schedule creator - Mijn domotica projecten<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Garmin Connect Workout and Schedule creator - Mijn domotica projecten\" \/>\n<meta property=\"og:description\" content=\"Garmin Connect Workout and Schedule creator based on a Turbo language &hellip; Verder lezenGarmin Connect Workout and Schedule creator\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/\" \/>\n<meta property=\"og:site_name\" content=\"Mijn domotica projecten\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/syds.post\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-12T07:17:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-22T14:51:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/download.png\" \/>\n\t<meta property=\"og:image:width\" content=\"225\" \/>\n\t<meta property=\"og:image:height\" content=\"225\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Syds\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Syds\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/\"},\"author\":{\"name\":\"Syds\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/person\\\/429f92898f98d9c4e01b8fad60975b21\"},\"headline\":\"Garmin Connect Workout and Schedule creator\",\"datePublished\":\"2023-04-12T07:17:32+00:00\",\"dateModified\":\"2023-06-22T14:51:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/\"},\"wordCount\":1777,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/download.png\",\"keywords\":[\"Garmin Connect\",\"Python\",\"schedule\",\"Turbotaal\",\"workout\"],\"articleSection\":[\"Software\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/\",\"name\":\"Garmin Connect Workout and Schedule creator - Mijn domotica projecten\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/download.png\",\"datePublished\":\"2023-04-12T07:17:32+00:00\",\"dateModified\":\"2023-06-22T14:51:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/download.png\",\"contentUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/download.png\",\"width\":225,\"height\":225},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/04\\\/12\\\/3214\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sydspost.nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Garmin Connect Workout and Schedule creator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#website\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/\",\"name\":\"Mijn domotica projecten\",\"description\":\"met Domoticz\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sydspost.nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#organization\",\"name\":\"Mijn domotica projecten\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Domoticz-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Domoticz-logo.png\",\"width\":256,\"height\":256,\"caption\":\"Mijn domotica projecten\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/person\\\/429f92898f98d9c4e01b8fad60975b21\",\"name\":\"Syds\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g\",\"caption\":\"Syds\"},\"sameAs\":[\"https:\\\/\\\/www.sydspost.nl\",\"https:\\\/\\\/www.facebook.com\\\/syds.post\\\/\"],\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/author\\\/wp_admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Garmin Connect Workout and Schedule creator - Mijn domotica projecten","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/","og_locale":"nl_NL","og_type":"article","og_title":"Garmin Connect Workout and Schedule creator - Mijn domotica projecten","og_description":"Garmin Connect Workout and Schedule creator based on a Turbo language &hellip; Verder lezenGarmin Connect Workout and Schedule creator","og_url":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/","og_site_name":"Mijn domotica projecten","article_author":"https:\/\/www.facebook.com\/syds.post\/","article_published_time":"2023-04-12T07:17:32+00:00","article_modified_time":"2023-06-22T14:51:23+00:00","og_image":[{"width":225,"height":225,"url":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/download.png","type":"image\/png"}],"author":"Syds","twitter_card":"summary_large_image","twitter_misc":{"Geschreven door":"Syds","Geschatte leestijd":"10 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#article","isPartOf":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/"},"author":{"name":"Syds","@id":"https:\/\/www.sydspost.nl\/#\/schema\/person\/429f92898f98d9c4e01b8fad60975b21"},"headline":"Garmin Connect Workout and Schedule creator","datePublished":"2023-04-12T07:17:32+00:00","dateModified":"2023-06-22T14:51:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/"},"wordCount":1777,"commentCount":0,"publisher":{"@id":"https:\/\/www.sydspost.nl\/#organization"},"image":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/download.png","keywords":["Garmin Connect","Python","schedule","Turbotaal","workout"],"articleSection":["Software"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/","url":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/","name":"Garmin Connect Workout and Schedule creator - Mijn domotica projecten","isPartOf":{"@id":"https:\/\/www.sydspost.nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#primaryimage"},"image":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/download.png","datePublished":"2023-04-12T07:17:32+00:00","dateModified":"2023-06-22T14:51:23+00:00","breadcrumb":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#primaryimage","url":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/download.png","contentUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/download.png","width":225,"height":225},{"@type":"BreadcrumbList","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/04\/12\/3214\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sydspost.nl\/"},{"@type":"ListItem","position":2,"name":"Garmin Connect Workout and Schedule creator"}]},{"@type":"WebSite","@id":"https:\/\/www.sydspost.nl\/#website","url":"https:\/\/www.sydspost.nl\/","name":"Mijn domotica projecten","description":"met Domoticz","publisher":{"@id":"https:\/\/www.sydspost.nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sydspost.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/www.sydspost.nl\/#organization","name":"Mijn domotica projecten","url":"https:\/\/www.sydspost.nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.sydspost.nl\/#\/schema\/logo\/image\/","url":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2020\/12\/Domoticz-logo.png","contentUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2020\/12\/Domoticz-logo.png","width":256,"height":256,"caption":"Mijn domotica projecten"},"image":{"@id":"https:\/\/www.sydspost.nl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.sydspost.nl\/#\/schema\/person\/429f92898f98d9c4e01b8fad60975b21","name":"Syds","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/secure.gravatar.com\/avatar\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g","caption":"Syds"},"sameAs":["https:\/\/www.sydspost.nl","https:\/\/www.facebook.com\/syds.post\/"],"url":"https:\/\/www.sydspost.nl\/index.php\/author\/wp_admin\/"}]}},"modified_by":"Syds","jetpack_featured_media_url":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/04\/download.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts\/3214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/comments?post=3214"}],"version-history":[{"count":7,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts\/3214\/revisions"}],"predecessor-version":[{"id":3298,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts\/3214\/revisions\/3298"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/media\/3225"}],"wp:attachment":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/media?parent=3214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/categories?post=3214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/tags?post=3214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}