Het is alweer even geleden dat ik een gedocumenteerde retrospective op mijn week deed. Maar nu doe ik het toch weer een keer. Deze week:

  • Heb ik weer een avond gesport met Zoon. We vertrokken met daglicht, dus de zomer zit er weer aan te komen. Dat was ook te merken door de temperatuur. We konden gewoon in korte broek over straat.
  • Was het na een paar koelere weken (natuurlijk precies tijdens de meivakantie) dan eindelijk weer wat warmer. Gewoon, heerlijk zonder jas over straat, koffie en lunchen in de tuin, je weet wel.
  • Heb ik een paar stevige gesprekken gevoerd over de implementatie van een portaal en app waarmee we de patiënt met een gepersonaliseerd zorgpad digitaal ondersteunen.
  • Was ik opnieuw in gesprek met het bureau dat ons kan helpen bij het selecteren en contracteren van een Medisch Alarmeringssysteem.
  • Heb ik, net als vorig kwartaal, de financiële verantwoording van het programma toegelicht aan de investeringscommissie.
  • Heb ik een dag extra gewerkt. Dat kwam zo beter uit, en het prettige gevolg is, dat ik nu de maandag na het Hemelvaartweekeinde ook vrij ben.
  • Hebben Vrouw, Zoon en ik heerlijk een rondje Gouda gedaan. Nieuwe ontdekking: koffie bij Hofje van Jongkind.
  • Hebben we nog wat in de tuin geklust.

Ik gebruik al tijden een zwart-witte versie van een selfie als Gravatar en avatar op socials en fora. Het origineel bewaar ik zorgvuldig, zodat ik daar later altijd (kleinere) versies van kan maken. Sommige sites vragen maximale afmetingen of bestandsgroottes.

Daarom had ik de gedachte om deze avatar ook om te zetten in een vectorbestand. Vectorbestanden zijn zonder verlies van kwaliteit te vergroten en te verkleinen. En ze kunnen vrij eenvoudig in het ontwerp van een website worden verwerkt.

Hoe ik de originele foto in het verleden precies heb omgezet naar zwart-wit durf ik niet meer te zeggen. Ik weet nog dat ik daar een app op mijn iPad voor heb gebruikt in een verloren speelkwartiertje. Omdat ik best tevreden was over het resultaat heb ik die bewaard en gebruik ik dat nu overal.

Het bronbestand van de avatar is een jpeg-bestand van 512×512 pixels in zwart-wit. Eerst heb ik die met een online converter omgezet naar een SVG.

Daarna heb ik het resultaat nog geprobeerd verder te comprimeren met een andere online-tool.

Het uiteindelijke resultaat is een bestand van 22KB. Niet slecht voor een amateur met een paar standaard online tools.

Binnenkort ga ik de SVG integreren op deze website. En in de toekomst ga ik misschien nog eens proberen het bestandje verder te comprimeren.

Steeds als we over de N210 rijden en we komen in de buurt van Bergambacht langs het natuurgebied De Nespolder, zeggen we tegen elkaar dat we daar eens een wandeling moeten maken. Vandaag is het dan eindelijk zover. De weersverwachting is koud, winderig en zonnig. Lekker wandelweertje, dus.

Om niet steeds een kaart, telefoon of GPS te hoeven vasthouden om de leuke paden te vinden, loop ik vandaag zoals meestal langs wandelknooppunten. Een blik op de kaart vertelt me, dat ik het rondje vandaag tegen de klok in moet lopen. Dan loop ik in het begin over verharde wegen, maar aan het eind over onverharde paden. Net als met biefstuk, bewaar ik het lekkerste stukje graag voor het laatst.

De kleine parkeerplaats staat bijna vol. Het heeft flink geregend, dus het is belangrijk om de auto op een stevige ondergrond te parkeren, zodat ik straks bij het wegrijden niet vast kom te zitten. Vanaf de parkeerplaats loop ik terug naar de provinciale weg, en sla linksaf bij het eerste knooppunt. Even verderop kom ik bij een fietserstunnel en ga opnieuw linksaf. Ik volg het fietspad en ontwijk zo nu en dan wat mannen in lycra op de racefiets. Net voor ik de Lek bereik sla ik linksaf, een halfverharde weg in. Ik ben nu bijna halverwege de route van vandaag.

