Keresés

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

  • rokapet

    tag

    válasz wik_406 #18160 üzenetére

    Az RTU elvileg az RS485 port-ot jelenti, azaz WiFi-n a TCP kell. Nekem nem kellett semmit módosítani az inverter konfigon, ment minden alapból (bár nem tudom, a telepítő állított-e ezen a téren valamit, de nem hiszem...).

    Ami van, azt feltettem ide (remélem úgy, hogy előtte minden személyes dolog ki lett purgálva, de typo-kért felelősséget nem vállalok):
    [link]

    A script a /tmp2 mappába teszi a kimenetet, ezt mindenki módosítsa a sajátjára!

  • 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 ]

  • Zolee897

    tag

    válasz wik_406 #18160 üzenetére

    "Csak meg egy fura, a telnet-es probadnal, nem te zartad a kapcsolatot, hanem a tuloldal, ha jol olvasom. Idotullepes miatt, vagy egybol ezt irta?"

    egyből ezt írta. Vagyis a port nyitva van, elértem, de az inverter egyből zárta a kapcsolatot

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