Uitgelicht

Using Perl for MS Graph

Nowadays Perl isn’t the sexiest language on the internet. But it is, and has been for a long time, my favorite scripting language. Not that I’m a perfect programmer in Perl, not by a long shot. But I’m far more at ease with Perl than with something like Node-JS.

For some time now I have been doing administration work in our Microsoft 365 tenant. Used Powershell for that mostly. But lately MS Graph is pushed a bit as the way to do things in the tenant. So, I started learning to do things with MS Graph API calls and learned that it is nothing more than HTTP requests made to an endpoint. Like getting weather info from the “Buienradar API“.

Examples I found kinda always tend to use Node-JS. And I did get some work done using that. But Node-JS is awkward to me, going back to Perl felt like coming home.

This is, will be, a series of articles describing my quest to get “things” working in Perl. You can see my code on https://github.com/peter-kaagman/msgraph-perl.

Stay tuned for more.

Articles in this serie

App registration in Azure.: Nothing goes in Azure without a registration. Not the most fun part, but necessary to get things going.

App registration in Azure.

First things first: You need to register your app in Azure. You could let a user log in to your tenant. But this is cumbersome for scripts running from the command line. Running it automated, via cron or such, would be hard if possible, at all. So, register your app.

When you’re done you should have the following information:

Tenant id855bb29f-e023-42ed-9a7e-8a5928496f2a
Application idf5ec7b7d-b950-4bb2-bf5d-2eef038312f8
Application secretkXo8Q~vtAKEokWHOiTduq6qxqDDPYZ-zRCU5.as6
Login endpointhttps://login.microsoftonline.com/[tenant_id]/oauth2/v2.0/token
Graph endpointhttps://graph.microsoft.com
Values are samples

The process of registering an app is documented quite wel. For instance, this site. But it always comes down to registering your application and creating secrets for it. I’ll walk you through both and give you my considerations.

App registration

Below a screenshot of the Azure app registrations in the Azure Active Directory for my development tenant. As you can see there is just one registration for “TestBot”.

A new Azure app registration can be made by clicking on “New registration”. You wil be prompted for some information:

To be quite honest: I’m not sure if it matters a whole lot what you fill in here. I always give a descriptive name, choose for “single tenant” acces and leave the redirect URI blank. The application is going to connect with the app-id and app-secret. Users do not login interactively.

After you click “register” you do get some information:

Please take note of the “Application (client) ID” and “Directory (tenant) ID”. You will need those later.

Keep your registrations as specific as possible. Don’t create a registration which will be used by several apps. Be task specific. That way you can revoke an apps access by removing the registration.

Creating a secret

For an app you’ll need a client secret (or certificate). To make a secret click on “Add a certificate or secret” , click on “New client secret”, fill in name for the secret and choose how long you want the secret to be valid. That’s it, nothing more to it.

Copy the hex string which is given under “Value”. This is the passphrase, you can’t look this up later.

You could also use a certificate. I’ve not tested that. You’re on your own.

Application permissions

You can use the app-id and the app-secret to authenticate you app with MS Azure. But this is only half the work: you’ll have to authorize the app to do “something” with the Graph API.

Authorizations are managed in de “API permissions” section:

Here you see that the default MS Graph permission is “User.read”. Click on “Add a permission” to add a permission. After clicking on “Microsoft Graph” click on “Application permissions” since we are going to use an app to connect to MS Graph.

For now I add “Group.Read.All”, since I’m going to read the groups in the tenant. I can always add persmissions when needed. Please note that admin consent is required for this. This means a tenant administrator has to consent with this persmission.

You can click on “Grant admin consent for …” to consent. Duh 😀

Permissions is a bit of a bitch. It’s not always clear up front what permission you need to do a certain task. Don’t walk into the pitfall of granting too many permissions. As always, it’s better to give as little as possible. Limit the damage your app can do when going south. Read the documentation for a certain function before granting rights.

Endpoints

Finally, you’ll need 2 endpoints. You can check them for your tenant by clicking on “Endpoints” on the “Overview” page.

You need the “OAuth 2.0 token endpoint (v1)” for authenticating your app and the “Microsoft Graph API endpoint” to make the actual API calls.

WordPress updaten

Inleiding

Om WordPress te updaten gebruik ik een lokale gebruikers account die via SSH verbinding kan maken. Deze methode heb ik ooit ergens gevonden, maar kan inmiddels niet meer terug vinden waar. Ik kijk het dan maar af van een bestaande server waar het werkt. En dat is altijd weer een ontdekkingsreis. Ik dacht documenteer het zelf maar eens.