voetveer
Voetveer in de Nespolder

Aan het eind van dit pad loop ik tegen het vogelkijkscherm aan van Polder Den Hoek. Er is vandaag niet veel bijzonders te zien. Ik zie alleen ganzen. Nadat ik een beetje uit de wind mijn banaan heb kunnen eten ga ik verder. Ik klim over een hek en loop de polder in. Vanaf hier is er eigenlijk geen weg, maar loop je door de weilanden. Even verder kom ik bij een voetveer. Het is zelfbediening. Of het door de harde wind komt weet ik niet, maar het is hard werken om het pontje mijn kant op te krijgen. Aan de overkant wordt het drassig. Gelukkig heb ik passend schoeisel aan en een broek die vuil mag worden.

paaltjes en bruggetjes
Paaltjes en mini-bruggetjes

Even verder laat ik de ganzen achter me, en zie ik een aantal hazen wegschieten. Ik zig-zag wat door de polder, volg de gele paaltjes, loop over wat mini-bruggetjes en klim wat over hektrapjes. Even later sta ik weer bij mijn auto. Heerlijk gewandeld. Wel even de schoenen uittrekken voor het instappen. Op weg naar huis, voor een lunch met iets warms.

Wandelknooppunten: 59 – 58 – 82 – 81 – 59

Moeilijkheidsgraad: gemiddeld

Waardering: 3/5

Download track

For years I have been reading news and blogs via RSS. At first via Bloglines and later Google Reader. When that was no longer possible, I searched for alternatives for a while. After some time with hosted FeedWrangler and self-hosted TinyTinyRSS, I eventually settled with Feedly. Until recently. The fact that a lot of my personal, private interests are processed by a company made me look out for privacy friendly options.

I usually read content on my iPhone or iPad, but sometimes also on an Mac. For phone and tablet I have been using multiple succeeding versions of the paid for Reeder app. I didn’t want to buy their Mac app, so Feedly conveniently allowed me to use their browser based app.

The latest version of Reeder supports local, device only, accounts, but also added synced iCloud Feed accounts. This provides reading across multiple devices. But not for Mac, in my case. Reading and feed management became impossible on Mac, as well as on my Windows work PC.

Conveniently, NetNewsWire is a free and open source alternative for Reeder, that also supports Mac. It allows for an iCloud account to be used across all devices. Most issues were solved. Except that my feed list is not accessible on a PC or any other non-Apple device.

To jump that last hurdle, I am currently using a self-hosted FreshRSS installation with my hosting provider. It is easily installed through Softaculous, but required changing some ModSecurity settings.

At the moment, I am using the very good Reeder app on iPhone and iPad, and NetNewsWire on a Mac. And I can fall back to any browser on any computer if I need to.

I now finally own my reading list.

Het was een rustige week. Zonder veel bijzonderheden.

Deze week:

  • Heb ik mijn boosterprik laten bijschrijven in het Gele Boekje. Je weet nooit of dat nog eens van pas komt.
  • Heb ik een demo bijgewoond van een applicatie die patiënten gepersonaliseerde zorgpaden op maat kan aanbieden en voor het ziekenhuis een digitale voordeur biedt.
  • Konden we opnieuw squashen, maar bracht ik het er niet veel beter vanaf. Zwaar verloren.

Soms wil je een ‘still’ van een Youtube video bewaren. Bijvoorbeeld om vanaf je website door te linken. Of om in een presentatie te verwerken.
Vandaag heb ik geleerd dat je heel eenvoudig een screenshot van een Youtube-video kunt bewaren.

  1. Open de video in Firefox
  2. Zoek het frame dat je wilt bewaren en pauzeer de video
  3. Klik rechts op de video. Er verschijnt nu een menu van Youtube.
  4. Klik direct nog een keer rechts op de video.
  5. In het menu dat nu verschijnt kies je voor “Momentopname”

De browser vraagt dan waar je het screenshot wil bewaren. Klaar.
Hieronder vind je als voorbeeld een snapshot van een video van Kurzgezagt over klimaatverandering.

