

ラズベリーパイにpisugar3というUPSを取り付けており、5秒おきにpisugarから電圧とバッテリー容量を取得するという内容です。

プログラム実行の最初はうまくいくのですが、20分くらい動いたあとにエラーを返されます。（写真参照）どこか構文に問題があるのだと思うのですが、どこが悪いのか見当がつかないのでよろしくお願いいたします。

[![エラーの画面](https://i.stack.imgur.com/4PAu9.jpg)](https://i.stack.imgur.com/4PAu9.jpg)

参考スクリプト

[github PiSugar.py](https://github.com/PiSugar/pisugar-server-py)

**コード**

[code]

    from pisugar import *
    import datetime
    import csv
    import time
    
    
    conn, event_conn = connect_tcp('raspberrypi.local')
    s = PiSugarServer(conn, event_conn)
    
    #s.register_single_tap_handler(lambda: print('single'))pisugarのgithubに記載されていた内容この文章が理解できていない。
    #s.register_double_tap_handler(lambda: print('double'))この文章が理解できていない。
    
    
    #csv設定
    path = open(r"data/log.csv",'a',newline = '')
    f = csv.writer(path)
    writer = f
    
    
    #取得時間間隔
    inter = 5#インターバル時間を設定（秒）
    
    list = ''
    
    def writecsv():
    
    #pisugar_API
        batplug = s.get_battery_power_plugged()#給電方式
        batlevel = s.get_battery_level()#バッテリー残量
        v = s.get_battery_voltage()#電圧
    
    #時間設定
        dt_nowrow = datetime.datetime.now()
        dt_now = dt_nowrow.strftime('%Y年%m月%d日 %H:%M:%S')
        list = [dt_now,batplug,batlevel,v]
        writer.writerow(list)
        print(list)
    
    
    #csv,書き込み
    writer.writerow(['Time Stamp','給電','バッテリー残量','電圧'])
    while True:
        shoutdownlevel = s.get_battery_level()#シャットダウン因子
    
        writecsv()
        time.sleep(inter)
        
        if (shutdownlevel < 10):
            break
    
[/code]


CC BY-SA 4.0
2022-11-11T00:08:48.390
92140
2022-11-11T21:19:29.313
2022-11-11T03:57:25.297
3060
55320
question
python python3 raspberry-pi
Pisugar3 との通信で Expected b'battery_v' but got b'battery: ...' というエラーが出る


製品の知識が有る方が少なそうで、回答が得られ難いと思いますので、推測を含めて回答します。

Pythonの構文に問題は見つかりません。おそらく、実際に間違った応答が製品から返されているのでしょう。 あるいは、`pisugar-server`
という製品との通信を仲立ちしているプログラムにバグが有る、Pythonのモジュールとバージョンが有っていない、などかも知れません。

一般的には、こういったエラー（もしかしたらバグ）の安易な回避策として、

  * 同時接続を避ける
  * 通信の間隔を開ける
  * 定期的に再接続や再起動をする

などが有ります。

また、質問のケースのように、通信の結果により例外が発生するライブラリの場合は、`try`
文で[例外を処理](https://docs.python.org/ja/3/tutorial/errors.html#handling-
exceptions)し、エラーなどに対処することが出来ます。


CC BY-SA 4.0
2022-11-11T01:20:45.533
92142
2022-11-11T01:20:45.533
3054
92140
answer


@mjy様  
ありがとうございます。

回避策行いましたが、うまくいきませんでした。そのためtry文でエラーを回避して実行するように書き直したらうまくデータ取得ができました。  
解決しました。ありがとうございます。


CC BY-SA 4.0
2022-11-11T21:19:29.313
92171
2022-11-11T21:19:29.313
55320
92140
answer