DeaD_EyE

ifm isu iolink [WIP]

Jun 25th, 2026
4,749
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.18 KB | None | 0 0
  1. import requests
  2. from functools import partial
  3. from itertools import cycle
  4. from random import randint
  5. from typing import Any
  6.  
  7. # todo: convert_func definiert den Typen des Rückgabewerts der Funktion isu
  8.        
  9. _global_cid_generator = cycle(range(1, 0xFFFFFFFF))
  10.  
  11. def convert_hex(x: str) -> int:
  12.     return int(x, 16)
  13.  
  14.  
  15. def convert_not[T](x: T) -> T:
  16.     return x
  17.  
  18.  
  19. def isu(ip, index: int, subindex: int = 0, convert_func=convert_not, cid_generator=_global_cid_generator) -> Any:
  20.     cid = next(cid_generator)
  21.  
  22.     response = requests.post(
  23.         url=f"http://{ip}/iolinkmaster",
  24.         json={
  25.             "code": "request",
  26.             "cid": cid,
  27.             "adr": "/iolinkmaster/port[2]/iolinkdevice/iolreadacyclic",
  28.             "data": {
  29.                 "index": index,
  30.                 "subindex": subindex,
  31.             },
  32.         },
  33.     )
  34.     response.raise_for_status()
  35.     data = response.json()
  36.  
  37.     try:
  38.         if int(data.get("code")) != 200:
  39.             raise RuntimeError("code != 200", data)
  40.     except ValueError:
  41.         raise RuntimeError("code is not an integer", data)
  42.  
  43.     if data.get("cid") != cid:
  44.         raise RuntimeError("Got wrong answer", data)
  45.  
  46.     return convert_func(data["data"]["value"])
  47.  
  48.  
  49. isu("192.168.0.3", 542)
Advertisement