Get MODBUS data from Sofar (K-TLX) inverter through LSW-3 or LSE module

Overview

SOFAR Inverter + LSW-3/LSE

Small utility to read data from SOFAR K-TLX inverters through the Solarman (LSW-3/LSE) datalogger. Two scripts to get inverter's statistics and hardware info. Tested with logger S/N 17xxxxxxx and 21xxxxxxx (protocol V5). Requires python3 to run.

REMARK: To make it work with other inverter brand/model connected via LSW-3/LSE you might need to alter the register's addresses in the .xml files accordingly and change register start/end numbers in config.cfg

Thanks to @jlopez77 https://github.com/jlopez77 for logger/MODBUS protocol code.

Configuration

Edit the config.cfg and enter the following data:

[SofarInverter]
inverter_ip=X.X.X.X             # data logger IP
inverter_port=8899              # data logger port
inverter_sn=XXXXXXXXXX          # data logger S/N
register_start1=0x0000          # Inverter register's first MODBUS address for the first register's range.
register_end1=0x0027            # Inverter register's last MODBUS address for the first register's range
register_start2=0x0105          # Inverter register's first MODBUS address for a second register's range
register_end2=0x0114            # Inverter register's last MODBUS address for a second register's range
registerhw_start=0x2000         # Like above, but for InverterHWData.py
registerhw_end=0x200D           # Like above, but for InverterHWData.py
lang=                           # Output language (available: PL,EN)
verbose=0                       # Set to 1 for additional info to be presented (registers, binary packets etc.)

[Prometheus]
prometheus=0                    # set to 1 to export data in Prometheus metrics format
prometheus_file=/xx/xx/metrics/index.html  # Path to Prometheus metrics file served by web server

[InfluxDB]
influxdb=0                      # set to 1 to export data to InfluxDB
influxdb_host=                  # InfluxDB host (i.e. 127.0.0.1)
influxdb_port=8086              # InfluxDB port
influxdb_user=                  # InfluxDB user with permisions to read/write from/to dbname
influxdb_password=              # User password
influxdb_dbname=                # Database name 

[MQTT]
mqtt=0                          # 0: disabled, 1: enabled
mqtt_server=                    # MQTT server IP address
mqtt_port=1883                  # MQTT server tcp port
mqtt_topic=                     # MQTT topic name
mqtt_username=                  # MQTT access username
mqtt_passwd=                    # MQTT user password
mqtt_tls=0                      # Set to 1 to enable TLS support
mqtt_tls_insecure=True          # Set to False to enable strict server's certificate hostname matching
mqtt_tls_version=2              # 1 or 2
mqtt_cacert=                    # CA certificate path/filename

[Domoticz]
domoticz_support=0              # 0: disabled, 1: enabled

