ゲートウェイエージェント

https://docs.kii.com/ja/guides/thingifsdk/non_trait/gateway/
の「# ゲートウェイエージェントの導入」
において、
「各種環境で利用可能なゲートウェイエージェントのビルド済みバイナリを、ゲートウェイハードウェアにインストールして利用します。導入手順については、Kii Gateway Agent の Readme を参照してください。」
とあります。このリンク先


からファイル一式をダウンロードし、README.mdに従って config.ymlを編集しました。
しかし、実行させると
panic: open cert.pem: no such file or directory
となります。確かにcert.pemなるファイルは自分で用意していないので見つからないでしょう。
cert.pemとして何を用意すればいいのでしょうか?

sim様

config.ymlcert_file および key_file の設定は
Gatewayにおいて MQTTS(MQTT broker over TLS(SSL)) を有効化する時に設定する項目です。
通常の MQTT を使って通信をする場合は、コメントアウトしていただいて問題ありません。
よりセキュアな通信を行いたい場合に、これらのファイルをご用意いただき、設定する必要があります。

了解しました。
コメントアウトしたところ、panicを起こさず実行しているようです。

しかし、今度は ### Local authentication で、
./gwm-cli auth --username admin_user --password admin_pass --app-name master
を実行すると
WARN[3936] local server error: Can’t authorize action with the given access token
2019/09/10 17:05:23 local rest api authenticatoin error: %+v not found: accessToken
となります。
この(3年前の?)マニュアルはどこまで信頼していいのでしょうか?

gateway-agent/config.ymladmin セクションの内容が以下のようになっているか確認いただけますでしょうか?

admin:
  username: admin_user
  password: admin_pass

もし、上記の内容と同じ場合は、gateway-agentを実行しているコンソールに表示されるエラーメッセージを教えていただけますでしょうか?

admin セクションの内容はその通りです。
gateway-agentを実行しているコンソールには
WARN[0380] local server error: Can’t authorize action with the given access token
と表示されています。
よろしくお願いいたします。

./gwm-cli auth --username admin_user --password admin_pass --app-name master

このコマンドは gwm-cli がローカルの Gateway に対して認証を行いアクセストークンを払い出すコマンドです。
ユーザー名とパスワードは単純に Gatewayconfig.ymladmin セクションにある usernamepassword とマッチングを行う単純なものです。
私の環境(Mac)では以下のようにトークンの取得に成功します。(Gatewayは最新の1.9.0を使用)

コマンドの実行結果

$ ./gwm-cli auth --username admin_user --password admin_pass --app-name master
2019/09/11 11:39:14 token:  6RVD4P4BMKOOIHVN5BVXQ5KN6WZ6JJ4T6TMBFQLOWJUF46D73OQA====

Gatewayのログ

