Slide 1

Slide 1 text

@JoeKarlsson1 IoT and JS(?!) A Gentle Introduction to the Internet of Things @JoeKarlsson1

Slide 2

Slide 2 text

{ name: “Joe Karlsson”, company: “MongoDB”, title: [ “Developer Advocate”, “Software Engineer” ], } twitter: “@JoeKarlsson1”, twitch: “joe_karlsson”, tiktok: “joekarlsson”, website: “joekarlsson.com”, opinions: “my own”, links: “bit.ly/IoTKittyBox”

Slide 3

Slide 3 text

@JoeKarlsson1 Agenda • Intro to IoT • Why JS & IoT? • IoT Kitty Litter Box • The future of IoT @JoeKarlsson1

Slide 4

Slide 4 text

@JoeKarlsson1 What the heck is IoT? @JoeKarlsson1

Slide 5

Slide 5 text

@JoeKarlsson1 It’s just the internet, but with “things” on it @JoeKarlsson1

Slide 6

Slide 6 text

@JoeKarlsson1

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

@JoeKarlsson1 Agenda • Intro to IoT • Why JS & IoT? • IoT Kitty Litter Box • The future of IoT @JoeKarlsson1

Slide 9

Slide 9 text

@JoeKarlsson1 IoT + JS(?!) @JoeKarlsson1

Slide 10

Slide 10 text

@JoeKarlsson1 Why Node? 58 percent of respondents that identified as IoT developers use Node Source: https:/ /nodejs.org/en/blog/announcements/nodejs-foundation-survey/ @JoeKarlsson1

Slide 11

Slide 11 text

@JoeKarlsson1 JS is a great choice for new devs Other low level programming languages can be difficult to develop @JoeKarlsson1

Slide 12

Slide 12 text

@JoeKarlsson1 Easy to update over a network @JoeKarlsson1

Slide 13

Slide 13 text

@JoeKarlsson1 The internet already speaks JS @JoeKarlsson1

Slide 14

Slide 14 text

@JoeKarlsson1 Tons of existing libraries, plugins and APIs @JoeKarlsson1

Slide 15

Slide 15 text

@JoeKarlsson1 Cylon.js Johnny-Five https://cylonjs.com/ http://johnny-five.io/ @JoeKarlsson1

Slide 16

Slide 16 text

@JoeKarlsson1 JS is great at handling event-driven apps @JoeKarlsson1

Slide 17

Slide 17 text

@JoeKarlsson1 Agenda • Intro to IoT • Why JS & IoT? • IoT Kitty Litter Box • The future of IoT @JoeKarlsson1

Slide 18

Slide 18 text

@JoeKarlsson1 Let’s jump into something *practical @JoeKarlsson1

Slide 19

Slide 19 text

@JoeKarlsson1 @JoeKarlsson1 IoT Kitty Litter Box

Slide 20

Slide 20 text

@JoeKarlsson1 @JoeKarlsson1

Slide 21

Slide 21 text

@JoeKarlsson1 @JoeKarlsson1

Slide 22

Slide 22 text

@JoeKarlsson1 @JoeKarlsson1 Maintenance Mode

Slide 23

Slide 23 text

@JoeKarlsson1 @JoeKarlsson1 Initialize Base Weight

Slide 24

Slide 24 text

@JoeKarlsson1 @JoeKarlsson1

Slide 25

Slide 25 text

@JoeKarlsson1 @JoeKarlsson1 Cat Detected

Slide 26

Slide 26 text

@JoeKarlsson1 @JoeKarlsson1

Slide 27

Slide 27 text

@JoeKarlsson1 @JoeKarlsson1 Reset new base weight

Slide 28

Slide 28 text

@JoeKarlsson1 @JoeKarlsson1 Wait for new event

Slide 29

Slide 29 text

@JoeKarlsson1 @JoeKarlsson1 Code: http:/ /bit.ly/IotKittyBox

Slide 30

Slide 30 text

@JoeKarlsson1 @JoeKarlsson1 The first step of any IoT project is to make an LED blink

Slide 31

Slide 31 text

@JoeKarlsson1 var five = require("johnny-five"); var Raspi = require("raspi-io").RaspiIO; var board = new five.Board({ io: new Raspi() }); board.on("ready", function() { var led = new five.Led("P1-13"); led.blink(); });

Slide 32

Slide 32 text

@JoeKarlsson1 Alright, let’s make a toilet @JoeKarlsson1

Slide 33

Slide 33 text

@JoeKarlsson1 const { RaspiIO } = require('raspi-io'); const five = require(‘johnny-five'); const board = new five.Board({ io: new RaspiIO(), }); let state = { isMaintenenceMode: false, }; board.on('ready', () => { const spdt = new five.Switch('GPIO16'); spdt.on('open', () => { state.isMaintenenceMode = true; }); spdt.on('close', () => { state.isMaintenenceMode = false; }); });

Slide 34

Slide 34 text

@JoeKarlsson1 @JoeKarlsson1

Slide 35

Slide 35 text

@JoeKarlsson1 The load cells… @JoeKarlsson1

Slide 36

Slide 36 text

@JoeKarlsson1 const spawn = require('child_process').spawn; const process = spawn('python', ['./hx711py/scale.py'], { detached: true }); // Takes stdout data from script which executed // with arguments and send this data to res object process.stdout.on('data', data => { let currWeight = parseFloat(data); let avgWeight = updateAverageWeight(currWeight, recentsWeights); }); process.stderr.on('data', err => { console.error(err); }); process.on('close', (code) => { console.log(`child process exited with code ${code}`); });

Slide 37

Slide 37 text

@JoeKarlsson1 @JoeKarlsson1

Slide 38

Slide 38 text

@JoeKarlsson1 IoT Time Series Schema @JoeKarlsson1 Want $200 in free credits? http:/ /bit.ly/NodeJSInteractive

Slide 39

Slide 39 text

{ "_id": { "$oid": "dskfjlk2j92121293901233" }, "timestamp_day": { "$date": { "$numberLong": "1573854434214" } }, "type": "cat_in_box", "cat": { "name": "BMO", "weight": "200" }, "owner": "Joe Karlsson", "events": [ ] } IoT Time Series Schema { "timestamp_event": { "$date": { "$numberLong": "1573854435016" } }, "weight": { "$numberDouble": “15.593333333" } }, { "timestamp_event": { "$date": { "$numberLong": "1573854435824" } }, "weight": { "$numberDouble": "15.132222222" } }, { "timestamp_event": { "$date": { "$numberLong": "1573854436632" } }, “type”: “maintenance” } @JoeKarlsson1

Slide 40

Slide 40 text

@JoeKarlsson1 @JoeKarlsson1 Box Assembly

Slide 41

Slide 41 text

@JoeKarlsson1 @JoeKarlsson1

Slide 42

Slide 42 text

@JoeKarlsson1 Agenda • Intro to IoT • Why JS & IoT? • IoT Kitty Litter Box • The future of IoT @JoeKarlsson1

Slide 43

Slide 43 text

@JoeKarlsson1 Smaller and more powerful devices \ Better Hardware support JS with a smaller footprint Batteries will become the bottleneck The Future of JS + IoT? @JoeKarlsson1

Slide 44

Slide 44 text

@JoeKarlsson1 Do you want to be an IoT and JS master? @JoeKarlsson1

Slide 45

Slide 45 text

@JoeKarlsson1 Just do it! @JoeKarlsson1

Slide 46

Slide 46 text

@JoeKarlsson1 Thank You! @JoeKarlsson1

Slide 47

Slide 47 text

@JoeKarlsson1 All resources and links used in this talk can be found here: @JoeKarlsson1 bit.ly/IoTandJS

Slide 48

Slide 48 text

{ name: “Joe Karlsson”, company: “MongoDB”, title: [ “Developer Advocate”, “Software Engineer” ], twitter: “@JoeKarlsson1”, twitch: “joe_karlsson”, website: “joekarlsson.com”, links: “bit.ly/IoTKittyBox” }

Slide 49

Slide 49 text

@JoeKarlsson1 •Source Code - http://bit.ly/IotKittyBox • IoT Reference Architecture - https:// www.mongodb.com/collateral/iot-reference- architecture •Time Series Data and MongoDB: Best Practices Guide - https://www.mongodb.com/ collateral/time-series-best-practices Additional Resources

Slide 50

Slide 50 text

@JoeKarlsson1