Files SOFARMap.xml and SOFARHWMap.xml contain MODBUS inverter's registers mapping for Sofar Solar K-TLX product line
and Prometheus/InfluxDB metrics configuration.
Edit i.e. to get captions in a different language, change Prometheus/InfluxDB metrics names or
if Your inverter has different register's numbers.
Example SOFARMap.xml structure and fields definition (similar for SOFARHWMap.xml):
"directory": "solar",               # Id
    "items": [
      {
        "titleEN": "PV1 Power",     # English JSON output name 
        "titlePL": "Moc PV1",       # Polish JSON output name
        "registers": ["0x000A"],    # Inverter's register address (must be in range configured in the config file)
        "DomoticzIdx": 0,           # Domoticz virtual device idx number (for Domoticz support)
        "optionRanges": [],         # For numeric value to text label mappings
        "ratio": 10,                # Value ratio (will be used to multiply response value)
        "unit": "W",                # Value unit
        "graph": 1,                 # Set to 1, to export value to Prometheus/InfluxDB
        "metric_type": "gauge",     # Prometheus metric type
        "metric_name": "SolarPower",# Prometheus/InfluxDB container name
        "label_name": "Power",      # Prometheus/InfluxDB label name
        "label_value": "PV1"        # Prometheus/InfluxDB value name
      }

Run

bash:/python3 InverterData.py  (or ./InverterData.py)
{
    "Inverter status": "Normal",
    "Fault 1": "No error",
    "Fault 2": "No error",
    "Fault 3": "No error",
    "Fault 4": "No error",
    "Fault 5": "No error",
    "PV1 Voltage (V)": 403.7,
    "PV1 Current (A)": 0.14,
    "PV2 Voltage (V)": 78.9,
    "PV2 Current (A)": 0.0,
    "PV1 Power (W)": 50,
    "PV2 Power (W)": 0,
    "Output active power (W)": 20,
    "Output reactive power (kVar)": -0.65,
    "Grid frequency (Hz)": 49.98,
    "L1 Voltage (V)": 241.8,
    "L1 Current (A)": 0.93,
    "L2 Voltage (V)": 240.4,
    "L2 Current (A)": 0.91,
    "L3 Voltage (V)": 240.4,
    "L3 Current (A)": 0.93,
    "Total production (kWh)": 297,
    "Total generation time (h)": 249,
    "Today production (kWh)": 14010.0,
    "Today generation time (min)": 679,
    "Inverter module temperature (ºC)": 29,
    "Inverter inner termperature (ºC)": 45,
    "Inverter bus voltage (V)": 655.8,
    "PV1 voltage sample by slave CPU (V)": 402.6,
    "PV1 current sample by slave CPU (A)": 79.1,
    "Countdown time (s)": 60,
    "Inverter alert message": 0,
    "Input mode": 1,
    "Communication Board inner message": 0,
    "Insulation of PV1+ to ground": 1379,
    "Insulation of PV2+ to ground": 2387,
    "Insulation of PV- to ground": 1917,
    "Country": "Poland",
    "String 1 voltage (V)": 9.3,
    "String 1 current (A)": 24.04,
    "String 2 voltage (V)": 9.1,
    "String 2 current (A)": 24.04,
    "String 3 voltage (V)": 9.3,
    "String 3 current (A)": 0.0,
    "String 4 voltage (V)": 29.7,
    "String 4 current (A)": 0.0,
    "String 5 voltage (V)": 24.9,
    "String 5 current (A)": 14.01,
    "String 6 voltage (V)": 67.9,
    "String 6 current (A)": 0.29,
    "String 7 voltage (V)": 4.5,
    "String 7 current (A)": 65.58,
    "String 8 voltage (V)": 402.6,
    "String 8 current (A)": 7.91
}
bash:/python3 /InverterHWData.py (or ./InverterHWData.py)
{
    "Product code": "5kW",
    "Serial Number": "SXXXXXXXXXXX",
    "Software Version": "V270",
    "Hardware Version": "V100",
    "DSP Version": "V270"
}

Known Issues

You tell me :)

Contrib

Feel free to suggest :) If You want to rewrite or/add change anything - please fork Your own project.

MQTT Support (Domoticz compatible)

    1. JSON_attributes_topic (unless Domoticz support enabled !): "mqtt_topic/attributes"
    2. For TLS support You'll need at least CA Certificate and TLS enabled MQTT
       To enable TLS for Mosquitto look i.e here: http://www.steves-internet-guide.com/mosquitto-tls/
    3. To turn Domoticz support on:
       a) enable it in config.cfg
       b) set mqtt_topic=domoticz/in in config.cfg
       c) create virtual devices in Domoticz (write down their idx numbers)
       d) in SOFARMap.xml find corresponding variables and for each input idx number
       e) leave "DomoticzIdx":0 for variables You don't want to send data to Domoticz
       WARNING: When enabled, Domoticz support disables normal MQTT message delivery (all values in one message).
    3. Tested with Mosquitto MQTT server (both with and without TLS) and Domoticz 2021.1

Prometheus+Grafana support

Steps to run Prometheus+Grafana support:
    1. Configure prometheus options in config.cfg
    2. Serve prometheus metrics file using any web server (name it index.html to be the default page in configured path)
    3. Configure prometheus target to access the file 
    4. Add Prometheus datasource in Grafana
    5. Import grafana_en/pl.json file (Dashboards->Manage->Import).
    Enjoy :)

InfluxDB+Grafana support

Steps to run InfluxDB+Grafana support:
    1. Configure InfluxDB options in config.cfg
    2. Create database to store inverter data in InfluxDB (i.e. create database Data)
    3. Add InfluxDB datasource in Grafana (name it InfluxDB)
    4. Import grafana_iflux_en/pl.json file (Dashboards->Manage->Import).
    Enjoy :)
Comments
  • Is it possible to add support for HYD 6000-EP inverter ?

    Is it possible to add support for HYD 6000-EP inverter ?

    I tried a lot of things with no luck. No answer from the wifi logger (LSW3_15_270A_1.32)

    I got things like that with too short answer:

    [email protected]:~/sofarsolar/Sofar_LSW3-main# ./InverterData.py Connecting to logger... connected successfully ! *** Chunk no: 0 Sent data: bytearray(b'\xa5\x17\x00\x10E\x00\x00\x8d\xad,\x89\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00\x18E\xc0\x00\x15') Received data: b'\xa5\x13\x00\x10\x15\x00\x0f\x8d\xad,\x89\x02\x01\xc6\xa6\x00\x00~\x02\x00\x00F\x8aob\x01\x90\x02\x00\x03\\x15' 0x0000 - Inverter status: "FAULT" 0x0001 - Fault 1: 23573 No value in response for register 0x0002 Check register start/end values in config.cfg

    It would be so cool to get valid data, so I can do what I want like cool realtime graph ans stats.

    question 
    opened by maxxximatoze 40
  • Domoticz-aktualizacja danymi z inwertera

    Domoticz-aktualizacja danymi z inwertera

    Witam, szukam przyczyny conajmniej dziwnego zachowywania pozyskanych danych lub ich braku w Domoticz. Instancja Domoticz 2021.1 (build 13949) (Synology-Docker) - chcę pozyskać 12 danych z inwertera (Moc PV1,Moc PV2, Napięcie PV1, Napięcie PV2, Prąd PV, Prąd PV2, Dzienna produkcja, Całkowita produkcja, Moc czynna, Napięcie L1, Napięcie L2, Napięcie L3, Temperatura falownika, Temperatura modułu. Wszystkie potrzebne virtualne urządzenia w Domoticz utworzone, skrypty poprawnie odpowiadają i wyświetlają się kompletne wyniki na terminalu - wszystko wygląda ok. Jednak raz tylko część danych pojawia się w Domoticz (np. 3 lub 2) , raz pojawiają się wszystkie które zostały skonfigurowane (12). Nie jest to regularne - zazwyczaj zawsze jest Napięcie PV1. Skrypt działa przez crone co 2 min. zmiana na inny czas np 10 min. też nie dała rezultatu. Może jakiś pomysł?

    opened by ozogp 35
  • zmienna totalpower i mqtt

    zmienna totalpower i mqtt

    Zauważyłem dwa małe błędy.

    1. zmienna "totalpower" (zapewne też totaltime) po wyjściu z pętli mają wartość = 0 To chyba problem z zasięgiem czy wcięciem. Nie znam się na programowaniu, ale jak zadeklarowałem ja na początku kodu (bez wcięcia) to działa prawidłowo.
    2. Broker MQTT nie dostawał prawidłowych danych. Tzn. otrzymywał tylko komunikat o "totalpower". Jak zmieniłem kolejność publikacji to teraz trzyma dane o atrybutach i totalpower. client.publish(mqtt_topic+"/attributes",output) client.publish(mqtt_topic,totalpower)
    bug 
    opened by pablolite 12
  • Błędne dane z loggera LSW-3  ver. LSW3_15_270A_1.32

    Błędne dane z loggera LSW-3 ver. LSW3_15_270A_1.32

    Witam. Udało się uruchomić integrację. Jednak jest problem który polega na dziwnych danych. Wygląda to tak:

    [email protected]~/SofarSolar/Sofar_LSW3$ python3 InverterData.py
    Connecting to logger... connected successfully !
    *** Chunk no:  0
    Sent data:  bytearray(b'\xa5\x17\x00\x10E\x00\x00F4\x17j\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00(E\xd4\x00\x15')
    Received data:  b"\xa5c\x00\x10\x15\x00uF4\x17j\x02\x01\x93\xf1\x03\x00\x8a\x08\x00\x00\x9f\x17'b\x01\x03P\x00\x03\xff\xc0\x05\x81\xff\xff\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ly\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00<\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\xe4v`\x15"
    0x0000 - Status: "BŁĄD"
    0x0001 - Kod błędu 1: -64
    0x0002 - Kod błędu 2: 1409
    0x0003 - Kod błędu 3: -1
    0x0004 - Kod błędu 4: "ID50 Duża różnica w poziomie próbkowania częstotliwości pomiędzy nadrzędnym i podrzędnym DSP"
    0x0005 - Kod błędu 5: "Brak błędów"
    0x0006 - Napięcie PV1: 0.0V
    0x0007 - Prąd PV1: 0.0A
    0x0008 - Napięcie PV2: 0.0V
    0x0009 - Prąd PV2: 0.0A
    0x000A - Moc PV1: 0W
    0x000B - Moc PV2: 0W
    0x000C - Moc czynna: 0W
    0x000D - Moc bierna: 0.0kVar
    0x000E - Częstotliwość sieci: 0.0Hz
    0x000F - Napięcie L1: 0.0V
    0x0010 - Prąd L1: 277.69A
    0x0011 - Napięcie L2: 0.0V
    0x0012 - Prąd L2: 0.0A
    0x0013 - Napięcie L3: 0.0V
    0x0014 - Prąd L3: 0.0A
    0x0016 - Całkowita produkcja: 0kWh
    0x0018 - Całkowity czas pracy: 11h
    0x0019 - Dzienna produkcja: 0Wh
    0x001A - Dzisiejszy czas pracy: 11min
    0x001B - Temperatura modułu: 0ºC
    0x001C - Temperatura falownika: 0ºC
    0x001D - Napięcie szyny falownika: 0.0V
    0x001E - Napięcie PV1 próbkowane przez podrzędny CPU: 0.0V
    0x001F - Prąd PV1 próbkowany przez podrzędny CPU: 0.0A
    0x0020 - Czas próbkowania: 25s
    0x0021 - Wiadomość alarmowa: 0
    0x0022 - Tryb wejściowy: 0
    0x0023 - Wewnętrzny komunikat szyny: 0
    0x0024 - Izolacja PV1+ względem ziemi: 0
    0x0025 - Izolacja PV2+ względem ziemi: 0
    0x0026 - Izolacja PV- względem ziemi: 199
    0x0027 - Kraj: "Niemcy"
    *** Chunk no:  1
    Sent data:  bytearray(b'\xa5\x17\x00\x10E\x00\x00F4\x17j\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x10\x00\x10E\xc3\x00\x15')
    *** Chunk no:  1
    Sent data:  bytearray(b'\xa5\x17\x00\x10E\x00\x00F4\x17j\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x10\x00\x10E\xc3\x00\x15')
    *** Chunk no:  1
    Sent data:  bytearray(b'\xa5\x17\x00\x10E\x00\x00F4\x17j\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x10\x00\x10E\xc3\x00\x15')
    *** Chunk no:  1
    Sent data:  bytearray(b'\xa5\x17\x00\x10E\x00\x00F4\x17j\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x10\x00\x10E\xc3\x00\x15')
    ^CTraceback (most recent call last):
      File "/home/kuma/SofarSolar/Sofar_LSW3/InverterData.py", line 164, in <module>
        data = clientSocket.recv(1024);
    KeyboardInterrupt
    
    [email protected]:~/SofarSolar/Sofar_LSW3$
    

    Na falowniku jest wszystko dobrze, brak błędów i praca normalna. Inni z tego typu loggerem nie mają tego problemów. W czym może być problem? Może wersja oprogramowania na loggerze? Zestaw był zakupiony w luty tego roku.

    question 
    opened by paku2020 10
  • UnicodeDecodeError: 'charmap' codec can't decode

    UnicodeDecodeError: 'charmap' codec can't decode

    Hi, firstly thanks very much for your hard work on this, very keen to get it working on my ME3000SP. I'm using Python in Windows 11

    When I run the HWData script everything works fine, but when I run InverterData.py I get:

    PS C:\Users\marti\OneDrive\Documents\Sofar_LSW3-main-v1-8\Sofar_LSW3-main> python3 .\InverterData.py
    Connecting to logger... connected successfully !
    *** Chunk no:  0
    Sent data:  bytearray(b'\xa5\x17\x00\x10E\x00\x00?\xf1\x13k\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00(E\xd4\x00\x15')
    Received data:  b'\xa5\x10\x00\x10\x15\x00/?\xf1\x13k\x02\x01w\x88L7M\r\x00\x00;p\xd0*\x05\x00\x9b\x15'
    Traceback (most recent call last):
      File "C:\Users\marti\OneDrive\Documents\Sofar_LSW3-main-v1-8\Sofar_LSW3-main\InverterData.py", line 186, in <module>
        parameters=json.loads(txtfile.read())
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2800.0_x64__qbz5n2kfra8p0\lib\encodings\cp1252.py", line 23, in decode
        return codecs.charmap_decode(input,self.errors,decoding_table)[0]
    UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 7995: character maps to <undefined>
    

    I presume there is a character map issue going on here? Any suggestions please?

    question 
    opened by MartinJSa 9
  • Add MQTT Auto discovery (device) support for HomeAssistant

    Add MQTT Auto discovery (device) support for HomeAssistant

    The functionality allows the device (logger) to be automatically detected in HomeAssistant in MQTT integration. Data from daily or total production can be used in the ENERGY tab ha_0 ha_1 ha_2 ha_3

    opened by pablolite 9
  • Support for inverter HYD3000-ES

    Support for inverter HYD3000-ES

    Hi,

    I tried Your script to communicate with for inverter HYD3000-ES but with no luck. After execution I see following output.

    python3 ./InverterData.py Chunk no: 0 Sent data: bytearray(b'\xa5\x17\x00\x10E\x00\x00\x86soh\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00(E\xd4\x00\x15') Received data: b'\xa5\x10\x00\x10\x15\x00\xb7\x86soh\x02\x010E\x00\x00\x9b\x19\x00\x001\xfe\x8ca\x05\x00\t\x15' 0x0000 - Status: 21 No value in response for register 0x0001 Check register start/end values in config.cfg

    python3 ./InverterHWData.py Modbus request: 0104 2000 000e 7a0e Hex string to send: A5 1700 1045 0000 86736f68 020000000000000000000000000000 01042000000e7a0e 00 15 Data sent: bytearray(b'\xa5\x17\x00\x10E\x00\x00\x86soh\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04 \x00\x00\x0ez\x0e\x00\x15')

    Data received: b"\xa5/\x00\x10\x15\x00\xb6\x86soh\x02\x01'E\x00\x00\x92\x19\x00\x001\xfe\x8ca\x01\x04\x1c\x00\x05SM1ES130LBL394V260V100V260X\xb9\x81\x15" Hex string received: A5 2F 00 10 15 00 B6 86 73 6F 68 02 01 27 45 00 00 92 19 00 00 31 FE 8C 61 01 04 1C 00 05 53 4D 31 45 53 31 33 30 4C 42 4C 33 39 34 56 32 36 30 56 31 30 30 56 32 36 30 58 B9 81 15 Register: 0x2000 , value:0005 () Register: 0x2001 , value:534d (SM) Register: 0x2002 , value:3145 (1E) Register: 0x2003 , value:5331 (S1) Register: 0x2004 , value:3330 (30) Register: 0x2005 , value:4c42 (LB) Register: 0x2006 , value:4c33 (L3) Register: 0x2007 , value:3934 (94) Register: 0x2008 , value:5632 (V2) Register: 0x2009 , value:3630 (60) Register: 0x200A , value:5631 (V1) Register: 0x200B , value:3030 (00) Register: 0x200C , value:5632 (V2) Register: 0x200D , value:3630 (60) { "Moc falownika": "15kW", "Numer seryjny": "SM1E30LBLxxx", "Wersja oprogramowania": "V260", "Wersja sprzętowa": "V100", "Wersja DSP": "V260" }

    SN is correct, inverter_sn=175xxxxxxx Moc falownika is incorrect (should be 3 kW hybrid).

    Can you help me with this issue ?

    p.s. I found here: https://github.com/cmcgerty/Sofar2mqtt/blob/main/HYBRID/HYBRID.ino some ModBus addresses - reported as working with hybrid inverters. Can you check it ?

    opened by jezikk82 9
  • LSE-3 logger - No value in response for register 0x0000

    LSE-3 logger - No value in response for register 0x0000

    Hi

    I tried to connect to my LSE-3 logger (eth type),but I get these message:

    No value in response for register 0x0000
    Check register start/end values in config.cfg
    

    But I have no clue about these register start/end values

    Device serial number 210xxxxxxx Firmware version ME_0C_270A_1.05

    When I run InverterHWData.py I get:

    Traceback (most recent call last):
      File "path\InverterHWData.py", line 120, in <module>
        val1=chr(int(str(responsereg[0:2]),16))
    ValueError: invalid literal for int() with base 16: ''
    
    opened by wardwygaerts 7
  • Added CSV output possibility

    Added CSV output possibility

    Changed config to config-org so user can easily change its name and keep repo clear Added lines for CSV file output support Added lines in config for CSV file support If none mqtt or CSV is chosen json console output is enabled

    opened by k0201 4
  • 'charmap' codec can't decode byte 0x81 in position 7950: character maps to <undefined>

    'charmap' codec can't decode byte 0x81 in position 7950: character maps to

    Hi! Glad to see that someone did figure out how does protocol v5 works. I tried it on my inverter and I am getting such message:

    Chunk no:  0
    Sent data:  bytearray(b'\xa5\x17\x00\x10E\x00\x00\xe1,\x1ah\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00(E\xd4\x00\x15')
    Received data:  b'\xa5c\x00\x10\x15\x00\x03\xe1,\x1ah\x02\x01\x0f\xa6/\x00H\x00\x00\x00\x00\x00\x00\x00\x01\x03P\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x128\x02\x81\x11\xf6\x02w\x01+\x01"\x028\xff\xbe\x13\x89\t$\x03-\t0\x03-\t\x1e\x03,\x00\x00\x07\xf9\x00\x00\x03V\x05\x01\x01(\x00*\x001\x19\x01\x12*\x11\xf2\x00<\x00\x00\x00\x01\x00\x00\x04\x9e\x0b\x02\t\x10\x00\x0ce=\xd9\x15'
    Traceback (most recent call last):
      File "C:\Users\Lenovo\Documents\Sofar_LSW3-main\InverterData.py", line 156, in <module>
        parameters=json.loads(txtfile.read())
      File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python39-32\lib\encodings\cp1250.py", line 23, in decode
        return codecs.charmap_decode(input,self.errors,decoding_table)[0]
    UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 7950: character maps to <undefined>
    

    The LWS serial numer is 174654****, FW: LSW3_14_FFFF_1.0.34 Inverter type is SF4ES008 (Sofar 8.8KTL-X) V2.40 I did try it on Windows with python 3.9.0 but can also check on linux later.

    If you have any ideas what should I change to make it work I would be glad to hear them :D Thanks!

    question 
    opened by k0201 4
  • Wifi logger Protocol

    Wifi logger Protocol

    MichaluxPL, thanks for a great start with inverters via Wifi logger. Would you like to make a similar module for the new G3 series inverters, could you share the WiFi Loggera protocol? I searched the entire Internet, I can’t find anything ... Maybe you can send it to the post office if you don’t want to post it for everyone: [email protected]

    opened by GusakIurii 3
  • azzurro HYBRID inverter can`t recieve value

    azzurro HYBRID inverter can`t recieve value

    we tried to run the script. Once with a Dietpi and once directly on the Synology, both without success.

    We use an Azzurro hybrid inverter with the LSW-3 module.

    Is there a possibility that we may ask for your help?

    opened by r-schoepf 3
  • No access to PV logger every morning

    No access to PV logger every morning

    Cześć Michale,

    I've setup your script and get all the data from logger - that looks fine :)

    Unfortunatelly almost every morning the script is kind of stuck. It does not collect any data untill I login to logger website and reset it:

    image

    Device information Device serial number1774324xxx Firmware versionLSW3_15_FFFF_1.0.57

    The script is started by Synology NAS every minute. I does check if PV logger is pingable:

    #!/bin/bash

    Settings

    PV_IP="hidden" # PV IP Address

    Check if PV Logger is contactable

    PINGTIME=ping -c 1 -q $PV_IP | awk -F"/" '{print $5}' | xargs

    echo $PINGTIME if expr "$PINGTIME" '>' 0 then echo "rozpoczynam odczyt danych ..." python3 /volume1/docker/domoticz/scripts/sofar/InverterData.py else echo "brak komunikacji !!!" fi

    Any advice ?

    Maybe some kind of timeout flag within python script would do the trick ?

    Pozdrawiam Mikołaj

    help wanted 
    opened by ilexpl01 16
Releases(1.84)
API using python and Fastapi framework

Welcome 👋 CFCApi is a API DEVELOPMENT PROJECT UNDER CODE FOR COMMUNITY ! Project Walkthrough 🚀 CFCApi run on Python using FASTapi Framework Docs The

Abhishek kushwaha 7 Jan 02, 2023
Instrument your FastAPI app

Prometheus FastAPI Instrumentator A configurable and modular Prometheus Instrumentator for your FastAPI. Install prometheus-fastapi-instrumentator fro

Tim Schwenke 441 Jan 05, 2023
A simple Blogging Backend app created with Fast API

This is a simple blogging app backend built with FastAPI. This project is created to simulate a real CRUD blogging system. It is built to be used by s

Owusu Kelvin Clark 13 Mar 24, 2022
A FastAPI Plug-In to support authentication authorization using the Microsoft Authentication Library (MSAL)

FastAPI/MSAL - MSAL (Microsoft Authentication Library) plugin for FastAPI FastAPI - https://github.com/tiangolo/fastapi FastAPI is a modern, fast (hig

Dudi Levy 15 Jul 20, 2022
Hyperlinks for pydantic models

Hyperlinks for pydantic models In a typical web application relationships between resources are modeled by primary and foreign keys in a database (int

Jaakko Moisio 10 Apr 18, 2022
Ansible Inventory Plugin, created to get hosts from HTTP API.

ansible-ws-inventory-plugin Ansible Inventory Plugin, created to get hosts from HTTP API. Features: Database compatible with MongoDB and Filesystem (J

Carlos Neto 0 Feb 05, 2022
Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application.

Flask-Bcrypt Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application. Due to the recent increased prevelance of

Max Countryman 310 Dec 14, 2022
MQTT FastAPI Wrapper With Python

mqtt-fastapi-wrapper Quick start Create mosquitto.conf with the following content: ➜ /tmp cat mosquitto.conf persistence false allow_anonymous true

Vitalii Kulanov 3 May 09, 2022
Simple notes app backend using Python's FastAPI framework.

my-notes-app Simple notes app backend using Python's FastAPI framework. Route "/": User login (GET): return 200, list of all of their notes; User sign

José Gabriel Mourão Bezerra 2 Sep 17, 2022
Cube-CRUD is a simple example of a REST API CRUD in a context of rubik's cube review service.

Cube-CRUD is a simple example of a REST API CRUD in a context of rubik's cube review service. It uses Sqlalchemy ORM to manage the connection and database operations.

Sebastian Andrade 1 Dec 11, 2021
FastAPI Socket.io with first-class documentation using AsyncAPI

fastapi-sio Socket.io FastAPI integration library with first-class documentation using AsyncAPI The usage of the library is very familiar to the exper

Marián Hlaváč 9 Jan 02, 2023
Docker Sample Project - FastAPI + NGINX

Docker Sample Project - FastAPI + NGINX Run FastAPI and Nginx using Docker container Installation Make sure Docker is installed on your local machine

1 Feb 11, 2022
Mixer -- Is a fixtures replacement. Supported Django, Flask, SqlAlchemy and custom python objects.

The Mixer is a helper to generate instances of Django or SQLAlchemy models. It's useful for testing and fixture replacement. Fast and convenient test-

Kirill Klenov 871 Dec 25, 2022
A Python framework to build Slack apps in a flash with the latest platform features.

Bolt for Python A Python framework to build Slack apps in a flash with the latest platform features. Read the getting started guide and look at our co

SlackAPI 684 Jan 09, 2023
Flood Detection with Google Earth Engine

ee-fastapi: Flood Detection System A ee-fastapi is a simple FastAPI web application for performing flood detection using Google Earth Engine in the ba

Cesar Aybar 69 Jan 06, 2023
A basic JSON-RPC implementation for your Flask-powered sites

Flask JSON-RPC A basic JSON-RPC implementation for your Flask-powered sites. Some reasons you might want to use: Simple, powerful, flexible and python

Cenobit Technologies 273 Dec 01, 2022
Generate modern Python clients from OpenAPI

openapi-python-client Generate modern Python clients from OpenAPI 3.x documents. This generator does not support OpenAPI 2.x FKA Swagger. If you need

Triax Technologies 558 Jan 07, 2023
Prometheus exporter for metrics from the MyAudi API

Prometheus Audi Exporter This Prometheus exporter exports metrics that it fetches from the MyAudi API. Usage Checkout submodules Install dependencies

Dieter Maes 7 Dec 19, 2022
FastAPI with async for generating QR codes and bolt11 for Lightning Addresses

sendsats An API for getting QR codes and Bolt11 Invoices from Lightning Addresses. Share anywhere; as a link for tips on a twitter profile, or via mes

Bitkarrot 12 Jan 07, 2023
Simple example of FastAPI + Celery + Triton for benchmarking

You can see the previous work from: https://github.com/Curt-Park/producer-consumer-fastapi-celery https://github.com/Curt-Park/triton-inference-server

Jinwoo Park (Curt) 37 Dec 29, 2022