Sinds het begin van de pandemie werk ik veel thuis. In het begin met bestaande apparatuur, en bestaand meubilair. Maar in de loop van de tijd heb ik mijn werkplek steeds een beetje verbeterd. Een van de zaken waarin ik heb geïnvesteerd, is een zit-stabureau. Via mijn werkgever kon ik met een voorschotregeling een vergoeding krijgen, maar dan had ik de keuze uit één enkel model dat me niet echt beviel. Uiteindelijk ben ik daarna terecht gekomen bij IKEA. Daar viel mijn keus op de zwarte uitvoering van het robuuste model IDÅSEN in 160×80 cm.

Het mooie daarvan is, en eerlijk gezegd was dat stiekem mede ook beetje een reden voor de keuze, dat het bureau draadloos is te bedienen. Aan de motor van het bureau zit een Bluetooth BLE module die gekoppeld kan worden met je Android of iOS telefoon. Dat biedt perspectief voor automatisering!

Bedienen met een iPhone app

LINAK, de fabrikant van de module, heeft voor de draadloze besturing van de module een eigen app “Desk Control” gemaakt. Die heb ik geprobeerd en dat werkt op zich prima. Maar de app ondersteunt geen Siri-opdrachten. Maar er zijn inmiddels ook onafhankelijke ontwikkelaars die een alternatieve app hebben ontwikkeld. Een beetje zoeken in de AppStore levert meerdere resultaten. De app waar ik eindelijk op ben uitgekomen is Idasen Controller van Tiago Alves. Een gratis app (want ik ben Nederlander), die ook nog eens keurig Siri-opdrachten ondersteund. En inderdaad, daarmee is het gelukt het instellen van mijn bureau te automatiseren.
Nadat je de app hebt geinstalleerd, moet je deze calibreren, zodat de app weet welke hoogte in centimeters bij de laagste stand hoort. Na de calibratie kun je eenvoudig voorkeuren instellen. Ik heb er 3 ingesteld: ‘Stahoogte’, ‘Zithoogte’ en ‘Halverwege’. Die laatste, daar kom ik verderop op terug.
Nadat je de hoogtes in de app juist hebt ingesteld, kun je ze met een klik op het scherm kiezen. Magisch. Maar dat kan beter.

Bedienen met Siri-opdrachten