$ ./gwagent-amd64 
DEBU[0000] Config: config.Config{Gateway:config.Gateway{VendorThingID:"1234-5678-90ab-cdef", ThingPassword:"7rTr5F", ThingType:"Gateway", ThingProperties:map[string]interface {}{"_lot":"S2001512081200G0012340001", "_vendor":"Kii"}, EnableTraitCommand:false, FirmwareVersion:"v1"}, Admin:config.User{Username:"admin_user", Password:"admin_pass"}, MasterApp:config.MasterApp{App:config.App{Site:"jp", AppID:"9ixxhppoq9ga", AppKey:"898377262cbd442094356743ba780dd3"}, EndnodeAppsBackupBucket:"endnodeApps"}, Sites:map[string]string{"cn3":"https://api-cn3.kii.com", "eu":"https://api-eu.kii.com", "jp":"https://api-jp.kii.com", "sg":"https://api-sg.kii.com", "us":"https://api.kii.com"}, Store:config.Store{Type:"boltdb", Params:map[string]interface {}{"capacity":100, "filename":"gwagent.db", "interval":"2h"}}, Mqtt:config.Mqtt{KeepAlive:300, MaxIntervalRetry:1800, LocalBroker:config.Addr{Host:"127.0.0.1", Port:1883}, LocalX509Cert:"", LocalX509Key:"", UseInsecureConnection:false}, Advertiser:config.Advertiser{Interface:"en0", ServiceType:"urn:kii:service:iot-gateway:1", USN:"uuid:fcef84c8-db8a-4f63-bd9a-60f8891e127f::urn:kii:service:iot-gateway:1", MaxAge:3600, AliveInterval:120, EnableLog:false}, LocalServer:struct { Addr config.Addr "yaml:\"addr\""; CertFile string "yaml:\"cert_file\""; KeyFile string "yaml:\"key_file\"" }{Addr:config.Addr{Host:"0.0.0.0", Port:4001}, CertFile:"", KeyFile:""}, Flags:struct { VerboseMessage bool "yaml:\"verbose_message\""; DisableLog bool "yaml:\"disable_log\"" }{VerboseMessage:false, DisableLog:false}, Log:config.Log{Enable:true, Level:"debug", Destinations:[]string{"stdout", "file"}, FileName:"/Users/noriyoshifukuzaki/Desktop/___gwagent.log"}, DataNormalizerEndpoints:map[string]config.DataNormalizerEndpoint(nil), PublishStateRetryCounts:3} 
INFO[0000] HTTP server listen on: 0.0.0.0:4001          
DEBU[0005] local access:
  remote=127.0.0.1:55520
  url=/jp/token
  method=POST
  header={"User-Agent":"Go-http-client/1.1","Content-Length":"49","Authorization":"Basic OWl4eGhwcG9xOWdhOjg5ODM3NzI2MmNiZDQ0MjA5NDM1Njc0M2JhNzgwZGQz","Accept-Encoding":"gzip"}
  body="{\"username\":\"admin_user\",\"password\":\"admin_pass\"}"
  status_code=200
  response_header={"Content-Type":"application/json"}
  response_body="{\"accessToken\":\"6RVD4P4BMKOOIHVN5BVXQ5KN6WZ6JJ4T6TMBFQLOWJUF46D73OQA====\"}" 

私が動作確認で使用した gwm-cliGatewayconfig.yml を添付しますので、これを使って動作することを確認していただけますでしょうか?

config.zip (3.6 KB)

ログの出力先をこちらの環境に合わせたものに修正し、実行しました。
一応トークンは正しく生成されたようです。

こちらの config.ymlとnoriさんの違いは
sitesセクション、data_normalizer_endpointsセクション
の2か所だけですね。

gwm-cli_log09111351.txt (2.6 KB) :実行結果
___gwagent_nori.log (2.7 KB) :Gatewayのconfigで指定したログファイル
config_sim.yml.txt (4.3 KB) :こちらで使っていたGatewayのconfigファイル

それで、noriさんから頂いたconfigのapp_id、app_keyをこちらのものに置き換えて試してみたのですが、ダメでした。
app_id, app_keyの作り方が間違っているのでしょうか?

gwm-cli_log09111402.txt (2.6 KB) :実行結果

添付していただいた config_sim.yml.txt を使って動作確認しましたが、特に問題なく ./gwm-cli auth が成功しました。
私の方でも確認しましたが、 config.yml の内容は間違っていないと思われます。

Gateway のディレクトリに作成されている gwagent.dbgwm-cli のディレクトリに作成されている manager.db を削除してから、もう一度確認していただけますでしょうか?

Gateway のディレクトリに作成されている gwagent.dbgwm-cli のディレクトリに作成されている manager.dbを削除してから再度やってみましたが、結果は変わらずでした。

$ ./gwm-cli auth --username admin_user --password admin_pass --app-name master
2019/09/11 17:55:30 local rest api authenticatoin error: %+v not found: accessToken

