CHUVASH.eu

CHunky Universe of Vigourous Astonishing SHarepoint :)

Tag Archives: python

Monitoring Microsoft 365 using Raspberry Pi and M365 CLI

I would like to show you my recent hobby project with a raspberry pi, a unicorn phat and the powerful cli-microsoft365: A simple monitoring solution of Microsoft 365 Services.

Status of some important services in Microsoft 365

In essence, I put the unicorn phat onto the raspberry pi zero w and wrote this python script:

https://github.com/mirontoli/tolle-rasp/blob/master/python_scripts/unicorn03_m365.py

The python script checks the service status every five minutes and shows it with colors on the unicorn phat.

Color coding

Since the unicorn phat is just a grid of 8×4 rgb leds, I needed to color code the different service statuses (more on the statuses later in this post). I came up with these color combinations. It doesn’t matter what combinations they are as long as they mean something to you (or as long as you can decode them).

  1. 🟩 🟩 🟩 🟩 ServiceOperational
  2. 🟩 🟩 🟩 🟨 ServiceRestored
  3. 🟪 🟪 🟪 🟪 Investigating
  4. 🟩 🟩 🟩 🟪 FalsePositive
  5. ⬜️ ⬜️ ⬜️ ⬜️ InformationUnavailable
  6. 🟥 🟥 🟥 🟥 ServiceInterruption
  7. 🟥 🟥 🟥 🟨 ExtendedRecovery
  8. 🟥 🟥 🟨 🟩 ServiceDegradation
  9. 🟩 🟩 🟩 🟦 PIRPublished
  10. 🟥 🟨 🟨 🟩 RestoringService

ServiceStatus

There is a list of all possible statuses you can get for Microsoft 365 Services, and it is here:

cli-microsoft365

Install the cli-microsoft365 npm package globally.

sudo npm i -g @pnp/cli-microsoft365

You have to log in, admin consent (if you run this for the first time) and then you can get the status of the Microsoft 365 Services by running:

m365 tenant status list

Services

There are many services in Microsoft 365. I choose the 8 most important ones (from my point of view), because there are only 8 rows on the unicorn phat, you can choose your services and order them as you prefer of course. Beware the spelling and the casing:

  1. SharePoint
  2. microsoftteams
  3. Exchange
  4. OneDriveForBusiness
  5. yammer
  6. Forms
  7. PowerBIcom
  8. Intune

Assembling the hardware

I had my raspberry pi zero w, with raspberry pi os already installed. I attached the unicorn phat using solderless pogo pins. I found a little white cardboard box, cut out a rectangular hole for the unicorn phat and glued the raspberry pi with unicorn inside the box. On the front side I put a sticker with the actual service names for every led row. I connected it to the power, ran the script.

Only three pins are needed.
I tested it first without a box.
I glued the hardware on the inside of the cardboard with a glue gun.
Exploring the @pnp/cli-microsoft365.

Other tips and tricks

The pogo pins were to loose and the leds did not work. I had to shorten the plastic holders a little to tighten the the pins.

Login to cli-microsoft365 as sudo

When I explored the m365 commands, it worked perfectly. My login was cached. Then I needed to run my scripts as sudo, since it requires communication with GPIO pins and the unicorn phat. It didn’t work. The login cache is in different place if you run as sudo. Obvious, when I look at it afterwards, but it took some time to realize that. So, if you are going to do the same, just make sure you log in to m365 as sudo as well, before running the script:

sudo m365 login

Pinout

This web resource is gold, it shows the pinout and connections to many hats etc:

You only need three pins:

  • 5V Power (Pin 2)
  • Ground (Pin 6)
  • GPIO 18, Data (Pin 12)

subprocess in python

m365 is a command that you can run in terminal, from a python script I use subprocess to call it and get the results.

Running the script even when you log out

start the script with nohup:

nohup python3 unicorn03_m365.py &

Vår robot Stefan

Roboten Stefan

Här är historian om Stefan, en robot jag och barnen har jobbat på under den senaste månaden. I en sann DIY-anda vill jag skriva om vårt projekt på bloggen och förhoppningsvis inspirera andra att utforska det. I och med projektet innebär en hel del pyssel, så är det lämpat i princip för alla åldrar.

Även om allting togs fram parallellt och stegvis (“i iterationer”), kommer projektet presenteras det i förenklad ordning

  • Idé, hur allting uppstod
  • Hårdvara, material som vi använt
  • Pyssel, utklippning, måleri etc
  • Mjukvara (och elektroniken)
  • Lärdomar, diverse insikter vi har fått på vägen

Idé

Vi har en microbit v2 som vi har letat användning för. Microbit v2 har en mikrofon och en liten högtalare, definitivt en enorm fördel om man vill få barn med på pysslandet med elektronik. Jag hade sett någonstans på nätet om figurer man kunde göra av mjölkkartonger. “Stefan” då, varför just det namnet? Min fyraåriga dotter brukade skylla på Stefan om det var “någon” som stökade till, råkade trampa på någon annans fötter och sånt. “Det var inte jag, det var Stefan” brukade hon säga ett tag. Så vi kände att vi behövde ge Stefan en kropp, ett ansikte för att göra en rolig grej av det. Under arbetet med roboten har betydelsen av Stefan minskat dock. Roboten behöll sitt fina namn – Stefan – i alla fall.

en enklare gif

Hårdvara

Det här var vad vi använde. Det finns miljontals andra material-kombinationer som kan funka. Tipset är att se vad man har hemma.

Ingredienser

  • Mjölkkartong, 1,5 L
  • Microbit v2
  • 1 Servo-motor (180 grader)
  • 2 Krokodilklämmor
  • 1 batterihållare för 2xAAA-batterier för att driva microbiten
  • 1 batterihållare för 4xAAA-batterier för att driva servon
  • Diverse sladdar
  • Hobbyfärg
  • Elastisk tråd (pärlarmbandstråd)
  • Batterier 6xAAA (vi har laddningsbara och kan ladda dem då och då när roboten blir “trött”)

Verktyg:

  • Sax
  • Limpistol
  • Pensel
  • Microsoft MakeCode för Microbit (gratis som webbapplikation eller Windows-app). Windows-app har fördelen att man kan skriva till microbiten direkt, utan att ladda ner det först, plus att det kommer ihåg dina senaste projekt

Pyssel

Roboten Stefan skulle säga “Hej” och han måste kunna öppna munnen. Det första vi gjorde var just att klippa ut munnen. Vi klistrade fast servon (efter långa undersökningar i vilken vinkel och hur mycket den rörde sig). Vi använde limpistol för att sätta fast servon. För att munnen skulle stängas, följa med servon tillbaka, knöt vi läppen till servon med en rosa elastisk tråd (den har man för att göra pärlarmband bland annat).

Vi satte fast servon med limpistol.

Roboten Stefan skulle också kunna visa med sin “näsa”. Vi gjorde ett fyrkantigt hål för microbitens ledlampor. För knapparna och A och B gjorde vi små hål. På det sättet kunde man jacka in microbiten in i de hålen så att det höll sig fast. Knapparna blev irisar i Stefans ögon senare.

På baksidan gjorde vi ett runt hål för att Stefan kunde gå på toa 💩. (Det var inte min idé 😜).

Stefan behövde också ett större hål på baksidan för att stoppa in elektroniken.

Målningen var väldigt kul och det gjorde vi i många omgångar (ibland med en hel veckas mellanrum, så länge tålamodet räckte och när lusten att måla var på topp). Prototypen på ansiketet skissade vi först på papper.

Prototypen på Stefans ansikte

Stefan skulle ha stora tänder, röda läppar och blå ögon. 🤩

Frost-fantasten målar Stefan.

Elektroniken kopplade vi med några krokodilklämmor och sladdar. Vi försökte följa samma färgkodning. PIN 1 använde vi för att styra. GND delades av microbiten, servon och servons batteripack.

