{"id":24400,"library":"pysolarmanv5","title":"PySolarmanV5","description":"A Python library for interacting with Solarman (IGEN-Tech) v5 based Solar Data Loggers. Version 3.0.6, requires Python >=3.8. Active development with breaking changes in v2-to-v3 transition.","status":"active","version":"3.0.6","language":"python","source_language":"en","source_url":"https://github.com/jmccrohan/pysolarmanv5","tags":["solar","inverter","modbus","solarman","data-logger"],"install":[{"cmd":"pip install pysolarmanv5","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Modbus communication","package":"umodbus","optional":false},{"reason":"MQTT support (optional)","package":"paho-mqtt","optional":true}],"imports":[{"note":"Common mistake: internal module path changed in v2","wrong":"from pysolarmanv5.pysolarmanv5 import SolarmanV5","symbol":"SolarmanV5","correct":"from pysolarmanv5 import SolarmanV5"},{"note":"Case-sensitive import; InverterData is not a top-level class","wrong":"from pysolarmanv5.InverterData import InverterData","symbol":"InverterData","correct":"from pysolarmanv5.inverter_data import InverterData"}],"quickstart":{"code":"from pysolarmanv5 import SolarmanV5\nimport os\n\ninverter = SolarmanV5(\n    host=os.environ.get('INVERTER_HOST', '192.168.1.100'),\n    serial=int(os.environ.get('INVERTER_SERIAL', '123456789')),\n    port=8899,\n    mb_slave_id=1,\n    verbose=False\n)\nprint(inverter.get_sensors())\ndata = inverter.read_holding_registers(register_addr=0, quantity=10)\nprint(data)\ninverter.disconnect()","lang":"python","description":"Connect to a Solarman v5 logger, read sensors and registers."},"warnings":[{"fix":"Replace inverter_address with host, inverter_port with port.","message":"v2 to v3: The constructor no longer accepts 'inverter_address' or 'inverter_port' parameters; use 'host' and 'port'.","severity":"breaking","affected_versions":"<3.0.0"},{"fix":"Adapt code to iterate over dict keys instead of object attributes.","message":"v2 to v3: 'get_sensors()' returns list of dicts, not list of InverterData objects.","severity":"breaking","affected_versions":"<3.0.0"},{"fix":"Cast to int: serial=int(os.environ.get('SERIAL'))","message":"Inverter serial number must be passed as int, not str. Passing a string leads to TypeError.","severity":"gotcha","affected_versions":"all"},{"fix":"Explicitly set port=4196 if connection fails.","message":"Default port is 8899 for TCP, but some loggers use 4196. Check your logger's manual.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Convert serial to int: serial=int('your_serial_string')","cause":"serial number passed as string instead of int","error":"TypeError: 'str' object cannot be interpreted as an integer"},{"fix":"Check logger IP and try port 4196 or 8899.","cause":"Wrong port or host unreachable. Default port is 8899, some loggers use 4196.","error":"pysolarmanv5.exceptions.SolarmanV5Error: Connection refused"},{"fix":"Use 'from pysolarmanv5 import SolarmanV5' (not pysolarmanv5.pysolarmanv5).","cause":"Outdated import path from v1.","error":"AttributeError: module 'pysolarmanv5' has no attribute 'SolarmanV5'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}