De gebruikers account

  • Ik maak op de server een gebruiker aan
  • Creëer keys voor deze gebruiker zonder passphrase
  • De keys verplaats ik naar de home directory van de gebruiker
  • Rechten worden daarom 640
  • Eigendom wp-user:www-data
  • De public key voeg ik toe aan ~/.ssh/authorized_keys
  • Ik maak een keer verbinding met localhost om deze in ~/.ssh/known_hosts te krijgen

De WP installatie

  • De complete installatie map van WordPress wordt eigendom wp-user:wp-user
  • De map downloads word eigendom wp-user:www-data

In het configuratie bestand komt de volgende toevoeging:

define('FTP_PUBKEY','/home/wp-user/id_rsa.pub');
define('FTP_PRIKEY','/home/wp-user/id_rsa');
define('FTP_USER','wp-user');
define('FTP_PASS','');
define('FTP_HOST','127.0.0.1:22');

In WordPress wordt de plugin SSH SFTP Updater Support geïnstalleerd.

Tot slot

Om WordPress vervolgens te updaten kies je voor de methode SSH. Dit zou keurig moeten werken nu.

SchoolLink: Een introductie

School Data Sync

Onderstaand artikel is een bericht welke ik eerder gepost heb op LinkedIn. Het is de introductie van een project wat ik SchoolLink noem. De koppeling tussen een leerlingvolgsysteem (Magister) en Office 365.

Sinds 2001 werk ik voor een VO school in Hoorn: het Atlas College. Zoals veel organisaties zijn ook wij bezig met Office 365. Een boeiend product om mee bezig te zijn. Maar het wordt leuker: al een tijdje heeft MS een, voor een school, interessante tool ontwikkeld: School Data Sync (SDS).

SDS is een uitbreiding op de Azure Active Diretory (AAD) waardoor er informatie opgeslagen kan worden over:

  • Scholen
  • Docenten
  • Leerlingen
  • Lesgroepen
  • Leerlingen roosters
  • Docenten roosters

Vervolgens worden er in de O365 werkruimten gecreëerd per lesgroep waarbij de docent eigenaar is en de juiste leerlingen lid zijn. WOW!

De informatie om SDS te voeden kan komen uit het School Informatie Systeem (SIS), in ons geval Magister. En dan volgt de angel: voor Magister bestaat er geen koppeling met SDS.

Dit betekent dat je aangewezen bent op het maken van CSV bestanden in Magister om deze vervolgens te importeren in SDS. Aan de O365 kant is voor dit doel tooling aanwezig. Niet echt een klusje wat ik op mijn bord zou willen hebben. Het initiëel aanmaken is al een hele klus, laat staan het bijhouden van de mutaties in de loop van het schooljaar.

Dit moet anders kunnen. Er moet een middleware geschreven kunnen worden die informatie betrekt uit het SIS om deze vervolgens aan te bieden aan SDS. Daar heb ik dan ook mijn ontwikkel project voor de komende tijd van gemaakt. Voorlopig noem ik het SchoolLink.

Jullie worden van harte uitgenodigd feedback te geven op dit idee, dit artikel.

Site Bucketlist

Kick the bucket
Kick the bucket

Als ik in de auto zit denk ik altijd na over van alles en nog wat. Zoals vandaag over mijn (deze) site. Vragen en als “wat wil ik er mee” en “wat wil er op zetten” kwamen voorbij. Nu ben ik wel iemand die “ToDo” lijstjes nodig heeft, ik ben af en toe nogal warrig, om “on track” te blijven. En ik realiseerde mij dat ik best wel een “ToDo” voor de site kan maken. Ik realiseerde mij echter dat een “ToDo” voor deze site meer een “Bucketlist” is dan een “ToDo”. Het onderscheid? Een “ToDo” is meer iets wat je “moet” doen. Terwijl een “Bucketlist” iets is wat je “wil” doen, before you kick the buck.

Een “Bucketlist” dus…

  • LedLight: Een ledstrip aansturen met een lichtgevoelige cel en een bewegingssensor. Kleur instelling via een website op de controller
  • Oude site: Inhoud van mijn oude site overbrengen naar deze nieuwe. Inhoud waar mensen (blijkbaar) nog altijd naar zoeken, of inhoud waar ik zelf trots op ben.
  • Slimme meter: een controller aansluiten op mijn slimme meter om het energie verbruik real time te kunnen zien/bijhouden.
  • Een keer uitleggen waar die naam bilbos-stekkie nu eigenlijk vandaan komt.
  • SchoolLink: Een serie post over het systeem wat ik gemaakt heb om Magister te koppelen aan MS School Data Sync (SDS)

LedLight: het voedingscircuit

De voeding van het LedLight project. Van 12Volt naar 5Volt en zelfs 3.3Volt.

7805 Spanningsregelaar
7805 Spanningsregelaar

