Kern IoT megoldások és rendszerek. 4G LTE NB-IoT LoRa GPS Bluetooth

kkl4pywahslvhsm7t9mb69k5rfki80

Saját APP futtatása a Robustel routereken

25.02.21 01:29 PM Comment(s) By peterkelecsenyi

Fejlessz IoT APP-ot!

A Robustel ipari routerei alapvetően kommunikációs feladatok megoldását látják el az IoT rendszerekben, de a kommunikáción túl sok egyéb feladatra is alkalmasak. 


Mit tegyünk, ha felmerül az igény egyedi funkciókra egy végponton? Például a műszerszekrény ajtajának nyitásérzékelésére, hőmérsékelt mérésre, a soros porton új készülék csatlakoztatására és speciális kommunikációs protokoll megvalósítására vagy egy adat tárolására. Kézenfekvő megoldás, hogy egy újabb vezérlőt telepítünk, írunk rá egy alkalmazást, majd működtetjük, üzemeltetjük. Mivel jár ez? Még egy további berendezés, újabb szoftver, újabb illesztés, újabb problémák! 


Mi lenne, ha a routeren valósítanánk meg az új funkciót. Interface-ek rendelkezésre állnak (DI, DO, AI, RS232, RS485, Ethernet, GPS, BT), processzor és memória szintén van a routerben és ki is lehet használni ezeket. A Robustel SDK használatával alkalmazások készíthetők, amik a RobustOS-en, a routereken futtathatók! A ROS rendelkezésre bocsátja a routerek szabad memória és processzor kapacitását.


A Robustel SDK minden Robustel routeren futtatható, funkcionális különbség a routerek különböző hardver interface-k és memória, processzor teljesítményből adódnak. A támogatott program nyelvek  C/C++, Linux Shell Script, Python 2.7.3.


Az első lépések:

Felkészülés a fejlesztésre:

  1. A fejlesztő környezet Linux rendszerre készült, de Virtual Machine-on is fut, ha nem áll rendelkezésre Linux. A VM részére érdemes 80-90GB tárhelyet allokálni arra az esetre, ha Yocto módosításokat is tervezünk, egyébként 30 GB már elegendő tárhely.
  2. Ha készen áll a Linux OS, akkor következik az SDK installálása. A cross-compile toolchain egy tömörített állományban áll rendelkezésre az SDK library-val együtt. Az SDK file neve ROS-SDK-YY-XX.tar.bz2, ahol XX a verzió számot, YY a router típusát jelöli. A tömörített file bárhova telepíthető, pl.:
$ tar jxf ROS-SDK-r3000-XX.tar.bz2 /opt
    A toolchain és az SDK  integrációjának rengeteg előnye van, többek között a firmwarrel azonos compile flagek a rendelkezésünkre állnak, valamint nem szükséges az útvonalak megadása az SDK header és lib fileokhoz, sok energiát és bosszúságot megtakarítva.

$ cd /opt/ROS-SDK-r3000-XX

$ make package/example1/install

A könyvtár struktúra:

ROS-SDK-r3000-0.9.0

├── bin

│ └── r3000

├── build_dir

│ └── target-r3000

├── include

│ ├── configure.mk

│ ├── package.mk

│ ├── quilt.mk

│ ├── rpkg-build.sh

│ ├── rstrip.sh

│ ├── unpack.mk

│ └── web_language_js_gen

├── Makefile

├── package

│ ├── example1

│ ├── example2

│ └── Makefile

├── rules.mk

├── staging_dir

│ ├── host

│ └── target-r3000

└── tarball

Az első alkalmazást néhány egyszerű lépés elvégzésével készítsük is el! 
"helloworld" Robustel SDK-val!

1) helloworld package elkészítése

$ tar jxf ROS-SDK-r3000-XX.tar.bz2 /opt

$ cd /opt

$ mkdir package/helloworld

$ mkdir package/helloworld/src

2) Forrás kód:

Szerkesszük a helloworld.c filet és mentsük a /opt/package/helloworld/src mappába.

#include <syslog.h>

int main()

{

syslog(LOG_DEBUG, “hello world”);

return 0;

}

