Sidste sommer skrev jeg om hvordan jeg brugte Flic knapper og Google Analytics til at tracke vores forbrug af cola.

Det gik semi-viralt og Flic spurgte om jeg ville skrive en engelsk version af indlægget, som blev udgivet det på deres officielle blog.

Det var ret cool.

Men cola er en ting. Det kunne være sjovt at tracke noget der var lidt mere arbejdsrelateret: Kaffe!

Nærmere bestemt vores kaffeforbrug på kontoret.

Udfordringen med Flic er at man skal have en Hub som knapperne forbinder til. Den koster 999,- og jeg kunne godt bruge noget lidt billigere til dette eksperiment.

Flic hub koster pt. 999,-

Flic hub koster pt. 999,-

Man kan faktisk også forbinde knapperne til sin telefon via Bluetooth og sende data via telefonen, men det er heller ikke ideelt at der altid skal være en telefon i nærheden af knapperne.

AWS IoT Button

Et af mine yndlingspodcast et Shoptalkshow, hvor jeg følger med i nyeste trends indenfor webudvikling. I afsnit 320 snakker de om Internet of Things.

Her taler de blandt andet om AWS IoT Button som er en knap ligesom Flic.

AWS IoT Button

AWS IoT Button

Den fungerer bare uden en hub. Du kobler den direkte på dit Wifi og så kan den sende data via AWS.

Og den koster kun 22,99 GBP eller cirka 200 kroner.

Meget mere simpelt og billigt.

Knappen er den samme hardware som de Dash buttons som Amazon havde på et tidspunkt hvor man kunne bestille fx vaskepulver blot ved et klik på en knap. De findes dog ikke mere.

Men IoT knappen kan programmeres via AWS og udføre vilkårlig kode, så alle muligheder er åbne.

Amazon siger selv at IoT knappen er lavet til at udviklere kan have en nem måde at prøve de mange funktioner i AWS.

The AWS IoT Button is a programmable button based on the Amazon Dash Button hardware. This simple Wi-Fi device is easy to configure and designed for developers to get started with AWS IoT Core, AWS Lambda, Amazon DynamoDB, Amazon SNS, and many other Amazon Web Services without writing device-specific code.Amazon.com

Funktioner i AWS

Knappen kan trigger en lang række funktioner i AWS. Når knappen er koblet på Wifi via app’en, får du en liste med eksempler på små funktioner som knappen kan trigger.

Eksempler på AWS funktioner.

Eksempler på AWS funktioner.

Og AWS har en lang række af services. I dette tilfælde vil jeg fokusere på Lambda funktioner.

AWS er kæmpe stort og har services til næsten alt.

AWS er kæmpe stort og har services til næsten alt.

Lambda funktioner

Lambda funktioner er et stykke kode som kan køres, typisk når en URL kaldes, men i dette tilfælde også ved et klik på knappen.

Koden kan både være Python, Java, Go, Ruby eller Node.js.

Lambda understøtter mange sprog.

Lambda understøtter mange sprog.

Det fede ved Node.js er at det egentlig bare er JavaScript, men hvor JavaScript afvikles på klienten, så afvikles Node.js på serveren, ligesom fx PHP.

Tracking af kaffe i Google Analytics

For at tracke et Event i Google Analytics skal der laves et POST request af en URL.

Det er beskrevet i detaljer i indlægget om tracking af cola.

Det kan gøres med Node.js med nedenstående kode.

Koden gør følgende:

  1. Der skal laves et HTTPS request, så du starter med at require https module i Node.
  2. ID’et for den GA property der skal sendes data til gemmes i en variabel.
  3. Jeg opretter variabler til event data og så console.log’er jeg lige nogle debug data fra knappen. Mere om det senere.
  4. Alt efter om der klikkes 1 gang, 2 gange eller et langt klik, sætter jeg event data med hhv. 1 kop, 2 kopper eller en hel kande kaffe.
  5. Amazon siger at knappen har batteri til 1000 klik, så jeg tracker lige den aktuelle volt på batteriet, så jeg kan se om den er ved at være flad. I skrivende stund har jeg tracket 1538 klik med knappen og der er stadig masser af strøm på batteriet, så den kan meget mere end 1000 klik.
  6. Event value sættes til hhv. 1, 2 eller 10 kopper kaffe i en hel kande.
  7. Jeg laver et options object som indeholder den URL der skal kaldes, fordelt i hostname, port og path. Port 80 er HTTP webtrafik og port 443 er HTTPS.
  8. Path indeholder de Event data der skal sendes, samt dit GA property ID og et random cookie ID.
  9. Der laves et HTTPS request af URL’en og den tjekker om den svarer tilbage med en 200 statuskode og hvis der sker en fejl, bliver fejlen logget. Jeg udskriver også lige den endelig path, for at kunne debugge de data der bliver sendt til Google Analytics.