Alles begint met de basis. Voor  een elektronica project is dat het voedingscircuit. Nou ja… eigenlijk begint het met inspiratie om iets te maken… maar goed. Ik vind de voeding een goed startpunt voor dit project.

De voeding baseer ik op een schema dat ik ooit opgepikt heb toen ik een “Arduino op een breadboard” aan het maken was. Dezelfde principes pas ik nu wee toe, echter de basis is anders. Het uiteindelijke project zal een led strip moeten voeden. De led strip die ik heb moet gevoed worden met 12V.

Omdat ik maar één voeding wil gebruiken (12V) wil ik de ESP8266 voeden vanuit het 12V circuit. Volgens de specificaties van Sparkfun kan ik de Thing voeden via de “Vin” poot. Deze is aangesloten op de 5V van de USB poort. Via een 3.3V spanningsregelaar kan hij de controller voeding geven. Het lijkt me dan ook logisch om een 5V spanningsregelaar te gebruiken om de ESP8266 te voeden. Uiteindelijk heb ik dan 3 voedingscircuits:

  • 12V van de oorspronkelijk voeding voor de LED strip
  • 5V om de controller te voeden
  • 3.3V vanuit de controller.

Of ik die laatste ook nodig heb weet ik nog niet.

Op een breadboard ziet dat er als volgt uit:

12V naar 5V voeding
12V naar 5V voedingcircuit

Is redelijk simpel allemaal. Op de onderste rail staat dus 12V. Op de bovenste rail 5V. Elke rail is voorzien van een 10uF condensator om de spanning af te vlakken.
De aarde rails zijn met elkaar verbonden. Voed je controller nu niet vanaf de 12V rail. Dat heb ik geprobeerd met een Adafruit ESP32… en dat ging niet goed. Dat is ook de reden voor mij om de ESP8266 te gebruiken. Deze is via de Vin te voeden, bij de ESP32 heb ik die mogelijkheid niet gevonden (moet waarschijnlijk eens beter zoeken als ik een nieuwe heb).
De LEDs zijn vooral handig zolang je zit te knoeien met het board, zo zie je direct of er sluiting is. De ESP8266 wordt gevoed vanaf de 5V rail, maar doet uiteraard nog helemaal niets. Dat komt volgende keer als we een derde LED gaan dimmen.

De ander berichten in deze categorie:

LedLight: een projectje

SMD 5050 Led strip
SMD 5050 Led strip

De laatste 2 jaar of zo ben ik geboeid geraakt door Arduino en verwanten. Ik heb veel geknoeid met diverse sensoren: temperatuur, vochtigheidgraad en luchtdruk. Dit dan vervolgens “uploaden” naar een server om er weer MRTG grafieken van te kunnen maken. Echt wel dingen die ik leuk vind om te doen. De laatste tijd ben ik echter bezig met LED strips. Nu wilde mijn vriendin dat het licht aangaat als zij de keuken inloopt. Dus ik dacht dat ga ik maken… en ik noem het LedLight.

Het is idee is dus om een LED strip automatisch aan te laten gaan zodra je de keuken inloopt. Waarschijnlijk is dit op te lossen met een PIR sensor. Het licht mag alleen aangaan als het nodig is. Het lijkt me  zinloos om het zonnetje bij te lichten. Er moet dus ook een lichtgevoelige cel bij komen.  Als laatste moet uiteraard de kleur en de helderheid van de LED strip geregeld kunnen worden.

De controller (ESP8266 Thing waarschijnlijk) zal dus een website tonen waar al deze dingen bij elkaar komen: treshold voor de lichtgevoelige cel, kleur en helderheid van de LED strip. En als ik alles aan de gang krijg op een breadboard… en de code een beetje goed loopt… zelf een PCB maken? Een hat voor de Thing?

Sparkfun ESP8266 Thing dev
Sparkfun ESP8266 Thing dev

Waarschijnlijk kun je een dergelijk ding zo bij Ali kopen… Action zelfs? Maar wat is de lol daarvan.

Alle berichten over dit project komen in de categorie “LedLight”.

Stay tuned

De andere berichten in deze categorie:

Slackware init is terug

Slackware Linux

Hoezo “Slackware init is terug”? Is het weggeweest dan? Nee natuurlijk niet! Maar het artikel was misschien wat moeilijk te vinden de laatste tijd. Ik had het er in mijn openingsblog al over: sommige oude artikelen komen gewoon weer terug op de site. En dit is zo’n oud artikel dat ik graag terug zie op mijn site.

Ik heb ooit de tijd genomen om uit te zoeken hoe een Linux systeem (Slackware dus) boot. Daar heb ik een ooit een forumpost over gemaakt op het Nedlinux forum, en van daaruit is dat een artikel geworden op mijn site.

