Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Zendure Hyper 2000 #272

Open
maxp1256 opened this issue Jul 3, 2024 · 31 comments
Open

Support for Zendure Hyper 2000 #272

maxp1256 opened this issue Jul 3, 2024 · 31 comments

Comments

@maxp1256
Copy link

maxp1256 commented Jul 3, 2024

Hello!

are there any plans for supporting the new Hyper 2000? I've an Shelly 3EM, a photovoltaik without an hybrid inverter and the awattar.at hourly tariff. I would expect to be able to use the cheap hours in the night (2-5) to load the batteries, skip the rise in the morning hours (6-9) with zero net usage, continue reloading&flatting burst peaks (washing mashine/dishwasher heating or cooking) during the day with pv and skip the next high during 18-21 until batteries are empty.

I don't expect that it's possible to cover this with the standard app so I would be happy to have a very simple possibility to set mode (charge/discharge) and wattage locally, fast, reliable and without cloud/internet demand.

Edit: Another Idea: Do you know how the shelly integration is working? Is it possible to emulate a Shelly 3EM device locally to do every controlling with the power values?

@reinhard-brandstaedter
Copy link
Owner

Servus,
I have no other device available than my own SFHub 1.2k. So I can’t tell you exactly. You might be able to disconnect the Hyper from Zendure Cloud the same way as the SF hubs with the sf-bt-manager and then you would get all data reported to a local MQTT broker, which is also used to relay commands to the Hyper2000 (given it works similar to the other SF products).
It could be though that Zendure has implemented secure MQTT by now which could be an issue.

The shelly integration is likely a data exchange on the zendure backend between their mqtt and shelly cloud. But even so, if your hub is using a local mqtt you likely can also steer it via simulated shelly reporting (smart matching mode)

@ralf-koe
Copy link

ralf-koe commented Jul 9, 2024

Does that

you likely can also steer it via simulated shelly reporting (smart matching mode)

mean, that I can write Shelly (fake) data via MQTT?

@maxp1256
Copy link
Author

maxp1256 commented Jul 9, 2024

Hello,

a local mqtt service/proxy which modifies the real shelly em data sounds very promising. Do you know how it's working currently? (the marketing documents from zendure are talking about a link between shelly and zendure cloud) but I don't think that this would work because of instable internet connectivity and WAN delays.
Probably the "linking" is only the interchange of the local mqtt endpoint (IP+Port)?

@reinhard-brandstaedter
Copy link
Owner

No, the original Zendure/Shelly integration can only happen via the public clouds. So both your devices (shelly & solarflow) have to be online.
For users like me (shellies are only reporting locally) this wouldn't work.
The hub has a input property smartPower which I assume is used to provide the readings of a Shelly (or any other power meter device) which then is used to adjust the outputLimit. Also the smartMode will control in which. mode (smart matching) the hub is working.
image
So if you want to try your approach you'll need to set the smartMode accordingly (check values by setting it from the App) and then publish data via the smartPower property.
If I'm correct the hub will then adjust it's outputLimit.
There are for sure some ramifications, like how often that limit can be updated (the hub was never the fastest in switching), ..

@Raudi1
Copy link

Raudi1 commented Aug 24, 2024

Today I finally had some time to try solarflow-control on my Hyper 2000. Taking it offline worked, but I couldn't really get it to work completely. That's expected, since the device is different from the hub, but I'd really like to have local control of my Hyper 2000. I'm sadly no developer and can only do a bit of coding, so I'd only be able to help.
Ideally this software would control the integrated inverter to charge the Hyper2000 with excess energy and to discharge it when there's power taken from the utility. I'd be happy with being able to set the charge/discharge power via MQTT though. Then I could let EVCC or Home Assistant handle it.
After taking the Hyper2000 offline, there's no MQTT data aside from this:
image
Here's what the log shows

2024-08-24 13:59:55,579:INFO: MQTT Host: 192.168.1.1:1883
2024-08-24 13:59:55,579:INFO: MQTT User: MQTT/secret
2024-08-24 13:59:55,579:INFO: Solarflow Hub: ja72U0ha/xxxxxxx
2024-08-24 13:59:55,579:INFO: Limit via inverter: False
2024-08-24 13:59:55,579:INFO: Control Parameters:
2024-08-24 13:59:55,579:INFO:   MIN_CHARGE_POWER = 10
2024-08-24 13:59:55,579:INFO:   MAX_DISCHARGE_LEVEL = 800
2024-08-24 13:59:55,579:INFO:   MAX_INVERTER_LIMIT = 800
2024-08-24 13:59:55,579:INFO:   MAX_INVERTER_INPUT = 1190
2024-08-24 13:59:55,579:INFO:   SUNRISE_OFFSET = 60
2024-08-24 13:59:55,579:INFO:   SUNSET_OFFSET = 60
2024-08-24 13:59:55,579:INFO:   DISCHARGE_DURING_DAYTIME = True
2024-08-24 13:59:55,691:INFO: IP Address: xxx.xxx.xxx.xxx
2024-08-24 13:59:55,691:INFO: Location: Secret, North Rhine-Westphalia, Germany
2024-08-24 13:59:55,691:INFO: Coordinates: (Lat: xx, Lng: xx)
2024-08-24 13:59:55,693:INFO: No config setting found for option "control_bypass" in section solarflow!
2024-08-24 13:59:55,694:INFO: Publishing Homeassistant templates...
2024-08-24 13:59:55,732:INFO: Published 33 Homeassistant templates.
2024-08-24 13:59:55,732:INFO: Triggering telemetry update: iot/ja72U0ha/xxxx/properties/read
2024-08-24 13:59:55,732:INFO: Using OpenDTU: Base topic: solar/xxxx, Limit topic: solar/xxxx/cmd/limit_nonpersistent_absolute, SF Channels: [3], AC Limit: 1200
2024-08-24 13:59:55,732:INFO: No config setting found for option "scaling_factor" in section smartmeter!
2024-08-24 13:59:55,732:INFO: Using Smartmeter: Base topic: shellypro3em/status/em:0, Current power accessor: total_act_power, Total power accessor: total_aprt_power, Rapid change diff: 500W, Zero offset: 20W, Scaling factor: 1
2024-08-24 13:59:55,732:INFO: Connected to MQTT Broker!
2024-08-24 13:59:55,733:INFO: Hub subscribing: /ja72U0ha/xxxx/properties/report
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/solarInputPower
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/electricLevel
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/outputPackPower
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/packInputPower
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/outputHomePower
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/outputLimit
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/inverseMaxPower
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/masterSoftVersion
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/pass
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/passMode
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/batteries/+/socLevel
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/telemetry/batteries/+/totalVol
2024-08-24 13:59:55,733:INFO: Hub subscribing: solarflow-hub/xxxx/control/#
2024-08-24 13:59:55,733:INFO: Turning hub buzzer OFF
2024-08-24 13:59:55,733:INFO: DTU subscribing: solar/xxxx/0/powerdc
2024-08-24 13:59:55,733:INFO: DTU subscribing: solar/xxxx/0/efficiency
2024-08-24 13:59:55,734:INFO: DTU subscribing: solar/xxxx/+/power
2024-08-24 13:59:55,734:INFO: DTU subscribing: solar/xxxx/status/producing
2024-08-24 13:59:55,734:INFO: DTU subscribing: solar/xxxx/status/reachable
2024-08-24 13:59:55,734:INFO: DTU subscribing: solar/xxxx/status/limit_absolute
2024-08-24 13:59:55,734:INFO: DTU subscribing: solar/xxxx/status/limit_relative
2024-08-24 13:59:55,734:INFO: DTU subscribing: solarflow-hub/+/control/dryRun
2024-08-24 13:59:55,734:INFO: Smartmeter subscribing: shellypro3em/status/em:0
2024-08-24 13:59:55,777:INFO: Taking over bypass control: False
2024-08-24 13:59:55,778:INFO: Updating SUNRISE_OFFSET to 60 minutes
2024-08-24 13:59:55,778:INFO: Updating SUNSET_OFFSET to 60 minutes
2024-08-24 13:59:55,778:INFO: Updating MIN_CHARGE_POWER to 10 W
2024-08-24 13:59:55,778:INFO: Updating MAX_DISCHARGE_POWER to 1200 W
2024-08-24 13:59:55,778:INFO: Updating DISCHARGE_DURING_DAYTIME to True
2024-08-24 13:59:57,964:INFO: Rapid rise in demand detected, clearing buffer!
2024-08-24 13:59:57,966:INFO: HUB: S:-1.0W [ ], B: -1% (-1), V:-1.0V (-1.0), C: 0W, P:False (manual, possible), F:-1.0h, E:-1.0h, H: -1W, L: -1W
2024-08-24 13:59:57,966:INFO: INV: AC:800W, DC:1150.8W (285.2|304.9|290.8|269.9), L:800W (500.0W/channel) [ -1W]
2024-08-24 13:59:57,966:INFO: SMT: T:Smartmeter P:3304.0W [ 3304.0,3304.0,3304.0 ]
2024-08-24 13:59:57,967:INFO: SMT triggers limit function: 3304.0 -> 3304.0: executed
2024-08-24 14:00:14,469:INFO: Determined inverter's max capacity: 2000.0

I

@welli2009
Copy link

welli2009 commented Aug 24, 2024 via email

@Raudi1
Copy link

Raudi1 commented Aug 24, 2024

Hi Vrabetz, Your logs do not contain the necessary informations needed to develop your control. Try using MQTT Explorer to gather the necessary informations and attach screenshots from MQTT Explorer with the topics. welli

I'll try, but currently I can't connect to the Zendure MQTT. Was working earlier this day.
Apparently the Hyper2000 uses the same data as the Hub and extends it: https://github.com/Zendure/developer-device-data-report?tab=readme-ov-file#the-fields-extended-by--hyper2000--ace-1500-based-on-solarflow
The topic is always the same ja72U0ha/"DeviceID"/state and the JSON only contains part of the values. Here's a few examples from the official cloud API:

'{"hubState":0,"remainInputTime":59940,"packState":2,"sn":"xxxxx","remainOutTime":281}'
'{"heatState":0,"sn":"xxxx"}'
'{"hyperTmp":3131,"sn":"xxxx"}'
'{"inverseMaxPower":600,"inputLimit":116,"outputLimit":30,"acMode":1,"sn":"xxxx"}' #acMode 1 is input from the grid; 2 is output
'{"outputHomePower":261,"packInputPower":270,"electricLevel":75,"sn":"xxxx"}'
'{"hyperTmp":3141,"sn":"xxxx"}'

@linuxstony
Copy link

Hi Vrabetz, Your logs do not contain the necessary informations needed to develop your control. Try using MQTT Explorer to gather the necessary informations and attach screenshots from MQTT Explorer with the topics. welli

Which information would be important particularly? Currently i have the Hyper connected to the official global MQTT Server which is bridged to my local one. I would be as willing to assist as @Raudi1 is :)

@jschroeter
Copy link

I'd be happy with being able to set the charge/discharge power via MQTT though

