Gjennom programmering får vi maskiner til å etterligne kompleks oppførsel ved å følge sekvenser med enkle instruksjoner. Å bruke tekstprogrammeringsspråk som Asambly, C, Python og JavaScript er en av de viktigste måtene å gjøre det på. Designerne av disse programmeringsspråkene har brukt timer og timer på å gjøre skriveopplevelsen så enkel som mulig gjennom uttrykksfull syntaks, sterke programmeringskonstruksjoner og kraftige verktøykjeder. Imidlertid deler alle disse programmeringsspråkene et felles trekk: tekstlig kildekode.
Å skrive programmer i tekst fungerer, og i de fleste tilfeller fungerer det bra. Imidlertid er evnen til å uttrykke programmer visuelt ofte ønskelig. Å kunne designe informasjonsflyten gjennom ulike komponenter i et større system er vanligvis alt som trengs. Visuelle programmeringsverktøy er også tilgivende for alle som er nye med programmering og synes det er vanskelig å håndtere forskjellige konsepter som variabler, indikatorer, signaler, omfang, og så videre.
Node-RED er et visuelt programmeringsverktøy. Den viser relasjoner og funksjoner visuelt, og lar brukeren programmere uten å måtte skrive et språk. Node-RED er en nettleserbasert flyteditor hvor du kan legge til eller fjerne noder og koble dem til hverandre for å få dem til å kommunisere med hverandre.
I Node-RED er hver node en av følgende to typer: a injeksjonsknute eller a funksjonsnode . Injeksjonsnodene produserer en melding uten behov for inndata og starter meldingen til neste node som er koblet til den. Funksjonsnoder har derimot en inngang og gjør noe med den. Med et stort antall av disse nodene å velge mellom, gjør Node-Red det enklere enn noensinne å koble til maskinvareenheter, APIer og online-tjenester.
Node-Red er basert på Node.js. For å installere Node-Red, må du ha begge deler Node.js installert som NPM. Med NPM er det veldig enkelt å installere Node-Red: npm install -g node-red
Node-Red flow editor er et nettleserbasert program. For å bruke den, kjør Node-Red:
npm install -g node-red
Node-REDs strømredigerer er et nettleserbasert program. For å kunne bruke den, kjør Node-RED:
node-red
& hellip og gå til http: // localhost: 1880.
Hvilken programmeringsveiledning for nybegynnere er fullført uten å lære hvordan man kan si 'Hello World'? La oss starte med å teste nøyaktig det:
Prøv det. Du vil se noe slikt:
Med Node-Red begrenser du deg ikke med enkle noder og funksjoner. Siden Node-Red er bygget på toppen av Node.js, drives alt av JavaScript . Noder er faktisk Node.js-moduler. Kan bli funnet i http://flows.nodered.org/ , for å legge dem til venstre panel kan du ganske enkelt 'installere med NPM'. Faktisk kan du utvikle din egen flyt og laste dem opp til flow repository. Applikasjoner kan være så komplekse som du vil som du kan skrive JavaScript i funksjonsnoder i kodeditoren levert av Node-Red.
Siden plattformen er basert på Node.js, utnytter den den samme ikke-blokkerende, hendelsesdrevne modellen. Så et program bygget på Node-Red kan kjøre på billig maskinvare som Raspberry Pi, så vel som i skyen.
For å demonstrere hvordan Node-Red passer inn i verden av tingenes internett, skal vi bygge et program for å endre fargen på en smart lyspære. Ikke alle kan ha det samme smarte belysningssystemet til deres disposisjon, men det er ingenting å bekymre seg for, da den aktuelle Node-Red-modulen kan bli funnet fra det offisielle strømningsregisteret. Imidlertid, for å gjøre ting enda enklere, går vi etter noe smartere.
La meg introdusere deg for Netbeast. Det er en åpen kildekodeplattform for å utvikle applikasjoner for gadgets og enheter for Internet of Things uten å måtte bekymre deg for detaljene som trådløse protokoller, merkevarekompatibilitet, eller å måtte vite hvordan du skal håndtere hvert enkelt API som eksisterer. Det lar oss bruke virtuelle enheter som fungerer som ekte! Så selv om du ikke har en smart pære, har du en virtuell en tilgjengelig.
Vi kan installere NPM-pakken fra Netbeast for Node-Red globalt slik:
npm install -g node-red-contrib-netbeast
De netbeast-rød node vil gjengi Netbeast-kontrollpanelet, som vil oversette API-primitivene for alle smarte enheter du har hjemme. Heldigvis er den også tilgjengelig som en modul!
Starter Netbeast:
npm install -g netbeast-cli netbeast start
Dette vil gjøre panelet tilgjengelig på port 8000 og SSL på 8443. Deretter åpner du nettleseren din til http: // localhost: 8000 og navigerer til Utforsk. Der kan vi finne mange applikasjoner og plugins. Se etter merkene til de smarte pærene dine (Philips Hue, LIFX, Wemo), eller hvis du ikke har en, kan du prøve å laste ned pæreutvidelsen. Sjekk at dashbord-pluginene inneholder en av disse!
Det gule merket indikerer at programtilleggene kjører, men kan ikke finne noen enheter. Klikk på plugin for lyspære for å lage en virtuell lyspære. Enhver annen enhet som blir oppdaget, må vises i nettverket.
Med alt på plass, la oss komme tilbake til jobb. Vi vil gjøre en enkel flyt:
Nå skal vi sende en HTTP-forespørsel til kontrollpanelet. Når du bruker Netbeast API, må en JSON som inneholder verdiene vi ønsker å aktivere i lyspæren, sendes gjennom injeksjonsnoden.
Trykk på knappen for å injisere farge og energi i alle smarte pærer!
Hvert tema representerer en annen type enhet. Så det er temaer ikke bare for lysene, men også for musikk, oppvarming og video; samt sensorer for fuktighet, tilstedeværelse, temperatur og listen fortsetter. Du finner i dokumentasjonen en liste over temaer og deres anbefalte struktur som skal oversettes til alle typer enheter. Denne IO-motoren er nybegynner, men kraftig. En åpen kildekode som gjør at utviklere kan gjenbruke informasjon for å skape virkelig koblede scenarier, og dermed være intelligente.
Deretter skal vi lage en ny flyt ved hjelp av et annet plugin, en omgivelsesstøydetektor som skal brukes som en startpakke for å endre fargen på pæren som et støytrafikklys. I denne opplæringen skal vi bruke en virtuell, så det er ikke nødvendig å kjøpe ny maskinvare. La oss starte med å klikke på 'mer' -knappen i Node-Red-redigereren.
Gå tilbake til Panel http: // localhost: 8000 / utforsk til Explore-delen og se etter Volume-Plugin. Dette er en veldig rudimentær webapplikasjon som utnytter getUserMedia()
i nettleseren for å fange multimediainformasjon fra et enkelt HTML-program. Derfor vil det sannsynligvis bare fungere i moderne nettlesere.
Klikk på den for å åpne, akkurat som med den virtuelle lyspæren. Den ber om tillatelse til å ta opp fra mikrofonen. Den vil da sende meldingene til Netbeast MQTT-megleren, som vil bli delt over hele kontrollpanelet, slik at vi kan abonnere. For å oppnå dette trenger vi bare å dra og slippe en node av netbeast-trigger i node rød redaktør. Deretter skal vi sette inn en funksjon mellom utløseren og Netbeast-noden, for å bestemme når den er for høy og når den ikke er. Vi bør også bruke noen feilsøkingsnoder for å sjekke om alt er i orden. Skjematisk vil nå se ut slik:
La oss nå legge inn litt kode i tooLoud-funksjonen. Ja, jeg vet at jeg lovet at du kunne programmere uten koding, men jeg har allerede vist at du kan! Og du kan prøve å kombinere de forskjellige tilgjengelige elementene eller andre registernoder for å oppnå følgende.
var volume = msg.payload.volume node.log(volume) if (volume <50) { return { topic: 'lights', payload: { power: 1, color: '#00CC00'}} } else if (volume < 75) { return { topic: 'lights', payload: { power: 1, color: '#CCCC00'}} } else { return { topic: 'lights', payload: { power: 1, color: '#FF0000'}} }
Denne ganske enkle kodebiten returnerer en av tre nyttelaster for neste node med en bestemt fargekode, avhengig av volumnivået rapportert av forrige node.
Nå er vi klare til å fortsette! La oss trykke på Deploy-knappen igjen og gi et rop. La oss se hvordan pæren skifter fra en farge til en annen med en gang!
Siden mikrofonen og nettleseren du bruker kan være forskjellige, kan du gjerne justere funksjonsverdiene og terskelverdiene, og også spille med fargeverdiene for å se hvordan pærene dine endres.
Denne rene CSS-lyspæren ble inspirert av denne cssdekk .
Som du kanskje har lagt merke til, er den virtuelle lyspæren ovenfor veldig rudimentær, så det kan være lurt å endre den. Eller enda bedre, du kan lage dine egne smarte hjemmekontrollere. Så vi kommer til å gå gjennom prosessen med å lage et virtuelt plugin for Netbeast, som lar deg lage dine egne kontroller for smarte enheter.
Du kan bruke pakken netbeast-cli
å generere noen koder som ved magi. Ved å utføre netbeast create myplugin --plugin
vi ville ha et grunnleggende prosjekt som følgende:
myplugin ├── README.md ├── index.js ├── package.json └── test.js
La oss nå begynne å etterligne pæren med en frontend. Enhetsdrivere har vanligvis ikke en, så stillaskommandoen inkluderer ikke en mappe offentlig fortsatt. La oss opprette en katalog public
inne i prosjektet og legg følgende HTML-, CSS- og JS-filer der.
Netbeast Bulb Plugin beast ( 'lights' ). set ({ color : '' , power : '' })
RUN
section { float: left; padding: 20px 50px 20px 50px; } .bulb-light { border: 0; background: transparent; margin: 0 auto !important; padding: 0 !important; display: block; z-index: 1; } #bulb { opacity: 1; z-index: 3; display: block;} .bulb.top { border: 0; width: 300px; height: 300px; margin: 0 auto; padding: 0; border-radius: 999px; background: #E7E7E7; } .bulb.middle-1 { margin: -75px auto 0 auto; width: 190px; border-left: 35px solid transparent; border-right: 35px solid transparent; border-top: 55px solid #E7E7E7; } .bulb.middle-2 { margin: -22px auto 0 auto; width: 178px; border-left: 19px solid transparent; border-right: 19px solid transparent; border-top: 50px solid #E7E7E7; } .bulb.middle-3 { margin: -20px auto 0 auto; width: 182px; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 30px solid #E7E7E7; } .bulb.bottom { width: 184px; height: 65px; margin: -8px auto 0 auto; padding: 0; border-radius: 0 0 999px 999px; background: #E7E7E7; } #base { position:relative; z-index: 2; } .screw { transform: rotate(-3deg); -ms-transform: rotate(-3deg); -webkit-transform: rotate(-3deg); padding: 0; } .screw-top { margin: -18px auto -4px auto; padding: 0; width: 132px; height: 0; border-left: 15px solid transparent; border-right: 15px solid transparent; border-top: 21px solid #D3D3D3; border-radius: 999px; } .screw.a { background: #DDD; width: 150px; height: 15px; border-radius: 999px; margin: -1px auto 0px; } .screw.b { background: #D9D9D9; width: 135px; height: 15px; margin: -1px auto 0px; } .screw.c { margin: -1px auto 0px; width: 78px; height: 0; border-left: 30px solid transparent; border-right: 30px solid transparent; border-top: 20px solid #DDD; border-radius: 8px; } .screw.d { margin: 0 auto; width: 15px; height: 0; border-left: 30px solid transparent; border-right: 30px solid transparent; border-top: 15px solid #444; } .on #light { -moz-opacity: 1; -khtml-opacity: 1; opacity: 1; } .bulb.top, .bulb.bottom { transition: all 0.5s ease-in-out; } .bulb.middle-1, .bulb.middle-2, .bulb.middle-3 { transition: all 0.5s ease-in-out; }
Med disse HTML- og CSS-filene, bør du allerede kunne se en lyspæreform i nettleseren din. Åpne HTML-filen for å se live! Jobber? Ok, nå skal vi gi deg noen funksjoner.
Denne filen vil etterligne oppførselen til en lyspære med et enkelt strømklikk. Når du klikker for å slå den av, vil du angi et par funksjoner som vil bli brukt litt senere for å endre fargen gjennom Netbeast.
var color = document.getElementById('color') var power = document.getElementById('power') var bulb = document.getElementById('bulb') var button = document.getElementById('run-btn') var light = document.getElementById('light') button.onclick = function toggleBulbState () { changeBulbParams({ color: color.value, power: power.value }) } function setBulbParams (params) { if (params.power === 'off') { params = { color: 'E7E7E7' } } console.log('set params', params) var bulb_parts = ['.bulb.middle-1', '.bulb.middle-2', '.bulb.middle-3'] document.querySelector('.bulb.top').style.boxShadow = '0px 0px 98px #' + params.color document.querySelector('.bulb.top').style.backgroundColor = params.color document.querySelector('.bulb.bottom').style.backgroundColor = params.color bulb_parts.forEach(function (className) { document.querySelector(className).style.borderTopColor = params.color }) } function changeBulbParams (params) { console.log('change params', params) /* Overwrite html fields if necessary */ color.value = params.color || color.value power.value = params.power || power.value setBulbParams({color: color.value, power: power.value}) }
Da begynner alt å gi mening: feltene og løpsknappen, nå kan du begynne å teste de forskjellige fargene på den nye virtuelle lyspæren din! Grunnen til at vi kom hit er imidlertid å lage en annen enhet i vårt tingenes internett-økosystem.
Den siste front-end JS laget av oss selv, simulerer en trådløs forbindelse med serveren, som en WiFi- eller Bluetooth-pære ville gjort med fjernkontrollen din, for eksempel en telefon, en server eller en hub. Det er grensesnittet som plugin-koden vil bruke til å kontrollere det!
var socket = io.connect() socket.on('connect', function () { console.log('ws:// bulb is online') }) socket.on('disconnect', function () { console.log('ws:// connection with bulb lost') }) socket.on('set', function (params) { changeBulbParams(params) // uses functions from bulb.js! }) socket.on('get', function () { const params = { power: power.value, color: color.value } socket.emit('params', params) })
Til slutt trenger vi WebSocket-biblioteket for å være inkludert i HTML-en vår for at grensesnittet skal være klart. Du kan kopiere kildekoden fra https://raw.githubusercontent.com/netbeast/bulb-plugin/master/public/socketio.js og lime den inn i en fil som heter socketio.js . Fra en terminal med curl
eller wget
, du kan gjøre det så enkelt:
curl https://raw.githubusercontent.com/netbeast/bulb-plugin/master/public/socketio.js > public/socketio.js
Vi vil nå ha en filstruktur som ser slik ut:
myplugin ├── README.md ├── index.js ├── package.json ├── public │ ├── bulb.css │ ├── bulb.js │ ├── hw-api.js │ ├── index.html │ └── socketio.js └── test.js
Nå skal vi grensesnitt med enheten og registrere den med Netbeast-motoren. Den vil lytte etter nettstikkontakter for å oppdage om det er installert lyspærer i nettverket, og deretter vil den gjøre et POST
til dashbordets API for å gjøre de nye ressursene tilgjengelige.
Så la oss ta en titt på filene vi genererte tidligere:
Denne filen inneholder alle avhengigheter og informasjon som er nødvendige for å kjøre applikasjonen. Netbeast bruker også den vanlige package.json for å hente ut viss informasjon, for eksempel navn eller type. Det er viktig å spesifisere at denne pakken er et plugin!
{ 'name': 'myplugin', 'version': '0.0.0', 'description': 'Netbeast plugin for... ', 'main': 'index.js', 'netbeast': { 'bootOnLoad': true, 'type': 'plugin' }, 'dependencies': { 'bluebird': '^3.3.5', 'body-parser': '^1.15.0', 'express': '^4.13.4', 'minimist': '^1.2.0', 'mocha': '^2.3.2', 'morgan': '^1.6.1', 'netbeast': '^1.0.6', 'socket.io': '^1.4.5', 'superagent': '^1.8.3' }, 'devDependencies': {}, 'scripts': { 'test': 'node test.js', 'start': 'node index.js' }, 'repository': { 'type': 'git', 'url': 'GITHUB_REPOSITORY' }, 'keywords': [ 'iot', 'netbeast', 'plugin' ], 'author': 'YOUR_EMAIL', 'license': 'GPL 3', 'bugs': { 'url': 'ISSUES_CHANNEL' }, 'homepage': 'HOMEPAGE' }
Dette er koden som hentes fra Netbeast-kontrollpanelet for å starte pluginet! Det må akseptere porten via kommandolinjeargumenter for å vite hvor de skal godta innkommende forespørsler. Den vil bli lansert som om vi skrev node myplugin.js --port
. Husk å ta hensyn til hashbang først! #!/usr/bin/env node
.
#!/usr/bin/env node var io = require('socket.io')() var express = require('express') var bodyParser = require('body-parser') var app = express() // Netbeast apps need to accept the port to be launched by parameters var argv = require('minimist')(process.argv.slice(2)) app.use(express.static('public')) // will serve our app in an HTTP server app.use(bodyParser.json()) // will parse JSON API calls app.use('/api', require('./plugin')(io)) var server = app.listen(argv.port || 31416, function () { console.log('Bulb plugin listening at http://%s:%s', server.address().address, server.address().port) }) // we need websockets to push updates to browser view io.listen(server)
Som du ser, manglet vi en fil å starte, den som faktisk implementerer driverne stikkontakt.io . Uncool!
var express = require('express') var netbeast = require('netbeast') var router = express.Router() var bulbParams // auxiliar variable, nasty way to transmit changes, but works module.exports = function (io) { io = io // Create resource that works on lights topic and listens on /api route netbeast('lights').create({ app: 'myplugin', hook: '/api' }) io.on('connection', function () { console.log('ws:// bulb has connected to plugin') }) io.on('disconnection', function () { console.log('ws:// bulb has disconnected from plugin') }) io.on('connect_failure', function (err) { console.trace(err) }) router.post('/', function (req, res) { io.emit('set', { power: req.body.power, color: req.body.color, }) res.status(200).json(req.body) }) router.get('/', function (req, res) { io.emit('get') var timerReference = setTimeout(function () { if (bulbParams) { res.json(bulbParams) } else { res.status(200).json({ error: 'No bulb available' }) } }, 3000) }) return router }
Nå er det på tide å teste søknaden. Du kan pakke det hele i en tar.gz
og last deretter opp applikasjonen til kontrollpanelet i dra og slipp-delen http: // localhost: 8000 / install.
beast package # Compresses your app when ran in myplugin dir
Voilà! Nå kan du gå til plugins og teste det. Gå til nettverksseksjonen (http: // localhost: 8000 / enheter) for å se hvordan den fungerer og endre fargen derfra.
Hvis noe går galt, eller du tror du kanskje har glemt en detalj, kan du prøve å kjøre lokalt med noden node index.js
, og kanskje blir det lettere å feilsøke enn inne i loggen netbeast start
.
Hvis du vil at applikasjonen skal vises i kontrollpanelet i Utforsk-delen av Netbeast, må du opprette et lager på GitHub med applikasjonen eller Netbeast-plugin-modulen, begge inkludert i beskrivelsen og README.md .
For å finne appene vi lager, bruk GitHub Search API. Vi ser de samme resultatene som vises når en GET-forespørsel blir gjort til: https://api.github.com/search/repositories?q=netbeast+language:javascript
Du vil vite at søknaden din vil vises, hvis den ser ut er den!
Begge prosjektene er åpen kildekode og har virkelig involvert samfunnene. Hvis du vil begynne å lage dine egne flyter eller noder til Node-Red, kan du ta en titt på deres offisiell dokumentasjon . Følg trinnene som er beskrevet der, og du vil kunne publisere din egen node eller strøm på kort tid.
På den annen side, hvis du vil komme inn i Netbeast, kan du også følge dokumentasjonen for den eller ta en titt på panellageret. Ved å bruke Netbeast API trenger du ikke å fokusere på individuelle enheter, merker eller teknologier, så prøv det. Du kan lære mer om dette på NetBeast.co og bli med på deres Slakk kanal for å diskutere Node-RED, IoT eller Node.js.
Hvis du vil installere dette på en Raspberry Pi, Beagle Bone eller en gammel server, vil du gjøre det enkelt å hacke Smart Hub - ingen kode! Det er ferdige installatører for dem på begge nettstedene.
Glad hacking.