Sinds de overgang naar WordPress is het eigenlijk slecht te vinden geweest. Al heb ik wel gemerkt dat er nog altijd naar gelinkt wordt…. wacht ff… Zojuist even opgezocht bij Google. Er zijn 39 sites die linken naar de Engelse versie van het artikel. Bij deze dan:

De nederlandse versie en de engelse versie van dat artikel. De artikelen staan weer op de orignele plek zodat eventuele links weer/nog werken. Het is echter niet een integraal onderdeel van de WordPress site. In die tijd schreef ik artikelen in SGML. Geïnspireerd door “The Linux Documentation Project“.

Aan de Google Home Mini

Google Home Mini zwart

Afgelopen weekend heb ik een Google Home Mini gekocht. Leuk ding, kan ik melden! De “hey Google” zus en “hey Google” zo’s waren niet van de lucht. Nu heb ik al jaren geen versterker of radio in de woonkamer staan. Hij werd dan ook al snel gebruikt voor het afspelen van muziek en radio (mijn oudste sloot gelijk een Spotify premium af). Hij sloeg dus goed aan.

Alleen… dan is het geluid van een Google Mini wel een beetje enkel. Jammer, maar wat wil je ook met zo’n klein apparaat. Dus de cadeau bon van mijn werk erbij gepakt en naar de lokale Mediamarkt: een soundbar uitgezocht met BlueTooth (LG 2.1 SJ4).

LG 2.1 Soundbar SJ4

Viel dat even tegen… Zolang het geluid afgespeeld werd op de mini zelf was er niets aan de hand. Zodra het echter via BlueTooth gestreamed werd naar de soundbar begon het geluid te hakkelen. Frustratie! Het streamen naar een andere BlueTooth speaker (JPL dingetje van mijn dochter) gaf hetzelfde effect. Streamen vanaf mijn telefoon ging prima. Conclusie: de BlueTooth van de Google Home Mini heeft een defect. Terug naar de MediaMarkt ermee.

Daar kreeg ik te horen dat het een vreemde situatie was. Ze hadden nog nooit meegemaakt dat een Google Home Mini defect was. Om mij tegemoet te komen wilden ze hem wel omruilen. Prima… daar kwam ik per slot van rekening voor. Een andere Mini meegekregen dus.

En jawel: doet het prima!

Daar zijn we blij mee

Moraal? Laat je niet wijsmaken dat de Google Home Mini nooit kapot is. Het is gewoon “Made in China”. Chinezen maken blijkbaar ook fouten. What else is new? We gaan gewoon verder in de “domotica” ontdekkingsreis: verder met het aansturen van de lampen en zo. Maar daarover later meer.

Hallo wereld.

Inderdaad “Hallo wereld”! Daar lijkt het altijd wel mee te beginnen toch? In elke computer taal of dialect was dat wel het eerste wat ik maakte. Dus waarom hier niet?

Niet dat Bilbo’s Stekkie al niet bestond… dat stekkie is er zelfs al jaren . Eerst gemaakt met pure HTML, geleerd met boek “HTML voor dummies”, later steeds meer actieve inhoud. Het onderwerp was meestal iets over (Slackware) Linux dat ik geleerd had en wilde delen met de wereld. Van lieverlee kwam er ook steeds meer actieve content bij. Als ik mij goed herinner was het eerste dat ik maakte een PHP script om een foto album te maken. Bedoeld om de foto’s van de NedLinux meetings een beetje handig te kunnen delen.

In die tijd ben ik ook websites gaan maken ter ondersteuning van allerlei processen bij mijn werkgever, het Atlas College in Hoorn. Eerste wat ik daarvoor gemaakt heb, ca. in 2001, is een portal om de aan- of afwezigheid van collega’s te kunnen delen. En om het leuk te maken: op je verjaardag jouw hoofd als achtergrond. Momenteel zijn we bezig met de overgang naar O365 en hoor ik dat mijn portal gemist wordt. Het ziet er inmiddels een beetje bejaard uit, maar het voorzag blijkbaar nog altijd in een behoefte.

Inmiddels besteedde ik weinig tijd meer aan mijn persoonlijke website. Tot mijn vriendin een website wilde. Ik heb nog even getwijfeld of ik zelf iets in elkaar zou draaien maar besloot al snel een WordPress voor haar op te zetten: HappyMinds. Om haar een beetje te kunnen ondersteunen heb ik toen mijn persoonlijk website opgebouwd naar WordPress. Die site is nooit goed van de grond gekomen. Ik heb hem meer gebruikt om te experimenteren dan er echt iets mee te doen.

Tijd om de boel eens door te luchten. Fresh start. Goed spul van de oude site, daar waar ik aan gehecht ben, komt terug hier. Maar ook nieuw spul. Waarschijnlijk artikelen over mijn nieuwe hobby: Arduino achtige dingen.

Stay tuned!