Idasen Controller heeft ondersteuning voor Siri-opdrachten. Dat zijn eenvoudige tot heel complexe automatiseringen, die je zelf kunt maken zonder programmeerkennis. Die opdrachten maak je eenmalig, en daarna kun je ze steeds opnieuw opstarten. Ik heb apart opdrachten gemaakt om het bureau in te stellen op zithoogte en op stahoogte. Dat doe je als volgt.
Start op je iPhone de app Opdrachten. (Installeer deze eerst als je hem ooit verwijderd hebt.)
Maak een nieuwe Opdracht, geef deze een naam (bijvoorbeeld ‘Ik wil staan’ en kies een icoon (bijvoorbeeld een pijltje omhoog).
Voeg een taak toe aan de nieuwe opdracht. Kies de Idasen Controller app en kies de actie ‘Move desk to position’. Kies een hoogte (bijvoorbeeld ‘Stahoogte’) en zet het schuifje ‘Toon bij uitvoeren’ uit.
Test de opdracht, door rechtsonder op het driehoekige afspeel-symbool te klikken. Als het goed is verandert nu de hoogte.
Als de opdracht werkt, plaats je daarvan een snelkoppeling op je beginscherm. Dan kun je namelijk met 1 klik de opdracht starten.
Open daarvoor het ‘Delen’ menu onderaan. Kies voor ‘Zet op beginscherm’ en kies voor ‘Voeg toe’.
Maak een opdracht voor zowel stahoogte als zithoogte. Nu heb je 2 iconen op je beginscherm. Eén voor stahoogte en één voor zithoogte. Leuk! Maar dat kan nog leuker!

Bedienen met je stem

Je kunt nu je bureau handmatig instellen met de knoppen van de module, met de app, of via de snelkoppelingen op je beginscherm. Maar hoe gaaf is het, om je bureau in beweging te zetten met alleen je stem. Daarvoor is deze laatste stap nodig.
Iedere Siri-opdracht kun je ook met je stem activeren. Standaard door “Hé Siri” te roepen, gevolgd door de naam van de opdracht. Dus als de opdracht “Ik wil staan” heet, kun je deze direct activeren met je stem. Wil je een ander commando gebruiken dan de naam van je opdracht, dan kun je via Instellingen het commando aanpassen naar iets anders.
Probeer maar. Roep “Hé Siri, ik wil staan!”. Bij mij toverde dat de eerste keer een enorme glimlach op mijn gezicht.
Helaas ben je er nog niet helemaal. Weet je nog van die tussenstand “Halverwege”? Die komt nu aan de beurt. Acties in opdrachten die je met je stem activeert, mogen niet langer dan 10 seconden duren. En het bureau heeft helaas 15 seconden nodig om van hoog naar laag te bewegen. De enige oplossing is dus, om het bureau in twee stappen in hoogte te verstellen.
Open een van de opdrachten en voeg vooraan een extra actie ‘Move desk to position’ toe, maar kies nu de stand ‘Halverwege’. Je begrijpt vast wat er dan gebeurt. Die twee stappen zijn iets minder magisch, maar het werkt wel.
Als je het een paar keer hebt geprobeerd, wil je nooit meer anders.
Een tenslotte. Laat je collega’s tijdens een Team-vergadering eens zien hoe je je bureau met je stem instelt. Succes en plezier verzekerd.

De toekomst: automatisering met Home Assistant

Op dit moment kan ik het bureau nog niet instellen via Home Assistant. Daarvoor is een ESP Home module nodig die via Bluetooth kan verbinden met het bureau. Als ik dat voor elkaar krijg, kan ik het verstellen van het bureau zelfs automatiseren. Bijvoorbeeld het bureau automatisch op stahoogte instellen als ik 1 uur gezeten heb, of als ik deelneem aan een Teams-vergadering.
De mogelijkheden zijn oneindig. Een leuk projectje voor een rustig moment in een winter.

Deze week:

  • Deed ik een zelftest, omdat ik in het weekeinde een scherpe keel had wat moest hoesten. Gelukkig negatief.
  • Ronde ik de voorbereidingen af voor een demo door een leverancier van een centraal alarmeringsplatform die we in gedurende de Slimme Zorgestafette 2022 organiseren.
  • Hebben we de verjaardag van De Vrouw opnieuw kleinschalig moeten vieren. Laten we hopen dat er volgend jaar meer mogelijk is. Dat is alleen lastig te voorspellen; Corona gedijt goed in de winter, maar wie weet is het virus dan eindelijk uitgedoofd.
  • Heb ik samen met De Zoon voor het eerst in lange tijd weer squash kunnen spelen. Laat ik nu in de ochtend mijn rug verdraaien. Als een oude man heb ik gegeven wat ik kon, maar het mocht niet baten. We pakken ons wekelijkse avondje weer op, al gaan we nu van een half uur naar drie kwartier.
  • Nu de maatregelen wat versoepeld zijn, konden we weer naar de open winkels toe. We hebben een rondje gemaakt door Dordrecht en de Voorstraat.
  • Heb ik mijn website voor de vijfhonderdvierenzeventigste keer overgezet naar een nieuw platform, WordPress opnieuw.

Coronadashboard in Home Assistant

The Dutch government provides a Coronadashboard to the general public with statistics about the pandemic. It contains, among others, data on the vaccination rate and the number of contaminations. I wanted to know if it was possible to integrate a dashboard in my own Home Assistant instance.After some searching I found that the data is also available as a JSON feed.There is a feed for the whole country, one for each safety region and one for each municipality.I’m interested in the nationwide statistics, but also in those for my local community.

Find country feed

The feed for the whole country is simply available at https://coronadashboard.rijksoverheid.nl/json/NL.json.

Find safety region feed

Each safety region (“veiligheidsregio“) has it’s own feed.
You can find the id by opening the regular Coronadashboard, scroll down and search for its name. The link for the page end with the id. For example, the link for Amsterdam-Amstelland is https://coronadashboard.rijksoverheid.nl/actueel/veiligheidsregio/VR13, so the id is VR13.
The feed for the safety region is available at https://coronadashboard.rijksoverheid.nl/json/<id>.json, where you need to replace <id> with the one you found.
The feed for Amsterdam-Amstelland is https://coronadashboard.rijksoverheid.nl/json/VR13.json.

Find the feed for your municipality

Each municipality (“gemeente”) has it’s own feed.
You can find the id by opening the regular Coronadashboard, scroll down and search for its name. The link for the page end with the id. For example, the link for Amsterdam is https://coronadashboard.rijksoverheid.nl/actueel/gemeente/GM0363 so the id for Amsterdam is GM0363.
The feed for the municipality is available at https://coronadashboard.rijksoverheid.nl/json/<id>.json, where you need to replace <id> with the one you found.
The feed for Amsterdam is https://coronadashboard.rijksoverheid.nl/json/GM0363.json

Get the data

First, you need to get the data. The resulting json file is big, so it’s wise to only get it once and then pull all information from it within Home Assistant. The limit for a sensor states is 255 characters, so the data needs to be put into attributes.
I only get some specific attributes, to prevent filling up my database too quickly. Some attributes have data for almost 2 years now.
The feed is only updated daily, so there’s no need to get it frequently. I decided to get it every hour nevertheless, since it’s not always updated at the same time of day and I want to have the data as soon as possible.


sensor:
  - platform: rest
    name: Coronadashboard Landelijk
    resource: https://coronadashboard.rijksoverheid.nl/json/NL.json
    method: GET
    scan_interval: 3600  # seconds; once per hour
    value_template: "OK"  # the default json would exceed 255 character limit
    json_attributes:
      - last_generated
      - difference
      - vaccine_coverage_per_age_group_estimated
  # GM0363 = Amsterdam
  # Search for yours at https://coronadashboard.rijksoverheid.nl/
  #
  - platform: rest
    name: Coronadashboard Lokaal
    resource: https://coronadashboard.rijksoverheid.nl/json/GM0363.json
    method: GET
    scan_interval: 3600  # seconds; once per hour
    value_template: "OK"  # the default json would exceed 255 character limit
    json_attributes:
      - last_generated
      - difference
      - vaccine_coverage_per_age_group

Update sensors with data

After you have fetched the data, you can create template sensors with specific values from the results.


template:
  - sensor:
      - name: "Vaccinatiegraad 18+ Landelijk"
        unit_of_measurement: "%"
        icon: mdi:needle
        attributes:
          last_generated: >
            {{ as_local(
                 state_attr('sensor.coronadashboard_landelijk',
                 'last_generated')
                 | as_datetime) }}
          updated: >
            {{ as_local(
                state_attr('sensor.coronadashboard_landelijk',
                'vaccine_coverage_per_age_group_estimated')
                ['last_value']
                ['date_unix']
                | as_datetime) }}
        state: >
          {{ state_attr('sensor.coronadashboard_landelijk',
            'vaccine_coverage_per_age_group_estimated')
            ['last_value']
            ['age_18_plus_fully_vaccinated']
          }}
      - name: "Positieve testen Lokaal"
        unit_of_measurement: "geteld"
        icon: mdi:test-tube
        attributes:
          last_generated: >
            {{ as_local(
                 state_attr('sensor.coronadashboard_lokaal',
                 'last_generated')
                 | as_datetime) }}
          updated: >
            {{ as_local(
                state_attr('sensor.coronadashboard_lokaal',
                'difference')
                ['tested_overall__infected_moving_average']
                ['old_date_unix']
                | as_datetime) }}
        state: >
          {{ state_attr('sensor.coronadashboard_lokaal',
           'difference')
            ['tested_overall__infected_moving_average']['old_value']
          }}
      - name: "Positieve testen per 100k Lokaal"
        unit_of_measurement: "geteld"
        icon: mdi:test-tube
        attributes:
          last_generated: >
            {{ as_local(
                 state_attr('sensor.coronadashboard_lokaal',
                 'last_generated')
                 | as_datetime) }}
          updated: >
            {{ as_local(
                state_attr('sensor.coronadashboard_lokaal',
                'difference')
                ['tested_overall__infected_per_100k_moving_average']
                ['old_date_unix']
                | as_datetime) }}
        state: >
          {{ state_attr('sensor.coronadashboard_lokaal',
           'difference')
            ['tested_overall__infected_per_100k_moving_average']['old_value']
          }}