exports.handler = (event, context, callback) => {
    const https = require("https");

    // Payload data
    const GaProperty = "UA-12345-1";

    var eventCategory;
    var eventAction;
    var eventLabel;
    var eventValue;

        console.log(event.clickType);
        console.log(event.batteryVoltage);

    if (event.clickType === "SINGLE") {
        eventCategory = "Kaffe";
        eventAction = "1%20kop";
        eventLabel = event.batteryVoltage;
        eventValue = "1";
    } else if (event.clickType === "DOUBLE") {
        eventCategory = "Kaffe";
        eventAction = "2%20kopper";
        eventLabel = event.batteryVoltage;
        eventValue = "2";
    } else if (event.clickType === "LONG") {
        eventCategory = "Kaffe";
        eventAction = "1%20kande";
        eventLabel = event.batteryVoltage;
        eventValue = "10";
    }

    var options = {
        hostname: "www.google-analytics.com",
        port: 443,
        path:
            "/collect?v=1&t=event&tid=" +
            GaProperty +
            "&cid=5b3393c6-dbf2-4e60-a912-c30d7df10f0e&ec=" +
            eventCategory +
            "&ea=" +
            eventAction +
            "&el=" +
            eventLabel +
            "&ev=" +
            eventValue,
        method: "POST"
    };

    var req = https.request(options, res => {
        console.log("statusCode:", res.statusCode);
        if (res.statusCode === 200) {
            console.log("Data sent!");
            console.log(options.path);

        }
    });

    req.on("error", e => {
        console.error(e);
    });

    req.end();
};

Console.log i node.js

Normalt vil console.log() udskrive noget i konsollen i browseren. Node.js køres på serveren så her bliver console.log() gemt i serverens log.

De ting jeg console.log’er i koden, når man klikker på knappen, kan ses i AWS.

AWS CloudWatch loggen.

AWS CloudWatch loggen.

Det er smart til at debugge hvad der er sket.

Test i Google Analytics real-time

Så er der bare tilbage at teste at det virker.

Test af knappen i real-time.

Test af knappen i real-time.

Det virker.

Montering af knappen ved kaffemaskinen

Jeg satte knappen lige over kaffemaskinen og krydsede fingre for at kollegaerne ville deltage i eksperimentet. For at motivere dem, lavede jeg et hurtigt dashboard i Data Studio, som viste de spændende data.

Knappen ved kaffemaskinen.

Knappen ved kaffemaskinen.

Analysen af kaffe-data

Det første jeg kigger på er kaffe fordelt over dagen. Nogle møder ind før kl. 8 og der kommer tydeligt mange på kontoret kl. 8-9.

Kaffeforbruget peaker kl. 9-10 og begynder derefter at aftage ned mod frokost, hvorefter der kommer en lille spike igen kl. 13 hvor vi lige skal igang igen efter frokost.

Kaffe fordelt over dagen

Kaffe fordelt over dagen

Hvis vi kigger på det akkumulerede kaffeforbrug over dagen er der også en fast stigning frem til kl. 10 hvor 67% af dagens kaffe er drukket. Derefter flader den lidt ud, men 84% af dagens kaffeforbrug er sket kl. 12.

Akkumuleret kaffeforbrug

Akkumuleret kaffeforbrug

Jeg har lavet en Excel skabelon, som gør det super nemt at lave heatmaps, som viser Google Analytics metrics fordelt over ugen. Læs mere om den og hent den gratis lige her: Visualisering af Google Analytics data med Excel heatmaps.

Med den skabelon kan jeg nemt lave et overblik over kaffe fordelt over ugen. Det er interessant at der igennem et helt år er drukket markant mindre kaffe om torsdagen og man kan også se at der er klart mest brug for kaffe i starten af ugen, til lige at komme igang. Fredag eftermiddag kunne det godt ligne at kaffen er skiftet ud med en velfortjent fyraftensøl.

Excel heatmap viser kaffeforbrug fordelt på ugen.

Excel heatmap viser kaffeforbrug fordelt på ugen.

En anden ting der er sjov at se ved et eksperiment som det her, er om kollegaerne bliver ved med at klikke når de drikker kaffe. Grafen for events over tid, viser tydeligt at det var sjovest i starten og derefter falder det en del. Der er dog stadig mange der bliver ved med at klikke. Sommerferien ses også tydeligt, hvor der er tomt på kontoret i et par uger.

Kliks på knappen over tid.

Kliks på knappen over tid.

Det viser dog tydeligt at hvis man skal bruge det her til noget seriøst, så er det bedst at brugerne trackes automatisk og ikke som her, hvor de skal huske at trykke på en knap. Det bedste vil være at bygge det sammen med kaffemaskinen, så man automatisk tracker hver gang man løfter kanden eller lignende. Så vil man få mere præcis data over tid.

Opsummering

Eksperimentet her viser at det er nemt og billigt at lave knapper til at tracke events i den virkelige verden og gemme dem i Google Analytics til senere analyse. Det koster kun 200,- DKK og knappen, som kun kræver Wifi, har minimum batteri til 1500 klik.

Jeg håber det kan inspirere til at tracke ting i den virkelige verden og samle det i Google Analytics. Er der noget du får lyst til at tracke?