Armadilloフォーラム

armadillo-IoT G3 3G開発セットスタートアップガイドでのサンプルアプリケーション動作不具合について

kazuhikokato

2023年4月8日 17時44分

ご担当者様
  お世話になります。
  題記、スタートアップガイド26ページからのAWSにアップロードするテストを行なっていますが、
  26ページの3.サンプルコードの実行で #python3 publish.py [endpoint]  実行したところ
  下記エラーが発生しています。
    root@armadillo:~# python3 publish.py *******************-1.amazonaws.com
    Traceback (most recent call last):
    File "publish.py", line 119, in
    main()
    File "publish.py", line 100, in main
    publish_msg = get_jsondata().encode('utf-8')
    File "publish.py", line 57, in get_jsondata
    sensor["temprature"] = get_temperature()
    File "publish.py", line 19, in get_temperature
    proc = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)
    File "/usr/lib/python3.5/subprocess.py", line 383, in run
    with Popen(*popenargs, **kwargs) as process:
    TypeError: __init__() got an unexpected keyword argument 'text'

  publish.pyを精査しており、取得した温度のデータ型の相違のようにも思えるのですが、
  見識も浅いため、エラーが修正できていません。
  誠に恐縮ですが、原因となるようなところをご教示お願いします。

加藤

  
  

コメント

at_takumi.mizutani

2023年4月10日 17時40分

水谷です。

>   題記、スタートアップガイド26ページからのAWSにアップロードするテストを行なっていますが、
>   26ページの3.サンプルコードの実行で #python3 publish.py [endpoint]  実行したところ
>   下記エラーが発生しています。
>     root@armadillo:~# python3 publish.py *******************-1.amazonaws.com
>     Traceback (most recent call last):
>     File "publish.py", line 119, in
>     main()
>     File "publish.py", line 100, in main
>     publish_msg = get_jsondata().encode('utf-8')
>     File "publish.py", line 57, in get_jsondata
>     sensor["temprature"] = get_temperature()
>     File "publish.py", line 19, in get_temperature
>     proc = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)
>     File "/usr/lib/python3.5/subprocess.py", line 383, in run
>     with Popen(*popenargs, **kwargs) as process:
>     TypeError: __init__() got an unexpected keyword argument 'text'
>
>   publish.pyを精査しており、取得した温度のデータ型の相違のようにも思えるのですが、
>   見識も浅いため、エラーが修正できていません。
>   誠に恐縮ですが、原因となるようなところをご教示お願いします。

subprocessモジュールのtext引数はver3.7以降で追加されており、それ以前のpythonの場合上記エラーが発生してしまうようです。
https://docs.python.org/ja/3.7/library/subprocess.html

お手数ですが、publish.py 中の19 行目、31行目を以下のように変更してみてください。

proc = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)
↓
proc = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE)   # text引数を削除

以上、よろしくお願いいたします。

ご連絡ありがとうございます。
ご連絡いただいた通りpublish.py 中の19 行目、31行目のtext引数を削除してテストした結果、
一度MQTTが送信され、AWS上でも受信が確認できたのですが、
そのあとにboto3でエラーが発生しています。

添付エラーのファイル見ると
原因は、boto3がPython 3.5はサポートしておらず、
Python 3.6以上にアップグレードが必要と考えられますが、
この理解でよろしいでしょうか?

もしそうであれば、armadillo G3のPython 3.6以上にアップグレードしたいのですが、
  ➀アップグレードはarmadillo G3上では、特に問題無いのでしょうか?
  ②Debian でのpython アップグレードのコマンドはどのように記述すればいいのでしょうか?

なお当方のArmadillo-IoTゲートウェイ G3 の仕様は下記です。
  M1-D モデル AGX3142-D00Z 開発セット

以上ご教示お願いします。

加藤

ファイル ファイルの説明
boto3_error.txt

at_takumi.mizutani

2023年4月11日 17時34分

ご確認いただきありがとうございます。

> 添付エラーのファイル見ると
> 原因は、boto3がPython 3.5はサポートしておらず、
> Python 3.6以上にアップグレードが必要と考えられますが、
> この理解でよろしいでしょうか?

いえ、エラー発生の原因としてはPythonバージョンの方ではなく、エラーメッセージの一番下の部分の "NoRegionError" の方です。
こちらのエラーは、boto3.client()の引数に region_name='お使いのリージョン名' と追加することで恐らく解決します。

ですが、添付いただいたファイル中のメッセージにもあるようにBoto3は2021/02/01以降Python3.5のサポートを行っておりませんので、Python3.6以降へのアップデートを推奨いたします。

> ➀アップグレードはarmadillo G3上では、特に問題無いのでしょうか?

もし他にPython3系をお使いのアプリケーションがございましたら、そちらに影響がないかの確認はしていただいたほうが良いと思います。

> ②Debian でのpython アップグレードのコマンドはどのように記述すればいいのでしょうか?

恐らく加藤様の使用されているdebianのバージョンはStretchだと思うのですが、StretchではPythonのデフォルトバージョンがPython3.5となります。
もしStretchのままPython3.6以降をご利用になりたい場合は、以下のサイトのようにPython3.6以降のソースをビルドしていただき、インストールしていただくという手順になります。
https://www.electrosoftcloud.com/en/install-python-3-on-debian9/

以上、よろしくお願いいたします。

ご確認いただきありがとうございます。
>いえ、エラー発生の原因としてはPythonバージョンの方ではなく、エラーメッセージの一番下の部分の
>"NoRegionError" の方です。
>こちらのエラーは、boto3.client()の引数に region_name='お使いのリージョン名' と追加することで
>恐らく解決します。

アップグレードせずにpython3.5のままで、publish.pyのboto3.client()の引数に
region_name=********を追加して試したところ、添付ファイルのように
credentialsに関するエラーが発生しました。
申し訳ありませんが、対応方法をご教示いただければと思います。

以上、よろしくお願いいたします。

加藤

ファイル ファイルの説明
credencials_error.txt

at_takumi.mizutani

2023年4月13日 9時31分

水谷です。

> ご確認いただきありがとうございます。
> >いえ、エラー発生の原因としてはPythonバージョンの方ではなく、エラーメッセージの一番下の部分の
> >"NoRegionError" の方です。
> >こちらのエラーは、boto3.client()の引数に region_name='お使いのリージョン名' と追加することで
> >恐らく解決します。
>
> アップグレードせずにpython3.5のままで、publish.pyのboto3.client()の引数に
> region_name=********を追加して試したところ、添付ファイルのように
> credentialsに関するエラーが発生しました。
> 申し訳ありませんが、対応方法をご教示いただければと思います。
>
> 以上、よろしくお願いいたします。
>
> 加藤

先日「もしStretchのままPython3.6以降をご利用になりたい場合は…」という案内をしてしまいましたが、
スタートアップガイドの内容としてはBusterでの開発を想定しておりますので、特にStretchでの開発にこだわる理由が無ければBusterにて開発を進めていただく方が良いと思います。

お手数ですが、ご検討の程よろしくお願いいたします。

ご連絡ありがとうございます。
  BusterでもAWS接続可能であれば、切り替えますが、
  Busterのインストール方法ご教示いただけますか?
よろしくお願いします。
加藤

at_takumi.mizutani

2023年4月13日 14時51分

> ご連絡ありがとうございます。
>   BusterでもAWS接続可能であれば、切り替えますが、
>   Busterのインストール方法ご教示いただけますか?
> よろしくお願いします。
> 加藤

Busterバージョンのインストール方法については「Armadillo-IoT ゲートウェイ G3 製品マニュアル (Debian GNU/Linux 10 対応) 11.1. インストールディスクを使用する」をご確認ください。
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
インストールディスクは「Debian GNU/Linux 10 (buster) イメージファイル(Armadillo-IoT G3 ※3G/LTE非搭載モデル)」をご利用ください。
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3…

