96088


表題の通り、1秒ごとの数値が1列ずつに格納されているCSVデータを読み取り、  
1秒おきにIoTプラットフォームへ全くそのまま送信したいと考えております。

現在のコードは以下です。

[code]

    ### CSV_to_.py
    
    import pandas as pd
    import csv
    import datetime
    import subprocess
    import sys
    from pathlib import Path
    
    # Set Parameters
    ADDR = "********"
    PORT = "********"
    TOPIC = "********"
    QOS = "********"
    ID = "********"　#本来のコードには実値が入っています
    
    #CSVファイルをリスト形式で出力
    f = '20210902.csv'
    df = pd.read_csv(f, encoding="shift-jis").values.tolist()
    
    for row in df:
        DATA = ',' . join(map(str,row))
    　　print(DATA)
    
        cmd = "mosquitto_pub --host " + str(ADDR) +" --port "+ str(PORT) + " --qos 0 --topic " + str(TOPIC) + " -m '," + str(DATA) + ", ' -i " + str(ID)
        proc = subprocess.run(cmd, shell = True)
    
        time.sleep(1)
    
    
[/code]

上記コードを実行すると、

[code]

    2021/9/2 5:02,0,22.8,1.5,0,0,2.7,98,0,1
    Error: The connection was lost.
    
[/code]

と表記されラズパイ内でのデータ表示は可能ですが  
IoTプラットフォームへデータが送信できていない状態です。  
どなたか修正方法についてご教示いただけますと幸いです。

IoTプラットフォーム側で受け取る値が、strで全項目文字列として  
取り扱われているのではないかと設定を見直したところ正常にデータ送信が可能となりました。  
皆さまのご意見大変参考になりました。ありがとうございます。


CC BY-SA 4.0
2023-08-31T04:37:21.590
96086
2023-08-31T09:12:49.180
2023-08-31T09:12:49.180
59069
59069
question
python raspberry-pi csv
ラズパイに格納したCSVデータを1秒ごとに1行ずつ抜き出し、MQTTを利用してIoTプラットフォームへ送信(転送)したい


DATAに値（文字列）をセットしたいのであれば、printの実行結果はNoneなので`DATA = print(',' .
join(map(str,row)))`ではなく`DATA = ',' . join(map(str,row))`とすべきだと思います。


CC BY-SA 4.0
2023-08-31T05:13:25.527
96088
2023-08-31T05:13:25.527
25830
96086
answer