Alle kan kode med Node-RED

ADVARSEL: Tonen i denne blogpost kan næsten ikke undgå at blive lidt lummer, for jeg er ellevild med Node-RED. ❤️

Jeg har en ambition for Danmark:

I dagens Danmark kan måske 1-2% af befolkningen sætte sig ned og lave programmer til at løse de mest monotone dele af deres arbejdsopgaver.

Jeg tror på, at man vil kunne øge denne andel til måske 15-30% uden at skulle vente en generation eller to, men ved at lave og tilbyde let tilgængelige værktøjer.

Disse værktøjer vil være robotter, sensorer og aktuatorer i den fysiske verden kombineret med software med grader af intelligens fra simpel logik til komplekse machine learning “hjerner”.

Jeg tror at Node-RED kan være et centralt værktøj i realiseringen af denne ambition.

Men… hvad er det der Node-RED som har gjort dig så vild i varmen, Uffe?

Jeg er glad for at du spørger, Uffe.

Hvad er Node-RED?

Node-RED er en open-source platform udviklet af IBMs Emerging Technologies group til at lave visuel flow-programmering af Internet of Things (IoT) systemer. Flow-baseret programmering blev opfundet først i 1970’erne, så det er absolut ikke en ny opfindelse.

Node-RED er bygget på Node.js og deraf fornavnet.

I Node-RED editoren laver man flows og sub-flows. Flows består typisk af en input-trigger, nogle mellemliggende beslutninger eller processeringer og noget output.

Man binder alle disse noder (der var den igen) sammen med virtuelle ledninger på skærmen og skaber derved flows.

En trigger kan være noget så simpelt som en knap, en timer, eller et HTTP-endpoint (dvs. en URL der kaldes fra browser eller en service på nettet) eller ændringer i et twitter-feed eller en besked på en Slack kanal, en ændring af en temperatur på et pillefyr, eller ….

Hvis du har 5 minutter, så se Nick O’Leary, en af skaberne af Node-RED, vise et par eksempler:

Hvad skal der til?

Node-RED kan køre på små og store systemer, alt fra Raspberry Pi over Windows, Mac og Linux computere til Amazon Webservices og IBMs Watson supercomputer.

Alt afhængig af hvor det kører, kan man udvide Node-RED med pakker af nye noder. De fleste af de mange pakker, der findes, kan køre hvor som helst, men nogle af dem giver mulighed for at interagere direkte med det miljø, hvor Node-RED kører.

F.eks. findes der en pakke til Raspberry Pi, hvor man fra Node-RED kan læse og skrive direkte til benene i GPIO stikket på Raspberry Pi’en og derved direkte styre eller måle på elektronik – og dermed verden!

Hvis man kører Node-RED på IBMs BlueMix platform, kan man direkte tilgå funktioner på IBM Watson supercomputeren, f.eks. Semantisk analyse af tekster, Tale-til-Tekst og Tekst-til-Tale oversættelse, Tone analyse, Utrænet mønster detektering, Personlighedsprofilering (som sandsynligvis hjalp Donald Trump med at blive valgt), billedanalyse og mange flere. Ret vildt!

OK Uffe, men nu er du nødt til at blive lidt mere konkret. Kan du komme med nogle eksempler på hvad man KAN man med Node-RED?

Ja for dælen, det kan du tro…

Pillefyret … igen

Jeg har hooket mit træpillefyr op til Node-RED og får nu events ind ca. hvert 5. minut med målinger af, hvor mange træpiller der er tilbage, og hvor varmt vandet der kommer ud af fyret er.

For hver måling vil jeg gerne kunne se den vist på et “speedometer” (gauge) og på en graf over tid.Node-RED dashboard til Uffes pillefyr

Det har jeg gjort med Dashboard pakken, der giver nem mulighed for at lave en web-baseret brugergrænseflade i Node-RED.

Node-RED flow fra Uffes pillefyr

DET var nemt, ik?

I stedet for, at jeg skal holde øje med grafen hele tiden, kunne det være fedt hvis jeg kunne få en push-besked på min telefon, når pillestanden falder under et bestemt niveau.

Node-RED flow fra Uffes pillefyr incl. push-besked

Det lavede jeg ved at trække en Switch node ind og skrive “> 55” i den. Jeg har nemlig fundet frem til, at hvis jeg får besked om, at der snart mangler træpiller, når der er 55 cm fra sonaren ned til træpillerne, har jeg ca. 24 timer til at tage mig sammen til at få hældt 80-100kg træpiller på.

Min Switch node har to udgange: en der bliver aktiveret, når der er målt mere end 55 cm, og en der får besked, når der er kortere. På den første har jeg trukket en Pushover node ind. Den sender en push-besked til Pushover app’en på min telefon. Den anden Switch-udgang skriver bare teksten ud i en log-fil.

Jeg vil også gerne gemme målingerne, så jeg har trukket en AWS DynamoDB node ind også. Easy-peasy.

Philips Hue

Det første stykke med IoT mange mennesker får indenfor døren derhjemme er pærer fra Philips Hue eller lignende, hvor man fra en app kan tænde og slukke, skrue op og ned og bestemme farven på sit lys.

Der er (selvfølgelig) nogen, der har lavet en Node-RED pakke, der giver adgang til at styre ens Hue pærer. Det kunne være en tidsstyring, baseret på hvornår solen står op og går ned, eller baseret på ens kalender.

Jeg har lavet en web-UI til mine Hues, som ret sikkert bliver tilpasset med tiden.

Node-RED flow til styring af Philips Hue

Bil speedometer

Jeg er ret glad for min Volvo, men må indrømme, at jeg drømmer om at skifte den ud med en Tesla en gang. For at komme lidt tættere på, byggede jeg en CarPuter af en RaspberryPi, en 7″ touch-skærm, en USB GPS-modtager og lidt gammelt Meccano legetøj.

Den kører selvfølgelig Node-RED, og jeg viser hastigheden og højden over havet (fordi jeg kan) i to gauges på en Dashboard side. (Undskyld billedkvaliteten, men jeg lover det er taget på privat vej).

Node-RED dahboard i Uffes CarPuter med Raspberry Pi og Touch-skærm og GPS

CarPuteren kan en masse mere, men det skriver jeg om en anden dag. 🤖

Future Finance Hackathon

Da jeg for nogle uger siden deltog i Future Finance Hackathon hos Spar Nord Bank (og vores team vandt 2. pladsen YAY!), byggede vi løsningen med og omkring Node-RED.

Der viste vi bl.a. hvordan man kan bygge Node-RED ind i netbanken, så bankkunder og bankrådgiverne i samarbejde kan programmere flows der hjælper kunderne med deres økonomi.

Her er et eksempel på et flow, der hver d. 20. i måneden checker om man har minimum 3000kr på sin lønkonto, og hvis ikke får kunden en venlig push-besked og en besked på en Slack kanal.

Node-RED flow integreret i SparNords netbank, med AdvisoRED (mockup)

DET system kommer jeg også helt sikkert til at skrive meget mere om. 🇩🇰

Kan Node-RED alt?

Node-RED er ikke perfekt, men det er i mine øjne et fantastisk godt værktøj der har brede anvendelsesmuligheder og har potentialet til at rykke os et godt stykke nærmere på en befolkning, der kan programmere sig ud af hverdagsproblemer.

Jeg ser en ENORM værdi i, at man lynhurtigt kan lave prototyper af selv rimeligt komplekse integrationer, funktioner og systemer med Node-RED, og derved hurtigt kan få sine tossede afprøvet og sit liv forbedret.

Tag et kig på Node-REDs hjemmeside eller tag fat i mig hvis jeg skal give en demonstration over en kop kaffe.

Hold familien varm – med kun let overdrevet brug af IoT – 1. del

Jeg nævnte i en tidligere post, at mit træpillefyr sender mig push-beskeder når det snart mangler piller.

Det system er et af mine projekter med flest år på bagen og med ret mange (fejlede) eksperimenter bag sig.

Først lidt forhistorie…

Jeg bor med min dejlige familie i et nedlagt landbrug langt ude på landet.

Huset bliver varmet op med et træpillefyr.

Sådan et fyr er en dejlig og rimelig nem løsning.

Ikke fjernvarme-nem, oliefyr-nem, naturgas-nem eller for den sag skyld jordvarme-nem, men driften er udholdelig og består af to regler:

  1. Hæld 6-8 poser træpiller á 16kg på en 2-3 gange om ugen.
  2. Tøm aske ud 1-2 gange om måneden.

Resten ordner skorstensfejeren.

Regel #2 har jeg ikke haft nogen problemer med, men regel #1 er en anden sag, og man skulle tro, kolde morgener med kun koldt vand i bruseren kunne lære mig noget, men nej.

Den nemme løsning kunne være at sætte en alarm på min telefon, der mindede mig om at hælde træpiller på hver anden dag. Den har jeg brugt i perioder, men den er ærligt talt lidt old skool og lidt kedelig.

Under lidt hygge-browsing på sparkfun.com faldt jeg over MaxSonar-EZ1. En lækker lille ultralydssonar.

Den kan måle afstande ved at skyde et ultralydssignal afsted og så måle, hvor mange millisekunder, der går, inden ekkoet kommer tilbage.

MaxSonar-EZ1 er endda så veludrustet, at man kan få afstandssignalet ud  på tre måder: via et digitalt serielt interface, et Pulse-Width-Modulation (PWM) signal eller et godt gammeldags analogt signal (større afstand = større spænding).

Jeg havde nogle gange rodet lidt med Arduino Uno boards til mini-projekter. Men da Arduino annoncerede deres nye top-model Arduino Yún med indbygget Linux-kerne og wifi, skød jeg straks nogle penge ud over internettet.

Min nye Yún skulle være arbejdshesten i min nye pillefyrs-pillestands-overvågnings-dims og kan umiddelbart læse et PWM signal fra sonaren.

Som sagt så gjort. Jeg fik lavet et test-setup og kunne måle afstanden fra sonaren til min hånd. Heldigvis virkede det også, da jeg slæbte fuglereden af ledninger ud til mit fyrrum og holdt sonaren over træpillesiloen. YAY!

Jeg fandt et stykke aflagt Ikea-indpakning og snittede huller til Arduino, breadboard og sonaren, og vupti så havde jeg min træpillemåler.

Jeg lavede en hurtig server med Django, der kunne modtage og gemme målingerne, og et API som Yún’en kunne aflevere sine data til. Serveren smed jeg op på en EC2-instans, jeg allerede havde kørende hos Amazon, og viola!

Nu manglede jeg bare at kunne se mine data, og til det greb jeg fat i det smukke og nemme Flot.js, som mine venner fra Iola har lavet.

Når det hele virkede, kunne jeg fra min browser se hvor mange piller, der var på fyret.

MEGET nemmere end at gå ud og kigge i tanken. 😜

Det var første generation af systemet, med flere uhensigtsmæssigheder og deciderede mangler, fx. kunne det ikke fortælle mig om fyret var gået ud.

Jeg skriver snart en post mere, om næste generation af systemet, hvor der bla. kommer push beskeder og visuel programmering i spil.