Új hozzászólás Aktív témák

  • Zolee897

    tag

    válasz wik_406 #18160 üzenetére

    van egy kis haladás, bár a hőmérséklet kiolvasás még nem sikerült, viszont a lenti napi és össz termelés értékek stimmelnek, mert azt írja ki a programom, amit a webes felület is.

    A lényeg: nekem csak akkor megy a lekérdezés, ha az inverter saját wifijére csatlakozva csatlakozom az inverterhez. Ha a lakás routerén keresztül, akkor nem. Nézegettem a weben, ez vagy bug vagy nem, nem tudom még (máshol panaszkodtak rá, hogy ez bug). Az tény, hogy mivel az asztali számítógépem elég messze van, eltartott egy ideig, míg szereztem USB hoszabbító kábeleket, aminek a végére egy USB wifi adaptert rakva már bejött az inverter wifi jele... (az itthoni laptopokon w10 van, ott nem tudom, hogy megy a python...).

    Végül ezt az általam kicsit áttolgozott programot használtam és fenntartom, hogy még nem vagyok képben a pythonnal sem és ezzel a modusos regiszterekkel sem, tehát ha valami béna, akkor nem röhögni... :-)

    32106-os regiszter = eddigi összes termelés
    32114-es regiszter = napi termelés
    32087-es regiszter = ez lenne az internal temperature a doksi szerint de nekem ez stabilan ugyanazt az értéket mutatja és ráadásul a scale sem stimmel (szóval itt valamit valószínűleg benéztem)

    from pymodbus.client.sync import ModbusTcpClient
    import time
    def to_I32(i):
    i = ((i[0] << 16) + i[1])
    i = i & 0xffffffff
    return (i ^ 0x80000000) - 0x80000000
    def read_holding(client, UnitID, i, nb):
    result = client.read_holding_registers(i, nb, unit=UnitID)
    ns = time.time()
    while (time.time() - ns < 1.5):
    try:
    j = result.registers[nb - 1]
    break
    except Exception as Error:
    if 'exception_code' in vars(result):
    break
    time.sleep(0.1)
    continue
    return result
    def read_register_value(client, unitID, register):
    try:
    return to_I16(result.registers)
    except:
    result = read_holding(client, unitID, register, 2)
    if (25000 > result.registers[0] > 23000):
    return time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(to_I32(result.registers)))
    else:
    return to_I32(result.registers)

    client = ModbusTcpClient(host='192.168.200.1', port='502', unit_id=0)
    connection = client.connect()
    time.sleep(1)
    if client.connect():
    print("Eddigi összes termelés: " + str(read_register_value(client, 0, 32106)/100) + " kWh")
    print("Mai termelés: " + str(read_register_value(client, 0, 32114)/100) + " kWh")
    # print("Aktuális belső hőmérséklet: " + str(read_register_value(client, 0, 32087)/100) + " °C")
    # a hőmérséklet ki van kommentezve, mert valamiért állandóan 30 fokot mutat és ráadásul a scale sem stimmel. Ezt még nem értem
    else:
    print("Connecting... FAILED")

    [ Szerkesztve ]

Új hozzászólás Aktív témák