Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
HARTING HAIIC MICA Programming Guide
日本語
HAIIC MICA Programming Guide
2 HARTING IT Software Development
3. Edition 2017, 09/17
© HARTING IT Software Development, Espelkamp
翻訳を含むすべての権利が留保されています。
このマニュアルのいかなる部分も、HARTING Electric GmbH & Co. KG, Espelkampの書面による許可なく、電子システムを使用して、いかなる形態(印刷、コピー、マイクロフィルムまたはその他のプロセス)でも複製、加工、複製、配布することはできません。
予告なく変更することがあります。
このProgramming Guideは、MICAコンテナアプリケーションの開発方法が含まれています。ベースバージョンは、V1.5.0で記述されています。
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 3
目次1 コンテナの基本と使用方法 ............................................................................. 4
1.1 コンテナベーシック .............................................................................. 41.2 コンテナのインストール ................................................................. 4
1.3 コンテナの起動、停止、管理 ................................................................. 61.4 コンテナのエクスポート ................................................................. 61.5 コンテナの複製 ........................................................................................... 71.6 コンテナの更新 ........................................................................................... 71.7 コンテナのリセット .............................................................................. 7
2 “HelloWorld” アプリケーション ................................................................ 8
2.1 Pythonで“HelloWorld”アプリケーション ....................................... 8
2.2 Javaで“HelloWorld”アプリケーション .................................................... 9
2.3 C++で“HelloWorld” クロスコンパイル .................................................... 9
3 MICAベースシステムによって提供されるサービス ..................................... 11
3.1 概要 ....................................................................................................... 11
3.2 Single Sign On (SSO) .............................................................................. 11
3.3 コンテナ管理 ......................................................................................... 18
3.4 ベース管理 ......................................................................................... 21
3.5 ベースとコンテナのネットワーク設定 .................................................. 25
3.6 ハードウェアアクセス - RPCによるデバイス管理 ........................ 28
3.7 RPCによる時間設定管理 ............................................................... 31
3.8 コンテナアクセス ............................................................................ 32
3.9 ファームウェア更新 ............................................................................ 33
3.10 WLAN Functionality ................................................................................ 36
4 コンテナ開発 ..................................................................................................... 38
4.1 自動起動スクリプト ............................................................................ 38
4.2 クロスコンパイル ............................................................................ 38
5 GUIプログラミング ........................................................................................ 42
6 RFID電子識別プレートの構造 ........................................................................... 44
7 メソッドインデックス ........................................................................................ 46
HAIIC MICA Programming Guide
4 HARTING IT Software Development
1 コンテナの基本と使用方法
1.1 コンテナベーシック
コンテナは、ホスティングシステムとLinuxカーネルを共有する軽量の仮想マシンです(ベースシステムと呼ばれます)。 MICAコンテナには、アプリケーションと必要なすべてのライブラリとスクリプトが含まれています。 したがって、アプリケーションは互いに分離され、基本システムはMICA内の依存関係を大幅に減少させます。
1.2 コンテナのインストール
MICAアプリケーションの開発は、通常、開発コンテナから始まります。 HARTINGは、例えば、基本的なPython、DebianまたはJava開発コンテナを提供しています。実行中のMICAベースシステムに新しいコンテナをインストールするには、コンテナアーカイブ(.lzo)をPC上の任意のディレクトリにコピーします。Webブラウザで目的のMICAに接続します。 Windowsでは、MICAにhttps://devicenameでアクセスできます。 お使いのコンピュータがmdns(Linux、Mac)を使用している場合、ホームページはhttps://devicename.local1にアクセスできます。 セキュリティ証明書を受け入れるよう求められます。
1 MICAベースシステムに接続する方法の詳細については、"MICA Quick Start Guide"および"MICA Administrator Guide."を参照してください。
MICAベースOS
HTTPS WSS
TCP/IP
IP 10.86.129.24 fe80::52
ベースサービス(コンテナ管理、システム
構成とメンテナンス、ユーザ管理+ SSO)
コンテナ環境
Pythonコンテナ
GPIOコンテナ
......
IP 10.86.129.22 fe80::1
IP 10.86.129.23 fe80::2
図1 : システムアーキテクチャ
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 5
ユーザー名adminと管理者パスワードを使用してデバイスにログインします。 adminアカウントのデフォルトのパスワードはadminです。 必要に応じて、Settings >>> Accountsでパスワードを変更することができます。"Install"をクリックし、コンテナに任意の名前を付け、PCからコンテナアーカイブ.lzoをアップロードします。
図2: コンテナのインストールのためのインストールアイコン
図3: コンテナのアップロードとインストール
HAIIC MICA Programming Guide
6 HARTING IT Software Development
1.3 コンテナの起動、停止、および管理
WEBGUIでは、コンテナの開始、停止、複製、およびエクスポートを含むコンテナの管理が行えます。 コンテナ管理の詳細については、"MICA Quick Start Guide"および"MICA Administrator Guide"を参照してください。.
図4: コンテナの起動
1.4 コンテナのエクスポート
コンテナをエクスポートすると、アプリケーション設定などコンテナの現在の状態のコピーが作成されます。 これは、コンテナを配布し、クライアントPCまたはネットワークディレクトリにスナップショットとバックアップを保存するために推奨される方法です。
図5 コンテナのエクスポート
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 7
1.5 コンテナの複製
コンテナを複製すると、複製されたコンテナの正確なコピーがMICA自体に作成されます。
ルートファイルシステムとオーバーレイの両方が正確にコピーされ、ランニングシステムに追加され、機能的に同等の2つのコンテナがシステムにインストールされます。
1.6 コンテナの更新
コンテナを更新すると、元のファイルシステムが置き換えられ、オーバーレイファイルシステム内のすべての変更されたデータは変更されません。このようにして、ユーザによって行われた変更(例えば設定)は、コンテナおよびそのルートファイルシステムの一貫性を維持しながら失われることはありません。
1.7 コンテナのリセットコンテナをリセットすると、ユーザによって生成されたすべてのデータがコンテナのオーバーレイファイルシステムから削除されます。
コンテナのルートファイルシステムは変更されません。 コンテナファイルのルートシステムは、最後のインストール/更新後の状態にリセットされます。
警告:コンテナをリセットすると、元のコンテナまたは最後のインストール以降に作成されたすべてのデータと設定が削除されます。 コンテナは元のインストールまたは最後の更新の状態に復元されます。
HAIIC MICA Programming Guide
8 HARTING IT Software Development
2 “HelloWorld” アプリケーション
2.1 Pythonによる“HelloWorld” アプリケーションHARTINGのPythonデモ・コンテナをインストールした後、PythonスクリプトをMICA
WebGUIのPythonプログラミング・シェルに書き込むことができます。コンテナアイコンをクリックしてPythonコンテナを開きます。 コンテナが開いたら、[Enable Shell]をクリックします。 対話的にPythonコードを入力して実行することができます。Pythonのデモ・コンテナでは、コンテナの/home/pythonディレクトリに格納されているPythonスクリプトを実行することもできます。 sshまたはscpを使用してコンテナファイルシステムにアクセスする方法については、2.2項を参照してください。
図6: Python開発コンテナのGUI
例:
Enter
print(“Hello World!”)
and press “Start Script”.
Hello World!
画面に表示されます。
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 9
2.2 Javaによる“HelloWorld” アプリケーションHARTING Javaコンテナをインストールした後、独自のJavaプログラムをPCに作成し、実行可能ファイルをssh、scp、またはsftpを使用してJavaコンテナに転送することができます。 次の例では、WindowsにPutty(http://www.putty.org/)とJava SE開発キット7(JDK
7)を使用します。
注意:HARTING JavaコンテナはJava 7のみをサポートしています。新しいコンパイラでコンパイルすると、Hello Worldスクリプトはコンテナで実行されません。JDKをインストールした後、次のような簡単なJavaプログラムを作成して保存します。
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
ファイルを "HelloWorld.java"の下に "ANSI"エンコーディングで保存します。
HelloWorld.javaを次のようにコンパイルできます。
javac Helloworld.java
scpを使用して、実行可能なJavaファイルHelloWorldApp.classをJavaコンテナにプッシュできます。
Windowsでは、Windowsの[スタート]メニューでコンソールウィンドウまたはコマンドプロンプトを開く方法があります。 pscpのPATH変数を設定します。 オプション-scpを指定してpscpを実行することにより、scpの使用を強制します。
Pscp -scp c:\documents\HelloWorldApp.class root@<container-ip-ad-
dress>:
Javaコンテナのルートパスワード(デフォルトルート)を入力する必要があります。
コンテナをコピーした後、sshを使用してJavaコンテナに接続できます。
ssh root@<container-ip-address>
Javaアプリケーションを実行します。
java -cp . HelloWorldApp
すべてがうまくいけば、sshシェルで次のように表示されるはずです。
Hello World!
2.3 C++ による“HelloWorld” クロスコンパイルgccや別のLinuxコンパイラスイートをコンテナ(HARTING Debianベースコンテナなど)にインストールし、MICAでコードを直接開発するだけでなく、Linux環境でプログラムを開発し、MICA ARMv7 CPU用にクロスコンパイルすることも可能でDebianまたはbusyboxのコンテナに転送します。
HAIIC MICA Programming Guide
10 HARTING IT Software Development
この例では、gcc-linaro-arm-linux-gnueabihf-4.9-2016.02-x86_linux.tar.xz (https://
releases.linaro.org/components/toolchain/binaries/4.9-2016.02/arm-linux-gnueabihf/から入手可能)という事前設定済みのC++クロスコンパイラを使用して、UbuntuからHARTING Busyboxコンテナにクロスコンパイルしています。
http://sourceware.org/ml/crossgcc/2005-08/msg00114/l-cross-ltr.pdfに記載されているように、独自のクロスコンパイラを構築することもできます。
gcc-linaroアーカイブをダウンロードし、ローカルのUbuntuシステムで作成した新しいディレクトリに解凍します。
tar xvf gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf.tar.xz
次に、geditのようなテキストエディタを開き、タイプを入力します。
#include <iostream>
int main()
{
std::cout << “Hello World\n”;
}
HelloWorld.cppとして保存します。 コンパイルを入力
./arm-linux-gnueabihf-g++ HelloWorld.cpp –o a.out.
a.outファイルをBusyboxコンテナに転送し、セクション2.2で説明されているようにssh経由でコンテナ上のa.outを実行します。 Hello Worldが画面に表示されたら成功です!
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 11
3 MICAベースシステムによって提供されるサービス3.1 概要
MICAベースシステムは、コンテナのライフサイクル、ハードウェアとネットワークのアクセス、シングルサインオン(SSO)の管理など、開発者向けのさまざまなサービスを提供します。 JSON-RPC 2.0に基づくリモートプロシージャコールメカニズムが使用されています。 詳細な仕様については、www.simple-is-bet-ter.org/json-rpc/jsonrpc20.html
を参照してください。サービスコールの前には矢印が右側に表示され、サービス応答の前には矢印が左に表示されます。 IDプロパティは必須であり、複数のリクエストが同時に送信された場合に、リクエストとの回答を関連付けるためにクライアントによって設定される必要があります。 jsonrpcプロパティは常に2.0に設定されます。 シングルサインオンなしで "ping"メソッドを使用できます。
-> {"jsonrpc":"2.0","id":1,"method":"ping"}
<- {"jsonrpc": "2.0", "id": 1, "result": "pong"}
3.2 シングルサインオン (SSO)
ベースシステムは、Webサービスとしてシングルサインオンサービスを提供します。 このサービスは、POST要求またはWebsocketインタフェースとしてHTTP上で使用できます。
このサービスは、TLS暗号化でのみ使用できます。 mica1.localという名前のデバイスの場合、サービスはポート443上の次のURLで使用できます。:
HTTP: https://mica1.local/base_service/
Websocket: wss://mica1.local/<ws>/
図8 で説明したように、保護されたリソースを使用するクライアントは、検証可能なトークンをまだ所有していないため、SSOサービスリクエストを送信します。
クライアント ウェブサービス
リクエストデータ (例 ping)
送信データ (例 pong)
図7: ベースサービスへのアクセス
HAIIC MICA Programming Guide
12 HARTING IT Software Development
SSOサービスは、認証が成功した場合に、TTL(Time To Live)のトークンを渡します。
最初はこの時間は10分です。 クライアントがサーバ上でプロシージャを開始したい場合、このトークンを引き渡す必要があります。 トークンを取得するには、ユーザ名とbase64でコード化されたパスワードをパラメータとして、get_auth_token rpcリクエストを送信する必要があります((applicable for ad-mins, containeradmins, users):
Method: get_auth_token
Parameters: User (string),
pwd (base64 encoded string)
Return Value: act_token (string), auth_token (string), time to live (seconds)
例:
-> { "jsonrpc" : "2.0",
"id" : <int>,
"method" : "get_auth_token",
"params" : {
"user" : "<string>",
"pwd" : "<base64 encoded string>"
}
}
<- {"result": ["Vo0DlhA43D", "i2xVTBPKuM", 600]}
この場合、パラメータはjsonオブジェクトに表示されます。 あるいは、パラメータを配列として与えることもできます:
-> {
"jsonrpc" : "2.0",
"id" : <int>,
"method" : "get_auth_token",
"params" : ["<string>", "<base64 encoded string>"]
}
<- {"result": ["Vo0DlhA43D", "i2xVTBPKuM", 600]}
有効化 the auth_token (admin, containeradmin, user):
Method: validate_auth_token
Parameters: auth_token (string),
Return Value: time to live (seconds, float), user (string)
例:
-> {"method":"validate_auth_token", "params":["'+auth_token+'"]}
<- {"result": [599.9869105815887, "user"]}
更新 auth_token (admin, containeradmin, user):
Method: renew_auth_token
Parameters: act_token (string), auth_token (string),
Return Value: time to live (seconds)
-> {"method":"renew_auth_token","params":["'+act_token+'",
"'+auth_token+'"]}
<- {"result": [600]}
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 13
有効化と更新 auth_token (admin, containeradmin, user):
Method: validate_and_renew_auth_token
Parameters: act_token (string), auth_token (string),
Return Value: time to live (seconds)
例:
-> {"validate_and_renew_auth_token","params":["'+act_token+'",
"'+auth_token+'"]}
<- {"result": [600]}
無効化 auth_token (admin, containeradmin, user): Method:
invalidate_auth_token
Parameters: act_token (string), auth_token (string),
Return Value: success (string) or error( error code and string)
例:
-> {"method":"invalidate_auth_token","params":["'+act_token+'",
"'+auth_token+'"]}
<- {"result": "token sucessfully invalidated"}
ホストとファームウェアに関する情報を取得 (admin, containeradmin, user):
Method: get_info_text
Parameters: none
Return Value: def_host (default hostname)(string), product_name (string), product_version
(string), cur_host (current hostname)(string), base_version (string), interface_version (inter-
face for containers)(number)
例:
-> {"method":"get_info_text"}
<- {
"result" : {
"def_host" : "Default Hostname: mica-n7v6o",
"product_name" : "Product Name: HAIIC MICA USB",
"product_version" : "Product Version: HAIIC MICA
1.4.0",
"cur_host" : "Current Hostname:
mica-n7v6o.espel.harting.intra",
"base_version" : "Base Version: 1.4.0",
"interface_version" : "Interface Version:
1.1.1"
}
}
再起動後に回復されたコンテナの名前を取得するには(LXCファイルが存在するが、meta-conf-entriesがないコンテナ(admin、contain-eradmin、user)に適用可能):
Method: get_autostart_information
Parameters: auth_token (string)
Return Value: container name
HAIIC MICA Programming Guide
14 HARTING IT Software Development
例:
-> { "method":"get_autostart_information","params":["'+auth_to-
ken+'"]}
<- {"result": []}
サービスバージョン、つまりAPIのバージョンを取得 (admin, containeradmin, user):
Method: get_service_version
Parameters: auth_token (string)
Return Value: container name
Example:
-> {"method":"get_service_version","params":["'+auth_token+'"]}
<- {"result": "1.0.0"}
使用可能なユーザースペースを取得 (admin, containeradmin, user):
Method: get_available_userspace
Parameters: auth_token (string)
Return Value: free_MB (float)
例:
-> {"method":"get_available_userspace","params":["'+auth_token+'"]}
<- {"result": {"free_MB": 2046.623744}}
デバイス名を取得 (admin, containeradmin, user):
Method: get_name
Parameters: none
Return Value: name (string)
例:
-> {"method":"get_name"}
<- {"result": ["mica-n7v6o.espel.harting.intra"]}
ユーザー設定を取得 (admin, containeradmin, user):
Method: get_name
Parameters: none
Return Value: name (string)
例:
-> {"method":"get_user_settings","params":["'+auth_token+'"]}
<- {
"use_ntp" : true,
"ipv6Prefix" : 64,
"passwords" : {
"user" : [2,
"009b2b3c4f08a79e6cb3a6148cf755c8f9aece12ecac044ed2253608a6fe9aed",
"2a55584792fd44c1500d69ccc2c17a09466cb044cd9bef83eb26ad87da7266f1"],
"containeradmin" : [1,
"321d6549f5133acf0e007d8a8f4afbe10ad664e2ad5c5ccb5c15cc792169a135",
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 15
"c7666b4ca23662edd83e698e4a31b62c969c0c85d120f2e17510cee0f28f65f0"],
"admin" : [0, "b8e94a8788a3913dac82be-
aaa7937719a6824f56d180506941158663e341b7a0",
"279cec99665f3291353c8d4361d6817f9407215521508fdc8c2d5b39218ac58b"]
},
"ipv4Prefix" : 12,
"productionYear" : 16,
"timezone" : "UTC",
"ipv4Mode" : 1,
"defaultPassword" : "admin",
"ntp_list" :
"0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org,3.pool.ntp.org",
"epc" : "30-2d-96-4a-31-20-00-40-00-e9-f2-48",
"ipv6Gateway" : "::",
"ipv4Address" : "0.0.0.0",
"productionDay" : 9,
"conf" : {
"ipv4Prefix" : 20,
"ipv6Prefix" : 64,
"ipv4Mode" : 2,
"dnsMode" : 0,
"ipv6Address" : "fd9e:21a7:a92c:2323::1",
"ipv6Mode" : 2,
"ipv4Address" : "10.86.129.200",
"dnsAddress" : "0.0.0.0",
"ipv6Gateway" : "fd9e:21a7:a92c:2323::1",
"ipv4Gateway" : "10.86.139.1"
},
"dnsMode" : 0,
"ipv6Address" : "::",
"control" : 0,
"revisionNumber" : "01",
"dns-Address" : "0.0.0.0",
"productName" : "HAIIC MICA USB",
"ipv4Gateway" : "0.0.0.0",
"productionMonth" : 6,
"ipv6Mode" : 0,
"version" : 2,
"mac" :
"00:0A:ED:E9:F2:48",
"hostname" : "mica-n7v6o"
}
HAIIC MICA Programming Guide
16 HARTING IT Software Development
図8: シングルサインオン認証:トークン要求とサービス使用
例:
次の例では、Linux上でPC上のPythonスクリプトを使用してコンテナを開始します。MICAデバイスにPython 3.4コンテナをインストールし、 “Stop App”で非アクティブに設定します。 パドロックアイコンをクリックして証明書を保存します。
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 17
図9: Firefoxでの証明書ダウンロード
“More Information” ボタンをクリックします。 その後 “View Certificate” -> “Details” ->
“Export”でアクセスします。
選択したディレクトリに証明書を保存します。
Python 3.5をLinuxにインストールします。 たとえば、 Anacondaからhttps://
www.continuum.io/downloads をダウンロードし、Pythonのテキストエディタ "Spyder"を起動します。
コンソールを開きます。 インポートurllib3:
import json
import urllib3
import hashlib
from base64 import b64encode
role = "admin"
passwd = "admin"
service_url = "https://mica17.local/base_service/"
MICAの証明書アクセス
http = urllib3.PoolManager( assert_hostname=False,
ca_certs="../Downloads/HARTINGITSoftwareDevelopmentGmbH&Co.KG.crt" )
アクションと認証トークンの要求をMICAベースサービスに送信するには、次の手順を実行します。:
passwd_b64 = str( b64encode( bytes( passwd, "utf8" ) ), "utf8" )
rpc_obj = {
"jsonrpc": "2.0",
"id":1,
"method":"get_auth_token",
"params":{
"user": "admin", "pwd": passwd_b64
}
}
HAIIC MICA Programming Guide
18 HARTING IT Software Development
at = http.urlopen( "POST", service_url, body=json.dumps( rpc_obj ) )
rep_data_str = str( at.data, "utf-8" )
ret = json.loads( rep_data_str )
auth_token = ret["result"][1]
act_token = ret["result"][0]
応答を確認は:
print (ret)
応答は次の形式にする必要があります。:
{'result': ['Xy763b2HC7', 'T8QqT3PeND', 600], 'id': 1, 'jsonrpc':
'2.0'}
コンテナの起動は:
rpc_obj= {
"jsonrpc": "2.0",
"id":3,
"method":"start_container",
"params":[ "Samba", auth_token ]
}
r = http.urlopen( "POST", service_url, body=json.dumps( rpc_obj ) )
応答確認は:
print(r.data)
レスポンスのフォームが必要:
{"result": {"started_container": "Samba"}}
また、MICAのコンテナが起動しているかどうか確認してください。
3.3 コンテナ管理
SSOインタフェースを介して、コンテナを管理することができます。 すべてのコマンドで、認証トークンの値は、例の停止コンテナに示されているように最後のパラメータとして指定する必要があります。 jsonrpcとidプロパティは、読みやすさを高めるために例には示されていません。 認証が必要な場合は、有効なトークンを持つauth token-Propertyを呼び出しのparamsプロパティにインサートする必要があります。.
コンテナのリセット (admins または containeradmins):
Method: reset_container
Parameters: container name (string)
Return Value: result (string)
例:
-> { "method": "reset_container", "params" : "<container name>" }
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 19
<- { "result": "reset_in_progress" }
コンテナの削除 (admins)
Method: delete_container
Parameters: container name (string)
Return Value: container deleted (string) or error code
例:
-> { "method": "delete_container", "params" : "<container name>" }
<- { "result": "container_deleted" }
コンテナの起動 (admins と containeradmins)
Method:start_container
Parameters: container name
Return Value: container started (string)
例:
-> { "method": "start_container", "params" : "<container name>" }
<- { "result": "container started” }
コンテナのエクスポート (admins と containeradmins)
Method: stop_container
Parameters: container name
Return Value: container stopped (string)
例:
-> { "method": "stop_container", "params" : "<container name>" }
<- { "result": "container_stopped" }
インストール済みのすべてのコンテナ情報を取得 (admins, containeradmins, users)
Method: get_container_config
Parameters: auth_token (string)
Return Value: state (int) 2=off 1=on 3=error -1=container nonexistant, start (bool), ipv6Prefix (int), dhcp_ipv4Gateway (ip_address), ipv6Address (ip_address), dhcp_ipv4Prefix (int), ipv4Prefix (int), ipv4Gateway (ip_address), dhcp_ipv4Address (ip_address), devices (string), index (int), ipv4Mode(int), install_info {container, devices, build_date, version, inter-face_version"}, ipv6Mode (int), disable_delete (bool), mac (mac address), ipv6Gateway (ipv6 address), ipv4Address (ip_address)
例:
-> {"method":"get_container_config","params": { "auth_token":
"'+auth_token+'"}}
<- {
"result" : "USB" : {
"state" : 2,
"start" : false,
"ipv6Prefix" : "",
"dhcp_ipv4Gateway" : "10.86.139.1",
"ipv6Address" : "",
HAIIC MICA Programming Guide
20 HARTING IT Software Development
"dhcp_ipv4Prefix" : "20",
"ipv4Prefix" : "",
"ipv4Gateway" : "",
"dhcp_ipv4Address" : "10.86.129.136",
"devices" : ["/dev/bus/usb/002/004"],
"index" : 17,
"ipv4Mode" : 1,
"install_info" : {
"container" : "[base] Busybox (C12)",
"devices" :
["/dev/bus/usb/002/004"],
"build_date" : "Wed May 18 18:43:18 CEST 2016",
"version" : "1.1.0_r
(93:1bfd14980510)",
"interface_version" : "1.1.0"
},
"ipv6Mode" : 0,
"disable_delete" : false,
"mac" : "16:01:91:e8:b6:c4",
"ipv6Gateway" : "",
"ipv4Address" : ""
}
}
}
コンテナの検索 (admins, containeradmins, users):
Method: container_exists
Parameters: container name
Return Value: container exists (boolean)
例:
-> {"method":"container_exists","params": { "name": "Java"}}
<- {"result": true}
コンテナ設定 “read-only” (admins)
Method: set_container_ro
Parameters: container name (string), ro (boolean), auth_token (string)
Return Value: success (string), or error code
例:
-> {"method":"set_container_ro","params": { "name": "Java", "ro" :
"", "auth_token": "'+auth_token+'"}}
<- {"result": "ro flag of container Java changed to False"}
コンテナ状態の取得 (admins, containeradmins, users):
Method: get_container_state
Parameters: container name (string)
Return Value: state (int)
2=off 1=on 3=error -1=container nonexistant, name (string)
例:
-> {"method":"get_container_state","params": { "name": "Java"}}
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 21
<- {"result": {"state": 1, "name": "Java"}}
コンテナの複製 (admins, containeradmins, users):
Method: duplicate_container
Parameters: auth_token (string), container name (string), duplicate name (string)
Return Value: success (string) or error code
例:
-> {"method":"duplicate_container","params": { "auth_token":
"'+auth_token+'", "name" : "Java", "duplicate_name" : "Java2"}}
<- {"result": "successfully duplicated"}
コンテナのエクスポート (admins, containeradmins, users):
Method: get_container_state
Parameters: auth token (string), container name (string) Return
Value: exorted container file (string)
例:
-> {"method":"export_container","params": { "auth_token":
"'+auth_token+'", "name" : "Java"}}
<- {"result": {"exported_container_file": "OAJBIhsvQlr-
woF/Java.tar.lzo"}}
3.4 ベース管理
さらに、ベースシステムを管理する方法があります。
ベースシステムのリセット (admins)
Method: firmware_reset
Parameters: auth_token (string)
Return Value: undefined
例:
-> { "method": "firmware_reset","params":{ "auth_token": "'+auth_to-
ken+'"} }
<- { "result": ["", ""] }
ベースシステムの再起動 (admins)
Method: reboot
Parameters: auth_token (string)
Return Value: undefined
例:
-> { "method": "reboot"","params":{ "auth_token": "'+auth_token+'"}}
<- { "result": ["", ""] }
システムバージョン取得 (admins)
Method: get_system_version
Parameters: none
Return Value: current system version number string
例:
HAIIC MICA Programming Guide
22 HARTING IT Software Development
-> { "method": "get_system_version" }
<- { "result": "<current system version number string>" }
コンテナをインストールするには、いくつかの方法が必要です。コンテナ転送を開始 (admins)
Method: transfer_start
Parameters: filename (string), auth_token (string) Return Value:
transfer created (string) or error code
例:
-> { "method" : "transfer_start",
"params" : ["'+filename+'", '+test2+', '+test1+', "'+auth_to-
ken+'"]
}
<- {"result": "transfer created"}
コンテナチャンクの転送 (admins)
Method: transfer_chunk
Parameters: filename (string), string, string, auth_token (string)
Return Value: done (string) or error code
例: -> {"method" : "transfer_chunk",
"params" : ["'+filename+'", '+str(c_num)+', "'+data+'",
"'+auth_token+'"]
}
<- {"result": "done"}
転送状態の取得 (admins)
Method: transfer_state
Parameters: filename (string), string, string, auth_token (string)
Return Value: installation triggered (string) or error code
例:
-> {"method" : "transfer_state",
"params" : ["'+filename+'", '+test2+', '+test1+', "'+auth_to-
ken+'"]
}
{
"jsonrpc" : "2.0",
"id" : 1,
"result" : "installation triggered"
}
コンテナのインストール(admins)
Method: install_container
Parameters: containername (string), filename (string), auth_token (string)
Return Value: installation triggered (string) or error code
例:
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 23
-> {"method":"install_container","params":["'+containername+'",
"'+filename+'", "'+auth_token+'"]}
<- {"result": "installation triggered"}
例: コンテナのインストール
PCでPython 3環境を開きます。
Enter:
# -*- coding: utf-8 -*-
import json
import urllib3
import sys
import base64
import os
import io
import base64
import hashlib
from base64 import b64encode
role = "admin"
passwd = "admin"
service_url = "https://10.86.129.230/base_service/"
http = urllib3.PoolManager( assert_hostname=False,
ca_certs="../Downloads/HARTINGITSoftwareDevelopmentGmbH&Co.KG.crt" )
passwd_b64 = str( b64encode( bytes( passwd, "utf8" ) ), "utf8" )
rpc_obj = {
"jsonrpc": "2.0",
"id":1,
"method":"get_auth_token",
"params":{
"user": "admin", "pwd": passwd_b64
}
}
at = http.urlopen( "POST", service_url, body=json.dumps( rpc_obj ) )
rep_data_str = str(at.data, "utf-8")
ret = json.loads (rep_data_str)
auth_token = ret["result"][1]
act_token = ret["result"][0]
rs = http.urlopen( "POST", service_url,
body='{"jsonrpc":"2.0","id":1,"method":"renew_auth_token",
"params":["'+act_token+'", "'+auth_token+'"]}')
print (rs.data)
filename = "Busybox.tar.lzo"
filesize = os.path.getsize( filename )
HAIIC MICA Programming Guide
24 HARTING IT Software Development
chunksize = 1024*1024
test1 = str(int(chunksize))
test2 = str(int(filesize))
inf = divmod( filesize, chunksize )
containername = "BST"
fhandle = io.open( filename, "r+b" )
inf = divmod( filesize, chunksize )
total_chunks = ( inf[0]+1 if inf[1] > 0 else inf[0] )
last_chunk_size = ( inf[1] if inf[1] > 0 else chunksize )
def get_raw_file_chunk( chnk_num ):
read_size = ( chunksize if chnk_num < total_chunks-1 else
last_chunk_size )
fhandle.seek( chnk_num * chunksize, io.SEEK_SET )
return fhandle.read( read_size )
def get_b64_file_chunk( chnk_num ):
return str( base64.b64encode( get_raw_file_chunk( chnk_num
)), "utf-8" )
def b64_file_chunks( ):
chunk_num_to_transfer = 0
while chunk_num_to_transfer < total_chunks:
ret = get_b64_file_chunk( chunk_num_to_transfer )
chunk_num_to_transfer = chunk_num_to_transfer + 1
yield ret
q = http.urlopen( "POST", "https://10.86.129.230/base_service/",
body='{"jsonrpc":"2.0","id":1,"method":"transfer_start",
"params":["'+filename+'", '+test2+' , '+test1+', "'+auth_to-
ken+'"]}')
c_num=0
for data in b64_file_chunks():
req='{"jsonrpc":"2.0","id":1,"method":"transfer_chunk",
"params":["'+filename+'", '+str(c_num)+', "'+data+'",
"'+auth_token+'"]}'
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 25
rt = http.urlopen( "POST", "https://10.86.129.230/base_ser-
vice/",body=req)
c_num += 1
s = http.urlopen( "POST", "https://10.86.129.230/base_ser-
vice/",body='{"jsonrpc":"2.0","id":1,"method":"install_con-
tainer","params":["'+containername+'", "'+filename+'", "'+auth_to-
ken+'"]}')
print (s.data)
コンテナがMICAにインストールされたかどうか確認してください。
3.5 ベースとコンテナのネットワーク設定
ベースとコンテナのネットワーク構成を読み取り、設定することができます(MurataオブジェクトにはSystem-RFID-Chip、DHCPオブジェクトの設定値などの情報が含まれています)。
ベース設定を取得するには: Method: get_base_net_config Parameters: auth_token (string)
Return Value: "murata" : {mac, ipv4Address, ipv6Prefix, productionMonth, hostname, epc,
defaultPassword, ipv6Address, ipv4Gateway, control, dnsAddress, productName,
ipv4Mode, version, ntp_list, ipv4Prefix, productionDay, dnsMode, use_ntp, productionYear,
passwords" : {"user" : [2, "…"], "admin" : [0, "…"], "containeradmin" : [1, "…"]}, timezone,
revisionNumber, ipv6Gateway, ipv6Mode}, dhcp : { "NS" : "10.65.140.50 10.129.129.254",
"IP" : "10.86.129.232", "MASK" : "20", "GW" : "10.86.139.1" } }
例:
-> { "method": "get_base_net_config", "params":["'+auth_token+'"] }
<- {
"result" : {
"murata" : {
"mac" : "c8:05:f7:ba:33:de",
"ipv4Address" : "0.0.0.0",
"ipv6Prefix" : 64,
"productionMonth" : 0,
"hostname" : "MICA29",
"epc" : "00-01-02-03-04-05-06-07-08-09-0a-0b",
"defaultPassword" : "admin",
"ipv6Address" : "::",
"ipv4Gateway" : "0.0.0.0",
"control" : 0,
"dnsAddress" : "0.0.0.0",
"productName" : "",
"ipv4Mode" : 1,
"version" : 2,
"ntp_list" :
"0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org,3.pool.ntp.org",
"ipv4Prefix" : 12,
"productionDay" : 0,
"dnsMode" : 0,
HAIIC MICA Programming Guide
26 HARTING IT Software Development
"use_ntp" : true,
"productionYear" : 0,
"passwords" : {
"user" : [2, "…"],
"admin" : [0, "…"],
"containeradmin" : [1, "…"]
},
"timezone" : "UTC",
"revisionNumber" : "0",
"ipv6Gateway" : "::",
"ipv6Mode" : 0
},
"dhcp" : {
"NS" : "10.65.140.50 10.129.129.254",
"IP" : "10.86.129.232",
"MASK" : "20",
"GW" : "10.86.139.1"
}
}
}
ベースのネットワーク設定を行うことができます。
コンテナ転送を開始 (admins)
Method: set_base_net_config
Parameters: "conf" : {ipv6Mode,ipv6Address,ipv6Prefix,ipv6Gateway,ipv4Mode,ipv4Ad-
dress,ipv4Prefix,ipv4Gateway,dnsMode,dnsAddress},auth_token (string)
Return Value: success (string) or error code
例:-> {"method":"set_base_net_config","params":[{"conf" : {"ipv6Mode":
2,"ipv6Address": "fd9e:21a7:a92c:2323::1","ipv6Prefix":
64,"ipv6Gateway": "fd9e:21a7:a92c:2323::1","ipv4Mode": 2,"ipv4Ad-
dress": "10.86.129.200","ipv4Prefix": 20,"ipv4Gateway":
"10.86.139.1","dnsMode": 0,"dnsAddress": "0.0.0.0"}},"'+auth_to-
ken+'"]}
<- {"result": "success", "id": 1, "jsonrpc": "2.0"}
ベースのパスワードを変更するには:
Method: change_passwd
Parameters: action_token (string), auth_token (string), user (string), new_pwd (string base
64 encoded)
Return Value: password successfully changed (string) or error code
例:
-> { "method": "change_passwd", "params" :
{ "action_token" : <token string>,
"auth_token" : <token string>, "user" : <user name>,
"new_pwd" :<new passwd base 64 encoded>
}
}
<- {"result": "password successfully changed"}
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 27
ネットワーク構成を読み取り(admins, containeradmins, users) oIPv4モードのコンテナーの場合、以下の値が定義されます。
0: IPv4 deactivated
1: DHCP
2: static IPv4
IPv6の場合:
0: use only link local addresses
1: DHCVP6 (this value has no effect at the moment)
2: static IPv6 address
コンテナのネットワーク設定を取得:
-> {
"method" : "get_container_net_config", {
"name" : "<container_name>"}
}
<- {
"result" : {
"ipv6Address" : "",
"ipv4Prefix" : "",
"dhcp_ipv4Gateway" : "10.86.139.1",
"ipv4Mode" : 1,
"ipv4Gateway" : "",
"ipv4Address" : "",
"dhcp_ipv4Address" : "10.86.129.52",
"dhcp_ipv4Prefix" : "20",
"ipv6Prefix" : "",
"ipv6Mode" : 0,
"ipv6Gateway" : ""
}
}
コンテナのネットワーク構成を書き込み (admins と containeradmins) IIPv4モードでは同じ値が使用されています。
0: IPv4 deactivated
1: DHCP
2: static IPv4
静的IPv4の場合、フィールドIPv4アドレス、IPv4プレフィックス、すなわちIPv4ゲートウェイが提供されなければなりません。
IPv6モードの場合、以下の書き込み値が定義されます:
HAIIC MICA Programming Guide
28 HARTING IT Software Development
0: use only link local addresses
1: DHCVP6 (not set yet)
2: static IPv6 address
ネットワーク値を設定するには、次の方法が使用可能(admins と containeradmins).
すべての値を設定する必要があります。また、同じ値を設定する必要があります。Method: set_container_net_config
Parameters: filename (string), settings : { ipv6Address, ipv6Prefix, ipv6Gateway, ipv4Mode
[0 | 1 | 2], ipv4Address, ipv4Prefix, ipv4Gateway, ipv6Mode" : [0 | 1 | 2]}, auth_token (string)
Return Value: done (string) or error code
例:
->{
"method" : "set_container_net_config",
"params" : {
"name" : "<container name>",
"settings" : {
"ipv6Address" : "<ipv6addr>",
"ipv6Prefix" : < dec num > ,
"ipv6Gateway" : < ipv6addr > ,
"ipv4Mode" : [0 | 1 | 2],
"ipv4Address" : "<ipv4addr>",
"ipv4Prefix" : < dec num > ,
"ipv4Gateway" : "<ipv4addr>",
"ipv6Mode" : [0 | 1 | 2]
}, auth_token
}
}
<- {"result": { "done" }}
3.6 ハードウェアアクセス - RPCによるデバイス管理
デバイスをコンテナに追加および削除するには、次の方法があります (adminsのみ ):
Method: firmware_reset
Parameters: auth_token (string)
Return Value: undefined
例:
-> {
"method" : "add_container_device",
"params" : [ < container_name >,< device_name >,< auth_token > ]
}
<- {
"result" : "Creating Device successfully!",
}
Method: firmware_reset
Parameters: auth_token (string)
Return Value: undefined
例:
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 29
-> {
"method" : "del_container_device",
"params" : [ < container_name >,< device_name >,< auth_token > ]
}
<- {
"result" : "Deleting Device successfully!",
}
コンテナをエクスポートするときに、ウィッシュリストがエクスポートされます。コンテナをインストールするときに、ウィッシュリストのデバイスをインポートするかどうかを尋ねられます。
他の新しいrpc-calls:
例えば次のようなデバイス情報メジャー/マイナー番号、ベンダーIDなど(adminsのみ):
Method: get_device_info
Parameters: device name (string), auth_token (string)
Return Value: Major, number, minor number, info text
例:
-> {
"method" : "get_device_info",
"params" : [ < device_name > , < auth_token > ]
}
<- {
"result" : "<tr><td class=\'info_output\'><b>Major Num-
ber:</b></td><td class=\'info_text\'>4</td></tr><tr><td
class=\'info_output\'><b>Minor Number:</b></td><td
class=\'info_text\'>2</td></tr>",
}
コンテナの要求されたデバイスを取得 (user, containeradmins, admins):
Method: get_requested_devices
Parameters: container, auth_token
Return Value: device list
例:
-> {"method":"get_requested_devices"
"params" : [ < container_name > , < auth_token > ]
}
<- {
"result" : []
}
コンテナに使用可能なデバイスを表示(デバイスのウェブサイトの左側の列)(admins のみ):
Method: get_device_info
Parameters: device name (string), auth_token (string)
Return Value: Major, number, minor number, info text
例:
-> {
"method" : "get_available_devices",
HAIIC MICA Programming Guide
30 HARTING IT Software Development
"params" : [ < container_name > , < auth_token > ]
}
<- {
"result" : ["/dev/alarm", "/dev/zero"],
}
コンテナの有効なデバイスを表示(デバイスのウェブサイトの右側の列)(adminsのみ):
Method: get_container_devices
Parameters: container name (string), auth_token (string)
Return Value: device list
例:
-> {
"method" : "get_container_devices",
"params" : [ < container_name > , < auth_token > ]
}
<- {
"result" : ["/dev/alarm", "/dev/zero"],
}
コンテナへのデバイス追加(adminsのみ):
Method: add_container_device
Parameters: container name (string), container device (string), auth_token (string)
Return Value: device list
例:
-> {
"method" : "add_container_device", "params" : {
"name" : "PythonDemo",
"device" : "/dev/alarm",
"auth_token" : "'+auth_token+'"
}
}
<- {
"result" : "Creating Device successfully!"
}
metaconfにデバイスを追加 (adminsのみ):
Method: add_devices_to_metaconf
Parameters: container name (string), container devices (array of string), auth_token (string)
Return Value: device list
例:
-> {
"method" : "add_devices_to_metaconf",
"params" : {
"name" : "PythonDemo",
"devices" : "/dev/alarm",
"auth_token" : "'+auth_token+'"
}
}
<- {
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 31
"result" : "Success"
}
3.7 RPCによる時間設定管理時間設定を管理するには、以下の方法があります(adminsのみ):
get_datetime (minimal role: user)
Method: add_container_device
Parameters: auth_token (string)
Return Value:date (date), time (time)
例:
-> {
"method" : "get_datetime",
"params" : [ < auth_token > ]
}
<- {
"result" : {
"date" : "2000-01-01",
"time" : "05:14:42"
}
}
set_date( datestr, auth_token ) (minimal role: admin)
Method: set_date
Parameters: date (date), auth_token (string)
Return Value:date (date)
例:
-> {
"method" : "set_date",
"params" : ["year-month-day", < auth_token > ]
}
<- {"result" : ""}
set_time( datestr, auth_token ) (minimal role: admin)
Method: set_time
Parameters: timestr (date), auth_token (string)
Return Value: time (time)
例:
-> {"method":"set_time","params": {"timestr": "14:03:03", "auth_to-
ken": "'+auth_token+'"}
<- {"result": ""}
set_use_ntp ( tz, auth_token ) (minimal role: admin)
Method: set_use_ntp
Parameters: use_ntp (string), auth_token (string)
Return Value: ntp_status (string)
例:
HAIIC MICA Programming Guide
32 HARTING IT Software Development
-> {"method" : "set_use_ntp",
"params" : ["use_ntp", < auth_token > ]}
<- { "result" : "Stopping ntpd\\nstopped process in pidfile
\'/run/ntpd.pid\' (pid 337)\\nStarting ntpd\\n"}
set_ntp_list( ntplist, auth_token ) (minimal role: admin)
Method: set_ntp_list
Parameters: ntp_list (string), auth_token (string)
Return Value: ntp_status (string)
例:
-> {"method":"set_ntp_list", "params":["ntp_list",<auth_token>]}
<- {"result": "Stopping ntpd\\nStarting ntpd\\n"}
get_tz_list( auth_token ) (minimal role: user)
Method: get_tz_list
Parameters: get_tz_list (string), auth_token (string)
Return Value: timezone list (string)
例:
-> {"method":"get_tz_list", "params":[<auth_token>]}
<- {"result": ["<timezone_list>"]}
3.8 コンテナアクセス
各コンテナに対して、アプリケーションは、httpおよびwsでhaproxyを介してクライアントから安全にアクセスできます。 wss://<hostname>.local/<container>/ resp. https://<hostname>.local/<container>/ https respを介して外部からアクセスすることができます。システム全体は証明書で保護されています。
Figure 10: Container Network Access
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 33
3.9 ファームウェア更新ファームウェアを更新するには、以下の方法となります。:
署名を確認 (admins)
Method: check_signature
Parameters: firmware pathname (string), auth_token (string)
Return Value: verified ok (string)
例:
-> {
"method" : "checkSignature",
"params" : ["../Downloads/signed_up-
date_12d0b4de998c_1.0.0_r.tar", "'+auth_token+'"]
}
<- {"result": "Verified OK\\n"}
互換性を確認 (admins)
Method: check_compatibility
Parameters: auth_token (string)
Return Value: verified ok (string)
例:
-> {
"method" : "checkCompatibility",
"params" : ["'+auth_token+'"]
}
<- {"result": [1, "scripts/update_X0_1.1.0_1.2.x_1.3.0.py"]}
ステータスメッセージ数を取得 (admins, containeradmins, users):
Method: getStatusMessageCount
Parameters:
Return Value: result code (int)
例:
-> {
"method" : "getStatusMessageCount"
}
<- {"result": 11}
ステータスメッセージを取得 (admins, containeradmins, users):
Method: getStatusMessage
Parameters: time counter
Return Value: result message (string), result type (string), result code (int), time (seconds
after 1970)
例:
-> {"method":"getStatusMessage","params":[1]}
<- {
"result" : [{
"message" : "begin update script",
"type" : "info",
HAIIC MICA Programming Guide
34 HARTING IT Software Development
"code" : 111,
"time" : 1471427118
}
]
}
更新 (admins):
Method: update
Parameters: update python script (string), auth_token (string)
Return Value: result code (int)
例:
-> {"method":"update","params":["..//update.py", "'+auth_token+'"]}
<- {
"result" : "execution of update triggered"
}
例: RPC callによるファームウェア更新:
import json
import urllib3
import sys
import base64
import os
import io
import time
import base64
import hashlib
from base64 import b64encode
role = "admin"
passwd = "admin"
service_url = "https://mica-n7v6o.local/base_service/"
http = urllib3.PoolManager(assert_hostname = False,
ca_certs = "../Downloads/HARTINGITSoftwareDevelop-
mentGmbH&Co.KG.crt")
passwd_b64 = str(b64encode(bytes(passwd, "utf8")), "utf8")
rpc_obj = {
"jsonrpc" : "2.0",
"id" : 1,
"method" : "get_auth_token",
"params" : {
"user" : "admin",
"pwd" : passwd_b64
}
}
at = http.urlopen("POST", service_url, body = json.dumps(rpc_obj))
rep_data_str = str(at.data, "utf-8")
ret = json.loads(rep_data_str)
auth_token = ret["result"][1]
act_token = ret["result"][0]
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 35
print('{"jsonrpc":"2.0","id":1,"method":"renew_auth_to-
ken","params":["' + act_token + '", "' + auth_token + '"]}')
rs = http.urlopen("POST", "https://mica-n7v6o.local/base_ser-
vice/", body = '{"jsonrpc":"2.0","id":1,"method":"renew_auth_to-
ken","params":["' + act_token + '", "' + auth_token + '"]}')
filename = "../Downloads/signed_update_1.4.0.tar"
filesize = os.path.getsize(filename)
chunksize = 1024 * 1024
test1 = str(int(chunksize))
test2 = str(int(filesize))
inf = divmod(filesize, chunksize)
containername = "BST"
fhandle = io.open(filename, "r+b")
inf = divmod(filesize, chunksize)
total_chunks = (inf[0] + 1 if inf[1] > 0 else
inf[0])
last_chunk_size = (inf[1]if inf[1] > 0 else chunksize)
def get_raw_file_chunk(chnk_num) :
read_size = (chunksize if chnk_num < total_chunks - 1 else
last_chunk_size)
fhandle.seek(chnk_num * chunksize, io.SEEK_SET)
return fhandle.read(read_size)
def get_b64_file_chunk(chnk_num) :
return str(base64.b64en-
code(get_raw_file_chunk(chnk_num)), "utf-8")
def b64_file_chunks() :
chunk_num_to_transfer = 0 while
chunk_num_to_transfer < total_chunks :
ret =
get_b64_file_chunk(chunk_num_to_transfer)
chunk_num_to_transfer =
chunk_num_to_transfer + 1
yield ret
q = http.urlopen("POST", "https://mica-n7v6o.local/base_service/",
body = '{"jsonrpc":"2.0","id":1,"method":"trans-
fer_start","params":["' + filename + '", ' + test2 + ' , ' + test1 +
', "' + auth_token + '"]}')
c_num = 0
for data in b64_file_chunks() :
req =
'{"jsonrpc":"2.0","id":1,"method":"transfer_chunk","params":["' +
HAIIC MICA Programming Guide
36 HARTING IT Software Development
filename + '", ' + str(c_num) + ', "' + data + '", "' + auth_token +
'"]}'
rt = http.urlopen("POST", "https://mica-n7v6o.local/base_service/",
body = req)
c_num += 1
print("/tmp/up/file/" + os.path.basename("../Downloads/signed_up-
date_1.4.0.tar"))
s = http.urlopen("POST", "https://mica-n7v6o.local/base_service/",
body = '{"jsonrpc":"2.0","id":1,"method":"checkSigna-
ture","params":["' + "/tmp/up/file/" + os.path.basename("../Down-
loads/signed_update_1.4.0.tar") + '", "' + auth_token + '"]}')
t = http.urlopen("POST", "https://mica-n7v6o.local/base_service/",
body = '{"jsonrpc":"2.0","id":1,"method":"checkCompatibil-
ity","params":["' + auth_token + '"]}')
rep_data_str = str(t.data, "utf-8")
ret = json.loads(rep_data_str)
update_script = ret["result"][1]
u = http.urlopen("POST", "https://mica-n7v6o.local/base_service/",
body = '{"jsonrpc":"2.0","id":1,"method":"update","params":["' + up-
date_script + '", "' + auth_token + '"]}')
time.sleep(10)
uv = http.urlopen("POST", "https://mica-n7v6o.local/base_service/",
body = '{"jsonrpc":"2.0","id":1,"method":"getStatusMessageCount"}')
uw = http.urlopen("POST", "https://mica-n7v6o.local/base_service/",
body = '{"jsonrpc":"2.0","id":1,"method":"getStatusMessage"}')
3.10 WLAN機能wlanが搭載されているかの問い合わせ (user, containeradmins, admins):
Method: has_wlan
Parameters: none
Return Value: true or false
例:
-> {"method":"has_wlan"}
<- {
"result" : false
}
wlanパラメータ取得 (user, containeradmins, admins) :
Method: get_wlan
Parameters: none
Return Value: wlan parameters
例:
-> {"method":"get_wlan
<- {
"result" : {"runtime": {"visible_networks": []}, "settings": {},
"defaults": {"country": {"JP": "JP", "US": "US", "DE": "DE"},
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 37
"wpa_cipher": {"TKIP": "TKIP", "CCMP": "CCMP", "auto": "auto"},
"channel": ["auto", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
"sec_mode": {"wep": "WEP", "open": "Open", "wpapsk": "WPA/WPA2 Pre-
shared Key", "wpa": "WPA/WPA2 Enterprise"}, "mode": {"sta": "Cli-
ent", "ap": "Access Point"}, "sta_wpa_username": "mica-cjyyo",
"ap_ssid": "mica-cjyyo", "standard": {"n": "802.11 n", "bg": "802.11
b/g"}}
}
HAIIC MICA Programming Guide
38 HARTING IT Software Development
4 コンテナ開発
コンテナは、以下の手順で開発することができます。:
4.1 自動起動スクリプト
rc.dディレクトリにソフトリンクを作成することで、スクリプトを自動起動することができます。例:
ssh経由でビジーボックスコンテナにアクセスします。 etc/init.dには、httpdの起動スクリプトがあります。 実行によってrc.dの下にソフトリンクを作成します。
cd /etc/rc.d
ln -s ../init.d/<script> <link_name>
link_nameは、実行される開始スクリプトの行の場所を示す番号で始まる必要があります。index.htmlファイルを/var/wwwディレクトリに追加し、それを変更してコンテナWebGUIを作成します。 ビジーボックスコンテナを再起動します。WebGUIには、https経由でクライアントからアクセスできます。
4.2 クロスコンパイル
コンテナのアイコンは、/META/web_iconsの下にApp.pngとHeader.pngとして配置され、ユーザが交換することができます。
証明書は、/META/harting_web.crtの下の各コンテナに基づいて配置されます。 これは、コンテナ上で実行されているアプリケーションによって証明書リポジトリに保存され、スムーズなパフォーマンスが保証されます。
例:httpdウェブサーバをbusyboxコンテナに設定し、WebGUIにhttpsでアクセスすることができます。
ssh経由でbusyboxコンテナにアクセスします。 etc/init.dには、httpdの起動スクリプトがあります。 実行によってrc.dの下にソフトリンクを作成します。
cd /etc/rc.d
ln -s ../init.d/<script> <link_name>
link_nameは、実行される開始スクリプトの行の場所を示す番号で始まる必要があります。index.htmlファイルを/var/wwwディレクトリに追加し、それを変更してコンテナWebGUIを作成します。 busyboxコンテナを再起動します。WebGUIには、https経由でクライアントからアクセスできます。独自のコンテナを作成する1つの方法は、busyboxコンテナをPCにエクスポートし、それを変更します。例:busyboxコンテナ内のデバイスを有効にします。busyboxコンテナをlinux PCにエクスポートします。 コンテナファイルシステム用のディレクトリを作成し、例えば BS /にコンテナを解凍します(アクセス権の一貫性を保つためにsudoを使う必要があります):
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 39
sudo lzop -d BS1.tar.lzo
sudo tar -C BSTest/ -xvf BS1.tar
BS/META/configuration.json ファイルのオープン
sudo gedit BS/META/configuration.json
フェイル編集例:
{"devices": ["/dev/input/mice"], "container": "BS", "build_date":
"Fr 4. Nov 11:11:15 CET 2016", "version": "1.1.x
(74+:5c38e23d22d0+)"}
もう一度コンテナを圧縮:
sudo tar -C BS/ -cf - . | lzop -c -6 > BS1DEV.tar.lzo
それをMICAに再インポートします。 これでデバイスコンソールが有効になります。
例: Busyboxコンテナから開始するUSBコンテナの作成
busybox/ ディレクトリをPC上に作成
Busybox ContainerをPCにダウンロードします。 コンテナを解凍します(sudoを使用してアクセス権の一貫性を保つ必要があります):
sudo lzop -d BS1.tar.lzo
sudo tar -C busybox/ -xvf BS1.tar
クロスコンパイラファイル用のディレクトリを作成:
/Base/build/toolchain
Download the gcc-linaro-arm-linux-gnueabihf-4.9-2016.02-x86_linux.tar.xz from
https://releases.linaro.org/components/toolchain/binaries/4.9-2016.02/arm-linux-gnueabihf/)
to /Base/build/toolchain.
解凍:
tar xvf gcc-linaro-arm-linux-gnueabihf-4.9-2016.02-x86_linux.tar.xz
Copy the compiler files to the toolchain folder:
cp –r gcc-linaro-arm-linux-gnueabihf-4.9-2016.02-x86_linux/*
/Base/build/toolchain
ディレクトリを作成 /Base/build/packages/libusb.
ダウンロード libusb-1.0.9.tar.bz2 https://sourceforge.net/projects/libusb/files/libusb-1.0/より
HAIIC MICA Programming Guide
40 HARTING IT Software Development
解凍:
tar xfvj libusb-1.0.9.tar.bz2
次のbashスクリプトを使用してlibusbを構成:
#!/bin/bash
TOOLCHAIN_ROOT=/home/nele/Base/build/toolchain
Desktop=/home/nele/Desktop
./configure --host=arm-linux-gnueabihf --prefix=$Desktop/libusb
CC=$TOOLCHAIN_ROOT/bin/arm-linux-gnueabihf-gcc
CXX=$TOOLCHAIN_ROOT/bin/arm-linux-gnueabihf-g++
LDFLAGS="-L{TOOLCHAIN_ROOT}/arm-linux-gnueabihf/libc/usr/lib/arm-
linux-gnueabihf"
次に、ライブラリをビルドしてインストール:
sudo make all
sudo make install
cd into the libusb-1.0.9/examples/ directory.
listdevsの例を次のように作成:
sudo make
実行可能ファイルを取得:
sudo -s cp .libs/listdevs
Cp the libusb/include and libusb/lib to
busybox/include resp. busybox/lib.
listdevs実行可能ファイルをビジーボックスにプッシュします。
コンテナアーカイブを圧縮:
sudo tar -C busybox/ -cf - . | lzop -c -6 > busybox.tar.lzo.
MICAにインストールし、ssh経由でlistdevsをテストしてください。
上記のようにhttpdウェブサーバを起動します。 listdevsの出力を.txtファイルに書き込む:
./listdevs > /var/www/listdevs.txt
/var/www/にindex.htmlファイルを作成し、それを変更します。:
<object data="listdevs.txt" type="text/plain"
width="500" style="height: 300px">
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 41
<a href="listdevs.txt">No Support?</a>
今度はコンテナのwebGUIを開く:次の出力が表示:
バス1上のデバイス68は、製品ID045eおよびベンダーID0737を有したUSBマウスです。
図11: 自己定義USBコンテナ
HAIIC MICA Programming Guide
42 HARTING IT Software Development
5 GUI プログラミング /var/wwwの下にあるコンテナのindex.htmlファイルを変更するとコンテナのGUIを変更できます。 /var/www/下のファイルを編集して、コンテナのWebGUIを変更します。
例
Debian Basis Containerを左クリックして開きます。 次のメッセージが表示されます:
図12: Debian Basis コンテナのWebGUI
これはWebGUIを作成するためにWebサーバ(この例ではlighttpd)を構成する必要がある
ことを意味します。
まず、コンテナをインターネットに接続します。 WinScpでコンテナにアクセスします。 /etc/resolv.confファイルを作成または編集します。 ドメイン名解決を可能にするためにネームサーバのipアドレスをここに入力してください。 ファイルはたとえば次のように表示されます:
nameserver 192.168.178.1
nameserver 8.8.8.8
プロキシを介したアクセスがある場合:ファイルを作成
/etc/apt/apt.conf.d/99proxy with the content
Acquire::http { Proxy "http://<proxy-ip-address>"; };
Puttyなどを使用してコンテナにアクセス.
次に/var/ ディレクトリに移動してlighttpdをインストールします:
apt-get install lighttpd
ディスクスペースの確認要求でYesを選択します。
いくつかのアーカイブがフェッチされていない場合、run
apt-get update
リターン
apt-get install lighttpd.
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 43
var内に新しいファイルと新しいディレクトリが作成:
/var/www/index.lighttpd.html
index.lighttpd.htmlファイルを変更してWebGUIを作成することができます。 いくつかのコンテナ内のディレクトリ/var/www/cssからCSSスタイルファイルをインポートすることができます。 HARTINGスタイルのbase.css。 ファイルがコンテナに格納されていない場合は、https//devicename/css/base.cssです。
図13: セルフデザインコンテナ WebGUI
注意: Busyboxベースのコンテナをインターネットに接続:
タイプ:
export http_proxy=http://10.131.130.50:80/
export https_proxy=https://10.131.130.50:80/
コンソールで。
HAIIC MICA Programming Guide
44 HARTING IT Software Development
6 RFID 電子識別プレートの構造 電子識別プレートは、以下の位置で装置内に組み込まれています。 この識別プレートは、ポータブルRFIDリーダで読み書きすることができます。
注意:HARTINGは、SDカードカバーの取り外しまたは交換を推奨しません。これは防水性に影響し、IP67認証を無効にする可能性があるためです。 RFIDチップは、カバーを閉じた状態で読み取ることができます。
図14: RFID プレートの位置
以下の構造は、RFID識別プレートの製造バージョン2に対応しています。 値は、管理者が設定インターフェイスで編集できます。
Byte 名前サイズ
Byte
内容
0 Version 1 設定のバージョン。 バージョン2は文書化
1 - 2 Checksumme 2 CRC-CCITT (CRC-16)
3 IPv6 Mode 1
IPv6アドレスのモード:
0 = Link-Local-address が自動生成
1 = DHCPサーバ提供のアドレスを使用
2 = IPv6 ホストアドレスが使用
4 - 19 IPv6 host address
16 デバイスのIPv6アドレス
20 IPv6 prefix length
1 現在のサブネットをによるIPv6アドレスのビット数
RFID プレート
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 45
21 IPv4 Mode 1
IPv4 アドレスのモード
0 = IPv4 アドレスなし
1 = DHCPサーバ提供のアドレス
2 = IPv4 ホストアドレス使用
22 -
25
IPv4 host address
16 デバイスのIPv4アドレス
26 IPv4 prefix length
1 Ipv4アドレスのサブネットマスクビット数
27 -
58 Host name 32
デバイスの名前。 異なるネームサービス(DNSなど)で使用。 ゼロ終端された文字列。
59 -
74 IPV6 Gateway 16
IPV6ゲートウェイアドレス
75 -
78 IPV4 Gateway 4
IPV4ゲートウェイアドレス
79 DNS Mode 1
DNS サーバアドレス:
0 = DNSなし, DNSサーバアドレスを無視
4 = IPV4 アドレスのDNSサーバ6 = IPV6 アドレスのDNSサーバ
80 -
95
DNS server address
16 DNSサーバのアドレス、アドレスのタイプはフィールド "DNS Mode"によって決定
96 Control-Byte 1 未使用
電子識別プレート
97 -
113
Product name 17 製品名, 最大16文字 + zero
114 -
115
Product version
2 製品バージョン(単純なカウンター)英数字
116 -
128
default Password
13 デリバリー時のWebGuiの管理者パスワード。
パスワードがWebGui上で変更された場合、ステータスRFIDチップは同じままです。 最大12文字+ゼロ終了
129 Production day 1 デバイス製造日
130 Production month
1 デバイス製造月
131 Production year
1 デバイス製造年
HAIIC MICA Programming Guide
46 HARTING IT Software Development
7 メソッドインデックス
add_container_device ......................................................................................................28, 30
add_devices_to_metaconf ..................................................................................................... 30
change_passwd ..................................................................................................................... 26
checkCompatibility ................................................................................................................. 33
checkSignature ...................................................................................................................... 33
container_exists ..................................................................................................................... 20
del_container_device ............................................................................................................. 29
delete_container .................................................................................................................... 19
duplicate_container ................................................................................................................ 21
export_container .................................................................................................................... 21
firmware_reset ....................................................................................................................... 21
get_auth_token ................................................................................................................12, 23
get_autostart_information ...................................................................................................... 14
get_available_devices ........................................................................................................... 29
get_available_userspace ....................................................................................................... 14
get_base_net_config ............................................................................................................. 25
get_container_config ............................................................................................................. 19
get_container_devices ........................................................................................................... 30
get_container_net_config ...................................................................................................... 27
get_container_state ............................................................................................................... 20
get_datetime .......................................................................................................................... 31
get_device_info ...................................................................................................................... 29
get_info_text .......................................................................................................................... 13
get_name ............................................................................................................................... 14
get_requested_devices .......................................................................................................... 29
get_service_version ............................................................................................................... 14
get_system_version ............................................................................................................... 22
get_tz_list ............................................................................................................................... 32
get_user_settings................................................................................................................... 14
get_wlan ................................................................................................................................. 36
getStatusMessage ................................................................................................................. 33
getStatusMessageCount ....................................................................................................... 33
has_wlan ................................................................................................................................ 36
install_container ...............................................................................................................23, 25
invalidate_auth_token ............................................................................................................ 13
ping ........................................................................................................................................ 11
reboot ..................................................................................................................................... 21
HAIIC MICA Programming Guide
HAIIC MICA Programming Guide, Edition 2017 47
renew_auth_token ...........................................................................................................12, 23
reset_container ...................................................................................................................... 18
set_base_net_config .............................................................................................................. 26
set_container_net_config ....................................................................................................... 28
set_container_ro .................................................................................................................... 20
set_date ................................................................................................................................. 31
set_ntp_list ............................................................................................................................. 32
set_time ................................................................................................................................. 31
set_use_ntp .....................................................................................................................31, 32
start_container .................................................................................................................18, 19
stop_container ....................................................................................................................... 19
transfer_chunk .................................................................................................................22, 24
transfer_start ....................................................................................................................22, 24
transfer_state ......................................................................................................................... 22
update .................................................................................................................................... 34
validate_and_renew_auth_token ........................................................................................... 13
validate_auth_token ............................................................................................................... 12
ドキュメントバージョン
1.1 コンテナ間のコンテナアクセスとデータ交換に関する章が含まれています。 SSOによるネットワーク構成方法の説明が完了しました。
websocketの作成、IOピンの読み込みと設定を記述する例が含まれています。
1.2. デバイス構成に関するJSON-RPC呼び出しが含まれています。
websocketの作成、IOピンの読み込みと設定を記述する例は、アプリケーションノートにエクスポートされています。 時刻と時刻の設定方法が含まれています。
1.3. コードがフォーマットされました。 新しいパスワードハッシュに関するスクリプトを更新しました。 sso上のアクセスを説明する新しい画像。 新しい章コンテナ開発。 対話型コンテンツディレクトリ。
1.4 メソッドのインデックスが追加されました。