Szerkesszük a Makefile-t és mentsük a /opt/package/helloworld/src/ mappába.

helloworld:

$(CC) helloword.c -o helloworld

3) Készítsük el az SDK scriptet: 

A program fordítása mellett készítenünk kell egy SDK scriptet, ami megmondja a routernek, hogy miként indítsa el és állítsa le az APP-ot. Az SDK több funkciót is tartalmaz, ami segít a script gyors elkészítésében, ezek a usr/lib/functions mappában találhatók. Néhány közülük: 

  • start – APP indítása
  • stop – APP leállítása
  • restart – APP leállítása és újraindítása
  • status – APP státusz ellenőrzése (fut/nem fut)
  • on_startup – APP indítása  router indulásakor
  • on_reboot – APP indítása router újraindítás előt
  • on_link_up – APP futtatása, mikor az elsődleges link akítv 
  • on_link_down – APP futtatása, mikor az elsődleges link nem aktív


$ mkdir package/helloworld/files

$ cp package/example2/files/sdk.sh package/helloworld/files/

$ vi package/helloworld/files/sdk.sh

Szerkesszük át az sdk.sh-t a minta alapján, változtassuk meg a PROG változót

#!/bin/sh

. /usr/lib/functions

RETVAL=0

PROG=helloworld

start() {

  ${PROG}

return $?

}

stop() {

killproc ${PROG}

RETVAL=$?

return $RETVAL

}

restart() {

stop

start

}

status() {

pidof -o %PPID ${PROG} >/dev/null 2>&1

RETVAL=$?

[ $RETVAL -eq 0 ] && echo ${PROG} is running || echo ${PROG} is stopped

return $RETVAL

}

status_sync() {

return 0

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

status)

status

;;

on_startup)

start

;;

on_link_up)

stop

start

;;

on_link_down)

stop

;;

on_reboot)

stop

;;

status_sync)

status_sync

;;

*)

echo $"Usage: $0 {start|stop|restart|status|on_startup|on_link_up|on_link_down|on_reboot|status_sync}"

exit 2

esac

exit $?

4) Szerkesszük a Makefile-t  

 $ cp package/example2/Makefile package/helloworld/

$ vi package/helloworld/Makefile

 include $(TOPDIR)/rules.mk

PKG_NAME:=hellworld

PKG_VERSION:=1.0

PKG_DESC:=helloworld example

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)

PKG_UNPACK:=cp -rf src/* $(PKG_BUILD_DIR)

PKG_BUILD_PARALLEL:=1

PKG_BUILD_DEPENDS:=

include $(INCLUDE_DIR)/package.mk

define Package/Install

$(INSTALL_DIR) $(1)/usr/bin/

$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin/

$(INSTALL_DIR) $(1)/etc/sdk/

$(INSTALL_BIN) files/sdk.sh $(1)/etc/sdk/$(PKG_NAME) endef

$(eval $(call BuildPackage))

5) Készítsük el a helloworld csomagot (fontos, hogy melyik mappából futtatjuk!)

 $ make package/helloworld/install

6) Utolsó lépésként installáljuk az APP-ot a router GUI  APP Centerben. Az installálandó file a bin/target-<platform>/packages/ mappában található. 


Készen is vagyunk!


Végeredményében van egy APPunk, aminek a kimenete az hogy "helloworld" a debug trace-ben. 


Csak néhány egyszerű lépést kellett végrehajtanunk és már készen is van az első APP: 

  1. Fejlesztő környezet előkészítése
  2.   Program elkészítése 
  3. APP installálása és indítása a routeren


Természetesen a helloworld-nél sokkal bonyolultabb alkalmazásokat is készíthetünk az SDK-val! A következő post-ban, bemutatjuk, hogyan tudjuk a soros port adatforgalmát menedzselő, feldolgozó alkalmazást elkészíteni!


Addig is példaként nézzétek meg, hogy milye alkalmazásokat lehet az SDK-val készíteni:


1. DataGuard: adatforgalom mérése, túlforgalmazás figyelése - APP leírásának letöltése

2. Smart Reboot: router újraindítása SMS-ben - APP leírásának letöltése

Share -

Date/Time: