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.

Test af personlige nyheder til dine minutter i bilen

For et par uger siden skrev jeg om den ide jeg havde fået sammen med Tom Bue fra Nordjyske Medier til personlige nyheder i bilen.

Mette Kjul fra Nordjyske Startup havde hjulpet os med at finde ti testpersoner, der alle ville modtage en personlig nyhedsudsendelse kl. 7.00 hver morgen i uge 5.

TL;DR:

God ide, men der skal arbejdes på udtalen af nogle ord-typer og udvælgelsen af historier.

Resultaterne

Konklusioner

Langt de fleste brugere forstår hvad der bliver sagt, men irriteres over udtalen. Især navne, firmanavne, steder, forkortelser og udenlandske ord er problematiske.

Udvælgelsen af historier er ikke god nok. Der kommer sportshistorier selvom det er fravalgt, og der er gentagede historier både fra dag til dag, men også i den samme udsendelse. Der er for få nye erhvervsnyheder. Der er for mange lokalnyheder for nogle, men der ønskes generelt forskellige ting fra person til person.

Historierne er overvejende relevante, men dog ikke altid interessante. 😜

De fleste testpersoner kunne let få lyden ud i bilen. En mindre gruppe lyttede dog ikke i bilen. Som et repræsentativt billede af hvor mange biler i Danmark der har Bluetooth anlæg, søgte jeg på bilbasen og fandt at ca. 48% af bilerne til salg på bilbasen.dk har Bluetooth.

Testerne har mellem 5 og 50 minutter til rådighed mens de pendler, og det store flertal hører i dag radio.

De fleste testpersoner syntes ideen er god, men mange efterspørger bedre oplæsning, bedre udvælgelsesmuligheder og få ønsker flere kilder.

På forretningsmodellerne ville halvdelen ikke være generede af et kort reklamespot i slutningen, men kun under en fjerde del ville have stedbestemte reklamer. Ingen ville dog have noget i mod en kort “udsendelsen er sponsoreret af X”.

Næsten to tredjedele ville gerne tilgå en nyhedstjeneste som denne via sms, en enkelt automatisk og den sidste fjerdedel via en app. De fleste ville gerne have en frisk opdatering en gang om dagen, men resten ville gerne have to daglige opdateringer.

Der var en tung overvægt af iPhones og kun en enkelt Android-bruger blandt testerne.

De tre vigtigste ting som testerne ville forbedre ved systemet er:

  • Udtalen
  • Breaker lydene
  • Forkortelserne
  • Udvælgelse af historier

Næste skridt

Resultaterne af testen matcher vores forventninger ret godt. Det vil være på de ovenstående områder vi skal finde på forbedringer.

Der ligger bl.a. en del muligheder for at hjælpe Polly med at lave bedre udtale ved at lave udtale-lexika.

For at forbedre udvælgelsen af historier ligger der nogle nemme sejre ved at fjerne dubletter og sortere historierne bedre, fx undgå sportshistorier for brugere der ikke ønsker nyheder om sport.

Efter de oplagte forbedringer og nemme sejre, skal vi teste noget mere, og måske endda have noget maskinlæring i gang for at kunne udvælge de rigtige historier til de rigtige lyttere.

Personlige nyheder til dine minutter i bilen

Når jeg sætter mig i bilen, popper der en besked à la denne op på min skærm:

Screenshot by Rick Broida/CNET

For det meste er det et ret godt bud på, hvor jeg skal hen, og hvor lang tid det tager at komme derhen.

Det næste jeg gør, er at tænde for radioen og håbe jeg rammer nogle nyheder. 🤞

Det er en heldig dag, hvis jeg tænder radioen og rammer lige ind i starten af en omgang nyheder. Det er desværre ikke tit, man er så heldig, og oftest er de for hurtigt ovre. Så er der oftest en halv eller hel time, til jeg kan få et skud nyheder igen. Jeg kunne godt finde et nyhedspodcast fra f.eks. DR, men de har ikke det lokale stof med og er altid nogle timer på bagkant.

En dag slog det mig:

Telefonen ved, hvor længe jeg skal køre + kvaliteten af talesyntese er blevet MEGET bedre den sidste tid = så kan jeg bygge et system, der giver mig en personlig oplæst nyhedsudsendelse, der lige passer til min køretur.

Ja… min hjerne tænker tit i ligninger. 🤓

Tom Bue til undsætning

Jeg fik en aftale på plads et par dage senere med Tom Bue fra Nordjyske Medier (som jo både har ANR & Radio Nordjyske), hvor vi snakkede ideen igennem og aftalte, at det skulle da prøves.

Vi aftalte at mødes igen for at lave en meget hurtig håndholdt prototype.

Så begyndte spørgsmålene at poppe op:

  • Hvor skal vi få historierne fra?
  • Hvordan skal vi udvælge, hvilke historier der skal med til den enkelte lytter?
  • Hvor lange skal de enkelte nyhedsindslag være? Og hvordan tilpasser vi så længden af indslagene?
  • Hvordan skal vi sammensætte de enkelte indslag til en samlet udsendelse?
  • Vil folk betale for sådan et nyt medie?

For at starte med det sidste først, så var Tom og jeg meget hurtigt enige om, at svaret var NEJ! Men måske kan det alligevel være interessant for mediehusene at kunne nå sit publikum på denne måde, som forretningsmæssigt kan sammenlignes med radio.

Værd at høre på?

Det mest essentielle spørgsmål vi kom op med var dog:

  • Er talesyntese blevet godt nok til, at man kan holde ud at høre på den i fx 20 minutter?

Vi kunne begge gætte, men for at blive klogere skulle der noget data på bordet i form af en test. Mette Kjul fra Nordjyske Startup, som vi også havde sparret med ideen om, var hurtig til at finde ti kolleger, der ville lege med.

Så her til morgen kl. 7.00 fik de alle ti tilsendt et link til en personlig nyhedsudsendelse, der passer til deres interesser og med lokalstof fra deres hjørne af Nordjylland.

Her er mine personlige max. 9 minutter med Brønderslev lokal stof, Erhverv, Internationalt og uden sportsnyheder (andet end dem der er top historier):

Hvordan?

I testen trækker vi nyheder ud fra Nordjyskes RSS-feeds, der peger på enkelte historier på nordjyske.dk.

Dem trækker vi ned og barberer ind til overskrift, underoverskrift og brødtekst.

Derefter trimmer vi historierne fra bunden, til en længde vi har vurderet er passende: ikke for lang og ikke for kort.

Så kører vi de trimmede historier igennem Amazons ret nye talesyntese med det geniale navn Polly. Jeg var i sidste uge til event med Amazon Web Services i København hvor jeg præsenterede ideen og fik meget positiv feedback. ❤️

For hver af testerne har vi så opsat en profil med:

  • Ønsket længde af udsendelsen (hvis testen giver os grund til at arbejde videre med ideen, kan vi begynde at automatisk finde den rigtige længde).
  • Hvilke stof-områder er testeren interesseret i:
  • Navn og mobil telefonnummer

Ud fra denne profil sammensætter prototype systemet så et sæt af nyheder indenfor rammen af den ønskede længde. Det kan selvfølgelig gøres meget mere fancy og/eller elegant, men til en tidlig test er denne tilgang nok.

Hvis du vil lege med, kan du nå det endnu. Send mig en besked med ovenstående profil info.

Hvis testen giver os grund til at fortsætte, hvad skal sådan et system/service så hedde? 🤔