また、1点確認なのですが、タイトルにて「armadillo-IoT G3 3G開発セットスタートアップガイドでの…」とございますが今回の開発では3G回線はご利用になられますか?
そうでなければ問題ございませんが、3G回線は停波することが決まっておりますので、もしWWANのご利用を想定している場合はG3 LTE対応モデルへの買い替えをご検討いただく必要があるかと存じます。

以上、ご確認のほどよろしくお願いいたします。

ご連絡ありがとうございます。
ご連絡いただいた手順で
Busterバージョンのインストールを実施してみようと思います。

>また、1点確認なのですが、タイトルにて「armadillo-IoT G3 3G開発セットスタートアップガイドでの…」と
>ございますが今回の開発では3G回線はご利用になられますか?
>そうでなければ問題ございませんが、3G回線は停波することが決まっておりますので、
>もしWWANのご利用を想定している場合はG3 LTE対応モデルへの買い替えを
>ご検討い>ただく必要があるかと存じます。
→ この件ですが、こちらでのタイトル記載ミスで、
   正しくは「armadillo-IoT G3 開発セットスタートアップガイドでの…」です。
   申し訳ありませんでした。

>3G回線は停波することが決まっておりますので、もしWWANのご利用を想定している場合は
>G3 LTE対応モデルへの買い替えをご検討いただく必要があるかと存じます。
  →こちらで使用している機種はarmadillo-IoT ゲートウェイG3 M1-Dモデル開発セットです。
   (P/N:AGX3142-D00Z)
この製品はLTEに使えないのでしょうか?
  ご教示お願いします。

加藤

at_takumi.mizutani

2023年4月13日 16時49分

> → この件ですが、こちらでのタイトル記載ミスで、
>    正しくは「armadillo-IoT G3 開発セットスタートアップガイドでの…」です。
>    申し訳ありませんでした。
>
> >3G回線は停波することが決まっておりますので、もしWWANのご利用を想定している場合は
> >G3 LTE対応モデルへの買い替えをご検討いただく必要があるかと存じます。
>   →こちらで使用している機種はarmadillo-IoT ゲートウェイG3 M1-Dモデル開発セットです。
>    (P/N:AGX3142-D00Z)
> この製品はLTEに使えないのでしょうか?

M1モデルご利用との旨承知しました。
M1モデルでしたらLTEをご利用いただくことが出来ます。

また、Busterインストールの件で一点訂正で、
インストールディスクイメージは「Armadillo-IoT G3 ※3G/LTE非搭載モデル」と記載しているものをご利用くださいと書きましたが、
M1モデルの場合は「Armadillo-IoT G3 M1モデル向け」と記載しているものをご利用ください。
手順については先程記載したURLの通りで問題ございません。

以上、よろしくお願いいたします。

Busterバージョンのインストールを開始しましたが、
開発環境 ATDEは バージョン7 か8どちらを使用すればよいのでしょうか?
お手数おかけしますがご教示ください。

at_takumi.mizutani

2023年4月14日 14時17分

> Busterバージョンのインストールを開始しましたが、
> 開発環境 ATDEは バージョン7 か8どちらを使用すればよいのでしょうか?
> お手数おかけしますがご教示ください。

ATDEのver7はStretchを、ver8はBusterをベースにしておりますので、ver8の方をダウンロードしてご利用ください。

以上、よろしくお願いいたします。

>ATDEのver7はStretchを、ver8はBusterをベースにしておりますので、ver8の方をダウンロードしてご利用ください。
→ATDE ver8のファイル拡張子は .tarですが、VMwareで開こうとすると .vmxファイルが壊れていると
   メッセージが出ます。
   どのように対応すればよいのでしょうか?(拡張子を書換えるのでしょうか?)
   ご教示お願いします。

インストールディスク作成コマンドで下記はエラーが出ます。(ファイルがないとメッセージが出ます)
ダウンロードしたファイル名そのままではだめなのでしょうか?

atmark@atde8:~$ tar xf make_install_disk_image-install_disk_sd_buster_20230328_iotg3_m1.img.tar.gz

自己解決しました。
(全く誤解していたようです。お騒がせしました。)