Här kan man se hur sladdarna är kopplade.

Mjukvaran

Vi använde MakeCode for micro:bit, en app från Microsoft Store.

MakeCode i Microsoft Store

Projektet döpte vi till Stefan, kort och gott.

Projektet Stefan

Vi använde blockprogrammering. Det är kul även för mig som “skriv”-programmerar på jobbet. What-You-See-Is-What-You-Get (nästan i alla fall) är såklart toppen för barn.

Blockprogrammering i MakeCode

Nackdelen med blockprogrammering är att det inte är så lätt att återanvända koden eller spara koden. Som tur är kan man bara öppna den i python eller javascript. Vi (jag) satsade på python, för att det är vackert och koncist. Den aktuella koden är sparad på github, den kan dock ändras och justeras i framtiden:

Låt oss gå igenom blocken lite grann. Programmet består av tre huvudkomponenter:

  • Vid start (det som händer när Stefan slås på): Den visar “STEFAN” med rullande bokstäver, spelar upp ljudet Mysterious.
  • För alltid (det Stefan gör under sin vakna tid, huvudprogrammet): den spelar upp 6 gånger “Hello” och öppnar munnen samtidigt, lika många gånger. Om ljudet runtomkring tyst/lågt, tystnar även Stefan. Om Stefan hör högre ljud (någon kommer in i rummet och pratar eller någon ropar “hej”), börjar Stefan säga “Hej” från början igen, och öppna munnen, och detta 6 gånger igen. Så fortsätter det tills man stänger av Stefan.
  • Vid knapptryck (möjligheten att styra Stefan med knappar, ifall inget annat funkar): när man trycker på A-knappen, börjar Stefan hälsa och prata, när man trycker på B-knappen, slutar Stefan.
Stefan vaknar – “vid start”
Huvudmomentet – “för alltid”

Så knapparna användes mest för felsökning och återställning i början. Även om de inte används idag, har vi behållit funktionen för säkerhets skull.

Knapparna A och B sätter och stänger av Stefan.

Lärdomar

Den sista bilden med knapptrycken får vara den första lärdomen. Vi hade flera variabler: paus, running, cycles. Så småningom hade vi endast “cycles” – cykler för hälsningar. En cykel är en munöppning och Hello-fras. Den börjar på 1 och slutar efter 6 gånger. Upptäcker en högre ljudnivå, börjar den från början. Vi skulle kunna ha nedräkning istället, men det blev uppräkning istället.

Hakan vikte vi först, men det var trögt, så vi skära långa sträck i vecket för att göra munöppningen lite smidigare.

Servon drevs först av microbit, det var oväsen även när munnen var stängd, servon “darrade” och väsnades. Vi kopplade in ett extra batteripack endast för servon, då blev det tyst. GND delas av microbiten och servons batteripack.

Vi fick experimentera ganska mycket med servons grader, och hittade bra vinklar till slut. Lite mer än 90 grader: 180 och 60. Detta beror främst på själva servons placering och elastiska tråden, man fick ta i lite mer för att den skulle spänna tråden och stänga munnen.

Tidigt i projektet hade vi en powerbank som drev det hela. Tyvärr stängde den av sig vid inaktivitet. En bra funktion för mobilladdning, men dåligt för Stefan.

Powerbanken fick plats men klarade inte uppgiften.

Mjölkkartongen kändes lite skum när man målade på den med hobbyfärg, som om den inte riktigt ville fastna i. Men vi tänkte att Stefan inte skulle trivas i att vara perfektionist, så det syns igenom att det inte är mjölk, utan en laktosfri mjölkdryck på vissa ställen.

“Vid högt ljud” fungerar inte. Det upptäcktes inte eller var det i osynk, så vi fick skriva om det till att mäta ljudnivån i varje körning i huvudmomentet, alltså i “för alltid”.

