DeaD_EyE icon

ifm isu iolink [WIP]

DeaD_EyE | PRO | 06/25/26 02:15:07 PM UTC | 0 ⭐ | 9029 👁️ | Never ⏰ | []
Python |

1.18 KB

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