Debian をbusterにアップし再度AWSへ送信したところ、
相変わらずNoRegionErrorが発生します。
   botocore.exceptions.NoRegionError: You must specify a region.

 debian_versionは10.13 Pythonは 3.7.3です。
 publish.pyはそちらのh/pからダウンロードしたもので修正は加えていません。

この質問内で数回前でも同じNoRegionエラーが出ており、これを
修正しても、また別のエラーが発生していました。

debian とpythonをアップデートしてもエラーが改善されていないのですが、
どのように対応したらよろしいいでしょうか?
ご教示ください。
加藤

region_name= **** を追加してpublish.pyを実行しましたが
下記の通り前回同様、credentialsエラーが発生しました。

申し訳ありませんが対応策ご教示お願いします。

root@armadillo:~# python3 publish.py *******-1.amazonaws.com
Response status:  200
Response body: {"message":"OK","traceId":"f4207436-2e24-3af4-7038-2f49*******"}
Traceback (most recent call last):
  File "publish.py", line 119, in <module>
    main()
  File "publish.py", line 109, in main
    shadow_state = get_shadow(url)
  File "publish.py", line 71, in get_shadow
    res = iot_data.get_thing_shadow(thingName=THING_NAME)
  File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 530, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 944, in _make_api_call
    operation_model, request_dict, request_context
  File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 966, in _make_request
    return self._endpoint.make_request(operation_model, request_dict)
  File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 119, in make_request
    return self._send_request(request_dict, operation_model)
  File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 198, in _send_request
    request = self.create_request(request_dict, operation_model)
  File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 137, in create_request
    operation_name=operation_model.name,
  File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 412, in emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 256, in emit
    return self._emit(event_name, kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 239, in _emit
    response = handler(**kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 105, in handler
    return self.sign(operation_name, request)
  File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 189, in sign
    auth.add_auth(request)
  File "/usr/local/lib/python3.7/dist-packages/botocore/auth.py", line 418, in add_auth
    raise NoCredentialsError()
botocore.exceptions.NoCredentialsError: Unable to locate credentials

at_takumi.mizutani

2023年4月17日 17時25分

> region_name= **** を追加してpublish.pyを実行しましたが
> 下記の通り前回同様、credentialsエラーが発生しました。
>
> 申し訳ありませんが対応策ご教示お願いします。

以下Howto記事の「2.2 AWS CLI インストール」の手順を実施し、上記エラーが解消されるかご確認いただけますでしょうか。
https://armadillo.atmark-techno.com/howto/armadillo_iot_g4-detect-objec…

以上、よろしくお願いいたします。

> 以下Howto記事の「2.2 AWS CLI インストール」の手順を実施し、上記エラーが解消されるかご確認いただけますでしょうか。
> https://armadillo.atmark-techno.com/howto/armadillo_iot_g4-detect-objec…
「2.2 AWS CLI インストール」を実施しました。
   PS C:\Users\USER> aws --version
   aws-cli/2.11.13 Python/3.11.3 Windows/10 exe/AMD64 prompt/off
   PS C:\Users\USER> aws configure
   AWS Access Key ID [None]: AWS123
   AWS Secret Access Key [None]: AWS-access
   Default region name [None]: ap-northeast-1
   Default output format [None]: json
   PS C:\Users\USER>

下記の通り前回同様、credentialsエラーが発生しました。(エラーメッセージは前回同一内容と思います。)
申し訳ありませんが至急確実な対応策ご教示お願いします。

root@armadillo:~# python3 publish.py *************ap-northeast-1.amazonaws.com                                                                          
Response status:  200
Response body: {"message":"OK","traceId":"651ea75a-fa33-f396-5fdb-61b36*******"}
Traceback (most recent call last):
  File "publish.py", line 119, in <module>
    main()
  File "publish.py", line 109, in main
    shadow_state = get_shadow(url)
  File "publish.py", line 71, in get_shadow
    res = iot_data.get_thing_shadow(thingName=THING_NAME)
  File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 530, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 944, in                                                                                   _make_api_call
    operation_model, request_dict, request_context
  File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 966, in                                                                                   _make_request
    return self._endpoint.make_request(operation_model, request_dict)
  File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 119,                                                                                   in make_request
    return self._send_request(request_dict, operation_model)
  File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 198,                                                                                   in _send_request
    request = self.create_request(request_dict, operation_model)
  File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 137,                                                                                   in create_request
    operation_name=operation_model.name,
  File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 412, in                                                                                   emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 256, in                                                                                   emit
    return self._emit(event_name, kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 239, in                                                                                   _emit
    response = handler(**kwargs)
  File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 105, i                                                                                  n handler
    return self.sign(operation_name, request)
  File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 189, i                                                                                  n sign
    auth.add_auth(request)
  File "/usr/local/lib/python3.7/dist-packages/botocore/auth.py", line 418, in a                                                                                  dd_auth
    raise NoCredentialsError()
botocore.exceptions.NoCredentialsError: Unable to locate credentials
root@armadillo:~#
 

at_takumi.mizutani

2023年4月18日 10時34分

> 「2.2 AWS CLI インストール」を実施しました。
>    PS C:\Users\USER> aws --version
>    aws-cli/2.11.13 Python/3.11.3 Windows/10 exe/AMD64 prompt/off
>    PS C:\Users\USER> aws configure
>    AWS Access Key ID [None]: AWS123
>    AWS Secret Access Key [None]: AWS-access
>    Default region name [None]: ap-northeast-1
>    Default output format [None]: json
>    PS C:\Users\USER>

もし違ったら申し訳ございませんが、
PS C:\Users\USER> となっておりますがこちらはWindows PC上で実施されておりますか。
もしそうでしたら、こちらの手順はArmadillo上で実施してください。

>    AWS Access Key ID [None]: AWS123
>    AWS Secret Access Key [None]: AWS-access

また、"AWS123" 及び "AWS-access" については 例示されている文字列ですので、
もしそのまま入力されている場合には加藤様のAccess key ID 及び Secret access key に置き換えて入力してください。

以上、よろしくお願いいたします。

>PS C:\Users\USER> となっておりますがこちらはWindows PC上で実施されておりますか。
>もしそうでしたら、こちらの手順はArmadillo上で実施してください。
申し訳ありません。PC上で実行していました。
 改めてArmadilloでAWS CLI インストール中、下記エラーが発生しました。
   aws: cannot execute binary file: Exec format error

 つきましては下記2点ご回答お願いします。
1.ダウンロードするarmadillo用AWS CLIインストールファイルは’Linux ARM’でよろしいでしょうか?
なお、今回のインストールは’Linux ARM’用で行っています。
    2. インストール命令の sudo ./aws/install の後に ./aws/install -i /usr/local/aws-cli -b /usr/local/bin の
     命令は必要なのでしょうか?(この命令の意味が分からずお聞きする次第です。)
 以上よろしくお願いします。

  root@armadillo:~# aws --version
  -bash: /usr/local/bin/aws: cannot execute binary file: Exec format error
 

at_kazutaka.bito

2023年4月25日 18時21分

尾藤です。

横から失礼します。

当方の確認では、2023年4月17日 16時59分に投稿の状態と同じく、credentialsエラーが発生したところから、
AWS CLIを使わずに下記のようにpublish.pyを編集することでcredentialsエラーが発生しなくなりました。
ご参考まで。

publish.pyの変更箇所の設定について、仮に、
 リージョンコード:hogehoge
 アクセスキーID:12345678
 シークレットアクセスキー:abcdefgh
とします。

publish.py
に2か所存在する

  iot_data = boto3.client("iot-data", endpoint_url=url)

の行を、2か所とも

  iot_data = boto3.client(
    "iot-data",
    region_name='hogehoge',
    aws_access_key_id='12345678',
    aws_secret_access_key='abcdefgh',
    endpoint_url=url
  )

に変更します。
(リージョンコード、アクセスキーID、シークレットアクセスキーは、シングルクォートで囲いました。)

尾藤様
 お世話になります。
 publish.pyをご連絡いただいた内容に変更し
 うまくAWSへ通信できました。
 ありがとうございました。