Проблема с JSON RPC на RPI и вызовом метода - PullRequest
0 голосов
/ 11 ноября 2018

Я получил Raspberry Pi с запущенным на нем сервером json rpc. я использовал этот модуль: https://github.com/bcb/jsonrpcserver

Все работает нормально, когда я делаю запрос только следующим способом:

@method
def ping(): 
    return "pong"

Но когда я хочу пойти дальше и выполнить другие функции и такие вещи, как

@method
def changeDisplay(): 
    self.led.clear_display()

Даже когда я делаю

@method 
def ping():
    self.helloworld()

def helloworld():
    print("helloworld") 

тогда я получаю ошибку 500 без дальнейшего объяснения.

request("http://192.168.2.5:5000", "ping")

Запрос выглядит как выше. Я застрял и перепробовал много разных вещей.

Traceback:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\Tijn\PycharmProjects\JSONrpcTest\venv\lib\site-packages\jsonrpcclient\__init__.py", line 8, in request
    return HTTPClient(endpoint).request(*args, **kwargs)
  File "C:\Users\Tijn\PycharmProjects\JSONrpcTest\venv\lib\site-packages\apply_defaults\decorators.py", line 13, in wrapper
    return function(self, *args, **kwargs)
  File "C:\Users\Tijn\PycharmProjects\JSONrpcTest\venv\lib\site-packages\jsonrpcclient\client.py", line 232, in request
    validate_against_schema=validate_against_schema,
  File "C:\Users\Tijn\PycharmProjects\JSONrpcTest\venv\lib\site-packages\apply_defaults\decorators.py", line 13, in wrapper
    return function(self, *args, **kwargs)
  File "C:\Users\Tijn\PycharmProjects\JSONrpcTest\venv\lib\site-packages\jsonrpcclient\client.py", line 171, in send
    self.validate_response(response)
  File "C:\Users\Tijn\PycharmProjects\JSONrpcTest\venv\lib\site-packages\jsonrpcclient\clients\http_client.py", line 48, in validate_response
    raise ReceivedNon2xxResponseError(response.raw.status_code)
jsonrpcclient.exceptions.ReceivedNon2xxResponseError: Received 500 status code

Pastebin полного кода: https://pastebin.com/dgFEUBNp


UPDATE

Думаю, это как-то связано с тем, что сервер не является асинхронным. Все отпечатки после запуска сервера не печатаются

1 Ответ

0 голосов
/ 11 ноября 2018

Методы вашего класса не получают параметр self, но пытаются его использовать:

class Bartender(MenuDelegate):
    ...
    @method
    def ping():
        self.changeDsplay()  # name `self` is not defined
        print (" TOkm")
        return " ewa"

Документы для jsonrpcserver и источника не предлагаютчто method может правильно обрабатывать классы и их методы.Похоже, вам нужно добавить bound методов экземпляр, а не несвязанные методы класса.

class Bartender(MenuDelegate):
    ...
    # regular unbound method taking `self` parameter
    def ping(self):
        self.changeDsplay()
        print (" TOkm")
        return " ewa"

    def run(self):
        # register bound methods *of this instance*
        method(ping=self.ping)
        ...
...