import requests
from functools import partial
from itertools import cycle
from random import randint
from typing import Any
# todo: convert_func definiert den Typen des Rückgabewerts der Funktion isu
_global_cid_generator = cycle(range(1, 0xFFFFFFFF))
def convert_hex(x: str) -> int:
return int(x, 16)
def convert_not[T](x: T) -> T:
return x
def isu(ip, index: int, subindex: int = 0, convert_func=convert_not, cid_generator=_global_cid_generator) -> Any:
cid = next(cid_generator)
response = requests.post(
url=f"http://{ip}/iolinkmaster",
json={
"code": "request",
"cid": cid,
"adr": "/iolinkmaster/port[2]/iolinkdevice/iolreadacyclic",
"data": {
"index": index,
"subindex": subindex,
},
},
)
response.raise_for_status()
data = response.json()
try:
if int(data.get("code")) != 200:
raise RuntimeError("code != 200", data)
except ValueError:
raise RuntimeError("code is not an integer", data)
if data.get("cid") != cid:
raise RuntimeError("Got wrong answer", data)
return convert_func(data["data"]["value"])
isu("192.168.0.3", 542)
Comments
0 B
|👍
/👎
0 B
|👍
/👎