Det finns “döda vinklar” i systemet. Ljudnivån mäts, och sedan är det vissa pauser då ljudnivån inte mäts. Det har hänt att högt ljud har passerat förbi. Det vore bättre med ett event – “vid högt ljud”, men det fungerade tyvärr inte. Även med “döda vinklar” (sekunder) är det förvånansvärt pålitligt. Helt enkelt att vi tilltalar Stefan med högre röst, och inte använder Stefan som en supermaskin kapabel att upptäcka varenda ljudnivåhöjning. Vår tolerans för Stefans tillkortakommanden är helt enkelt mycket högre.

Så ser den ut och så hälsar vår robot Stefan

DIY: Integrating Trådfri lights with Teams presence

It seems that Work from Home (WFH) is here to stay, it’s okay. I’d say, Work from a Smart Home is even more okay. To me, Home Automation (HA) and Work from Home (WFH) are really two peas in a pod.

Today’s “guest” is a tiny application that I’ve set up on my raspberry pi to listen to my presence (status) in Teams and show it with colors of my smart RGB light (IKEA Trådfri).

The code

You can find the application on github:

I’ll try to provide the needed documentation on the github repo and focus more on the story part in this blog post.

The story

I stumbled upon Elio Struyf’s blog post and I was amazed:

Wow! I thought immediately: that would be a cool challenge, I wanted to set up this, too. Although, with some adjustments for my smart home:

  • I wanted to run the whole application on one raspberry pi only, because I don’t have the second one, neither I have HomeBridge installation (maybe something for future projects, though).
  • I wanted to have as little code as possible, maintenance should be kept to minimal.
  • I wanted to use python in order to learn more python and because python seems to be the most supported language on the pi.
  • I wanted to use IKEA Trådfri lights (with a gateway and a remote) that I already have invested into.

I omit the configuration steps for Trådfri lights and Raspberry Pi, you can see them in my previous blog post:

Why show Teams presence with a smart light

Elio wrote his blog post in April this year – in the times of the lockdown in Belgium. In Sweden, we hadn’t a real lockdown, but it seems that it might come times when my children would need to be at home more while I work. In that case a superclear system that shows when I have important meetings is just awesome. Maybe, with that I am prepared for such times.

But to be really honest, the main driving factor is the fact that it is very satisfying to tinker around with this DIY stuff 😜😎

Lessons learned

There is a python wrapper for MSGraph which is awesome, but it needs more contributors:

In your Azure AD App Registration you can specify auth flow type as public, with that you don’t need to store a client secret for delegated access. That was a kind of a new thing to me.

Presence endpoint in MSGraph is in beta, make sure you call the beta endpoint. The scope is ‘https://graph.microsoft.com/Presence.Read’ and you need an admin consent for that permission grant.

Daniel Chronlund Cloud Tech Blog

News, tips and thoughts for Microsoft cloud fans

Вула Чăвашла

VulaCV - Чăвашла вулаттаракан сайт

Discovering SharePoint

And going crazy doing it

Bram de Jager - Architect, Speaker, Author

Microsoft 365, SharePoint and Azure

SharePoint Dragons

Nikander & Margriet on SharePoint

Mai Omar Desouki

PFE @ Microsoft

Cameron Dwyer

Office 365, SharePoint, Azure, OnePlace Solutions & Life's Other Little Wonders

paul.tavares

Me and My doings!

Share SharePoint Points !

By Mohit Vashishtha

Jimmy Janlén "Den Scrummande Konsulten"

Erfarenheter, synpunkter och raljerande om Scrum från Jimmy Janlén

Aryan Nava

DevOps, Cloud and Blockchain Consultant

SPJoel

SharePoint for everyone

SharePointRyan

Ryan Dennis is a SharePoint Solution Architect with a passion for SharePoint and PowerShell

SharePoint 2020

The Vision for a Future of Clarity

Aharoni in Unicode

Treacle tarts for great justice

... And All That JS

JavaScript, Web Apps and SharePoint

blksthl

Mostly what I know and share about...