This is also what I'm trying as a first step but I'm running into the same issue. When Hyper is locally connected to my HA MQTT (worked with this) I only receive the register/replay message, nothing else. I tried publishing via iot/${productKey}/${deviceKey}/properties/read or iot/${productKey}/${deviceKey}/properties/write topics but so far nothing happened.
@reinhard-brandstaedter could you maybe explain the local MQTT API a bit further? Which topics to we need to publish to receive more values or to change values? Thanks a lot for all your efforts!

Basically I'd like to have a local smart control for Hyper (AC-only, no panels connected), via Shelly 3EM and HA. The native cloud-based Shelly integration works in general, but it's a bit slow and I would prefer it to work 100% local.

@jschroeter
Copy link

Maybe also helpful as a reference: https://github.com/nograx/ioBroker.zendure-solarflow
From the code it seems like they support controlling the Hyper - but via the cloud API.

@reinhard-brandstaedter
Copy link
Owner

@jschroeter once the hub is registered to the local MQTT it should start sending data to a topic like this:

/${productKey}/${deviceKey}/properties/report

(note the leading "/" which is usually not a standard/valid MQTT topic as it results in an empty top node).
There were cases reported where the hubs aren't reporting immediately after the register switch. (I personally had this once for no obvious reason).
Sometimes a few register retries or a few reboots of the hub helped - with some waiting in between.
I always tried this:

  • register the hub to the own MQTT (make sure your MQTT allows anonymous logins, or ensure you have the correct user/pwd added to MQTT, with the hardcoded user and password)
  • wait and see if data arrives, if not after 15min restart the hub
  • wait again, maybe disconnect the hub from WiFi (force WiFi reconnect from your AP/Router)
  • if that doesn't help, register with the mobile App to zendure, try again.

Once the hub reports via the above topic, solarflow-control will read those and "pretty-print" them to

solarflow-hub/${productKey}/telemetry

@reinhard-brandstaedter
Copy link
Owner

@jschroeter you also might find this useful, i summarized the properties and how the hubs can be controlled directly:
https://github.com/reinhard-brandstaedter/solarflow-control/tree/dev/doc

@MaisonGF
Copy link

@reinhard-brandstaedter not "smartMode" or neither "smartPower" reported here by the Hyper disconnected :

image

And not in control :

Capture d’écran du 2024-10-27 21-59-36

Any idea ? Did i miss a parameter ?

@reinhard-brandstaedter
Copy link
Owner

@MaisonGF we are just unwrapping whatever is reported by the Zendure device via it's native .../properties/report topic.
There is no logic in sf-control to extract anything device specific. It just takes what is coming in and creates a separate topic for it. If you don't see any properties then they are either not sent or not yet sent...

@cmuster
Copy link

cmuster commented Nov 30, 2024

@jschroeter I'm running into the same issue here with my Hyper2000. Did you figure it out in the meantime?

When just connecting via BT I'm getting all the properties, but when connecting to my local MQTT broker
I'm just receiving 2 topics in MQTT explorer (not sure what id gDa3tb is in the 2nd topic):

iot/ja72U0ha/<deviceId>/register/replay

/gDa3tb/<deviceId>/time-sync

{"messageId":9103,"deviceId":"<deviceId>","timestamp":1732979122}

I added a user to my MQTT broker with name <deviceId> and pw generated by this snipped from @reinhard-brandstaedter

@jschroeter
Copy link

@cmuster unfortunately not yet. Only tried it one more time but without success and didn't invest more time yet. But I'm still interested and want to try it again soon.

@reinhard-brandstaedter
Copy link
Owner

@cmuster can you post a full log of bt-manager when just connecting via bluetooth (e.g. via the -i option only).

@cmuster
Copy link

cmuster commented Dec 7, 2024

@reinhard-brandstaedter sorry for the late reply, finally had time to give this another try.
btw: when I try to reconnect back to the Zendure cloud via BT manager script this also fails - have to go through the app in this case. I did push the power button 3 seconds to reset network settings before running the disconnect/connect script, as is the process when doing it via app. Also tried restarting the Hyper afterwards.

Here's the info log via bluetooth:

2024-12-07 10:08:01,694:INFO: scan for: zene
2024-12-07 10:08:02,689:INFO: Found device: <mac> ZenE1_38
2024-12-07 10:08:04,396:INFO: Services:
2024-12-07 10:08:04,397:INFO: 00001801-0000-1000-8000-00805f9b34fb (Handle: 1): Generic Attribute Profile
2024-12-07 10:08:04,398:INFO: 00001800-0000-1000-8000-00805f9b34fb (Handle: 5): Generic Access Profile
2024-12-07 10:08:04,398:INFO: 0000a002-0000-1000-8000-00805f9b34fb (Handle: 12): Vendor specific
2024-12-07 10:08:04,399:INFO: 00112233-4455-6677-8899-aabbccddeeff (Handle: 18): Unknown
2024-12-07 10:08:04,595:INFO: {'method': 'read_reply', 'deviceId': '<deviceId>', 'success': 1, 'properties': {'getAll': 1}}
2024-12-07 10:08:04,833:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'packNum': 2}, 'packData': [{'sn': '<serialN>'}, {'sn': '<serialN>'}]}
2024-12-07 10:08:04,933:INFO: {'messageId': 799606, 'method': 'error', 'deviceId': '<deviceId>', 'timestamp': 1733562476, 'offData': 1, 'data': []}
2024-12-07 10:08:05,073:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'masterSwitch': 1, 'electricLevel': 49, 'buzzerSwitch': 0}}
2024-12-07 10:08:05,355:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'socSet': 960, 'solarInputPower': 0, 'packInputPower': 0}}
2024-12-07 10:08:05,514:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'outputPackPower': 0, 'outputHomePower': 0, 'gridInputPower': 0}}
2024-12-07 10:08:05,693:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'solarPower1': 0, 'solarPower2': 0, 'remainOutTime': 59940}}
2024-12-07 10:08:05,812:INFO: {'deviceId': '<deviceId>', 'method': 'BLESPP'}
2024-12-07 10:08:05,893:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'remainInputTime': 59940, 'packState': 0, 'hubState': 0}}
2024-12-07 10:08:06,173:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'masterSoftVersion': 8465, 'masterhaerVersion': 0, 'inputMode': 0}}
2024-12-07 10:08:06,333:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'blueOta': 1, 'pvBrand': 0, 'VoltWakeup': 0}}
2024-12-07 10:08:06,513:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'minSoc': 150, 'plugState': 0, 'lowTemperature': 0}}
2024-12-07 10:08:06,733:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'autoHeat': 0, 'heatState': 0, 'invOutputPower': 0}}
2024-12-07 10:08:07,013:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'ambientLightNess': 20, 'ambientLightColor': 65280, 'ambientLightMode': 0}}
2024-12-07 10:08:07,173:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'ambientSwitch': 0, 'OldMode': 0, 'pass': 0}}
2024-12-07 10:08:07,373:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'circuitCheckMode': 0, 'chargingTime': 0, 'chargingType': 0}}
2024-12-07 10:08:07,653:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'dspversion': 8453, 'hyperTmp': 2831, 'strength': 3}}
2024-12-07 10:08:07,833:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'socStatus': 0, 'gridReverse': 2, 'priceType': 0}}
2024-12-07 10:08:07,953:INFO: {'deviceId': '<deviceId>', 'method': 'BLESPP'}
2024-12-07 10:08:08,033:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'phaseCheck': 0, 'reverseState': 0, 'outputLimit': 121}}
2024-12-07 10:08:08,293:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'inputLimit': 0, 'acMode': 1, 'gridStandard': 0}}
2024-12-07 10:08:08,473:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'inverseMaxPower': 1200, 'chargingMode': 2, 'energyPower': 0}}
2024-12-07 10:08:08,654:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'lampSwitch': 1, 'BatVolt': 0, 'clusterSw': 0}}
2024-12-07 10:08:08,914:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'autoModel': 0, 'gridOffMode': 0, 'localState': 0}}
2024-12-07 10:08:09,133:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'acconnect': 1}, 'packData': [{'power': 0, 'socLevel': 48, 'sn': '<serialN>'}]}
2024-12-07 10:08:09,313:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {}, 'packData': [{'state': 0, 'maxTemp': 2801, 'totalVol': 4910, 'sn': '<serialN>'}]}
2024-12-07 10:08:09,521:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {}, 'packData': [{'maxVol': 327, 'minVol': 327, 'softVersion': 4113, 'sn': '<serialN>'}]}
2024-12-07 10:08:09,753:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {}, 'packData': [{'power': 0, 'socLevel': 50, 'state': 0, 'sn': '<serialN>'}]}
2024-12-07 10:08:09,954:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {}, 'packData': [{'maxTemp': 2801, 'totalVol': 4920, 'maxVol': 328, 'sn': '<serialN>'}]}
2024-12-07 10:08:10,193:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {}, 'packData': [{'minVol': 327, 'softVersion': 4113, 'sn': '<serialN>'}]}
2024-12-07 10:08:10,374:INFO: {'method': 'getInfo-rsp', 'deviceId': '<deviceId>', 'deviceSn': '<serialN>', 'firmwares': [{'type': 'MASTER', 'version': 8465}, {'type': 'BMS', 'version': -1}, {'type': 'BMS_AB2000', 'version': 4113}, {'type': 'AC', 'version': 8453}]}
2024-12-07 10:08:10,374:INFO: The SF device ID is: <deviceId>
2024-12-07 10:08:10,375:INFO: The SF device SN is: <serialN>
2024-12-07 10:08:10,494:INFO: {'method': 'getInfo-rsp', 'deviceId': '<deviceId>', 'deviceSn': '<serialN>', 'firmwares': [{'type': 'PLC_CCO', 'version': 12556}, {'type': 'PLC_STA', 'version': 12556}]}
2024-12-07 10:08:10,495:INFO: The SF device ID is: <deviceId>
2024-12-07 10:08:10,495:INFO: The SF device SN is: <serialN>
2024-12-07 10:08:49,100:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'electricLevel': 49}}
2024-12-07 10:09:49,919:INFO: {'method': 'report', 'deviceId': '<deviceId>', 'properties': {'electricLevel': 49}}

@cmuster
Copy link

cmuster commented Dec 8, 2024

Looks like I've made some progress: apparently the productKey of my Hyper2k is not the previously known ja72U0ha but gDa3tb for some reason. Not sure if this is a (new?) revision of the Hyper or whatever. In some of the Mqtt reports its also labeled "SolarFlowPro" instead of "Hyper", but when I query the device list from the Zendure Cloud API it's still reported as 'productName': 'Hyper 2000',

Anyway it looks like I get at least all the telemetry now locally which is great. :) Still have to figure out controlling of the AC charging..

@reinhard-brandstaedter
Copy link
Owner

reinhard-brandstaedter commented Dec 8, 2024

Hi @cmuster thanks for confirming, with a new product ID it shouldn't be too difficult to also add support. Likely all the other behavior stays the same.
Regarding the AC Charging: there is a (recently discovered) property acMode of (all) hubs that seems to control if AC is fed in or taken (yet to be confirmed). If this property is set to 2 means output (from hub), and 1 seems to be input (to the hub). 0 is likely completely off.
You can try the variants of that setting and see what happens, if I'm correct if you set it to 1 your Hyper should start charging?
Also looking at the above output, there seem to be more additional properties that might have an impact. If you have the hub reporting locally, could you provide a full list of those properties reported to MQTT under telemetry?

@Raudi1
Copy link

Raudi1 commented Dec 8, 2024

If this property is set to 2 means output (from hub), and 1 seems to be input (to the hub). 0 is likely completely off. You can try the variants of that setting and see what happens, if I'm correct if you set it to 1 your Hyper should start charging?

That's how it works for the ioBroker adapter. Together with setInputLimit, setOutputLimit and passMode it offers full control.

@cmuster
Copy link

cmuster commented Dec 8, 2024

@reinhard-brandstaedter thank you for doing all the heavy lifting and providing solarflow control in the first place 👍
Having the possibility to control the battery entirely locally was what made me decide to buy the Zendure products (therefore they should really thank you for all the reverse engineering you did 😄)

It seems when I send all the properties in one message (as @Raudi1 also just confirmed) setting the ac charging works now fine. I just had to setup a seperate HomeAssistant automation for it for now, as the HA addin (https://github.com/dfigus/addon-solarflow-control), is not supporting these yet.

Nice coincidence: We're finally getting some sun today, so I can test all of this properly 😄

@reinhard-brandstaedter
Copy link
Owner

If this property is set to 2 means output (from hub), and 1 seems to be input (to the hub). 0 is likely completely off. You can try the variants of that setting and see what happens, if I'm correct if you set it to 1 your Hyper should start charging?

That's how it works for the ioBroker adapter. Together with setInputLimit, setOutputLimit and passMode it offers full control.

Now we finally know what the ominous inputLimit state report telemetry is used for? This has been around like forever with no function ;-)

@Armageddit
Copy link

Armageddit commented Dec 27, 2024

2024-12-27 01:39:16,260:INFO: HUB: S:-1.0W [ ], B: -1% (-1) low: 5 high: 100, V:-1.0V (-1.0), C: 0W, P:False (manual, possible), F:-1.0h, E:-1.0h, CT:OFF (333hrs) idle, H: -1W, L: -1W
2024-12-27 01:39:16,260:INFO: INV: AC:0.0W, DC:0.0W (), L: 0W (0.0W/channel) [ -1W]
2024-12-27 01:39:16,261:INFO: SMT: T:Smartmeter P:38.0W [ 47.9,47.9,48.8,49.5,50.9,40.4 ]
2024-12-27 01:39:16,261:INFO: SMT triggers limit function: 50.9 -> 40.4: executed
2024-12-27 01:39:17,251:INFO: SMT triggers limit function: 50.9 -> 39.9: skipped
2024-12-27 01:39:18,257:INFO: SMT triggers limit function: 51.0 -> 39.7: skipped
2024-12-27 01:39:19,258:INFO: SMT triggers limit function: 51.1 -> 39.9: skipped
2024-12-27 01:39:20,252:INFO: SMT triggers limit function: 51.2 -> 40.0: skipped
2024-12-27 01:39:21,256:INFO: SMT triggers limit function: 51.1 -> 40.1: skipped

i have a hyper 2000 and a SmartMeter that published multiple times per second to MQTT
this was detectet by SF-control and republished to solarflow-hub/smartmeter/homeUsage and solarflow-hub/smartmeter/homeUsageSmoothened

But the poweroutput of the Hyper 2000 is always the maximum power that I have set in the app.

There is no change or adjustment due to the smart meter values.

what is my error?

@reinhard-brandstaedter
Copy link
Owner

reinhard-brandstaedter commented Dec 27, 2024

@Armageddit hard to say with so little information from your side.
A bit mor context would be useful, your setup? your config.ini a complete log file?

@Armageddit
Copy link

think the problem is that I installed Python on Windows 11 to run the script.

but other solutions didn't work:

in WSL it doesnt run becauce dont know what xyz mean

*Linux_USER*@DESKTOP-*USER*:/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src$ python3 solarflow-bt-manager.py -i
Traceback (most recent call last):
  File "/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src/solarflow-bt-manager.py", line 4, in <module>
    from bleak import BleakClient, BleakScanner
ModuleNotFoundError: No module named 'bleak'
*Linux_USER*@DESKTOP-*USER*:/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src$ pip install bleak
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.12/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
*Linux_USER*@DESKTOP-*USER*:/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src$ pip3 install bleak
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.12/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

try with miniconda:

(base) *Linux_USER*@DESKTOP-*USER*:/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src$ pip install -r requirements.txt
Requirement already satisfied: bleak in /home/*Linux_USER*/miniconda3/lib/python3.12/site-packages (from -r requirements.txt (line 1)) (0.22.3)
Requirement already satisfied: paho-mqtt>=2.0.0 in /home/*Linux_USER*/miniconda3/lib/python3.12/site-packages (from -r requirements.txt (line 2)) (2.1.0)
Requirement already satisfied: dbus-fast<3,>=1.83.0 in /home/*Linux_USER*/miniconda3/lib/python3.12/site-packages (from bleak->-r requirements.txt (line 1)) (2.24.4)
(base) *Linux_USER*@DESKTOP-*USER*:/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src$ python3 solarflow-bt-manager.py -i
2024-12-28 14:33:47,715:INFO: scan for: zene
Traceback (most recent call last):
  File "/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src/solarflow-bt-manager.py", line 256, in <module>
    main(sys.argv[1:])
  File "/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src/solarflow-bt-manager.py", line 253, in main
    asyncio.run(run(broker=mqtt_broker, port=mqtt_port, info_only=info_only, connect=connect, disconnect=disconnect, ssid=ssid))
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/asyncio/runners.py", line 194, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/asyncio/base_events.py", line 686, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src/solarflow-bt-manager.py", line 147, in run
    device = await BleakScanner.find_device_by_filter(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/site-packages/bleak/__init__.py", line 444, in find_device_by_filter
    async with cls(**kwargs) as scanner:
               ^^^^^^^^^^^^^
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/site-packages/bleak/__init__.py", line 158, in __aenter__
    await self._backend.start()
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/site-packages/bleak/backends/bluezdbus/scanner.py", line 168, in start
    manager = await get_global_bluez_manager()
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/site-packages/bleak/backends/bluezdbus/manager.py", line 1058, in get_global_bluez_manager
    await instance.async_init()
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/site-packages/bleak/backends/bluezdbus/manager.py", line 286, in async_init
    assert_reply(reply)
  File "/home/*Linux_USER*/miniconda3/lib/python3.12/site-packages/bleak/backends/bluezdbus/utils.py", line 20, in assert_reply
    raise BleakDBusError(reply.error_name, reply.body)
bleak.exc.BleakDBusError: [org.freedesktop.DBus.Error.ServiceUnknown] The name org.bluez was not provided by any .service files
(base) *Linux_USER*@DESKTOP-*USER*:/mnt/c/Users/*USER*/Downloads/solarflow-bt-manager-master/src$

how can i run this script with windows or homeassistantOS?

@Armageddit
Copy link

Screenshot 2024-12-28 164938

Is it good?
However, the data can still be changed in the app. So the connection to the cloud is not disconnected, and no "Automatically control the charging/discharging and the power output based on the acutal consumption"

@Armageddit
Copy link

Armageddit commented Dec 29, 2024

ok a ubuntu USB-stick to Boot was the fix to run solarflow-bt-manager
Cloud is disconnected

now runs the HomassistantOS with the addon addon-solarflow-control

now the local connection works BUT NO

"Automatically control the charging/discharging and the power output based on the acutal consumption"

how can i manage this?
should i make a homeassistant automation or a nodered to control the charging and output power?

at the moment i use iot/gDa3tb/XXX/properties/write

Charge:

{
  "properties": {
    "acMode": 1
  }
}
{
  "properties": {
    "inputLimit": 188
  }
}

Discharge:

{
  "properties": {
    "acMode": 2
  }
}
{
  "properties": {
    "outputLimit": 188
  }
}

Screenshot 2024-12-29 014325

@reinhard-brandstaedter
Copy link
Owner

reinhard-brandstaedter commented Dec 30, 2024

Do you have logs of the HA addon?
I’m not maintaining the addon but sf-control of course requires the correct configuration to read the actual power usage from your smartmeter and also needs to be able to control your inverter. Without that it can’t do anything really.
So if that is given please post your logs from sf-control startup.

@Armageddit
Copy link

sollte ich über das Handy ein update per Bluetooth machen?
da gibt es bereits eine neue Firmware.

2025-01-02 13:31:00,239:INFO: SMT: T:Smartmeter P:1056.0W [ 1052.3,1052.3,1050.6,1050.7,1050.9,1050.6 ]
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service solarflow-control: stopping
s6-rc: info: service solarflow-control successfully stopped
s6-rc: info: service init-solarflow-control: stopping
s6-rc: info: service init-solarflow-control successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service base-addon-log-level: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service base-addon-log-level successfully stopped
s6-rc: info: service base-addon-banner: stopping
s6-rc: info: service base-addon-banner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service base-addon-banner: starting
-----------------------------------------------------------
 Add-on: Solarflow Control
 Solarflow Control
-----------------------------------------------------------
 Add-on version: 0.10.3
 You are running the latest version of this add-on.
 System: Home Assistant OS 14.1  (aarch64 / raspberrypi4-64)
 Home Assistant Core: 2024.12.5
 Home Assistant Supervisor: 2024.12.0
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-solarflow-control: starting
[13:31:51] INFO: Updating Solarflow Control configuration...
s6-rc: info: service init-solarflow-control successfully started
s6-rc: info: service solarflow-control: starting
s6-rc: info: service solarflow-control successfully started
s6-rc: info: service legacy-services: starting
[13:31:52] INFO: Running Solarflow Control
s6-rc: info: service legacy-services successfully started
2025-01-02 13:31:55,609:INFO: MQTT Host: "IP-Zensiert":1883
2025-01-02 13:31:55,609:INFO: MQTT User: "ID-Zensiert"
2025-01-02 13:31:55,610:INFO: Solarflow Hub: gDa3tb/"deviceId-Zensiert"
2025-01-02 13:31:55,701:INFO: IP Address: 88.152.146.94
2025-01-02 13:31:55,701:INFO: Location: Lippetal, "zensiert", Germany
2025-01-02 13:31:55,702:INFO: Coordinates: (Lat: "zensiert", Lng: "zensiert"
2025-01-02 13:31:55,704:INFO: No config setting found for option "disable_full_discharge" in section solarflow!
2025-01-02 13:31:55,708:INFO: SF Control subscribing: solarflow-hub/"deviceId-Zensiert"/control/#
2025-01-02 13:31:55,709:INFO: Reading retained config settings from MQTT...
2025-01-02 13:31:55,709:INFO: Note: Solarflow Control persists initial configuration settings in your MQTT broker and will use those first (if found) to allow on-the-fly updates!
2025-01-02 13:31:55,709:INFO: If you want to override these values from your config.ini you need to clear those retained topics in your broker first!
2025-01-02 13:31:56,193:INFO: Connected to MQTT Broker!
2025-01-02 13:31:56,201:INFO: Found control/dischargeDuringDaytime, set DISCHARGE_DURING_DAYTIME to True
2025-01-02 13:31:56,202:INFO: Found control/sunriseOffset, set SUNRISE_OFFSET to 60 minutes
2025-01-02 13:31:56,202:INFO: Found control/sunsetOffset, set SUNSET_OFFSET to 60 minutes
2025-01-02 13:31:56,203:INFO: Found control/minChargePower, set MIN_CHARGE_POWER to 50W
2025-01-02 13:31:56,203:INFO: Found control/maxDiscahrgePiwer, set MAX_DISCHARGE_POWER to 400W
2025-01-02 13:31:56,204:INFO: Found control/batteryTargetSoCMin, set BATTERY_LOW to 5%
2025-01-02 13:31:56,204:INFO: Found control/batteryTargetSoCMax, set BATTERY_HIGH to 100%
2025-01-02 13:32:05,711:INFO: Control Parameters:
2025-01-02 13:32:05,712:INFO:   MIN_CHARGE_POWER = 50
2025-01-02 13:32:05,712:INFO:   MAX_DISCHARGE_LEVEL = 400
2025-01-02 13:32:05,712:INFO:   MAX_INVERTER_LIMIT = 802
2025-01-02 13:32:05,713:INFO:   MAX_INVERTER_INPUT = 1200
2025-01-02 13:32:05,713:INFO:   SUNRISE_OFFSET = 60
2025-01-02 13:32:05,713:INFO:   SUNSET_OFFSET = 60
2025-01-02 13:32:05,714:INFO:   BATTERY_LOW = 5
2025-01-02 13:32:05,714:INFO:   BATTERY_HIGH = 100
2025-01-02 13:32:05,714:INFO:   BATTERY_DISCHARGE_START = 10
2025-01-02 13:32:05,715:INFO:   DISCHARGE_DURING_DAYTIME = True
2025-01-02 13:32:05,719:INFO: Publishing Homeassistant templates...
2025-01-02 13:32:05,911:INFO: Published 36 Homeassistant templates.
2025-01-02 13:32:05,911:INFO: Triggering telemetry update: iot/gDa3tb/"deviceId-Zensiert"/properties/read
2025-01-02 13:32:05,912:INFO: Using OpenDTU: Base topic: solar/, Limit topic: solar//cmd/limit_nonpersistent_absolute, SF Channels: [1, 3], AC Limit: 802
2025-01-02 13:32:05,912:INFO: Using Smartmeter: Base topic: tele/SmartMeter/SENSOR, Current power accessor: ENERGY.Power, Total power accessor: ENERGY.Total, Rapid change diff: 100W, Zero offset: 40W, Scaling factor: 1
2025-01-02 13:32:05,913:INFO: Hub subscribing: /gDa3tb/"deviceId-Zensiert"/properties/report
2025-01-02 13:32:05,914:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/solarInputPower
2025-01-02 13:32:05,915:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/electricLevel
2025-01-02 13:32:05,915:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/outputPackPower
2025-01-02 13:32:05,915:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/packInputPower
2025-01-02 13:32:05,916:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/outputHomePower
2025-01-02 13:32:05,916:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/outputLimit
2025-01-02 13:32:05,916:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/inverseMaxPower
2025-01-02 13:32:05,916:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/masterSoftVersion
2025-01-02 13:32:05,917:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/pass
2025-01-02 13:32:05,917:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/passMode
2025-01-02 13:32:05,917:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/socSet
2025-01-02 13:32:05,917:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/minSoc
2025-01-02 13:32:05,918:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/batteries/+/socLevel
2025-01-02 13:32:05,918:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/telemetry/batteries/+/totalVol
2025-01-02 13:32:05,918:INFO: Hub subscribing: solarflow-hub/"deviceId-Zensiert"/control/#
2025-01-02 13:32:05,918:INFO: DTU subscribing: solar//0/powerdc
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//0/efficiency
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//+/power
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//status/producing
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//status/reachable
2025-01-02 13:32:05,920:INFO: DTU subscribing: solar//status/limit_absolute
2025-01-02 13:32:05,921:INFO: DTU subscribing: solar//status/limit_relative
2025-01-02 13:32:05,921:INFO: DTU subscribing: solarflow-hub/+/control/dryRun
2025-01-02 13:32:05,921:INFO: Smartmeter subscribing: tele/SmartMeter/SENSOR
2025-01-02 13:32:05,922:INFO: Turning hub buzzer OFF
2025-01-02 13:32:05,922:INFO: Ensure hub AC Mode is set to output
2025-01-02 13:32:05,923:INFO: Turning hub bypass OFF
2025-01-02 13:32:05,923:INFO: Turning hub bypass autorecover OFF
2025-01-02 13:32:05,977:INFO: Updating control bypass to True
2025-01-02 13:32:05,977:INFO: Taking over bypass control: True
2025-01-02 13:32:05,978:INFO: Updating full charge interval to 336hrs
2025-01-02 13:32:05,983:INFO: Reading battery target mode: charging
2025-01-02 13:32:06,102:INFO: Rapid rise in demand detected, clearing buffer!
2025-01-02 13:32:06,105:INFO: HUB: S:-1.0W [ ], B: -1% (-1) low: 5 high: 100, V:-1.0V (-1.0), C: 0W, P:False (manual, possible), F:-1.0h, E:-1.0h, CT:OFF (336hrs) idle, H: -1W, L: -1W
2025-01-02 13:32:06,106:INFO: INV: AC:0.0W, DC:0.0W (), L: 0W (0.0W/channel) [ -1W]
2025-01-02 13:32:06,106:INFO: SMT: T:Smartmeter P:1037.0W [ 1037.0,1037.0 ]
2025-01-02 13:32:06,107:INFO: SMT triggers limit function: 1037.0 -> 1037.0: executed
2025-01-02 13:32:10,105:INFO: Rapid drop in demand detected, clearing buffer!
2025-01-02 13:32:10,107:INFO: HUB: S:0.0W [ 0.0 ], B: 31% (-1) low: 5 high: 100, V:-1.0V (-1.0), C: 163W, P:False (manual, possible), F:-1.0h, E:-1.0h, CT:OFF (336hrs) idle, H: 0W, L: -1W
2025-01-02 13:32:10,107:INFO: INV: AC:0.0W, DC:0.0W (), L: 0W (0.0W/channel) [ -1W]
2025-01-02 13:32:10,107:INFO: SMT: T:Smartmeter P:897.0W [ 897.0,897.0 ]
2025-01-02 13:32:10,107:INFO: SMT triggers limit function: 897.0 -> 897.0: executed
2025-01-02 13:32:11,104:INFO: Rapid drop in demand detected, clearing buffer!
2025-01-02 13:32:11,106:INFO: HUB: S:0.0W [ 0.0 ], B: 31% (31) low: 5 high: 100, V:50.0V (50.0), C: 163W, P:False (manual, possible), F:-1.0h, E:-1.0h, CT:OFF (336hrs) idle, H: 0W, L: -1W
2025-01-02 13:32:11,107:INFO: INV: AC:0.0W, DC:0.0W (), L: 0W (0.0W/channel) [ -1W]
2025-01-02 13:32:11,107:INFO: SMT: T:Smartmeter P:336.0W [ 336.0,336.0 ]
2025-01-02 13:32:11,107:INFO: SMT triggers limit function: 336.0 -> 336.0: executed
2025-01-02 13:33:05,719:INFO: Triggering telemetry update: iot/gDa3tb/"deviceId-Zensiert"/properties/read
2025-01-02 13:34:05,720:INFO: Triggering telemetry update: iot/gDa3tb/"deviceId-Zensiert"/properties/read
2025-01-02 13:34:05,914:INFO: HUB: S:0.0W [ 0.0 ], B: 31% (31|32) low: 80 high: 100, V:49.4V (49.4|49.4), C: 0W, P:False (manual, possible), F:-1.0h, E:-1.0h, CT:OFF (336hrs) idle, H: 0W, L:339W
2025-01-02 13:34:05,915:INFO: INV: AC:0.0W, DC:0.0W (), L: 0W (0.0W/channel) [ -1W]
2025-01-02 13:34:05,915:INFO: SMT: T:Smartmeter P:339.0W [ 329.4,329.4,330.6,332.9,336.2,340.2 ]
2025-01-02 13:35:05,721:INFO: Triggering telemetry update: iot/gDa3tb/"deviceId-Zensiert"/properties/read
2025-01-02 13:35:56,343:INFO: HUB: S:0.0W [ 0.0 ], B: 31% (31|32) low: 80 high: 100, V:49.3V (49.4|49.3), C: 0W, P:False (manual, possible), F:-1.0h, E:-1.0h, CT:OFF (336hrs) idle, H: 0W, L:339W
2025-01-02 13:35:56,343:INFO: INV: AC:0.0W, DC:0.0W (), L: 0W (0.0W/channel) [ -1W]
2025-01-02 13:35:56,344:INFO: SMT: T:Smartmeter P:293.0W [ 340.2,340.2,339.4,339.1,330.2,319.8 ]
2025-01-02 13:35:56,345:INFO: SMT triggers limit function: 330.2 -> 319.8: executed
2025-01-02 13:35:57,340:INFO: SMT triggers limit function: 328.2 -> 317.7: skipped
2025-01-02 13:35:57,922:INFO: SMT triggers limit function: 327.1 -> 315.6: skipped
2025-01-02 13:35:59,342:INFO: SMT triggers limit function: 322.1 -> 311.4: skipped
2025-01-02 13:36:00,343:INFO: SMT triggers limit function: 320.2 -> 309.3: skipped
2025-01-02 13:36:01,343:INFO: SMT triggers limit function: 318.5 -> 307.0: skipped
2025-01-02 13:36:02,344:INFO: SMT triggers limit function: 316.8 -> 304.7: skipped
2025-01-02 13:36:03,337:INFO: SMT triggers limit function: 315.1 -> 302.5: skipped
2025-01-02 13:36:04,344:INFO: SMT triggers limit function: 313.6 -> 300.3: skipped
2025-01-02 13:36:05,341:INFO: SMT triggers limit function: 312.0 -> 298.1: skipped

@reinhard-brandstaedter
Copy link
Owner

You do not have any data from your inverter/DTU it seems:

2025-01-02 13:32:05,912:INFO: Using OpenDTU: Base topic: solar/, Limit topic: solar//cmd/limit_nonpersistent_absolute, SF Channels: [1, 3], AC Limit: 802

and

2025-01-02 13:32:05,918:INFO: DTU subscribing: solar//0/powerdc
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//0/efficiency
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//+/power
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//status/producing
2025-01-02 13:32:05,919:INFO: DTU subscribing: solar//status/reachable
2025-01-02 13:32:05,920:INFO: DTU subscribing: solar//status/limit_absolute
2025-01-02 13:32:05,921:INFO: DTU subscribing: solar//status/limit_relative

please make sure your OpenDTU/AhoyDTU is correctly set up (and reporting) to your MQTT, see config.ini:

 [opendtu]
    base_topic = solar
    # your Inverters serial number
    inverter_serial = <serial number>

    # List of indices of the inverter channels (as reported in the DTU) that the Solarflow Hub is connected to
    # typically the index starts at 1 as 0 is the output channel of the inverter
    # e.g. 1,3 or 3
    sf_inverter_channels = 3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants