Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei Fronius Wechselrichter mit Speicher - wie Tagesproduktion ermitteln?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Hi
    sie sonne kommt raus - und ich hab festgestellt das bei meinem Gen24 die A60 & A61 auf 0 bleiben :-(
    Der rest scheint zu funktionieren - bis auf >A60 - da bleibt alles bei 0.
    Vermutlich hat ein Firmwareupdate dazu geführt. Wie schaut das bei euch aus?

    Gruß
    Thorsten

    PS: hier die ausgabe von 192.168.0.51/components/readable - firmware ist 1.35.8-1​​

    Code:
    {
        "Body" :
        {
            "Data" :
            {
                "1" :
                {
                    "attributes" :
                    {
                        ".simple-version-field" : "IG24;;;",
                        "CTRL.rev-hw" : "4,071,452|0",
                        "CTRL.rev-sw" : "1.0.1-1",
                        "PS.rev-hw" : "4,071,594|2;4,071,779|1",
                        "PS.rev-sw" : "1.3.1-27430",
                        "PS2.rev-hw" : "4,071,594|2;4,071,779|1",
                        "PS2.rev-sw" : "3.2.2-20168",
                        "[ENABLE]" : "true",
                        "[VISIBLE]" : "true",
                        "createTS" : "1743268805",
                        "deviceTreeInfo" : "{\"if\":\"CAN\",\"inverter\":{\"uid\":\"16777215\"},\"inverter.attr.0\":\"\",\"inverter.attr.1\":\"4,210,145\",\"modules\":{\"CTRL\":{\"rev-hw\":\"4,071,452|0\",\"rev-sw\":\"1.0.1-1\",\"uid\":\"16777215\"},\"PS\":{\"rev-hw\":\"4,071,594|2;4,071,779|1\",\"rev-sw\":\"1.3.1-27430\"},\"PS2\":{\"rev-hw\":\"4,071,594|2;4,071,779|1\",\"rev-sw\":\"3.2.2-20168\"}},\"name\":\"Pilot\",\"rev\":\"\"}\n",
                        "devicetype" : "0",
                        "if" : "CAN",
                        "main" : "CTRL",
                        "manufacturer" : "Fronius",
                        "model" : "Fronius Gen24",
                        "nodetype" : "97",
                        "note" : "dataexchange",
                        "pmc.0" : "31371000816870046|4,071,452|0.5E_A|PILOT|R|",
                        "pmc.1" : "33081001048220298|4,071,779|0.2A_B|ROX-L|R|",
                        "pmc.2" : "33101005239700039|4,071,594|0.6F__|3PN10K|R|",
                        "uid" : "16777215"
                    },
                    "channels" :
                    {
                        "<1090584584>" : 7269062971.0,
                        "<1107361800>" : 7085761396.0,
                        "<1124139016>" : 7058448431.0,
                        "<1140916232>" : 14302436.0,
                        "<1157693448>" : 51349012.0,
                        "<1174470664>" : 39148755.0,
                        "<1208025096>" : 1516.0,
                        "<1224802312>" : 0.0,
                        "<1241579528>" : 0.0,
                        "<1258356744>" : 0.0,
                        "<1275133960>" : 0.0,
                        "<1291911176>" : 0.0,
                        "<1308688392>" : 0.0,
                        "<1325465608>" : 0.0,
                        "<1342242824>" : 0.0,
                        "<1359020040>" : 8454.0,
                        "<1375797256>" : 0.0,
                        "<1392574472>" : 0.0,
                        "<1409351876>" : 70548444.0,
                        "<2197881028>" : 5.0,
                        "<2214658244>" : 1.0,
                        "<2231435460>" : 5.0,
                        "<2231566532>" : 187.0,
                        "<2315517954>" : 1.0,
                        "<2349006852>" : 1759.0,
                        "<2365784260>" : 626.583984375,
                        "<2382561476>" : 460.4266357421875,
                        "<2399338692>" : 973.49993896484375,
                        "<2500001988>" : 12.501175880432129,
                        "<2516779204>" : 22.0,
                        "<2533556420>" : 14.482175827026367,
                        "<2550333636>" : 0.0,
                        "<2567110852>" : 58.545654296875,
                        "<2600534212>" : 427.3787841796875,
                        "<2701197508>" : 0.0,
                        "<2717974724>" : 120.00000762939453,
                        "<2734751940>" : 240.00001525878906,
                        "<3171221700>" : 1.7183718681335449,
                        "<3187998916>" : 32.862194061279297,
                        "<604242116>" : 53.04071044921875,
                        "<939589828>" : 96278.0,
                        "<973144260>" : 70547601.0,
                        "ACBRIDGE_CURRENT_ACTIVE_MEAN_01_F32" : 13.789987564086914,
                        "ACBRIDGE_CURRENT_ACTIVE_MEAN_02_F32" : 13.788112640380859,
                        "ACBRIDGE_CURRENT_ACTIVE_MEAN_03_F32" : 13.790463447570801,
                        "ACBRIDGE_ENERGYACTIVE_ACTIVECONSUMED_SUM_01_U64" : 515455512.0,
                        "ACBRIDGE_ENERGYACTIVE_ACTIVECONSUMED_SUM_02_U64" : 520637023.0,
                        "ACBRIDGE_ENERGYACTIVE_ACTIVECONSUMED_SUM_03_U64" : 518195277.0,
                        "ACBRIDGE_ENERGYACTIVE_PRODUCED_SUM_01_U64" : 37432769158.0,
                        "ACBRIDGE_ENERGYACTIVE_PRODUCED_SUM_02_U64" : 37760778311.0,
                        "ACBRIDGE_ENERGYACTIVE_PRODUCED_SUM_03_U64" : 37608482027.0,
                        "ACBRIDGE_FREQUENCY_MEAN_F32" : 50.020145416259766,
                        "ACBRIDGE_POWERACTIVE_MEAN_01_F32" : 3062.98828125,
                        "ACBRIDGE_POWERACTIVE_MEAN_02_F32" : 3086.828369140625,
                        "ACBRIDGE_POWERACTIVE_MEAN_03_F32" : 3076.751953125,
                        "ACBRIDGE_POWERACTIVE_SUM_MEAN_F32" : 9226.568359375,
                        "ACBRIDGE_POWERAPPARENT_MEAN_01_F32" : 3355.145751953125,
                        "ACBRIDGE_POWERAPPARENT_MEAN_02_F32" : 3380.531005859375,
                        "ACBRIDGE_POWERAPPARENT_MEAN_03_F32" : 3368.024169921875,
                        "ACBRIDGE_POWERAPPARENT_SUM_MEAN_F32" : 10103.6259765625,
                        "ACBRIDGE_POWERREACTIVE_MEAN_01_F32" : -1369.3902587890625,
                        "ACBRIDGE_POWERREACTIVE_MEAN_02_F32" : -1378.096435546875,
                        "ACBRIDGE_POWERREACTIVE_MEAN_03_F32" : -1369.9993896484375,
                        "ACBRIDGE_POWERREACTIVE_SUM_MEAN_F32" : -4117.486328125,
                        "ACBRIDGE_TIME_BACKUPMODE_UPTIME_SUM_F32" : 843.0,
                        "ACBRIDGE_VOLTAGE_MEAN_01_F32" : 243.30540466308594,
                        "ACBRIDGE_VOLTAGE_MEAN_02_F32" : 245.17939758300781,
                        "ACBRIDGE_VOLTAGE_MEAN_03_F32" : 244.2310791015625,
                        "ACBRIDGE_VOLTAGE_MEAN_12_F32" : 422.96035766601562,
                        "ACBRIDGE_VOLTAGE_MEAN_23_F32" : 423.72305297851562,
                        "ACBRIDGE_VOLTAGE_MEAN_31_F32" : 422.42129516601562,
                        "BAT_CURRENT_MEAN_F32" : -0.84034353494644165,
                        "BAT_ENERGYACTIVE_ACTIVECHARGE_SUM_01_U64" : 25600026939.0,
                        "BAT_ENERGYACTIVE_ACTIVEDISCHARGE_SUM_01_U64" : 24119639305.0,
                        "BAT_MODE_ENFORCED_U16" : 0.0,
                        "BAT_POWERACTIVE_MEAN_F32" : -359.14498901367188,
                        "BAT_VOLTAGE_OUTER_MEAN_01_F32" : 427.23434448242188,
                        "COMPONENTS_MODE_ENABLE_U16" : 1.0,
                        "COMPONENTS_MODE_VISIBLE_U16" : 1.0,
                        "COMPONENTS_TIME_STAMP_U64" : 1743680514.0,
                        "DCLINK_VOLTAGE_MEAN_F32" : 656.50970458984375,
                        "DEVICE_MODE_OPERATING_REFERRAL_U16" : 1.0,
                        "DEVICE_TEMPERATURE_AMBIENTEMEAN_F32" : 49.41522216796875,
                        "DEVICE_TIME_UPTIME_SUM_F32" : 85162818.0,
                        "FANCONTROL_PERCENT_01_F32" : 41.25,
                        "FANCONTROL_PERCENT_02_F32" : 84.1483154296875,
                        "FEEDINPOINT_FREQUENCY_MEAN_F32" : 50.020145416259766,
                        "FEEDINPOINT_MODE_GRID_VALIDITY_U8" : 1.0,
                        "FEEDINPOINT_VOLTAGE_MEAN_01_F32" : 243.50457763671875,
                        "FEEDINPOINT_VOLTAGE_MEAN_02_F32" : 245.10725402832031,
                        "FEEDINPOINT_VOLTAGE_MEAN_03_F32" : 244.4093017578125,
                        "FEEDINPOINT_VOLTAGE_MEAN_12_F32" : 422.96917724609375,
                        "FEEDINPOINT_VOLTAGE_MEAN_23_F32" : 423.83740234375,
                        "FEEDINPOINT_VOLTAGE_MEAN_31_F32" : 422.82327270507812,
                        "ISO_RESISTANCE_MEAN_F32" : 4858337.0,
                        "LEGACY_MODE_BACKUP_OPERATION_SYNC_DM_SYSTEMS_U16" : 1.0,
                        "MODULE_TEMPERATURE_MEAN_01_F32" : 55.502105712890625,
                        "MODULE_TEMPERATURE_MEAN_03_F32" : 42.005889892578125,
                        "MODULE_TEMPERATURE_MEAN_04_F32" : 35.40185546875,
                        "PV_CURRENT_MEAN_01_F32" : 9.2418403625488281,
                        "PV_CURRENT_MEAN_02_F32" : 10.767868041992188,
                        "PV_ENERGYACTIVE_ACTIVE_SUM_01_U64" : 57971005057.0,
                        "PV_ENERGYACTIVE_ACTIVE_SUM_02_U64" : 59435698085.0,
                        "PV_POWERACTIVE_MEAN_01_F32" : 4721.326171875,
                        "PV_POWERACTIVE_MEAN_02_F32" : 5157.64404296875,
                        "PV_VOLTAGE_MEAN_01_F32" : 510.86428833007812,
                        "PV_VOLTAGE_MEAN_02_F32" : 478.98468017578125,
                        "RELAY_MODE_ACTIVATE_BACKUP_INTERLOCK_OPT_U16" : 0.0,
                        "RELAY_MODE_ACTIVATE_BACKUP_INTERLOCK_U16" : 0.0
                    }
                },
                "16252928" :
                {
                    "attributes" :
                    {
                        ".simple-version-field" : "FSM3;;122;",
                        "[ENABLE]" : "true",
                        "[VISIBLE]" : "true",
                        "addr" : "1",
                        "category" : "",
                        "connection" : "{\"id\":\"rtu-meter_/dev/rtu1\",\"name\":\"modbus-rtu-hub\",\"protocol\":\"ModbusRTU\",\"rtu-interface\":\"/dev/rtu1\",\"socket\":\"/tmp/modbus-rtu-hub.rtu1.uds\"}\n",
                        "createTS" : "1743268830",
                        "device_id" : "Fronius_SmartMeter_88f315e89a3c",
                        "id" : "rtu-meter_/dev/rtu1@1",
                        "if" : "modbus-rtu-hub;/dev/rtu1",
                        "label" : "<primary>",
                        "manufacturer" : "Fronius",
                        "measurement_interval" : "1200",
                        "meter-location" : "0",
                        "model" : "Smart Meter 63A",
                        "phaseCnt" : "3",
                        "polling_interval" : "1000",
                        "serial" : "20220894",
                        "this.rev-hw" : "1",
                        "this.rev-sw" : "2.9"
                    },
                    "channels" :
                    {
                        "COMPONENTS_MODE_ENABLE_U16" : 1.0,
                        "COMPONENTS_MODE_VISIBLE_U16" : 1.0,
                        "COMPONENTS_TIME_STAMP_U64" : 1743680514.0,
                        "SMARTMETER_CURRENT_01_F64" : 18.609999999999999,
                        "SMARTMETER_CURRENT_02_F64" : 18.962,
                        "SMARTMETER_CURRENT_03_F64" : 19.042000000000002,
                        "SMARTMETER_ENERGYACTIVE_ABSOLUT_MINUS_F64" : 35707730.0,
                        "SMARTMETER_ENERGYACTIVE_ABSOLUT_PLUS_F64" : 6239804.0,
                        "SMARTMETER_ENERGYACTIVE_CONSUMED_SUM_F64" : 6239804.0,
                        "SMARTMETER_ENERGYACTIVE_PRODUCED_SUM_F64" : 35707730.0,
                        "SMARTMETER_ENERGYREACTIVE_CONSUMED_SUM_F64" : 56736340.0,
                        "SMARTMETER_ENERGYREACTIVE_PRODUCED_SUM_F64" : 116416130.0,
                        "SMARTMETER_FACTOR_POWER_01_F64" : 0.96999999999999997,
                        "SMARTMETER_FACTOR_POWER_02_F64" : 0.95999999999999996,
                        "SMARTMETER_FACTOR_POWER_03_F64" : 0.94999999999999996,
                        "SMARTMETER_FACTOR_POWER_SUM_F64" : 0.95999999999999996,
                        "SMARTMETER_FREQUENCY_MEAN_F64" : 50.0,
                        "SMARTMETER_POWERACTIVE_01_F64" : -4404.9300000000003,
                        "SMARTMETER_POWERACTIVE_02_F64" : -4480.1599999999999,
                        "SMARTMETER_POWERACTIVE_03_F64" : -4459.4899999999998,
                        "SMARTMETER_POWERACTIVE_MEAN_01_F64" : -4401.4404333333396,
                        "SMARTMETER_POWERACTIVE_MEAN_02_F64" : -4498.3152666666711,
                        "SMARTMETER_POWERACTIVE_MEAN_03_F64" : -4422.1271666666689,
                        "SMARTMETER_POWERACTIVE_MEAN_SUM_F64" : -13344.58,
                        "SMARTMETER_POWERAPPARENT_01_F64" : 4538.9790000000003,
                        "SMARTMETER_POWERAPPARENT_02_F64" : 4653.2748000000001,
                        "SMARTMETER_POWERAPPARENT_03_F64" : 4667.1941999999999,
                        "SMARTMETER_POWERAPPARENT_MEAN_01_F64" : 4536.0174056666692,
                        "SMARTMETER_POWERAPPARENT_MEAN_02_F64" : 4672.1719886666688,
                        "SMARTMETER_POWERAPPARENT_MEAN_03_F64" : 4627.7082753333316,
                        "SMARTMETER_POWERAPPARENT_MEAN_SUM_F64" : 13842.0,
                        "SMARTMETER_POWERREACTIVE_01_F64" : 1070.9200000000001,
                        "SMARTMETER_POWERREACTIVE_02_F64" : 1246.3900000000001,
                        "SMARTMETER_POWERREACTIVE_03_F64" : 1360.6900000000001,
                        "SMARTMETER_POWERREACTIVE_MEAN_SUM_F64" : 3678.0,
                        "SMARTMETER_VALUE_LOCATION_U16" : 0.0,
                        "SMARTMETER_VOLTAGE_01_F64" : 243.90000000000001,
                        "SMARTMETER_VOLTAGE_02_F64" : 245.40000000000001,
                        "SMARTMETER_VOLTAGE_03_F64" : 245.09999999999999,
                        "SMARTMETER_VOLTAGE_MEAN_01_F64" : 243.16766666666643,
                        "SMARTMETER_VOLTAGE_MEAN_02_F64" : 244.76133333333351,
                        "SMARTMETER_VOLTAGE_MEAN_03_F64" : 245.0246666666666,
                        "SMARTMETER_VOLTAGE_MEAN_12_F64" : 423.69999999999999,
                        "SMARTMETER_VOLTAGE_MEAN_23_F64" : 424.80000000000001,
                        "SMARTMETER_VOLTAGE_MEAN_31_F64" : 423.5
                    }
                },
                "16253176" :
                {
                    "attributes" :
                    {
                        ".simple-version-field" : "FSM3;;122;",
                        "[ENABLE]" : "true",
                        "[VISIBLE]" : "true",
                        "addr" : "1",
                        "category" : "",
                        "connection" : "{\"id\":\"rtu-meter_/dev/rtu1\",\"name\":\"modbus-rtu-hub\",\"protocol\":\"ModbusRTU\",\"rtu-interface\":\"/dev/rtu1\",\"socket\":\"/tmp/modbus-rtu-hub.rtu1.uds\"}\n",
                        "createTS" : "1743268830",
                        "device_id" : "Fronius_SmartMeter_88f315e89a3c",
                        "id" : "rtu-meter_/dev/rtu1@1",
                        "if" : "modbus-rtu-hub;/dev/rtu1",
                        "label" : "<primary>",
                        "manufacturer" : "Fronius",
                        "measurement_interval" : "1200",
                        "meter-location" : "0",
                        "model" : "Smart Meter 63A",
                        "phaseCnt" : "3",
                        "polling_interval" : "1000",
                        "serial" : "20220894",
                        "this.rev-hw" : "1",
                        "this.rev-sw" : "2.9"
                    },
                    "channels" :
                    {
                        "COMPONENTS_MODE_ENABLE_U16" : 1.0,
                        "COMPONENTS_MODE_VISIBLE_U16" : 1.0,
                        "COMPONENTS_TIME_STAMP_U64" : 1743680514.0,
                        "SMARTMETER_CURRENT_01_F64" : 18.609999999999999,
                        "SMARTMETER_CURRENT_02_F64" : 18.962,
                        "SMARTMETER_CURRENT_03_F64" : 19.042000000000002,
                        "SMARTMETER_ENERGYACTIVE_ABSOLUT_MINUS_F64" : 35707730.0,
                        "SMARTMETER_ENERGYACTIVE_ABSOLUT_PLUS_F64" : 6239804.0,
                        "SMARTMETER_ENERGYACTIVE_CONSUMED_SUM_F64" : 6239804.0,
                        "SMARTMETER_ENERGYACTIVE_PRODUCED_SUM_F64" : 35707730.0,
                        "SMARTMETER_ENERGYREACTIVE_CONSUMED_SUM_F64" : 56736340.0,
                        "SMARTMETER_ENERGYREACTIVE_PRODUCED_SUM_F64" : 116416130.0,
                        "SMARTMETER_FACTOR_POWER_01_F64" : 0.96999999999999997,
                        "SMARTMETER_FACTOR_POWER_02_F64" : 0.95999999999999996,
                        "SMARTMETER_FACTOR_POWER_03_F64" : 0.94999999999999996,
                        "SMARTMETER_FACTOR_POWER_SUM_F64" : 0.95999999999999996,
                        "SMARTMETER_FREQUENCY_MEAN_F64" : 50.0,
                        "SMARTMETER_POWERACTIVE_01_F64" : -4404.9300000000003,
                        "SMARTMETER_POWERACTIVE_02_F64" : -4480.1599999999999,
                        "SMARTMETER_POWERACTIVE_03_F64" : -4459.4899999999998,
                        "SMARTMETER_POWERACTIVE_MEAN_01_F64" : -4401.4404333333396,
                        "SMARTMETER_POWERACTIVE_MEAN_02_F64" : -4498.3152666666711,
                        "SMARTMETER_POWERACTIVE_MEAN_03_F64" : -4422.1271666666689,
                        "SMARTMETER_POWERACTIVE_MEAN_SUM_F64" : -13344.58,
                        "SMARTMETER_POWERAPPARENT_01_F64" : 4538.9790000000003,
                        "SMARTMETER_POWERAPPARENT_02_F64" : 4653.2748000000001,
                        "SMARTMETER_POWERAPPARENT_03_F64" : 4667.1941999999999,
                        "SMARTMETER_POWERAPPARENT_MEAN_01_F64" : 4536.0174056666692,
                        "SMARTMETER_POWERAPPARENT_MEAN_02_F64" : 4672.1719886666688,
                        "SMARTMETER_POWERAPPARENT_MEAN_03_F64" : 4627.7082753333316,
                        "SMARTMETER_POWERAPPARENT_MEAN_SUM_F64" : 13842.0,
                        "SMARTMETER_POWERREACTIVE_01_F64" : 1070.9200000000001,
                        "SMARTMETER_POWERREACTIVE_02_F64" : 1246.3900000000001,
                        "SMARTMETER_POWERREACTIVE_03_F64" : 1360.6900000000001,
                        "SMARTMETER_POWERREACTIVE_MEAN_SUM_F64" : 3678.0,
                        "SMARTMETER_VALUE_LOCATION_U16" : 0.0,
                        "SMARTMETER_VOLTAGE_01_F64" : 243.90000000000001,
                        "SMARTMETER_VOLTAGE_02_F64" : 245.40000000000001,
                        "SMARTMETER_VOLTAGE_03_F64" : 245.09999999999999,
                        "SMARTMETER_VOLTAGE_MEAN_01_F64" : 243.16766666666643,
                        "SMARTMETER_VOLTAGE_MEAN_02_F64" : 244.76133333333351,
                        "SMARTMETER_VOLTAGE_MEAN_03_F64" : 245.0246666666666,
                        "SMARTMETER_VOLTAGE_MEAN_12_F64" : 423.69999999999999,
                        "SMARTMETER_VOLTAGE_MEAN_23_F64" : 424.80000000000001,
                        "SMARTMETER_VOLTAGE_MEAN_31_F64" : 423.5
                    }
                },
                "16580611" :
                {
                    "attributes" :
                    {
                        ".simple-version-field" : "BYD2;10000;53490001;3.19",
                        "[ENABLE]" : "true",
                        "[VISIBLE]" : "true",
                        "addr" : "21",
                        "connection" : "{\"id\":\"rtu-generic-storage_/dev/rtu0\",\"name\":\"modbus-rtu-hub\",\"protocol\":\"ModbusRTU\",\"rtu-interface\":\"/dev/rtu0\",\"socket\":\"/tmp/modbus-rtu-hub.rtu0.uds\"}\n",
                        "createTS" : "1743268828",
                        "group-id" : "generic-storage-group",
                        "has_internal_dcdc" : "false",
                        "hw_version" : "5.0",
                        "id" : "rtu-generic-storage_/dev/rtu0@21",
                        "if" : "modbus-rtu-hub;/dev/rtu0",
                        "internal_dcdc_is_configurable" : "false",
                        "manufacturer" : "BYD",
                        "max_udc" : "467.2",
                        "min_udc" : "320",
                        "model" : "BYD Battery-Box Premium HV",
                        "nameplate" : "{\"calMode\":0,\"calPowerChargeMax\":0,\"calPowerChargeMin\":0,\"calPowerDischargeMax\":0,\"calPowerDischargeMin\":0,\"calWaitDischargeT\":0,\"capacity_wh\":10240,\"enable_iso_measurement\":false,\"immediateChargeRequestStop\":0,\"is_generic_storage\":true,\"manufacturer\":\"BYD\",\"max_power_charge_w\":10240,\"max_power_discharge_w\":10240,\"max_soc\":100,\"max_udc\":467,\"min_soc\":5,\"min_udc\":320,\"model\":\"BYD Battery-Box Premium HV\",\"module_number\":1,\"numberModulesPerStack\":0,\"numberParallelStacks\":0,\"peak_power_charge_sec\":10,\"peak_power_charge_w\":13312,\"peak_power_discharge_sec\":10,\"peak_power_discharge_w\":13312,\"protocol_version_major\":1,\"protocol_version_minor\":0,\"serial\":\"P030T020Z2204062430     \",\"tCellMax\":0,\"tCellMin\":0,\"targetSoCServiceMode\":0}\n",
                        "protocol_version_major" : "1",
                        "protocol_version_minor" : "0",
                        "serial" : "P030T020Z2204062430     ",
                        "storage_interface_id" : "0x53490001",
                        "sw_version" : "3.19"
                    },
                    "channels" :
                    {
                        "BAT_CURRENT_DC_F64" : 0.89555710630379159,
                        "BAT_CURRENT_DC_INTERNAL_F64" : 0.89848308051341885,
                        "BAT_ENERGYACTIVE_ESTIMATION_MAX_CAPACITY_F64" : 27698400.0,
                        "BAT_ENERGYACTIVE_LIFETIME_CHARGED_F64" : 22515069600.0,
                        "BAT_ENERGYACTIVE_LIFETIME_DISCHARGED_F64" : 18689410800.0,
                        "BAT_ENERGYACTIVE_MAX_CAPACITY_F64" : 35020800.0,
                        "BAT_MODE_CELL_STATE_U16" : 3.0,
                        "BAT_MODE_HYBRID_OPERATING_STATE_U16" : 1.0,
                        "BAT_MODE_LAST_FAULT_PARAMETER_U16" : 0.0,
                        "BAT_MODE_STATE_U16" : 0.0,
                        "BAT_MODE_U16" : 2.0,
                        "BAT_MODE_WAKE_ENABLE_STATUS_U16" : 1.0,
                        "BAT_TEMPERATURE_CELL_F64" : 25.5,
                        "BAT_TEMPERATURE_CELL_MAX_F64" : 27.0,
                        "BAT_TEMPERATURE_CELL_MIN_F64" : 24.0,
                        "BAT_VALUE_STATE_OF_CHARGE_RELATIVE_U16" : 79.099999999999994,
                        "BAT_VALUE_STATE_OF_HEALTH_RELATIVE_U16" : 95.0,
                        "BAT_VALUE_WARNING_CODE_U16" : 46.0,
                        "BAT_VOLTAGE_DC_INTERNAL_F64" : 428.5,
                        "COMPONENTS_MODE_ENABLE_U16" : 1.0,
                        "COMPONENTS_MODE_VISIBLE_U16" : 1.0,
                        "COMPONENTS_TIME_STAMP_U64" : 1743680514.0,
                        "DCLINK_POWERACTIVE_LIMIT_DISCHARGE_F64" : 10969.0,
                        "DCLINK_POWERACTIVE_MAX_F32" : 11046.0,
                        "DCLINK_VOLTAGE_MEAN_F32" : 429.89999999999998,
                        "DEVICE_TEMPERATURE_AMBIENTEMEAN_F32" : 33.0
                    }
                },
                "16711683" :
                {
                    "attributes" :
                    {
                        ".simple-version-field" : "FSM3;;122;",
                        "[ENABLE]" : "true",
                        "[VISIBLE]" : "true",
                        "addr" : "1",
                        "category" : "",
                        "connection" : "{\"id\":\"rtu-meter_/dev/rtu1\",\"name\":\"modbus-rtu-hub\",\"protocol\":\"ModbusRTU\",\"rtu-interface\":\"/dev/rtu1\",\"socket\":\"/tmp/modbus-rtu-hub.rtu1.uds\"}\n",
                        "createTS" : "1743268830",
                        "device_id" : "Fronius_SmartMeter_88f315e89a3c",
                        "id" : "rtu-meter_/dev/rtu1@1",
                        "if" : "modbus-rtu-hub;/dev/rtu1",
                        "label" : "<primary>",
                        "manufacturer" : "Fronius",
                        "measurement_interval" : "1200",
                        "meter-location" : "0",
                        "model" : "Smart Meter 63A",
                        "phaseCnt" : "3",
                        "polling_interval" : "1000",
                        "serial" : "20220894",
                        "this.rev-hw" : "1",
                        "this.rev-sw" : "2.9"
                    },
                    "channels" :
                    {
                        "COMPONENTS_MODE_ENABLE_U16" : 1.0,
                        "COMPONENTS_MODE_VISIBLE_U16" : 1.0,
                        "COMPONENTS_TIME_STAMP_U64" : 1743680514.0,
                        "SMARTMETER_CURRENT_01_F64" : 18.609999999999999,
                        "SMARTMETER_CURRENT_02_F64" : 18.962,
                        "SMARTMETER_CURRENT_03_F64" : 19.042000000000002,
                        "SMARTMETER_ENERGYACTIVE_ABSOLUT_MINUS_F64" : 35707730.0,
                        "SMARTMETER_ENERGYACTIVE_ABSOLUT_PLUS_F64" : 6239804.0,
                        "SMARTMETER_ENERGYACTIVE_CONSUMED_SUM_F64" : 6239804.0,
                        "SMARTMETER_ENERGYACTIVE_PRODUCED_SUM_F64" : 35707730.0,
                        "SMARTMETER_ENERGYREACTIVE_CONSUMED_SUM_F64" : 56736340.0,
                        "SMARTMETER_ENERGYREACTIVE_PRODUCED_SUM_F64" : 116416130.0,
                        "SMARTMETER_FACTOR_POWER_01_F64" : 0.96999999999999997,
                        "SMARTMETER_FACTOR_POWER_02_F64" : 0.95999999999999996,
                        "SMARTMETER_FACTOR_POWER_03_F64" : 0.94999999999999996,
                        "SMARTMETER_FACTOR_POWER_SUM_F64" : 0.95999999999999996,
                        "SMARTMETER_FREQUENCY_MEAN_F64" : 50.0,
                        "SMARTMETER_POWERACTIVE_01_F64" : -4404.9300000000003,
                        "SMARTMETER_POWERACTIVE_02_F64" : -4480.1599999999999,
                        "SMARTMETER_POWERACTIVE_03_F64" : -4459.4899999999998,
                        "SMARTMETER_POWERACTIVE_MEAN_01_F64" : -4401.4404333333396,
                        "SMARTMETER_POWERACTIVE_MEAN_02_F64" : -4498.3152666666711,
                        "SMARTMETER_POWERACTIVE_MEAN_03_F64" : -4422.1271666666689,
                        "SMARTMETER_POWERACTIVE_MEAN_SUM_F64" : -13344.58,
                        "SMARTMETER_POWERAPPARENT_01_F64" : 4538.9790000000003,
                        "SMARTMETER_POWERAPPARENT_02_F64" : 4653.2748000000001,
                        "SMARTMETER_POWERAPPARENT_03_F64" : 4667.1941999999999,
                        "SMARTMETER_POWERAPPARENT_MEAN_01_F64" : 4536.0174056666692,
                        "SMARTMETER_POWERAPPARENT_MEAN_02_F64" : 4672.1719886666688,
                        "SMARTMETER_POWERAPPARENT_MEAN_03_F64" : 4627.7082753333316,
                        "SMARTMETER_POWERAPPARENT_MEAN_SUM_F64" : 13842.0,
                        "SMARTMETER_POWERREACTIVE_01_F64" : 1070.9200000000001,
                        "SMARTMETER_POWERREACTIVE_02_F64" : 1246.3900000000001,
                        "SMARTMETER_POWERREACTIVE_03_F64" : 1360.6900000000001,
                        "SMARTMETER_POWERREACTIVE_MEAN_SUM_F64" : 3678.0,
                        "SMARTMETER_VALUE_LOCATION_U16" : 0.0,
                        "SMARTMETER_VOLTAGE_01_F64" : 243.90000000000001,
                        "SMARTMETER_VOLTAGE_02_F64" : 245.40000000000001,
                        "SMARTMETER_VOLTAGE_03_F64" : 245.09999999999999,
                        "SMARTMETER_VOLTAGE_MEAN_01_F64" : 243.16766666666643,
                        "SMARTMETER_VOLTAGE_MEAN_02_F64" : 244.76133333333351,
                        "SMARTMETER_VOLTAGE_MEAN_03_F64" : 245.0246666666666,
                        "SMARTMETER_VOLTAGE_MEAN_12_F64" : 423.69999999999999,
                        "SMARTMETER_VOLTAGE_MEAN_23_F64" : 424.80000000000001,
                        "SMARTMETER_VOLTAGE_MEAN_31_F64" : 423.5
                    }
                }
            }
        },
        "Head" :
        {
            "Note" : "this internal API may be changed any time",
            "RequestArguments" :
            {
                "method" : "GET",
                "resource" : "readable"
            },
            "Status" :
            {
                "Code" : 0,
                "ErrorDetail" :
                {
                    "Nodes" : []
                },
                "Reason" : "",
                "UserMessage" : ""
            },
            "Timestamp" : "2025-04-03T11:41:55+00:00"
        }
    }​
    Zuletzt geändert von ThorstenGehrig; 03.04.2025, 12:46.

    Kommentar


      #47
      Update: den Baustein habe ich mir angepasst auf die aktuelle Firmware - passt wieder alles.
      twi127: kann ich dir das Update schicken?

      Gruß
      Thorsten

      Kommentar


        #48
        ThorstenGehrig
        Gerne. Ich schicke dir meine E-Mail via PN. Lade dann ein Update hoch.
        Danke und Gruß

        Thomas

        Kommentar


          #49
          Hallo, also bei mir bleiben A60-A74 ohne Werte. Das einzigste was ausgelesen wird sind A64 und A65

          Kommentar


            #50
            Zitat von ThorstenGehrig Beitrag anzeigen
            Update: den Baustein habe ich mir angepasst auf die aktuelle Firmware - passt wieder alles.
            twi127: kann ich dir das Update schicken?

            Gruß
            Thorsten
            Was hast du da genau geändert bzw. angepasst?

            Kommentar


              #51
              Hi
              twi127 - kannst du den aktualisierten Baustein zur verfügung stellen? Ich denke das ist sinnvoller...

              Gruß
              Thorsten

              Kommentar


                #52
                Guten Morgen,
                Update kommt demnächst. ThorstenGehrig: Kannst du mir dein Update bitte nochmal schicken? Habe dir eine E-Mail geschickt.
                Viele Grüße
                Thomas

                Kommentar


                  #53
                  Moin ThorstenGehrig twi127
                  ich habe die Änderung von Thorsten bei mir in den LBS gepackt und Projekt aktiviert.
                  Aber die Ausgänge A60-A74 geben nur "0" aus, bis auf A64+A65 dort werden die richtigen Werte ausgegeben.
                  Habe einen Fronius Symo Gen24 8.0.

                  Kommentar


                    #54
                    Welche Version vom Fronius hast du denn?
                    Bei mir läuft der Baustein - Gen24 1.0 (müsste ROW 1.35.8-1 sein)
                    Ich hab auch noch einen Symo 5.0 (3.32.1-2) - da kommt bei A55-74 auch nichts... ist aber "normal" - die A55-A74 sind nur für Gen24 :-)
                    Hast du mal geschaut ob das neueste Update drauf ist?

                    Was kommt denn bei dir raus wenn man http://<ip-vom-GEN24>/components/readable aufruft?

                    Gruß
                    Thorsten

                    Nachtrag: Das sind meine versionen (laut dem Web-Aufruf)
                    ".simple-version-field" : "IG24;;;",
                    "CTRL.rev-hw" : "4,071,452|0",
                    "CTRL.rev-sw" : "1.0.1-1",
                    "PS.rev-hw" : "4,071,594|2;4,071,779|1",
                    "PS.rev-sw" : "1.3.1-27430",
                    "PS2.rev-hw" : "4,071,594|2;4,071,779|1",
                    "PS2.rev-sw" : "3.2.2-20168",
                    Ist ein bisschen "komisch" das diese Versionsnummern nicht matchen mit dem was man auf der Konfig-Webseite beim Fronius sieht...​
                    Zuletzt geändert von ThorstenGehrig; 12.04.2025, 12:27.

                    Kommentar


                      #55
                      Also mein Gen24 hat die ROW 1.35.8-1 drauf.
                      Der Webaufruf funktioniert ganz normal. Auch die Zählerstände der beiden Strings werden ausgegeben.

                      ".simple-version-field" : "IG24;;;",
                      "CTRL.rev-hw" : "",
                      "CTRL.rev-sw" : "",
                      "PS.rev-hw" : "4,071,594|3;4,071,779|1",
                      "PS.rev-sw" : "1.3.1-27430",
                      "PS2.rev-hw" : "4,071,594|3;4,071,779|1",
                      "PS2.rev-sw" : "3.2.2-20168",​
                      .......
                      .......
                      "PV_ENERGYACTIVE_ACTIVE_SUM_01_U64" : 23195733910.0,
                      "PV_ENERGYACTIVE_ACTIVE_SUM_02_U64" : 30596150581.0,​

                      Kommentar


                        #56
                        twi127 ThorstenGehrig ich habe jetzt den Fehler gefunden warum die Änderung von Thorsten bei mir nicht funktioniert

                        {
                        "Body" :
                        {
                        "Data" :
                        {
                        "1" : <------ Hier steht bei mir in der API Abfrage "0" (vermutlich Geräte ID????)
                        {
                        "attributes" :
                        {

                        Die Datenquelle "393216" existiert nicht mehr in der API Abfrage habe es so abgeändert und nun kommen die Werte wieder
                        Code:
                        // --- Datenquelle "393216" ---------------------------------------------------------
                        $iAPIdata = "0";​
                        Zuletzt geändert von beauty; 13.04.2025, 17:16.

                        Kommentar


                          #57
                          yep - bei mir steht da eine 1 - ... da müsste ,am die Abfrage umbauen als "0 oder 1" .. oder alles zweimal abfragen ... oder den Wert parametrisierbar machen...
                          hm...

                          Kommentar


                            #58
                            Zitat von beauty Beitrag anzeigen
                            twi127 ThorstenGehrig ich habe jetzt den Fehler gefunden warum die Änderung von Thorsten bei mir nicht funktioniert




                            Die Datenquelle "393216" existiert nicht mehr in der API Abfrage habe es so abgeändert und nun kommen die Werte wieder
                            Code:
                            // --- Datenquelle "393216" ---------------------------------------------------------
                            $iAPIdata = "0";​
                            ThorstenGehrig Ich habe mit Hilfe von Grok-KI eine Lösung gefunden
                            Statt wie oben wird nicht mehr
                            PHP-Code:
                            $iAPIdata "0"
                            ​ abgefragt sondern
                            PHP-Code:
                            $inverterKey "Fronius_Inverter_eca2666917c2"$storageKey "BYD_Storage_1df3092fa0eb"
                            Hab mit Grok einen geänderten Code erstellt der nun wieder Werte an E60+E61 ausgibt. ich werde das noch erweitern so das alle iAPI Werte wieder abgerufen werden.

                            Kommentar


                              #59
                              ThorstenGehrig ich konnte das Problem mit Hilfe der Grok-KI fixen da meine PHP Kenntnisse =0 sind.... und nun werden die Werte wieder vom LBS ausgegeben. Da hat sich die Struktur der iAPI geändert. Kann den Code gerne zur Verfügung stellen.
                              twi127 kannst du dir das dann mal anschauen und evtl. deinen LBS updaten?


                              Code:
                              ###[DEF]###
                              [name = Fronius Wechselrichter API]
                              [e#1 trigger = Baustein Ein=1/Aus=0 #init=1]
                              [e#2 important = IP Wechselrichter]
                              [e#3 important = Abfrage Wechselrichter #init=1]
                              [e#4 important = Abfrage Smartmeter #init=0]
                              [e#5 important = Abfrage Batterie #init=0]
                              [e#6 important = DeviceId Wechselrichter #init=1]
                              [e#7 important = DeviceId Smartmeter #init=1]
                              [e#8 important = DeviceId Batterie #init=0]
                              [e#9 important = Wechselrichter Typ: Symo=0 / GEN24=1 #init=0]
                              [e#10 trigger = Abrufintervall (in s) #init=30]
                              [e#11 optional = GEN24: inoffizielle API Nein=0 / Ja=1 #init=0]
                              [e#15 = Log level #init=1]
                              [a#1 = WR: ErrorCode]
                              [a#2 = WR: LEDColor*]
                              [a#3 = WR: LEDState*]
                              [a#4 = WR: InverterState]
                              [a#5 = WR: Status]
                              [a#6 = WR: Text Fehlercode]
                              [a#7 = WR: Erzeugte Energie Tag, Wh*]
                              [a#8 = WR: Erzeugte Energie Jahr, Wh*]
                              [a#9 = WR: Erzeugte Energie Gesamt, Wh]
                              [a#10 = WR: Spannung DC 1, V]
                              [a#11 = WR: Strom DC 1, A]
                              [a#12 = WR: Spannung DC 2, V**]
                              [a#13 = WR: Strom DC 2, A**]
                              [a#14 = WR: Spannung AC, V]
                              [a#15 = WR: Strom AC, A]
                              [a#16 = WR: Frequenz AC, Hz]
                              [a#17 = WR: Leistung AC, W]
                              [a#19 = WR: Leistung Wechselrichter gesamt, W]
                              [a#20 = WR: Leistung Solarmodule, W]
                              [a#21 = WR: Leistung Batterie, W]
                              [a#22 = WR: Leistung Netz, W]
                              [a#23 = WR: Autonomie relativ, %]
                              [a#24 = WR: Eigenverbrauch relativ, %]
                              [a#25 = WR: Eigenverbrauch, W]
                              [a#26 = Anlage Netzbezug, W]
                              [a#27 = Anlage Netzeinspeisung, W]
                              [a#28 = Anlage Bezug= 0, Einspeisung= 1]
                              [a#30 = Bat: Ladezustand, %]
                              [a#31 = Bat: Spannung DC, V]
                              [a#32 = Bat: Strom DC, V]
                              [a#33 = Bat: Temperatur, °C]
                              [a#34 = Bat: Status]
                              [a#35 = Bat: Text Status]
                              [a#37 = SM: Energie geliefert, Wh]
                              [a#38 = SM: Energie verbraucht, Wh]
                              [a#39 = SM: Frequenz, Hz]
                              [a#40 = SM: Spannung L1, U]
                              [a#41 = SM: Strom L1, A]
                              [a#42 = SM: Leistung L1, W]
                              [a#43 = SM: Spannung L2, U]
                              [a#44 = SM: Strom L2, A]
                              [a#45 = SM: Leistung L2, W]
                              [a#46 = SM: Spannung L3, U]
                              [a#47 = SM: Strom L3, A]
                              [a#48 = SM: Leistung L3, W]
                              [a#49 = SM: Gesamtstrom L1+L2+L3, A***]
                              [a#50 = SM: Gesamtleistung L1+L2+L3, Wh]
                              [a#52 = Zeitstempel letzter Datenabruf]
                              [a#53 = LBS Error]
                              [a#55 = Energie Tag, von PV, kWh****]
                              [a#56 = Energie Tag, geliefert an Batterie, kWh****]
                              [a#57 = Energie Tag, geliefert von Batterie, kWh****]
                              [a#60 = iAPI: Energiezähler Erzeugung PV String 1, Wh*****]
                              [a#61 = iAPI: Energiezähler Erzeugung PV String 2, Wh*****]
                              [a#62 = iAPI: Energiezähler geliefert an Batterie, Wh*****]
                              [a#63 = iAPI: Energiezähler geliefert von Batterie, Wh*****]
                              [a#64 = iAPI: Bat SW version*****]
                              [a#65 = iAPI: Bat SOH, %*****]
                              [a#66 = iAPI: PV Point aktiv=1 / inaktiv=0*****]
                              [a#67 = iAPI: WR Temperatur, °C*****]
                              [a#68 = iAPI: WR Fan 1, %*****]
                              [a#69 = iAPI: WR Fan 2, %*****]
                              [a#70 = iAPI: WR Isolationswiederstand, kOhm*****]
                              [a#71 = iAPI: Energie Tag, von PV1, kWh****]
                              [a#72 = iAPI: Energie Tag, von PV2, kWh****]
                              [a#73 = iAPI: Energie Tag, geliefert an Batterie, kWh****]
                              [a#74 = iAPI: Energie Tag, geliefert von Batterie, kWh****]
                              [v#100 = 1.52] # Version
                              [v#101 = 190001640] # LBS No.
                              [v#102 = Fronius Wechselrichter API] # LBS Name
                              [v#103 = 0] # Log Level
                              [v#104 = 1] # One logfile per instance
                              [v#105 = 0] # log ID in each line
                              [v#106 = 0] # Energy counter, PV
                              [v#107 = 0] # Energy counter, to battery
                              [v#108 = 0] # Energy counter, from battery
                              [v#109 = 0] # Timestamp last call
                              [v#110 = 0] # WR energy counter at day change
                              [v#111 = 0] # iAPI Energy counter, PV1
                              [v#112 = 0] # iAPI Energy counter, PV2
                              [v#113 = 0] # iAPI Energy counter, to battery
                              [v#114 = 0] # iAPI Energy counter, from battery
                              ###[/DEF]###
                              
                              ###[HELP]###
                              Fronius Wechselrichter API
                              ================================================================================================
                              Dieser Logikbaustein liest von einem Fronius Wechselrichter die aktuellen Daten aus. Der Baustein
                              unterstuetzt auch das Auslesen der eines angeschlossenen Smartmeters, sowie einer Batterie.
                              Je nach Wechslerichter werden unterschiedliche Daten ausgegeben. Bei einem GEN24 Wechselrichter
                              muss mind. Firmware Version 1.13x installiert sein, da erst ab dieser Version die API wieder korrekte
                              Werte liefert. Bei der Angabe Daten des Smartmeters wird davon ausgegeangen, das der Smartmeter zwischen
                              Wechselrichter und Netzberteiber eingebaut ist (Meter Location 0=feed in).
                              Der Fronius Wechselrichter muss vom Edomi-Rechner erreichbar sein. Die im LBS verwendeten URLs können vorab manuell getestet werden:
                              URL = http://FRONIUS_IP/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData
                              URL = http://FRONIUS_IP/solar_api/v1/GetPowerFlowRealtimeData.fcgi
                              URL = http://FRONIUS_IP/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=0
                              URL = http://FRONIUS_IP/solar_api/v1/GetStorageRealtimeData.cgi?Scope=System
                              Eingänge
                              ------------------------------------------------------------------------------------------------
                              E:1 Schaltet den Baustein Ein/Aus
                              E:2 IP Wechselrichter
                              E:3 Abfrage Wechselrichter #init1
                              E:4 Abfrage Smartmeter #init0
                              E:5 Abfrage Batterie #init0
                              E:6 DeviceId Wechselrichter #init1
                              E:7 DeviceId Smartmeter #init1
                              E:8 DeviceId Batterie #init0
                              E:9 Wechselrichter Typ: Symo0 / GEN24 #init0
                              E:10 Abrufintervall in Sek.
                              E:11 GEN24: inoffizielle API Nein=0 / Ja=1 #init=0*****
                              E:15 Log level #init8
                              Ausgänge
                              ------------------------------------------------------------------------------------------------
                              A:1 WR: ErrorCode
                              A:2 WR: LEDColor*
                              A:3 WR: LEDState*
                              A:4 WR: InverterState
                              A:5 WR: Status
                              A:6 WR: Text Fehlercode
                              A:7 WR: Erzeugte Energie Tag (DAY_ENERGY), Wh*
                              A:8 WR: Erzeugte Energie Jahr (YEAR_ENERGY), Wh*
                              A:9 WR: Erzeugte Energie Gesamt (TOTAL_ENERGY), Wh
                              A:10 WR: Spannung DC 1 (UDC), V
                              A:11 WR: Strom DC 1 (IDC), A
                              A:12 WR: Spannung DC 2 (UDC_2), V**
                              A:13 WR: Strom DC 2 (IDC_2), A**
                              A:14 WR: Spannung AC (UAC), V
                              A:15 WR: Strom AC (IAC), A
                              A:16 WR: Frequenz AC (FAC), Hz
                              A:17 WR: Leistung AC (PAC), W
                              A:19 WR: Leistung Wechselrichter gesamt (P), W
                              A:20 WR: Leistung Solarmodule (P_PV), W
                              A:21 WR: Leistung Batterie (P_Akku), W
                              A:22 WR: Leistung Netz (P_Grid), W
                              A:23 WR: Autonomie relativ (rel_Autonomy), %
                              A:24 WR: Eigenverbrauch relativ (rel_SelfConsumption), %
                              A:25 WR: Eigenverbrauch (P_Load), W
                              A:26 Anlage: Netzbezug, W
                              A:27 Anlage: Netzeinspeisung, W
                              A:28 Anlage: Bezug0, Einspeisung1
                              A:30 Bat: Ladezustand (SOC), %
                              A:31 Bat: Spannung DC (Voltage_DC), V
                              A:32 Bat: Strom DC (Current_DC), V
                              A:33 Bat: Temperatur (Temperature_Cell), °C
                              A:34 Bat: Status (Status_BatteryCell)
                              A:35 Bat: Text Status
                              A:37 SM: Energie geliefert (EnergyReal_WAC_Minus_Absolute), Wh
                              A:38 SM: Energie verbraucht (EnergyReal_WAC_Plus_Absolute), Wh
                              A:39 SM: Frequenz (Frequency_Phase_Average), Hz
                              A:40 SM: Spannung L1 (Voltage_AC_Phase_1), U
                              A:41 SM: Strom L1 (Current_AC_Phase_1), A
                              A:42 SM: Leistung L1 (PowerReal_P_Phase_1), W
                              A:43 SM: Spannung L2 (Voltage_AC_Phase_2), U
                              A:44 SM: Strom L2 (Current_AC_Phase_2), A
                              A:45 SM: Leistung L2 (PowerReal_P_Phase_2), W
                              A:46 SM: Spannung L3 (Voltage_AC_Phase_3), U
                              A:47 SM: Strom L3 (Current_AC_Phase_3), A
                              A:48 SM: Leistung L3 (PowerReal_P_Phase_3), W
                              A:49 SM: Gesamtstrom L1+L2+L3 (Current_AC_Sum), A***
                              A:50 SM: Gesamtleistung L1+L2+L3 (PowerReal_P_Phase_Sum), Wh
                              A:52 Zeitstempel letzter Datenabruf
                              A:53 LBS Error
                              A:55 Energie Tag, von PV, kWh****
                              A:56 Energie Tag, geliefert an Batterie, kWh****
                              A:57 Energie Tag, geliefert von Batterie, kWh****
                              A:60 iAPI: Energie Erzeugung PV String 1, Wh*****
                              A:61 iAPI: Energie Erzeugung PV String 2, Wh*****
                              A:62 iAPI: Energie geliefert an Batterie, Wh*****
                              A:63 iAPI: Energie geliefert von Batterie, Wh*****
                              A:64 iAPI: Bat SW version*****
                              A:65 iAPI: Bat SOH, %*****
                              A:66 iAPI: PV Point aktiv=1 / inaktiv=0*****
                              A:67 iAPI: WR Temperatur, °C*****
                              A:68 iAPI: WR Fan 1, %*****
                              A:69 iAPI: WR Fan 2, %*****
                              A:70 iAPI: WR Isolationswiederstand, kOhm*****
                              A:71 iAPI: Energie Tag, von PV1, kWh****
                              A:72 iAPI: Energie Tag, von PV2, kWh****
                              A:73 iAPI: Energie Tag, geliefert an Batterie, kWh****
                              A:74 iAPI: Energie Tag, geliefert von Batterie, kWh****
                              * Tag: Berechnet aus Zählerstandsdifferenz ab Tageswechsel. Jahr: Nicht bei GEN24
                              ** Nur bei GEN24
                              *** Nur bei Smartmeter TS 65A-3
                              **** Nur für GEN24 bei installierter Batterie. Berechnet Energiezählerstände aus Leistung.
                              Die Genaugkeit ist daher stark vom Abrufintervall abhängig.
                              ***** Nur bein GEN24: Zusätzlich Abfrage der Datenquellen aus interner Fronius Web API. Liefert echte
                              Zählerstandsdaten für PV Strings / Batterie und ermöglicht so gute Grundlage zur Berechnung
                              exakter Energiemengen. Seitens Fronius kann es hier jedoch ungekündigt zu Änderungen kommen.
                              Eine Zeitnahe Anpassung des LBS kann nicht versprochen oder garantiert werden. Wer Wert auf
                              Langzeitstabilität legt sollte diese Option nicht aktivieren.
                              Variablen
                              ------------------------------------------------------------------------------------------------
                              V100: Version
                              V101: LBS Number
                              V102: Log file name
                              V103: Log level
                              V104: One log file per LBS instance
                              V105: log ID in each log entry
                              V106: Counter energy from PV
                              V107: Counter energy to battery
                              V108: Counter energy from battery
                              V109: Timestamp last call
                              V110: WR energy counter at day change
                              V111: iAPI Energy counter, PV1
                              V112: iAPI Energy counter, PV2
                              V113: iAPI Energy counter, to battery
                              V114: iAPI Energy counter, from battery
                              Changelog:
                              ================================================================================================
                              Version 1.1 - GEN24
                              Version 1.2 - Eigenverbrauch in W (P_Load) hinzugefügt. Umstellung auf curl.
                              Version 1.3 - Fehlerkorrektur GEN24 UDC_2, IDC_2. ID für Batterie hinzugefügt. Ausgänge erweitert
                              Version 1.31- Fehlerkorrektur GEN24
                              Version 1.4 - Zusätzliche Abfrage der internen Fronius Web Abfrage ergänzt
                              Version 1.41- Fehlerkorrektur: Fehlermeldung nicht definierte Variable bei php 7.4
                              Version 1.51- Fehlerkorrektur: Abfrage Samrtmeter ohne PV
                              Version 1.52- Fehlerkorrektur: Abfrage WR
                              ###[/HELP]###
                              
                              ###[LBS]###
                              <?
                              // ----------- Logging ---------------------------------------------------------------------------
                              function LB_LBSID_logging($id, $msg, $var = NULL, $priority = 8)
                              {
                                  $E = getLogicEingangDataAll($id);
                                  $logLevel = logic_getVar($id, 103);
                                  if (is_int($priority) && $priority <= $logLevel && $priority > 0) {
                                      $logLevelNames = array(
                                          'none',
                                          'emerg',
                                          'alert',
                                          'crit',
                                          'err',
                                          'warning',
                                          'notice',
                                          'info',
                                          'debug'
                                      );
                                      $version = logic_getVar($id, 100);
                                      $lbsNo = logic_getVar($id, 101);
                                      $logName = logic_getVar($id, 102) . "-LBS$lbsNo";
                                      $logName = preg_replace('/ /', '_', $logName);
                                      if (logic_getVar($id, 104))
                                          $logName .= "-$id";
                                      if (logic_getVar($id, 105) == 1)
                                          $msg .= " ($id)";
                                      strpos($_SERVER['SCRIPT_NAME'], $lbsNo) ? $scriptname = 'EXE' . $lbsNo : $scriptname = 'LBS' . $lbsNo;
                                      writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . $msg);
                                      if (isset($var) && $var != 0) {
                                          writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT START ================");
                                          writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . json_encode($var));
                                          writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT END ================");
                                      }
                                  }
                              }
                              
                              // ++++++++++++++++++++ LBS Funktion ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                              function LB_LBSID($id)
                              {
                                  if ($E = logic_getInputs($id)) {
                                      logic_setVar($id, 103, $E[15]['value']); // set loglevel to #VAR 103
                                      if ($E[1]['refresh'] && $E[1]['value'] == 1) {
                                          logic_callExec(LBSID, $id, false); // Start Daemon only once
                                          LB_LBSID_logging($id, 'Starte Fronius Wechselrichter API daemon (EXEC Script) ...');
                                      }
                                      if ($E[1]['value'] == 1 || (logic_getStateExec($id) && $E[1]['refresh'] && $E[1]['value'] == 0)) {
                                          logic_setInputsQueued($id, $E); // Send all inputs to EXEC daemon
                                      }
                                  }
                              }
                              ?>
                              ###[/LBS]###
                              
                              ###[EXEC]###
                              <?
                              // ++++++++++++++++++++ LBS EXEC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                              require(dirname(__FILE__) . "/../../../../main/include/php/incl_lbsexec.php");
                              set_time_limit(0);
                              sql_connect();
                              
                              // ----------- Logging ---------------------------------------------------------------------------
                              function logging($id, $msg, $var = NULL, $priority = 8)
                              {
                                  $E = getLogicEingangDataAll($id);
                                  $logLevel = logic_getVar($id, 103);
                                  if (is_int($priority) && $priority <= $logLevel && $priority > 0) {
                                      $logLevelNames = array(
                                          'none',
                                          'emerg',
                                          'alert',
                                          'crit',
                                          'err',
                                          'warning',
                                          'notice',
                                          'info',
                                          'debug'
                                      );
                                      $version = logic_getVar($id, 100);
                                      $lbsNo = logic_getVar($id, 101);
                                      $logName = logic_getVar($id, 102) . "-LBS$lbsNo";
                                      $logName = preg_replace('/ /', '_', $logName);
                                      if (logic_getVar($id, 104))
                                          $logName .= "-$id";
                                      if (logic_getVar($id, 105) == 1)
                                          $msg .= " ($id)";
                                      strpos($_SERVER['SCRIPT_NAME'], $lbsNo) ? $scriptname = 'EXE' . $lbsNo : $scriptname = 'LBS' . $lbsNo;
                                      writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . $msg);
                                      if (isset($var) && $var != 0) {
                                          writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT START ================");
                                          writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . json_encode($var));
                                          writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT END ================");
                                      }
                                  }
                              }
                              
                              // ----------- Fehlerbehandlung ---------------------------------------------------------------------------
                              function myErrorHandler($errno, $errstr, $errfile, $errline)
                              {
                                  global $id;
                                  logging($id, "File: $errfile | Error: $errno | Line: $errline | $errstr ", 0, 4);
                              }
                              
                              function error_off()
                              {
                                  $error_handler = set_error_handler("myErrorHandler");
                                  error_reporting(0);
                              }
                              
                              function error_on()
                              {
                                  restore_error_handler();
                                  error_reporting(E_ALL);
                              }
                              
                              // ----------- Hauptloop ---------------------------------------------------------------------------
                              while (getSysInfo(1) >= 1) {
                                  $error = 0;
                              
                                  // ++++ Eingänge prüfen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                                  if ($E = logic_getInputsQueued($id)) {
                                      if ($E[1]['refresh'] == 1) {
                                          if ($E[1]['value'] == 0) {
                                              logging($id, 'Fronius Wechselrichter API daemon beendet (EXEC Script) ...');
                                              break;
                                          } elseif ($E[1]['value'] == 1) {
                                              $refresh_time = max(1, round($E[10]['value'], 0));
                                              $pv_ip = $E[2]["value"];
                                              $get_pv_data = $E[3]["value"];
                                              $get_meter_data = $E[4]["value"];
                                              $get_battery_data = $E[5]["value"];
                                              $pv_id = $E[6]["value"];
                                              $meter_id = $E[7]["value"];
                                              $battery_id = $E[8]["value"];
                                              $pv_type_GEN24 = $E[9]["value"];
                                              $use_internal_API = $E[11]["value"];
                                              $error = 0;
                                          }
                                      }
                                      if ($E[10]['refresh'] == 1) {
                                          $refresh_time = max(1, round($E[10]['value'], 0));
                                      }
                                  }
                              
                                  // ++++ Verbindung zum Wechselrichter prüfen ++++++++++++++++++++++++++++++++++++++++++
                                  $pv_check_url = "http://{$pv_ip}/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId={$pv_id}&DataCollection=CommonInverterData";
                                  $ch = curl_init($pv_check_url);
                                  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
                                  curl_exec($ch);
                                  $chinfo = curl_getinfo($ch);
                                  curl_close($ch);
                              
                                  if (!$chinfo['http_code']) {
                                      logging($id, "Fronius: Status Url - Keine Verbindung", 0, 4);
                                      logging($id, "Wechselrichter URL: {$pv_check_url}", 0, 4);
                                      logging($id, "LBS Abfragen werden abgebrochen", 0, 4);
                                      $error = 1;
                                      logic_setOutput($id, 53, $error);
                                  } elseif ($chinfo['http_code'] == 404) {
                                      logging($id, "Fronius: Status Url - Pfad nicht gefunden (404)", 0, 4);
                                      logging($id, "Wechselrichter URL: {$pv_check_url}", 0, 4);
                                      logging($id, "LBS Abfragen werden abgebrochen", 0, 4);
                                      $error = 1;
                                      logic_setOutput($id, 53, $error);
                                  } else {
                                      logging($id, "Fronius: Verbindung OK", 0, 8);
                                  }
                              
                                  // ++++ Interne API (inoffiziell) für GEN24 ++++++++++++++++++++++++++++++++++++++++++++
                                  $iAPI_energycounter_from_PV1 = 0;
                                  $iAPI_energycounter_from_PV2 = 0;
                                  $iAPI_energycounter_to_BAT   = 0;
                                  $iAPI_energycounter_from_BAT = 0;
                                  $iAPI_BAT_SW_version         = "";
                                  $iAPI_BAT_SOH                = 0;
                                  $iAPI_WR_PV_point_state      = 0;
                                  $iAPI_WR_temp                = 0;
                                  $iAPI_WR_FAN1_power          = 0;
                                  $iAPI_WR_FAN2_power          = 0;
                                  $iAPI_WR_iso                 = 0;
                                  $iAPI_day_energy_PV1         = 0;
                                  $iAPI_day_energy_PV2         = 0;
                                  $iAPI_day_energy_to_bat      = 0;
                                  $iAPI_day_energy_from_bat    = 0;
                              
                                  if ($use_internal_API == 1 && $pv_type_GEN24 == 1 && $error == 0) {
                                      $iAPI_url = "http://{$pv_ip}/components/readable";
                                      $ch = curl_init($iAPI_url);
                                      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                      curl_setopt($ch, CURLOPT_TIMEOUT, 10);
                                      $result = curl_exec($ch);
                                      $chinfo = curl_getinfo($ch);
                                      curl_close($ch);
                              
                                      if (!$chinfo['http_code']) {
                                          logging($id, "iAPI: Keine Verbindung zur internen API", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } elseif ($chinfo['http_code'] == 404) {
                                          logging($id, "iAPI: Pfad /components/readable nicht gefunden (404)", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else {
                                          logging($id, "iAPI: Daten von interner API erfolgreich abgerufen", 0, 8);
                                      }
                              
                                      $json_iAPI = json_decode($result, true);
                                      if (json_last_error() !== JSON_ERROR_NONE) {
                                          logging($id, "iAPI: JSON-Fehler beim Dekodieren - " . json_last_error_msg(), 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else {
                                          // Automatische Key-Suche
                                          $inverterKey = null;
                                          $storageKey  = null;
                              
                                          foreach ($json_iAPI["Body"]["Data"] as $key => $device) {
                                              if (isset($device["attributes"]["manufacturer"])) {
                                                  if ($device["attributes"]["manufacturer"] === "Fronius" && $inverterKey === null) {
                                                      $inverterKey = $key;
                                                      logging($id, "iAPI: Fronius Inverter gefunden mit Key: {$key}", 0, 8);
                                                  }
                                                  if ($device["attributes"]["manufacturer"] === "BYD" && $storageKey === null) {
                                                      $storageKey = $key;
                                                      logging($id, "iAPI: BYD Battery-Box gefunden mit Key: {$key}", 0, 8);
                                                  }
                                              }
                                          }
                              
                                          if ($inverterKey === null) {
                                              logging($id, "iAPI: KEIN Fronius Inverter-Device gefunden! iAPI-Werte bleiben 0.", 0, 4);
                                          }
                                          if ($storageKey === null) {
                                              logging($id, "iAPI: KEINE BYD Battery gefunden – SW-Version und SOH nicht verfügbar.", 0, 4);
                                          }
                              
                                          $data = $json_iAPI["Body"]["Data"];
                              
                                          // Werte aus Inverter
                                          if ($inverterKey) {
                                              if (isset($data[$inverterKey]["channels"]["PV_ENERGYACTIVE_ACTIVE_SUM_01_U64"])) {
                                                  $iAPI_energycounter_from_PV1 = round($data[$inverterKey]["channels"]["PV_ENERGYACTIVE_ACTIVE_SUM_01_U64"] / 3600, 0);
                                                  logging($id, "iAPI Lifetime PV String 1: {$iAPI_energycounter_from_PV1} Wh", 0, 7);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["PV_ENERGYACTIVE_ACTIVE_SUM_02_U64"])) {
                                                  $iAPI_energycounter_from_PV2 = round($data[$inverterKey]["channels"]["PV_ENERGYACTIVE_ACTIVE_SUM_02_U64"] / 3600, 0);
                                                  logging($id, "iAPI Lifetime PV String 2: {$iAPI_energycounter_from_PV2} Wh", 0, 7);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["BAT_ENERGYACTIVE_ACTIVECHARGE_SUM_01_U64"])) {
                                                  $iAPI_energycounter_to_BAT = round($data[$inverterKey]["channels"]["BAT_ENERGYACTIVE_ACTIVECHARGE_SUM_01_U64"] / 3600, 0);
                                                  logging($id, "iAPI Lifetime zur Batterie: {$iAPI_energycounter_to_BAT} Wh", 0, 7);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["BAT_ENERGYACTIVE_ACTIVEDISCHARGE_SUM_01_U64"])) {
                                                  $iAPI_energycounter_from_BAT = round($data[$inverterKey]["channels"]["BAT_ENERGYACTIVE_ACTIVEDISCHARGE_SUM_01_U64"] / 3600, 0);
                                                  logging($id, "iAPI Lifetime von Batterie: {$iAPI_energycounter_from_BAT} Wh", 0, 7);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["DEVICE_TEMPERATURE_AMBIENTMEAN_01_F32"])) {
                                                  $iAPI_WR_temp = round($data[$inverterKey]["channels"]["DEVICE_TEMPERATURE_AMBIENTMEAN_01_F32"], 1);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["FANCONTROL_PERCENT_01_F32"])) {
                                                  $iAPI_WR_FAN1_power = round($data[$inverterKey]["channels"]["FANCONTROL_PERCENT_01_F32"], 1);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["FANCONTROL_PERCENT_02_F32"])) {
                                                  $iAPI_WR_FAN2_power = round($data[$inverterKey]["channels"]["FANCONTROL_PERCENT_02_F32"], 1);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["ISO_RESISTANCE_MEAN_F32"])) {
                                                  $iAPI_WR_iso = round($data[$inverterKey]["channels"]["ISO_RESISTANCE_MEAN_F32"] / 1000, 1);
                                              }
                                              if (isset($data[$inverterKey]["channels"]["LEGACY_MODE_BACKUP_OPERATION_SYNC_DM_SYSTEMS_U16"])) {
                                                  $iAPI_WR_PV_point_state = $data[$inverterKey]["channels"]["LEGACY_MODE_BACKUP_OPERATION_SYNC_DM_SYSTEMS_U16"];
                                              }
                                          }
                              
                                          // Werte aus Batterie-Device
                                          if ($storageKey) {
                                              if (isset($data[$storageKey]["attributes"]["sw_version"])) {
                                                  $iAPI_BAT_SW_version = trim($data[$storageKey]["attributes"]["sw_version"]);
                                                  logging($id, "iAPI Batterie SW-Version: {$iAPI_BAT_SW_version}", 0, 7);
                                              }
                                              if (isset($data[$storageKey]["channels"]["BAT_VALUE_STATE_OF_HEALTH_RELATIVE_U16"])) {
                                                  $iAPI_BAT_SOH = $data[$storageKey]["channels"]["BAT_VALUE_STATE_OF_HEALTH_RELATIVE_U16"];
                                                  logging($id, "iAPI Batterie SOH: {$iAPI_BAT_SOH} %", 0, 7);
                                              }
                                          }
                              
                                          // Tagesenergie (robust)
                                          $time_new = date("Y-m-d H:i:s");
                                          $day_new_i = date("j");
                                          $time_last_call = logic_getVar($id, 109);
                                          $timestamp_last_call = $time_last_call ? strtotime($time_last_call) : 0;
                                          $day_last_call = $timestamp_last_call ? date("j", $timestamp_last_call) : 0;
                              
                                          logging($id, "Last call {$time_last_call}", 0, 7);
                                          logging($id, "Tag last call {$day_last_call}", 0, 7);
                              
                                          if ($day_new_i != $day_last_call || logic_getVar($id, 111) == 0) {
                                              logging($id, "iAPI: Tageswechsel oder Erststart – Zähler zurücksetzen", 0, 7);
                                              logic_setVar($id, 111, $iAPI_energycounter_from_PV1);
                                              logic_setVar($id, 112, $iAPI_energycounter_from_PV2);
                                              logic_setVar($id, 113, $iAPI_energycounter_to_BAT);
                                              logic_setVar($id, 114, $iAPI_energycounter_from_BAT);
                                              $iAPI_day_energy_PV1 = 0;
                                              $iAPI_day_energy_PV2 = 0;
                                              $iAPI_day_energy_to_bat = 0;
                                              $iAPI_day_energy_from_bat = 0;
                                          } else {
                                              $day_start_PV1 = logic_getVar($id, 111);
                                              $day_start_PV2 = logic_getVar($id, 112);
                                              $day_start_to_BAT = logic_getVar($id, 113);
                                              $day_start_from_BAT = logic_getVar($id, 114);
                                              $iAPI_day_energy_PV1 = round(($iAPI_energycounter_from_PV1 - $day_start_PV1) / 1000, 3);
                                              $iAPI_day_energy_PV2 = round(($iAPI_energycounter_from_PV2 - $day_start_PV2) / 1000, 3);
                                              $iAPI_day_energy_to_bat = round(($iAPI_energycounter_to_BAT - $day_start_to_BAT) / 1000, 3);
                                              $iAPI_day_energy_from_bat = round(($iAPI_energycounter_from_BAT - $day_start_from_BAT) / 1000, 3);
                                          }
                                          logic_setVar($id, 109, $time_new);
                                      }
                                  }
                              
                                  // ++++ ABFRAGE WECHSELRICHTER PV Daten +++++++++++++++++++++++++++++++++++++++++++++++++++
                                  if ($get_pv_data == 1 && $error == 0) {
                                      $pv_url1 = "http://{$pv_ip}/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId={$pv_id}&DataCollection=CommonInverterData";
                                      $ch_url1 = curl_init($pv_url1);
                                      curl_setopt($ch_url1, CURLOPT_RETURNTRANSFER, true);
                                      curl_setopt($ch_url1, CURLOPT_TIMEOUT, 10);
                                      $result = curl_exec($ch_url1);
                                      $chinfo = curl_getinfo($ch_url1);
                                      if (!$chinfo['http_code']) {
                                          logging($id, "Fronius PV: Keine Verbindung zur URL1", 0, 4);
                                          logging($id, "URL: {$pv_url1}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else if ($chinfo['http_code'] == 404) {
                                          logging($id, "Fronius PV: URL1 Pfad nicht gefunden (404)", 0, 4);
                                          logging($id, "URL: {$pv_url1}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else {
                                          logging($id, "Fronius PV: URL1 erfolgreich abgerufen", 0, 8);
                                      }
                                      curl_close($ch_url1);
                                      $content_pv_url1 = $result;
                              
                                      $pv_url2 = "http://{$pv_ip}/solar_api/v1/GetPowerFlowRealtimeData.fcgi";
                                      $ch_url2 = curl_init($pv_url2);
                                      curl_setopt($ch_url2, CURLOPT_RETURNTRANSFER, true);
                                      curl_setopt($ch_url2, CURLOPT_TIMEOUT, 10);
                                      $result = curl_exec($ch_url2);
                                      $chinfo = curl_getinfo($ch_url2);
                                      if (!$chinfo['http_code']) {
                                          logging($id, "Fronius PV: Keine Verbindung zur URL2", 0, 4);
                                          logging($id, "URL: {$pv_url2}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else if ($chinfo['http_code'] == 404) {
                                          logging($id, "Fronius PV: URL2 Pfad nicht gefunden (404)", 0, 4);
                                          logging($id, "URL: {$pv_url2}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else {
                                          logging($id, "Fronius PV: URL2 erfolgreich abgerufen", 0, 8);
                                      }
                                      curl_close($ch_url2);
                                      $content_pv_url2 = $result;
                              
                                      // Variablen initialisieren
                                      $pv_DAY_ENERGY = 0;
                                      $pv_ErrorCode = 0;
                                      $pv_LEDColor = 0;
                                      $pv_LEDState = 0;
                                      $pv_InverterState = "";
                                      $pv_StatusCode = 0;
                                      $pv_FAC = 0;
                                      $pv_IAC = 0;
                                      $pv_IDC = 0;
                                      $pv_IDC_2 = 0;
                                      $pv_PAC = 0;
                                      $pv_SAC = 0;
                                      $pv_TOTAL_ENERGY = 0;
                                      $pv_UAC = 0;
                                      $pv_UDC = 0;
                                      $pv_UDC_2 = 0;
                                      $pv_YEAR_ENERGY = 0;
                                      $pv_P = 0;
                                      $pv_SOC = 0;
                                      $pv_mode = "";
                                      $pv_P_Akku = 0;
                                      $pv_P_Grid = 0;
                                      $pv_P_Load = 0;
                                      $pv_P_PV = 0;
                                      $pv_rel_Autonomy = 0;
                                      $pv_rel_SelfConsumption = 0;
                                      $anlage_Netzbezug = 0;
                                      $anlage_Netzeinspeisung = 0;
                                      $anlage_Betriebsmodus = 0;
                              
                                      // URL1 auswerten
                                      $json = json_decode($content_pv_url1, true);
                                      if (json_last_error() === JSON_ERROR_NONE) {
                                          if (isset($json['Body']['Data']['DAY_ENERGY']['Value']) && $pv_type_GEN24 == 0) {
                                              $pv_DAY_ENERGY = $json["Body"]["Data"]["DAY_ENERGY"]["Value"];
                                              logging($id, "Wechselrichter DAY_ENERGY: {$pv_DAY_ENERGY}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['DeviceStatus']['ErrorCode'])) {
                                              $pv_ErrorCode = $json["Body"]["Data"]["DeviceStatus"]["ErrorCode"];
                                              logging($id, "Wechselrichter ErrorCode: {$pv_ErrorCode}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['DeviceStatus']['LEDColor']) && $pv_type_GEN24 == 0) {
                                              $pv_LEDColor = $json["Body"]["Data"]["DeviceStatus"]["LEDColor"];
                                              logging($id, "Wechselrichter LEDColor: {$pv_LEDColor}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['DeviceStatus']['LEDState'])) {
                                              $pv_LEDState = $json["Body"]["Data"]["DeviceStatus"]["LEDState"];
                                              logging($id, "Wechselrichter LEDState: {$pv_LEDState}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['DeviceStatus']['InverterState']) && $pv_type_GEN24 == 1) {
                                              $pv_InverterState = $json["Body"]["Data"]["DeviceStatus"]["InverterState"];
                                              logging($id, "Wechselrichter Status: {$pv_InverterState}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['DeviceStatus']['StatusCode'])) {
                                              $pv_StatusCode = $json["Body"]["Data"]["DeviceStatus"]["StatusCode"];
                                              logging($id, "Wechselrichter StatusCode: {$pv_StatusCode}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['FAC']['Value']) && $pv_StatusCode == 7) {
                                              $pv_FAC = round($json["Body"]["Data"]["FAC"]["Value"], 2);
                                              logging($id, "Wechselrichter FAC: {$pv_FAC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['IAC']['Value']) && $pv_StatusCode == 7) {
                                              $pv_IAC = round($json["Body"]["Data"]["IAC"]["Value"], 3);
                                              logging($id, "Wechselrichter IAC: {$pv_IAC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['IDC']['Value']) && $pv_StatusCode == 7) {
                                              $pv_IDC = round($json["Body"]["Data"]["IDC"]["Value"], 3);
                                              logging($id, "Wechselrichter IDC: {$pv_IDC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['IDC_2']['Value']) && $pv_type_GEN24 == 1 && $pv_StatusCode == 7) {
                                              $pv_IDC_2 = round($json["Body"]["Data"]["IDC_2"]["Value"], 3);
                                              logging($id, "Wechselrichter IDC_2: {$pv_IDC_2}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['PAC']['Value']) && $pv_StatusCode == 7) {
                                              $pv_PAC = round($json["Body"]["Data"]["PAC"]["Value"], 1);
                                              logging($id, "Wechselrichter PAC: {$pv_PAC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['SAC']['Value']) && $pv_type_GEN24 == 1 && $pv_StatusCode == 7) {
                                              $pv_SAC = round($json["Body"]["Data"]["SAC"]["Value"], 1);
                                              logging($id, "Wechselrichter SAC: {$pv_SAC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['TOTAL_ENERGY']['Value'])) {
                                              $pv_TOTAL_ENERGY = round($json["Body"]["Data"]["TOTAL_ENERGY"]["Value"]);
                                              logging($id, "Wechselrichter TOTAL_ENERGY: {$pv_TOTAL_ENERGY}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['UAC']['Value']) && $pv_StatusCode == 7) {
                                              $pv_UAC = round($json["Body"]["Data"]["UAC"]["Value"], 1);
                                              logging($id, "Wechselrichter UAC: {$pv_UAC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['UDC']['Value']) && $pv_StatusCode == 7) {
                                              $pv_UDC = round($json["Body"]["Data"]["UDC"]["Value"], 1);
                                              logging($id, "Wechselrichter UDC: {$pv_UDC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['UDC_2']['Value']) && $pv_type_GEN24 == 1 && $pv_StatusCode == 7) {
                                              $pv_UDC_2 = round($json["Body"]["Data"]["UDC_2"]["Value"], 1);
                                              logging($id, "Wechselrichter UDC_2: {$pv_UDC_2}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data']['YEAR_ENERGY']['Value']) && $pv_type_GEN24 == 0) {
                                              $pv_YEAR_ENERGY = round($json["Body"]["Data"]["YEAR_ENERGY"]["Value"]);
                                              logging($id, "Wechselrichter YEAR_ENERGY: {$pv_YEAR_ENERGY}", 0, 7);
                                          }
                                      }
                              
                                      // URL2 auswerten
                                      $json2 = json_decode($content_pv_url2, true);
                                      if (json_last_error() === JSON_ERROR_NONE) {
                                          if (isset($json2['Body']['Data']['Inverters']['1']['P'])) {
                                              $pv_P = round($json2["Body"]["Data"]['Inverters']['1']['P'], 1);
                                              logging($id, "Wechselrichter P: {$pv_P}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Inverters']['1']['SOC']) && $get_battery_data == 1) {
                                              $pv_SOC = round($json2["Body"]["Data"]['Inverters']['1']['SOC'], 2);
                                              logging($id, "Wechselrichter SOC: {$pv_SOC}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Site']['Mode'])) {
                                              $pv_mode = $json2["Body"]["Data"]["Site"]["Mode"];
                                              logging($id, "Wechselrichter Betriebsmodus: {$pv_mode}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Site']['P_Akku']) && $get_battery_data == 1) {
                                              $pv_P_Akku = round($json2["Body"]["Data"]["Site"]["P_Akku"], 1);
                                              logging($id, "Wechselrichter P_Akku: {$pv_P_Akku}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Site']['P_Grid']) && $pv_mode != "produce-only") {
                                              $pv_P_Grid = round($json2["Body"]["Data"]["Site"]["P_Grid"], 1);
                                              logging($id, "Wechselrichter P_Grid: {$pv_P_Grid}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Site']['P_Load']) && $pv_mode != "produce-only") {
                                              $pv_P_Load = round($json2["Body"]["Data"]["Site"]["P_Load"], 1);
                                              logging($id, "Wechselrichter P_Load: {$pv_P_Load}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Site']['P_PV'])) {
                                              $pv_P_PV = round($json2["Body"]["Data"]["Site"]["P_PV"], 1);
                                              logging($id, "Wechselrichter P_PV: {$pv_P_PV}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Site']['rel_Autonomy']) && $pv_mode != "produce-only") {
                                              $pv_rel_Autonomy = round($json2["Body"]["Data"]["Site"]["rel_Autonomy"], 2);
                                              logging($id, "Wechselrichter rel_Autonomy: {$pv_rel_Autonomy}", 0, 7);
                                          }
                                          if (isset($json2['Body']['Data']['Site']['rel_SelfConsumption']) && $pv_mode != "produce-only") {
                                              $pv_rel_SelfConsumption = round($json2["Body"]["Data"]["Site"]["rel_SelfConsumption"], 2);
                                              logging($id, "Wechselrichter SelfConsumption: {$pv_rel_SelfConsumption}", 0, 7);
                                          }
                                      }
                              
                                      // Netzbezug / Einspeisung
                                      if ($pv_P_Grid <= 0 && $pv_mode != "produce-only") {
                                          $anlage_Netzeinspeisung = abs($pv_P_Grid);
                                          $anlage_Betriebsmodus = 1;
                                          logging($id, "PV Anlage speist ins Netz ein", 0, 7);
                                      } else {
                                          $anlage_Netzeinspeisung = 0;
                                          $anlage_Betriebsmodus = 0;
                                      }
                                      if ($pv_P_Grid >= 0 && $pv_mode != "produce-only") {
                                          $anlage_Netzbezug = abs($pv_P_Grid);
                                      } else {
                                          $anlage_Netzbezug = 0;
                                      }
                              
                                      // Fehlertext
                                      $pv_Fehler = "Kein Fehler";
                                      if ($pv_ErrorCode >= 800) {
                                          $pv_Fehler = "Gibt Auskunft über den internen Prozessorstatus";
                                      } else if ($pv_ErrorCode >= 700) {
                                          $pv_Fehler = getErrorString700($pv_ErrorCode);
                                      } else if ($pv_ErrorCode >= 600) {
                                          $pv_Fehler = getErrorString600($pv_ErrorCode);
                                      } else if ($pv_ErrorCode >= 500) {
                                          $pv_Fehler = getErrorString500($pv_ErrorCode);
                                      } else if ($pv_ErrorCode >= 400) {
                                          $pv_Fehler = getErrorString400($pv_ErrorCode);
                                      } else if ($pv_ErrorCode >= 300) {
                                          $pv_Fehler = getErrorString300($pv_ErrorCode);
                                      } else {
                                          $pv_Fehler = getErrorString100($pv_ErrorCode);
                                      }
                              
                                      // InverterState für Symo
                                      if ($pv_type_GEN24 == 0) {
                                          if ($pv_StatusCode == 7) $pv_InverterState = "Running";
                                          else if ($pv_StatusCode == 8) $pv_InverterState = "Standby";
                                          else if ($pv_StatusCode == 9) $pv_InverterState = "Start";
                                          else if ($pv_StatusCode == 10) $pv_InverterState = "Error";
                                          else if ($pv_StatusCode == 3) $pv_InverterState = "Standby";
                                          else $pv_InverterState = "Unknown";
                                      }
                                  } else {
                                      logging($id, "Datenabfrage Wechselrichter: AUS", 0, 7);
                                  }
                              
                                  // ++++ ABFRAGE WECHSELRICHTER Akku Daten +++++++++++++++++++++++++++++++++++++++++++++++++
                                  if ($get_battery_data == 1 && $error == 0) {
                                      $battery_url = "http://{$pv_ip}/solar_api/v1/GetStorageRealtimeData.cgi?Scope=System";
                                      $ch = curl_init($battery_url);
                                      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                      curl_setopt($ch, CURLOPT_TIMEOUT, 10);
                                      $result = curl_exec($ch);
                                      $chinfo = curl_getinfo($ch);
                                      if (!$chinfo['http_code']) {
                                          logging($id, "Batterie (offiziell): Keine Verbindung", 0, 4);
                                          logging($id, "URL: {$battery_url}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else if ($chinfo['http_code'] == 404) {
                                          logging($id, "Batterie (offiziell): Pfad nicht gefunden (404)", 0, 4);
                                          logging($id, "URL: {$battery_url}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else {
                                          logging($id, "Batterie (offiziell): Daten erfolgreich abgerufen", 0, 8);
                                      }
                                      curl_close($ch);
                                      $content_battery_url = $result;
                              
                                      $battery_Current_DC = 0;
                                      $battery_StateOfCharge_Relative = 0;
                                      $battery_Status_BatteryCell = 0;
                                      $battery_Temperature_Cell = 0;
                                      $battery_Voltage_DC = 0;
                                      $battery_Manufacturer = "unknown";
                                      $battery_Status_Text = "unknown";
                              
                                      $json = json_decode($content_battery_url, true);
                                      if (json_last_error() === JSON_ERROR_NONE) {
                                          if (isset($json['Body']['Data'][$battery_id]['Controller']['Current_DC'])) {
                                              $battery_Current_DC = round($json['Body']['Data'][$battery_id]['Controller']['Current_DC'], 3);
                                              logging($id, "Daten Batterie: Current_DC {$battery_Current_DC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data'][$battery_id]['Controller']['StateOfCharge_Relative'])) {
                                              $battery_StateOfCharge_Relative = round($json['Body']['Data'][$battery_id]['Controller']['StateOfCharge_Relative'], 2);
                                              logging($id, "Daten Batterie: StateOfCharge_Relative {$battery_StateOfCharge_Relative}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data'][$battery_id]['Controller']['Status_BatteryCell'])) {
                                              $battery_Status_BatteryCell = $json['Body']['Data'][$battery_id]['Controller']['Status_BatteryCell'];
                                              logging($id, "Daten Batterie: Status_BatteryCell {$battery_Status_BatteryCell}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data'][$battery_id]['Controller']['Temperature_Cell'])) {
                                              $battery_Temperature_Cell = $json['Body']['Data'][$battery_id]['Controller']['Temperature_Cell'];
                                              logging($id, "Daten Batterie: Temperature_Cell {$battery_Temperature_Cell}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data'][$battery_id]['Controller']['Voltage_DC'])) {
                                              $battery_Voltage_DC = round($json['Body']['Data'][$battery_id]['Controller']['Voltage_DC'], 1);
                                              logging($id, "Daten Batterie: Voltage_DC {$battery_Voltage_DC}", 0, 7);
                                          }
                                          if (isset($json['Body']['Data'][$battery_id]['Controller']['Details']['Manufacturer'])) {
                                              $battery_Manufacturer = $json['Body']['Data'][$battery_id]['Controller']['Details']['Manufacturer'];
                                              logging($id, "Daten Batterie: Manufacturer {$battery_Manufacturer}", 0, 7);
                                          }
                              
                                          if ($battery_Manufacturer == "Fronius") {
                                              $battery_arr = str_split($battery_Status_BatteryCell);
                                              $battery_Status_DEC = hexdec($battery_arr[0]);
                                              switch ($battery_Status_DEC) {
                                                  case 0: $battery_Status_Text = "Reserved"; break;
                                                  case 1: $battery_Status_Text = "Pre Charge"; break;
                                                  case 2: $battery_Status_Text = "Initial"; break;
                                                  case 3: $battery_Status_Text = "Normal Charge"; break;
                                                  case 4: $battery_Status_Text = "Charge Terminate"; break;
                                                  case 5: $battery_Status_Text = "Normal Discharge"; break;
                                                  case 6: $battery_Status_Text = "Over Voltage"; break;
                                                  case 7: $battery_Status_Text = "Over Discharge"; break;
                                                  case 8: $battery_Status_Text = "Reserved"; break;
                                                  case 9: $battery_Status_Text = "Over Temp Charge"; break;
                                                  case 10: $battery_Status_Text = "Over Current Charge"; break;
                                                  case 11: $battery_Status_Text = "Over Temo Discharge"; break;
                                                  case 12: $battery_Status_Text = "Over Current Discharge"; break;
                                                  case 13: $battery_Status_Text = "Cell Unbalance"; break;
                                                  case 14: $battery_Status_Text = "Charge Suspend"; break;
                                                  case 15: $battery_Status_Text = "Reserved"; break;
                                                  default: $battery_Status_Text = "Unknown";
                                              }
                                          } else if ($battery_Manufacturer == "LG-Chem") {
                                              switch ($battery_Status_BatteryCell) {
                                                  case 1: $battery_Status_Text = "Standby"; break;
                                                  case 3: $battery_Status_Text = "Enabled"; break;
                                                  case 5: $battery_Status_Text = "Faulted"; break;
                                                  case 10: $battery_Status_Text = "Sleep"; break;
                                                  default: $battery_Status_Text = "Unknown";
                                              }
                                          } else if ($battery_Manufacturer == "BYD") {
                                              switch ($battery_Status_BatteryCell) {
                                                  case 0: $battery_Status_Text = "Standby"; break;
                                                  case 1: $battery_Status_Text = "Inactive"; break;
                                                  case 2: $battery_Status_Text = "Darkstart"; break;
                                                  case 3: $battery_Status_Text = "Active"; break;
                                                  case 4: $battery_Status_Text = "Fault"; break;
                                                  case 5: $battery_Status_Text = "Updating"; break;
                                                  default: $battery_Status_Text = "Unknown";
                                              }
                                          } else {
                                              $battery_Status_Text = "unknown";
                                          }
                                      }
                                  }
                              
                                  // ++++ ABFRAGE SMARTMETER ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                                  if ($get_meter_data == 1 && $error == 0) {
                                      $meter_url = "http://{$pv_ip}/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId={$meter_id}";
                                      $ch = curl_init($meter_url);
                                      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                      curl_setopt($ch, CURLOPT_TIMEOUT, 10);
                                      $result = curl_exec($ch);
                                      $chinfo = curl_getinfo($ch);
                                      if (!$chinfo['http_code']) {
                                          logging($id, "Smartmeter: Keine Verbindung", 0, 4);
                                          logging($id, "URL: {$meter_url}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else if ($chinfo['http_code'] == 404) {
                                          logging($id, "Smartmeter: Pfad nicht gefunden (404)", 0, 4);
                                          logging($id, "URL: {$meter_url}", 0, 4);
                                          $error = 1;
                                          logic_setOutput($id, 53, $error);
                                      } else {
                                          logging($id, "Smartmeter: Daten erfolgreich abgerufen", 0, 8);
                                      }
                                      curl_close($ch);
                                      $content_meter = $result;
                              
                                      $meter_Current_AC_Phase_1 = 0;
                                      $meter_Current_AC_Phase_2 = 0;
                                      $meter_Current_AC_Phase_3 = 0;
                                      $meter_Current_AC_Sum = 0;
                                      $meter_model = "";
                                      $meter_EnergyReal_WAC_Minus_Absolute = 0;
                                      $meter_EnergyReal_WAC_Plus_Absolute = 0;
                                      $meter_Frequency_Phase_Average = 0;
                                      $meter_PowerReal_P_Phase_1 = 0;
                                      $meter_PowerReal_P_Phase_2 = 0;
                                      $meter_PowerReal_P_Phase_3 = 0;
                                      $meter_PowerReal_P_Phase_Sum = 0;
                                      $meter_Voltage_AC_Phase_1 = 0;
                                      $meter_Voltage_AC_Phase_2 = 0;
                                      $meter_Voltage_AC_Phase_3 = 0;
                              
                                      $json_meter = json_decode($content_meter, true);
                                      if (json_last_error() === JSON_ERROR_NONE) {
                                          if (isset($json_meter["Body"]["Data"]["Current_AC_Phase_1"])) {
                                              $meter_Current_AC_Phase_1 = round($json_meter["Body"]["Data"]["Current_AC_Phase_1"], 2);
                                              logging($id, "Smartmeter Current_AC_Phase_1: {$meter_Current_AC_Phase_1}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Current_AC_Phase_2"])) {
                                              $meter_Current_AC_Phase_2 = round($json_meter["Body"]["Data"]["Current_AC_Phase_2"], 2);
                                              logging($id, "Smartmeter Current_AC_Phase_2: {$meter_Current_AC_Phase_2}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Current_AC_Phase_3"])) {
                                              $meter_Current_AC_Phase_3 = round($json_meter["Body"]["Data"]["Current_AC_Phase_3"], 2);
                                              logging($id, "Smartmeter Current_AC_Phase_3: {$meter_Current_AC_Phase_3}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Details"]["Model"])) {
                                              $meter_model = $json_meter["Body"]["Data"]["Details"]["Model"];
                                              logging($id, "Smartmeter Model: {$meter_model}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Current_AC_Sum"]) && $meter_model == "Smart Meter TS 65A-3") {
                                              $meter_Current_AC_Sum = round($json_meter["Body"]["Data"]["Current_AC_Sum"], 2);
                                              logging($id, "Smartmeter Current_AC_Sum: {$meter_Current_AC_Sum}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["EnergyReal_WAC_Minus_Absolute"])) {
                                              $meter_EnergyReal_WAC_Minus_Absolute = $json_meter["Body"]["Data"]["EnergyReal_WAC_Minus_Absolute"];
                                              logging($id, "Smartmeter EnergyReal_WAC_Minus_Absolute: {$meter_EnergyReal_WAC_Minus_Absolute}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["EnergyReal_WAC_Plus_Absolute"])) {
                                              $meter_EnergyReal_WAC_Plus_Absolute = $json_meter["Body"]["Data"]["EnergyReal_WAC_Plus_Absolute"];
                                              logging($id, "Smartmeter EnergyReal_WAC_Plus_Absolute: {$meter_EnergyReal_WAC_Plus_Absolute}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Frequency_Phase_Average"])) {
                                              $meter_Frequency_Phase_Average = round($json_meter["Body"]["Data"]["Frequency_Phase_Average"], 2);
                                              logging($id, "Smartmeter Frequency_Phase_Average: {$meter_Frequency_Phase_Average}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["PowerReal_P_Phase_1"])) {
                                              $meter_PowerReal_P_Phase_1 = round(abs($json_meter["Body"]["Data"]["PowerReal_P_Phase_1"]), 1);
                                              logging($id, "Smartmeter PowerReal_P_Phase_1: {$meter_PowerReal_P_Phase_1}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["PowerReal_P_Phase_2"])) {
                                              $meter_PowerReal_P_Phase_2 = round(abs($json_meter["Body"]["Data"]["PowerReal_P_Phase_2"]), 1);
                                              logging($id, "Smartmeter PowerReal_P_Phase_2: {$meter_PowerReal_P_Phase_2}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["PowerReal_P_Phase_3"])) {
                                              $meter_PowerReal_P_Phase_3 = round(abs($json_meter["Body"]["Data"]["PowerReal_P_Phase_3"]), 1);
                                              logging($id, "Smartmeter PowerReal_P_Phase_3: {$meter_PowerReal_P_Phase_3}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["PowerReal_P_Sum"])) {
                                              $meter_PowerReal_P_Phase_Sum = round(abs($json_meter["Body"]["Data"]["PowerReal_P_Sum"]), 1);
                                              logging($id, "Smartmeter PowerReal_P_Sum: {$meter_PowerReal_P_Phase_Sum}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Voltage_AC_Phase_1"])) {
                                              $meter_Voltage_AC_Phase_1 = round($json_meter["Body"]["Data"]["Voltage_AC_Phase_1"], 1);
                                              logging($id, "Smartmeter Voltage_AC_Phase_1: {$meter_Voltage_AC_Phase_1}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Voltage_AC_Phase_2"])) {
                                              $meter_Voltage_AC_Phase_2 = round($json_meter["Body"]["Data"]["Voltage_AC_Phase_2"], 1);
                                              logging($id, "Smartmeter Voltage_AC_Phase_2: {$meter_Voltage_AC_Phase_2}", 0, 7);
                                          }
                                          if (isset($json_meter["Body"]["Data"]["Voltage_AC_Phase_3"])) {
                                              $meter_Voltage_AC_Phase_3 = round($json_meter["Body"]["Data"]["Voltage_AC_Phase_3"], 1);
                                              logging($id, "Smartmeter Voltage_AC_Phase_3: {$meter_Voltage_AC_Phase_3}", 0, 7);
                                          }
                                      }
                                  }
                              
                                  // ++++ ALLGEMEINER TEIL ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                                  if ($get_pv_data == 1 && $error == 0) {
                                      // Betriebsmodus (doppelt, aber okay)
                                      if ($pv_P_Grid <= 0) {
                                          $anlage_Netzeinspeisung = abs($pv_P_Grid);
                                          $anlage_Betriebsmodus = 1;
                                          logging($id, "PV Anlage speist ins Netz ein", 0, 7);
                                      } else {
                                          $anlage_Netzeinspeisung = 0;
                                          $anlage_Betriebsmodus = 0;
                                      }
                                      if ($pv_P_Grid >= 0) {
                                          $anlage_Netzbezug = abs($pv_P_Grid);
                                      } else {
                                          $anlage_Netzbezug = 0;
                                      }
                              
                                      // Berechne Zählerstände für GEN24
                                      $GEN24_day_energy = 0;
                                      if ($pv_type_GEN24 == 1) {
                                          logging($id, "---Berechne Zählerstände---", 0, 7);
                                          $time_new = date("Y-m-d H:i:s");
                                          $day_new_i = date("j");
                                          $time_last_call = logic_getVar($id, 109);
                                          $timestamp_last_call = strtotime($time_last_call);
                                          $day_last_call = date("j", $timestamp_last_call);
                              
                                          logging($id, "Last call {$time_last_call}", 0, 7);
                                          logging($id, "Tag last call {$day_last_call}", 0, 7);
                              
                                          if ($day_new_i != $day_last_call) {
                                              logging($id, "Tageswechsel", 0, 7);
                                              $count_energy_PV = 0;
                                              $GEN24_start_energy = $pv_TOTAL_ENERGY;
                                              $GEN24_day_energy = 0;
                                              logic_setVar($id, 106, $count_energy_PV);
                                              logic_setVar($id, 110, $GEN24_start_energy);
                                              if ($get_battery_data == 1) {
                                                  $count_energy_to_bat = 0;
                                                  $count_energy_from_bat = 0;
                                                  logic_setVar($id, 107, $count_energy_to_bat);
                                                  logic_setVar($id, 108, $count_energy_from_bat);
                                              }
                                          } else {
                                              $GEN24_start_energy = logic_getVar($id, 110);
                                              $GEN24_day_energy = $pv_TOTAL_ENERGY - $GEN24_start_energy;
                                              $calc_factor = 3600000 / $refresh_time;
                                              $count_energy_PV = logic_getVar($id, 106);
                                              $count_energy_PV = $count_energy_PV + ($pv_P_PV / $calc_factor);
                                              logic_setVar($id, 106, $count_energy_PV);
                                              if ($get_battery_data == 1) {
                                                  $count_energy_to_bat = logic_getVar($id, 107);
                                                  $count_energy_from_bat = logic_getVar($id, 108);
                                                  if ($pv_P_Akku >= 0) {
                                                      $count_energy_from_bat = $count_energy_from_bat + ($pv_P_Akku / $calc_factor);
                                                  } else if ($pv_P_Akku < 0) {
                                                      $count_energy_to_bat = $count_energy_to_bat + (abs($pv_P_Akku) / $calc_factor);
                                                  }
                                                  logic_setVar($id, 107, $count_energy_to_bat);
                                                  logic_setVar($id, 108, $count_energy_from_bat);
                                              }
                                          }
                                          logic_setVar($id, 109, $time_new);
                                          logging($id, "---Berechne Zählerstände Ende---", 0, 7);
                                      }
                                  }
                              
                                  // +++ Schreibe Ausgänge +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                                  if ($get_pv_data == 1 && $error == 0) {
                                      logic_setOutput($id, 1, $pv_ErrorCode);
                                      if ($pv_type_GEN24 == 0) {
                                          logic_setOutput($id, 2, $pv_LEDColor);
                                          logic_setOutput($id, 3, $pv_LEDState);
                                      }
                                      logic_setOutput($id, 4, $pv_InverterState);
                                      logic_setOutput($id, 5, $pv_StatusCode);
                                      logic_setOutput($id, 6, $pv_Fehler);
                                      if ($pv_type_GEN24 == 0) {
                                          logic_setOutput($id, 7, $pv_DAY_ENERGY);
                                          logic_setOutput($id, 8, $pv_YEAR_ENERGY);
                                      } else {
                                          logic_setOutput($id, 7, $GEN24_day_energy);
                                      }
                                      logic_setOutput($id, 9, $pv_TOTAL_ENERGY);
                                      logic_setOutput($id, 10, $pv_UDC);
                                      logic_setOutput($id, 11, $pv_IDC);
                                      if ($pv_type_GEN24 == 1) {
                                          logic_setOutput($id, 12, $pv_UDC_2);
                                          logic_setOutput($id, 13, $pv_IDC_2);
                                      }
                                      logic_setOutput($id, 14, $pv_UAC);
                                      logic_setOutput($id, 15, $pv_IAC);
                                      logic_setOutput($id, 16, $pv_FAC);
                                      logic_setOutput($id, 17, $pv_PAC);
                                      logic_setOutput($id, 19, $pv_P);
                                      logic_setOutput($id, 20, $pv_P_PV);
                                      logic_setOutput($id, 21, $pv_P_Akku);
                                      logic_setOutput($id, 22, $pv_P_Grid);
                                      logic_setOutput($id, 23, $pv_rel_Autonomy);
                                      logic_setOutput($id, 24, $pv_rel_SelfConsumption);
                                      logic_setOutput($id, 25, $pv_P_Load);
                                      logic_setOutput($id, 26, $anlage_Netzbezug);
                                      logic_setOutput($id, 27, $anlage_Netzeinspeisung);
                                      logic_setOutput($id, 28, $anlage_Betriebsmodus);
                                      logic_setOutput($id, 52, date('Y.m.d H:i:s'));
                                  }
                              
                                  if ($get_battery_data == 1 && $error == 0) {
                                      logic_setOutput($id, 30, $battery_StateOfCharge_Relative);
                                      logic_setOutput($id, 31, $battery_Voltage_DC);
                                      logic_setOutput($id, 32, $battery_Current_DC);
                                      logic_setOutput($id, 33, $battery_Temperature_Cell);
                                      logic_setOutput($id, 34, $battery_Status_BatteryCell);
                                      logic_setOutput($id, 35, $battery_Status_Text);
                                      if ($pv_type_GEN24 == 1) {
                                          logic_setOutput($id, 55, $count_energy_PV);
                                          logic_setOutput($id, 56, $count_energy_to_bat);
                                          logic_setOutput($id, 57, $count_energy_from_bat);
                                      }
                                  }
                              
                                  if ($get_meter_data == 1 && $error == 0) {
                                      logic_setOutput($id, 37, $meter_EnergyReal_WAC_Minus_Absolute);
                                      logic_setOutput($id, 38, $meter_EnergyReal_WAC_Plus_Absolute);
                                      logic_setOutput($id, 39, $meter_Frequency_Phase_Average);
                                      logic_setOutput($id, 40, $meter_Voltage_AC_Phase_1);
                                      logic_setOutput($id, 41, $meter_Current_AC_Phase_1);
                                      logic_setOutput($id, 42, $meter_PowerReal_P_Phase_1);
                                      logic_setOutput($id, 43, $meter_Voltage_AC_Phase_2);
                                      logic_setOutput($id, 44, $meter_Current_AC_Phase_2);
                                      logic_setOutput($id, 45, $meter_PowerReal_P_Phase_2);
                                      logic_setOutput($id, 46, $meter_Voltage_AC_Phase_3);
                                      logic_setOutput($id, 47, $meter_Current_AC_Phase_3);
                                      logic_setOutput($id, 48, $meter_PowerReal_P_Phase_3);
                                      logic_setOutput($id, 49, $meter_Current_AC_Sum);
                                      logic_setOutput($id, 50, $meter_PowerReal_P_Phase_Sum);
                                  }
                              
                                  if ($use_internal_API == 1 && $pv_type_GEN24 == 1 && $error == 0) {
                                      logic_setOutput($id, 60, $iAPI_energycounter_from_PV1);
                                      logic_setOutput($id, 61, $iAPI_energycounter_from_PV2);
                                      logic_setOutput($id, 62, $iAPI_energycounter_to_BAT);
                                      logic_setOutput($id, 63, $iAPI_energycounter_from_BAT);
                                      logic_setOutput($id, 64, $iAPI_BAT_SW_version);
                                      logic_setOutput($id, 65, $iAPI_BAT_SOH);
                                      logic_setOutput($id, 66, $iAPI_WR_PV_point_state);
                                      logic_setOutput($id, 67, $iAPI_WR_temp);
                                      logic_setOutput($id, 68, $iAPI_WR_FAN1_power);
                                      logic_setOutput($id, 69, $iAPI_WR_FAN2_power);
                                      logic_setOutput($id, 70, $iAPI_WR_iso);
                                      logic_setOutput($id, 71, $iAPI_day_energy_PV1);
                                      logic_setOutput($id, 72, $iAPI_day_energy_PV2);
                                      logic_setOutput($id, 73, $iAPI_day_energy_to_bat);
                                      logic_setOutput($id, 74, $iAPI_day_energy_from_bat);
                                  }
                              
                                  logic_setOutput($id, 53, $error);
                                  sleep($refresh_time);
                              }
                              
                              logging($id, "Baustein beendet", 0, 7);
                              sql_disconnect();
                              
                              // Funktionen getErrorString...
                              function getErrorString100($error){
                                  $text ="";
                                  switch ($error) {
                                      case 102: $text = "AC-Spannung zu hoch"; break;
                                      case 103: $text = "AC-Spannung zu gering"; break;
                                      case 105: $text = "AC-Frequenz zu hoch"; break;
                                      case 106: $text = "AC-Frequenz zu gering"; break;
                                      case 107: $text = "AC-Netz nicht vorhanden"; break;
                                      case 108: $text = "Inselbetrieb erkannt"; break;
                                      case 112: $text = "Fehler RCMU"; break;
                                  }
                                  return $text;
                              }
                              
                              function getErrorString300($error){
                                  $text ="";
                                  switch ($error) {
                                      case 301: $text = "Überstrom AC"; break;
                                      case 302: $text = "Überstrom DC"; break;
                                      case 303: $text = "Übertemperatur DC Modul"; break;
                                      case 304: $text = "Übertemperatur AC Modul"; break;
                                      case 305: $text = "Keine Einspeisung trotz geschlossener Relais"; break;
                                      case 306: $text = "Zu wenig PV Leistung für Einspeisung"; break;
                                      case 307: $text = "DC Spannung zu gering für Einspeisung"; break;
                                      case 308: $text = "Zwischenkreisspannung zu hoch"; break;
                                      case 309: $text = "DC Eingangsspannung MPPT1 zu hoch"; break;
                                      case 311: $text = "DC Stränge verpolt"; break;
                                      case 313: $text = "DC Eingangsspannung MPPT2 zu hoch"; break;
                                      case 314: $text = "Timeout Stromsensor-Kalibrierung"; break;
                                      case 315: $text = "AC Stromsensor Fehler"; break;
                                      case 316: $text = "InterruptCheck falin"; break;
                                      case 325: $text = "Übertemperatur im Anschlussbreich"; break;
                                      case 326: $text = "Lüfter 1 Fehler"; break;
                                      case 327: $text = "Lüfter 2 Fehler"; break;
                                  }
                                  return $text;
                              }
                              
                              function getErrorString400($error){
                                  $text ="";
                                  switch ($error) {
                                      case 401: $text = "Kommunikation mit dem Leistungsteil nicht möglich"; break;
                                      case 406: $text = "Temperatursensor AC Modul defekt (L1)"; break;
                                      case 407: $text = "Temperatursensor AC Modul defekt (L2)"; break;
                                      case 408: $text = "Zu hoher Gleichanteil im Versorgungsnetz gemessen"; break;
                                      case 412: $text = "Fixspannung statt MPP-Betrieb: Einstellwert ist zu niedrig oder zu hoch"; break;
                                      case 415: $text = "Sicherheitsschaltung durch Optionskarte oder RECERBO hat ausgelöst"; break;
                                      case 416: $text = "Kommunikation zwischen Leistungsteil und Steuerung nicht möglich"; break;
                                      case 417: $text = "ID-Problem der Hardware"; break;
                                      case 419: $text = "Unique-ID Konflikt"; break;
                                      case 420: $text = "Kommunikation mit dem Hybridmanager nicht möglich"; break;
                                      case 421: $text = "Fehler HID-Range"; break;
                                      case 425: $text = "Kommunikation mit dem Leistungsteil ist nicht möglich"; break;
                                      case 426: $text = "Möglicher Hardware-Defekt"; break;
                                      case 427: $text = "Möglicher Hardware-Defekt"; break;
                                      case 428: $text = "Möglicher Hardware-Defekt"; break;
                                      case 431: $text = "Software Problem"; break;
                                      case 436: $text = "Funktions-Inkompatibilität"; break;
                                      case 437: $text = "Leistungsteil-Problem"; break;
                                      case 438: $text = "Funktions-Inkompatibilität"; break;
                                      case 443: $text = "Zwischenkreis-Spannung zu gering oder unsymetrisch"; break;
                                      case 445: $text = "Kompatibilitätsfehler"; break;
                                      case 447: $text = "Isolationsfehler"; break;
                                      case 448: $text = "Neutralleiter nicht angeschlossen"; break;
                                      case 450: $text = "Guard kann nicht gefunden werden"; break;
                                      case 451: $text = "Speicherfehler entdeckt"; break;
                                      case 452: $text = "Kommunikationsfehler zwischen den Prozessoren"; break;
                                      case 453: $text = "Netzspannung und Leistungsteil stimmen nicht überein"; break;
                                      case 454: $text = "Netzspannung und Leistungsteil stimmen nicht überein"; break;
                                      case 456: $text = "Anti-Islanding-Funktion wird nicht mehr korrekt ausgeführt"; break;
                                      case 457: $text = "Netzrelais klebt oder die Neutralleiter-Erde-Spannung ist zu hoch"; break;
                                      case 458: $text = "Fehler bei der Mess-Signalerfassung"; break;
                                      case 459: $text = "Fehler bei der Erfassung des Mess-Signals für den Isolationstest"; break;
                                      case 460: $text = "Referenz-Spannungsquelle DSP außerhalb der tolerierten Grenzen"; break;
                                      case 461: $text = "Fehler im DSP-Datenspeicher"; break;
                                      case 462: $text = "Fehler bei der DC-Einspeisungs-Überwachungsroutine"; break;
                                      case 463: $text = "Polarität AC vertauscht, AC-Verbindungsstecker falsch eingesteckt"; break;
                                      case 474: $text = "RCMU-Sensor defekt"; break;
                                      case 475: $text = "Isolationsfehler (Verbindung zwischen Solarmodul und Erdung)"; break;
                                      case 476: $text = "Versorgungsspannung der Treiberversorgung zu gering"; break;
                                      case 479: $text = "Zwischenkreis-Spannungsrelais hat ausgeschaltet"; break;
                                      case 480: $text = "Funktions-Inkompatibilität"; break;
                                      case 481: $text = "Funktions-Inkompatibilität"; break;
                                      case 482: $text = "Setup nach der erstmaligen Inbetriebnahme wurde abgebrochen"; break;
                                      case 483: $text = "Spannung UDCfix beim MPP2-String liegt außerhalb des gültigen Bereichs"; break;
                                      case 485: $text = "CAN Sende-Buffer ist voll"; break;
                                      case 489: $text = "Permanente Überspannung am Zwischenkreis-Kondensator"; break;
                                  }
                                  return $text;
                              }
                              
                              function getErrorString500($error){
                                  $text ="";
                                  switch ($error) {
                                      case 502: $text = "Isolationsfehler an den Solarmodulen"; break;
                                      case 509: $text = "Keine Einspeisung innerhalb der letzten 24 Stunden"; break;
                                      case 515: $text = "Kommunikation mit Filter nicht möglich"; break;
                                      case 516: $text = "Kommunikation mit der Speichereinheit nicht möglich"; break;
                                      case 517: $text = "Leistungs-Derating auf Grund zu hoher Temperatur"; break;
                                      case 518: $text = "Interne DSP-Fehlfunktion"; break;
                                      case 519: $text = "Kommunikation mit der Speichereinheit nicht möglich"; break;
                                      case 520: $text = "Keine Einspeisung innerhalb der letzten 24 Stunden von MPPT1"; break;
                                      case 522: $text = "DC low String 1"; break;
                                      case 523: $text = "DC low String 2"; break;
                                      case 558: $text = "Funktions-Inkompatibilität"; break;
                                      case 559: $text = "Funktions-Inkompatibilität"; break;
                                      case 560: $text = "Leistungs-Derating wegen Überfrequenz"; break;
                                      case 564: $text = "Funktions-Inkompatibilität"; break;
                                      case 566: $text = "Arc Detector ausgeschaltet (z.B. bei externer LichtbogenÜberwachung)"; break;
                                      case 568: $text = "fehlerhaftes Eingangssignal an der Multifunktions-Stromschnittstelle"; break;
                                      case 572: $text = "Leistungslimitierung durch das Leistungsteil"; break;
                                      case 573: $text = "Untertemperatur Warnung"; break;
                                      case 581: $text = "Setup ?Special Purpose Utility-Interactive? (SPUI) ist aktiviert"; break;
                                  }
                                  return $text;
                              }
                              
                              function getErrorString600($error){
                                  $text ="";
                                  switch ($error) {
                                      case 601: $text = "CAN Bus ist voll"; break;
                                      case 603: $text = "Temperatursensor AC Modul defekt (L3)"; break;
                                      case 604: $text = "Temperatursensor DC Modul defekt"; break;
                                      case 607: $text = "RCMU Fehler"; break;
                                      case 608: $text = "Funktions-Inkompatibilität"; break;
                                  }
                                  return $text;
                              }
                              
                              function getErrorString700($error){
                                  $text ="";
                                  if (($error >= 706 && $error <= 716) || ($error >= 722 && $error <= 730) || ($error >= 761 && $error <= 765) || ($error >= 781 && $error <= 794)){
                                      $text = "Gibt Auskunft über den internen Prozessorstatus";
                                  } else {
                                      switch ($error) {
                                          case 701: $text = "Gibt Auskunft über den internen Prozessorstatus"; break;
                                          case 702: $text = "Gibt Auskunft über den internen Prozessorstatus"; break;
                                          case 703: $text = "Gibt Auskunft über den internen Prozessorstatus"; break;
                                          case 704: $text = "Gibt Auskunft über den internen Prozessorstatus"; break;
                                          case 721: $text = "EEPROM wurde neu initialisiert"; break;
                                          case 731: $text = "Initialisierungsfehler - USB-Stick wird nicht unterstützt"; break;
                                          case 732: $text = "Initialisierungsfehler - Überstrom am USB-Stick"; break;
                                          case 733: $text = "Kein USB-Stick angesteckt"; break;
                                          case 734: $text = "Update-Datei wird nicht erkannt oder ist nicht vorhanden"; break;
                                          case 735: $text = "Nicht zum Gerät passende Update-Datei, zu alte Update-Datei"; break;
                                          case 736: $text = "Schreib- oder Lesefehler aufgetreten"; break;
                                          case 737: $text = "Datei konnte nicht geöffnet werden"; break;
                                          case 738: $text = "Abspeichern einer Log-Datei nicht möglich"; break;
                                          case 740: $text = "Initialisierungsfehler - Fehler im Dateisystem des USB-Sticks"; break;
                                          case 741: $text = "Fehler beim Aufzeichnen von Logging-Daten"; break;
                                          case 743: $text = "Fehler während des Updates aufgetreten"; break;
                                          case 745: $text = "Update-Datei fehlerhaft"; break;
                                          case 746: $text = "Fehler während des Updates aufgetreten"; break;
                                          case 751: $text = "Uhrzeit verloren"; break;
                                          case 752: $text = "Real Time Clock Modul Kommunikationsfehler"; break;
                                          case 753: $text = "Interner Fehler: Real Time Clock Modul ist im Notmodus"; break;
                                          case 754: $text = "Gibt Auskunft über den internen Prozessorstatus"; break;
                                          case 755: $text = "Gibt Auskunft über den internen Prozessorstatus"; break;
                                          case 757: $text = "Hardware-Fehler im Real Time Clock Modul"; break;
                                          case 758: $text = "Interner Fehler: Real Time Clock Modul ist im Notmodus"; break;
                                          case 760: $text = "Interner Hardware-Fehler"; break;
                                          case 766: $text = "Notfall-Leistungsbegrenzung wurde aktiviert (max. 750 W)"; break;
                                          case 767: $text = "Gibt Auskunft über den internen Prozessorstatus"; break;
                                          case 768: $text = "Leistungsbegrenzung in den Hardware-Modulen unterschiedlich"; break;
                                          case 772: $text = "Speichereinheit nicht verfügbar"; break;
                                          case 773: $text = "Software-Update Gruppe 0 (ungültiges Länder-Setup)"; break;
                                          case 775: $text = "PMC-Leistungsteil nicht verfügbar"; break;
                                          case 776: $text = "Device-Typ ungültig"; break;
                                      }
                                  }
                                  return $text;
                              }
                              ?>
                              ###[/EXEC]###​

                              Kommentar


                                #60
                                beauty: vielen dank! Schaue ich mir morgen an :-)
                                twi127 wäre schön wenn du den Baustein offiziell aktualisierst? Danke

                                Gruß
                                Thorsten

                                Kommentar

                                Lädt...
                                X