・エージェント側コンソールの表示
$ ./gwagent-amd64
DEBU[0000] Config: config.Config{Gateway:config.Gateway{VendorThingID:“1234-5678-90ab-cdef”, ThingPassword:“7rTr5F”, ThingType:“Gateway”, ThingProperties:map[string]interface {}{"_lot":“S2001512081200G0012340001”, “_vendor”:“Kii”}, EnableTraitCommand:false, FirmwareVersion:“v1”}, Admin:config.User{Username:“admin_user”, Password:“admin_pass”}, MasterApp:config.MasterApp{App:config.App{Site:“jp”, AppID:“exb8wagmmert”, AppKey:“0f6ca46c65614eb4ac90e3d7b779a5e9”}, EndnodeAppsBackupBucket:“endnodeApps”}, Sites:map[string]string{“cn3”:“https://api-cn3.kii.com”, “eu”:“https://api-eu.kii.com”, “jp”:“https://api-jp.kii.com”, “sg”:“https://api-sg.kii.com”, “us”:“https://api.kii.com”}, Store:config.Store{Type:“boltdb”, Params:map[string]interface {}{“capacity”:100, “filename”:“gwagent.db”, “interval”:“2h”}}, Mqtt:config.Mqtt{KeepAlive:300, MaxIntervalRetry:1800, LocalBroker:config.Addr{Host:“127.0.0.1”, Port:1883}, LocalX509Cert:"", LocalX509Key:"", UseInsecureConnection:false}, Advertiser:config.Advertiser{Interface:“en0”, ServiceType:“urn:kii:service:iot-gateway:1”, USN:“uuid:fcef84c8-db8a-4f63-bd9a-60f8891e127f::urn:kii:service:iot-gateway:1”, MaxAge:3600, AliveInterval:120, EnableLog:false}, LocalServer:struct { Addr config.Addr “yaml:“addr””; CertFile string “yaml:“cert_file””; KeyFile string “yaml:“key_file”” }{Addr:config.Addr{Host:“0.0.0.0”, Port:4001}, CertFile:"", KeyFile:""}, Flags:struct { VerboseMessage bool “yaml:“verbose_message””; DisableLog bool “yaml:“disable_log”” }{VerboseMessage:false, DisableLog:false}, Log:config.Log{Enable:true, Level:“debug”, Destinations:[]string{“stdout”, “file”}, FileName:"/home/dct/___gwagent_nori+sim.log"}, DataNormalizerEndpoints:map[string]config.DataNormalizerEndpoint(nil), PublishStateRetryCounts:3}
INFO[0000] HTTP server listen on: 0.0.0.0:4001
INFO[0000] advertiser disabled by error: route ip+net: no such network interface
WARN[0013] local server error: Can’t authorize action with the given access token
DEBU[0013] local access:
remote=127.0.0.1:38842
url=/jp/token
method=POST
header={“User-Agent”:“Go-http-client/1.1”,“Content-Length”:“49”,“Authorization”:“Basic Og==”,“Accept-Encoding”:“gzip”}
body="{“username”:“admin_user”,“password”:“admin_pass”}"
status_code=401
response_header={“Content-Type”:“application/json”}
response_body="{“errorCode”:“INVALID_GRANT”,“message”:“Can’t authorize action with the given access token”}"

よろしくお願いします。

ちなみにお使いのOSは何になりますでしょうか?

Ubuntu 18.04.3 LTS
CPU: Intel N3350
Mem: 4GB
です。

因みに、 config_sim.ymlのapp_id, app_keyは


の左側のMyApp_test01のもので、内容は以下のとおりです。

これの作り方が不適切だった可能性はありませんか?

情報ありがとうございます。
アプリの作成方法は問題ありません。
今回のローカル認証は gwm-cliGateway の間のみで処理が完結しており、KiiCouldへのアクセスは発生しません。

こちらで仮想環境で再現するかテストしてみます。

誠に申し訳ございません。自己解決しました!
原因は、gwm-cli用のconfig.ymlで、”app-id/app-key”とすべきところを”app_id/app_key”としたことでした。
noriさんの貴重なお時間を使ってしまい、本当に申し訳ありませんでした。

1 Like

ご報告ありがとうございます。
解決されたようでよかったです:grinning: