어떻게 하루도 안 되는 시간 안에 강력한 사물인터넷 원형을 구축할 것인가--제1부분

사물인터넷 세계는 강대하지만 상당히 복잡하다.많은 협의와 공급업체가 있고, 이 분야는 분산되어 있다.[As Matt Turck has already shown in 2018.]

안정적이고 효과적인 원형을 만드는 것은 모든 웹이나 삽입식 개발자에게 매우 중요하다.그러나 원형을 생성하려면 다음 문제를 처리해야 합니다.
  • 하드웨어
  • 연결
  • 내장형 소프트웨어
  • IoT 공급업체 API
  • 어플리케이션의 보안 및 배포를 사용자 정의합니다.
  • 기본적인 원형이라도 이 과정은 수주가 걸릴 수 있다.본고에서 저는 Arduino, Heroku Node-RED의 강력한 기능을 어떻게 활용하여 짧은 몇 시간 안에 건장한 사물인터넷 원형을 구축하는지 보여 드리겠습니다.

    항목


    많은 사물인터넷 프로젝트는 센서로부터 데이터를 읽는 데만 관심을 갖는다.그러나 진정한 원형에 대해서는 사물인터넷 센서 노드에서 클라우드, 그리고 클라우드에서 실행기까지 데이터의 양방향성이 필요합니다.네트워크 개발에 대해 더 많은 지식을 가지고 있고, 삽입식 시스템에 대해 더 적은 지식을 가진 모든 사람들에게 센서와 집행기의 정의입니다.
  • 센서는 일부 물리적 치수를 읽고 디지털 또는 아날로그 값으로 변환하는 입력 장치입니다.그리고 나서 마이크로 컨트롤러가 이 값을 읽는다.만약 네가 온도를 측정하고 싶다면, 너는 온도 센서를 사용할 수 있다.
  • 발동기는 일종의 출력 장치로 물리 세계에 작용하고 물리 사물의 상태를 변화시킨다.스위치나 LED는 모두 실행기입니다. 켜거나 끌 수 있습니다.
  • 더 많은 것을 알고 싶으시면 the difference between sensors and actuators.에 관한 글을 읽어 주십시오.
    대부분의 사물인터넷 프로젝트의 전체 구조는 다음과 같다.

    따라서, 원형을 신속하게 만들 수 있는 예시 프로그램을 만듭니다.다음과 같은 구성 요소를 사용합니다.
  • Arduino판은 사물인터넷 노드로 한다.
  • 아두노와 호환되는 차폐는 센서와 집행기로 한다.
  • 사물인터넷 서버인 아두노 사물인터넷 클라우드 계정.
  • 업무 논리의 빨간색 노드(Heroku에서 실행되고 원본 코드는 GitHub에서)
  • UI 및 모바일 용례를 위한 JavaScript 사용자 정의 응용 프로그램입니다.
  • 우리의 예시 프로그램에서, 우리는 센서로부터 데이터를 보내는 장면을 만들 것이다.(밝기, 온도 및 습도 센서를 사용합니다.)다른 장치는 정보를 받자마자 LED 매트릭스에 정보를 표시합니다.

    필요한 사항:
  • 2배 Arduino MKR WiFi 1010(32.10달러)
  • 1x Arduino RGB Shield(44.90달러)
  • 1x Arduino MKR ENV Shield(34.40달러)
  • Arduino IoT Cloud Maker Account(6.99달러/월)
  • A GitHub Account(무료)
  • A Heroku Hobby Account(무료, 또는 월 7달러로 어플리케이션의 수면 상태를 방지)
  • 시작해보도록 하겠습니다.


    첫 번째 단계는 하드웨어가 도착하기를 기다릴 때 노드 RED를 설정할 수 있습니다.Node RED는 강력한 저코드 프로그래밍 도구로 Node 기반 이벤트 드라이버에 적용됩니다.js.하드웨어 장치 간의 흐름을 그래픽 방식으로 쉽게 연결한 다음 한 번만 누르면 배치할 수 있습니다.노드 빨간색은 노드에 구축됩니다.js.Node.js에 익숙하다고 가정합니다. 익숙하지 않으면 https://nodejs.org/에서 이해하고 설치할 수 있습니다.)

    빨간색 노드 설치


    TL;DR: 프로그램을 빠르게 테스트하려면 이 부분을 건너뛰고 포장된 부분으로 이동하십시오. 이 부분은 프로젝트의 빠른 시작 버전을 가리키는 링크가 있습니다.
    그러나 이 기능을 직접 구축하고 최종적으로 최신 버전의 Node RED로 작업을 업데이트하는 방법에 대해 알고 싶으면 아래의 상세한 설명을 따르십시오.
    Node RED를 설치하고 설치, 보호 및 실행하려면 약간의 작업이 필요하므로 다음 단계를 완료하십시오.우선, 최신 안정적인 버전을 확보하세요.우리의 목적에서 우리는 git를 사용할 것이다.
    git clone [email protected]:node-red/node-red.git node-red-private
    cd node-red-private
    ## Let's move the latest stable version as of 2020-07-01
    git checkout 1.1.0
    ## And create our branch for experimenting
    git checkout -b iot-proto
    ## Install deps and build the app
    npm install
    npm run build
    ## Start the app
    npm start
    
    이제 노드 RED가 시작되고 실행되어야 합니다. 대개 http://localhost:1880입니다.이 창을 열면 다음과 같은 인터페이스가 표시됩니다.

    이것은 좋은 시작이지만, 안전성이 없어서, 모든 물건이 현지에서 운행된다.이런 설정은 엄숙한 원형 디자인에 적용되지 않기 때문에 우리는 이렇게 익살스럽게 표현하고 싶지 않다.

    https://donthitsave.com/comic/2016/07/15/it-works-on-my-computer

    노드 RED에 자격 증명 추가


    Node RED에 보안을 추가하려면 인터페이스(정적 자산), 시각 형상 편집기 및 API를 보호하는 것이 좋습니다.이를 위해서는 Securing Node-RED에 관한 공식 지침을 따르십시오.증거를 추가하려면 암호를 만들고 해시를 가져오는 방법이 필요합니다.Node RED에는 Node RED admin이라는 간단한 도구가 있습니다.다음과 같은 방법으로 설치할 수 있습니다.
    $ npm install --save-dev node-red-admin
    ## Here is the dir where we will put our configurations
    $ mkdir data
    
    우리도 같은 디렉터리에 설치하자 Arduino plugin.
    $ cd data
    $ npm install @arduino/node-red-contrib-arduino-iot-cloud
    
    이제 비밀번호를 만듭니다.스크립트는 상호 작용으로 암호를 요청합니다.
    # ./node_modules/node-red-admin/node-red-admin.js hash-pw
    Password: 
    $2b$08$xGtfBswU4BF53FymNK9oae/Oz56d35W4/xxxxxxxxxxxx9cbC
    
    되돌아오는 문자열은 우리가 설정에서 사용할 수 있는 해시입니다.js 파일. the Github repo of Node-RED에서 올바른 설정 파일을 찾을 수 있습니다.이 서류부터 시작해서 필요에 따라 조정합시다.우선, 우리는adminAuth 부분에 대한 주석을 취소하고 다음과 같이 변경해야 한다.
    adminAuth: {
           type: "credentials",
           users: [{
               username: process.env.NODERED_USERNAME || "admin",
               password: process.env.NODERED_PASSWORD_HASH,
               permissions: "*"
        }]
    },
    
    이것은 환경 변수를 사용하여 암호의 해시 값을 설정할 수 있도록 합니다.(우리는 방금 node red admin의hash pw 명령으로 그것을 만들었습니다.) 사용자 이름과 'admin' 으로 되돌아갑니다.
    이는 파일의 다른 부분에도 적용됩니다.
    httpStaticAuth: {
            user: process.env.NODERED_USERNAME,
            pass: process.env.NODERED_PASSWORD_HASH
        },
    

    And

    credentialSecret: process.env.NODERED_CREDENTIAL_SECRET,
    

    My complete settings file is available at [[ xxxxx ]]

    The final important step is to set the port.

        uiPort: process.env.PORT || 1880,
    

    Be sure to save your work in a proper directory. Usually, Node-RED saves the data into $HOME/.node-red, but this will not work well with our setup in Heroku, nor is useful to have the source code revisions for our work. So I added...

         flowFile: 'data/flows.json',
    

    And

         userDir: 'data/',
    

    The full file settings.js without comments is less than 40 lines.

    module.exports = {
        // the tcp port that the Node-RED web server is listening on
        uiPort: process.env.PORT || 1880,
        mqttReconnectTime: 15000,
        serialReconnectTime: 15000,
        debugMaxLength: 1000,
        flowFile: 'data/flows.json',
        credentialSecret: process.env.NODERED_CREDENTIAL_SECRET,
        userDir: 'data/',
        adminAuth: {
           type: "credentials",
           users: [{
               username: process.env.NODERED_USERNAME || "admin",
               password: process.env.NODERED_PASSWORD_HASH,
               permissions: "*"
        }]
        },
        httpStaticAuth: {
            user: process.env.NODERED_USERNAME || "admin",
            pass: process.env.NODERED_PASSWORD_HASH
        },
        functionGlobalContext: {
        },
        exportGlobalContextKeys: false,
        logging: {
            console: {
                level: "info",
                metrics: false,
                audit: false
            }
        },
        editorTheme: {
            projects: {
                enabled: false
            }
        }
    }
    

    환경 변수 설정

    To declare the needed variables, you can create a local .env file like this one:

    NODERED_PASSWORD_HASH='yourpassword-hash-from-the-node-red-admin-output'
    NODERED_USERNAME='admin'
    NODERED_CREDENTIAL_SECRET='averylongsecretofyourchoice'
    

    Now let’s load those variables and start Node-RED again.

    $ export $(cat .env | xargs)
    $ npm run build
    $ npm start
    

    As soon as we see the Node-RED interface again, we will be prompted with a password.

    Our server is now secure, but still running locally. And after the login, we should be able to see the new Arduino plugin available in the left palette.


    The Arduino IoT Cloud plugin for Node-RED allows Node-RED to read data from the sensors, send a payload back to the board, inject a value in one of our Arduino IoT Cloud properties, and access the historical values of a property. A property is the logical web representation of either a sensor or an actuator.

    Now it’s time to make everything simpler and use Heroku to deploy Node-RED to our staging environment.

    Heroku CLI 설치

    Heroku is a PaaS vendor that makes it easy and fast to deploy apps to the cloud. We’ll use the Heroku CLI to set up and deploy to Heroku from our local machine. (The best way to install and understand how this works is by following the official tutorial on how to install Heroku CLI.) Once installed, in the same directory of our Node-RED instance, run

    $ heroku login -i
    heroku: Enter your login credentials
    Email [[email protected]]:             
    Password: **************
    Two-factor code: ******
    Logged in as [email protected]
    

    Then create a new app.

    $ heroku create
    Creating app... done, ⬢ arcane-castle-06470
    https://arcane-castle-06470.herokuapp.com/ | https://git.heroku.com/arcane-castle-06470.git
    

    And finally give it a better, memorizable name:

        $ heroku apps:rename node-red-arduino
        Renaming arcane-castle-06470 to node-red-arduino... done
        https://node-red-arduino.herokuapp.com/ | https://git.heroku.com/node-red-arduino.git
        Git remote heroku updated
         ▸    Don't forget to update git remotes for all other local checkouts of the app.
    

    From now on, we’ll let Heroku handle the heavy work with deploying and running the app, as it supports Node.js and grunt out of the box.

    To run Node-RED locally with Heroku, mimicking 100% what will happen in production, you can run...

        $ heroku local
    

    This will open the app at http://localhost:5000. However, we want to run and deploy our app on Heroku. This is just a matter of setting our vars and then pushing to the Heroku git endpoint.

        ## This will set the proper variables in Heroku. You can skip this if you want to use the Heroku Web UI to set your variables
        $ cat .env | xargs heroku config:set
        ## Now deploy our app!
        $ git push heroku iot-proto:master
    

    And see it online!

    그것을 싸라

    We now have a secure Node-RED instance running on Heroku and ready to hook up to our Arduino boards.

    I’ve also built a quick way to reproduce the steps I’ve shown in detail. Full instructions are available at my node-red-iot repo on Github.

    Here’s a recap of what we learned today:

    • The most common IoT Architectures
    • Setting up Node-RED locally
    • Adding security to Node-RED
    • Add environment variables and manage settings
    • Install Heroku CLI
    • Deploy our Node-RED instance to Heroku

    다음 단계

    In the next article, I’ll show you how to create our embedded system on the Arduino boards, connect them to our Node-RED instance, then create and save a flow to our Heroku instance that is resilient to restarts. Finally, I’ll show you how to create a custom application on top of this setup using JavaScript.

    좋은 웹페이지 즐겨찾기