Add F3800/BP3800 Equipment when connected to Home Power Panel - Config Example

Hello -
Attached is a system export of two F3800's (with two attached BP3800 expansion batteries) connected to an Anker Home Power Panel  in the USA. I ran several exports with the API tools (with the owner account) and each time I received minimal output. I don't believe the existing API work to date accounts for this equipment - but figured I'd shared the output if it may aid in future development. I am more than happy to provide further logs in the future.
F3800 System Export.zip

Hi @doublehelix46
your output is not even showing any sites listed for your account.
Since you the first one with US country code, I assume the server assignment of the Api library may be incorrect. US is being assumed for the *.com api server.
You may try the export again but using an EU country code, e.g. DE. This should assign your login to the EU server and show if your account is located there as well.
From what I have seen, there are only 2 Cloud servers ww in use. If you access any kind of Beta Server, that will be also different and not accessibly via the Api library since not known...

Hi @thomluther -
I believe that issue was on me. I originally had trouble using the "US" code and tried "USA" and started receiving some outputs. I cleared the auth cache and went back to "US" and received much more detail. FYI the DE server did not work for me - not sure if my account is bound or, similarly, would have required an authcache clearing to correct itself.
I ran this a few times but I'm still getting "data_valid": false, in api_sites - as such, all my energy values are 0'd out. I will say this has been my experience with the HACS integration in a 24 hour period as well, so I'm making the assumption these devices are not yet supported.
More than happy to run additional outputs. If I get a sample that is set to true, I will upload.
US2.zip

USA is no valid country code. Any invalid or unknown should default to the EU server, hence no data for your authentication.
While the username is not changed, the cached login response will be used and the entered password and ccountry code will be ignored. So to enforce re-authentication you have to clean the Api auth-cache file for your username.

I ran this a few times but I'm still getting "data_valid": false, in api_sites - as such, all my energy values are 0'd out. I will say this has been my experience with the HACS integration in a 24 hour period as well, so I'm making the assumption these devices are not yet supported.

I have to double check that, its a new field I had to introduce shortly for Solarbank 2 responses.
However, this does nothing with the returned data from the cloud. They are all saved in the Api cache as is, just marked as invalid eventually.
So if you get 0 values, that is what the cloud responds on your request. May be a common new issue as introduced with Solarbank 2, see #114
If you have a send account to share with your system, test the 2nd account in the App.
If that should the same 0 values (or empty) and only shows valid numbers about every 5 minutes, you need to address this to Anker support, that shared accounts cannot longer see valid data on the system home page.

Actually there are no power data fields in your power panel structures when you look at scene info, and the common power fields of the system are not showing real data:
    "retain_load": "0W",
    "scene_mode": 0,
    "home_load_power": "0",
    "updated_time": "01-01-0001 00:00:00",
    "power_site_type": 4,
    "site_id": "d9db3ea0-d48c-ecf8-57df-9ad78ec60ebf",
    "powerpanel_list": [
      {
        "device_pn": "A17B1",
        "device_sn": "PM6T2AS3Z62D3GEG",
        "device_name": "SOLIX Home Power Panel",
        "device_img": "https://public-aiot-ohi-prod.s3.dualstack.us-east-2.amazonaws.com/anker-power/public/product/2024/01/23/iot-admin/Qcjo9ALaRqFzFNeF/picl_A17B1_normal.png",
        "create_time":<PHONE_NUMBER>,
        "bind_site_status": "",
        "status": "1",
        "wireless_type": "1",
        "initial_process": 0
      }
    ],

Also your home_page data looks the same
So I wonder where the App gets the power values from, but it does not seem to get them from the cloud Api.
Since the cloud does not receive power values, it would explain why all your energy statisitcs are also empty.
Do you see statistics data in the App?
Have you connected all your devices to Wifi? Otherwise they cannot send data to the cloud.

@thomluther Thanks for the quick responses. Here's some insight on my setup and my own observations.

I had a delay in having the Home Power Panel installed - so I had setup both of the F3800's on wifi as two individual devices. However, they have since (and are currently) been connected to a Power Panel and I was able to create a home in the Anker App.

Once connected to the Power Panel, the F3800s no longer connect to wifi (or make any standalone calls via the internet from what I can see in my network monitoring.) Additionally the solar bank monitor suggests they are offline as well.

The Power Panel is really only connecting to the MQTT and API servers

I can see what appears to be live stats in the app (even remotely away from my home network.) I've attached a screen recording as well to step through the various tabs on the Home Screen. Just a quick note - I switched my app to a shared account so I could monitor while generating the previous outputs. (sorry for the low res I needed to adjust for file size.)

https://github.com/thomluther/anker-solix-api/assets/69429590/e52c0401-5142-4ee7-bce9-479ee26463cd

Hm, seems weird from what I have seen so far for Solarbank systems.
There all power values are provided in the Solarbank structure of the scene_info or homepage response.
For Power Panels that doesn't seem to be the case, rathermore the home page is already triggering device updates via MQTT servers and maybe the usage values are merged from that api into the home screen?
In other words the cloud api only knows the system structure and devices, but no consumption values, therefore the energy_statistic queries are also empty.
I can try to add as much as possible from the provided Api fields, but that will be pretty much useless in HA in the long term if we do not get power values via the cloud Api...

When I look at your homepage structure, it seems your PPS (F3800) devices are not really added / joined to the system since the pps list is empty. That means the cloud does not consider them belonging to the site
  "data": {
    "site_list": [
      {
        "site_id": "d9db3ea0-d48c-ecf8-57df-9ad78ec60ebf",
        "site_name": "My Home",
        "site_img": "",
        "device_type_list": [
          5
        ],
        "ms_type": 0,
        "power_site_type": 0,
        "is_allow_delete": false,
        "support_device_models": null,
        "current_site_device_models": null
      }
    ],
    "solar_list": [],
    "pps_list": [],
    "solarbank_list": [],
    "powerpanel_list": [
      {
        "device_pn": "",
        "device_sn": "PM6T2AS3Z62D3GEG",
        "device_name": "SOLIX Home Power Panel",
        "device_img": "https://public-aiot-ohi-prod.s3.dualstack.us-east-2.amazonaws.com/anker-power/public/product/2024/01/23/iot-admin/Qcjo9ALaRqFzFNeF/picl_A17B1_normal.png",
        "create_time": 0,
        "bind_site_status": "",
        "status": "",
        "wireless_type": "",
        "initial_process": 0
      }
    ]
  },

Furthermore the bind_devices show that only the Power panel is online to Wifi, but both F3800 are not.
On top, the wifi list output does not show any Wifi network, which is weird since the power panel is online to wifi. Then the wifi list output typically shows at least one wifi network with signal strength.
I guess there is something weird in your system setup. Maybe you have to delete that completely in the app, make sure that all then standalone devices are connected to Wifi and then recreate a new system and add all device again.
But that typically will scratch all your energy history data that is recorded with the system. However in your case that was empty as well, so maybe it does not hurt to recreate the system from scratch and see if it gets better

Hi @thomluther - I apologize for the delay (I was away for the US Holiday.)
I completely erased my Home; created a new Anker Account; first setup each F3800 on wifi as individual devices (and bound them to the new account); added the Home Power Panel to the new account/wifi > created the new home with the existing F3800.
However, based on the export, looks like there's no difference in the system export.
You'll notice in the below screenshot, that Anker's App disable's the wifi in F3800 devices when linked to a Power Panel.

I can see all the devices listed in the Site_Detail.json, but you're right... the remaining scripts don't return the connected devices. It appears they're routing all data and management through the Home Power Panel.
US Server Refreshed.zip

Hi
It seems that's the way it is implemented.
Your site_list shows type 4 and the 'known' model types, which is only the Power panel
        "device_type_list": [
          5
        ],
        "ms_type": 1,
        "power_site_type": 4,
        "is_allow_delete": true,
        "support_device_models": [
          "A17B1"
        ],
        "current_site_device_models": [
          "A17B1"
        ]

The site_rules show all supported power site types and supported model types. For type 4 you see:
      {
        "power_site_type": 4,
        "main_device_models": [
          "A17B1"
        ],
        "device_models": [
          "A17B1"
        ],
        "can_empty_site": true,
        "quantity_min_limit_map": null,
        "quantity_max_limit_map": {
          "A17B1": 1
        }
      },

Type 4 seems to be the only site type supporting the power panel and there is not listed any other device model.
This is differently for other site types.
So I'm afraid there is no support for getting the PPS device infos in a power panel site type.
Furthermore the power panel iteself does not provide any usage values in the scene_info response, so there is nothing that can be usefully extracted for HA.
All data what you see in the app home screen must be merged it with the data pulled in realtime from the MQTT server, which just receives data when the App is open and triggers the devices to send their data to the MQTT server in realtime.
Eventually there are default sporadic data updates every 5 minutes or so like it is done now for Solarbank 2 systems. But key is that frequent data transmission is triggered only by main account watching the system. Nothing that the cloud Api can do in general.

Ahh that is unfortunate news, but I realize that's not your doing. I greatly appreciate you reviewing the issue as in-depth as you could. I hope this isn't the direction Anker takes moving forward.
Some additional notes that may be helpful in the future...

Yes, it seems the MQTT server is where the Power Panel is getting the bulk of the data via downloads (very minimal uploads).

What is interesting though, and I don't want to say exactly counter to your theory above, is that it is regularly transmitting data to the MQTT server without the App. It's making calls for the server on a schedule which looks like every 30 minutes (and that's without the app open.) Each out reach looks the same, about 770kb uploaded... until the morning hours (once solar starts generating.) Now I'm seeing uploads greater than 1.5MB, which alludes that there are more energy stats in the upload as all of the overnight stats were very consistent. (Just a note, at this point, I haven't opened the app for the day - so this change was not prompted by app usage.)

I had been logged in with a sub account on my phone opposed to the owner account to avoid any issues while running the APIs, the sub account in the app gets all details, except for the PPS temp and system settings. This is true, even when I'm away from home not on my network. I was showing some friends and family the system and could show the real time stats in the sub account while not on the same network.

I just opened my app at 7:38am to see if it would make a call, and it did despite having just recently uploaded data in its cycle. It was slightly larger than the last upload, but nothing dramatically different.

I wish you luck in your further developments - if you happen to stumble across anything PPS or Powerwall related, feel free to reach out any time. I'll do the same... off to explore MQTT now, haha (though I saw it wasn't fruitful in your past experience.)

Thx for the update. Yeah, MQTT is nothing I start with. The problem is that you will have to do reverse engineering how the data inside the requests are encryted with the EDHC mechanism. The api supports this data encryption too and its used via the app, the the api library does not use it currently for request data, only for the authentiation requests.
Its not clear how the request data header fields must be created to use enable encryption for requests. I assume same way it may be used for the MQTT api and you will have to find a way how to decrypt the data.
See #71 and #70 if you want to start with that journey.
If you get behind the required header fields for encryption and their content creation just let me know.

@thomluther - I might be delusional at this point, but I think I found the endpoint the PPS/Powerwall is using for energy statistics (and I don't think you're currently leveraging it) - at least for the US Server
https://ankerpower-api.anker.com/charging_energy_service/energy_statistics
request.txt
response.txt
Likewise there's a few others, but I haven't seen anything useful with them yet...
https://ankerpower-api.anker.com/charging_energy_service/report_device_data
https://ankerpower-api.anker.com/charging_energy_service/get_system_running_info
https://ankerpower-api.anker.com/charging_energy_service/get_installation_inspection
https://ankerpower-api.anker.com/charging_energy_service/get_rom_versions

Seems to be slightly different logic implemented in this endpoint compared to the Solarbanks... I believe our theory that everything is running through the Power Wall is correct.
/charging_energy_service/energy_statistics = building the "Home Page" in the app.

POST request always contains the following:
"siteID":
"end": (notes within dateType on when/how used)
"start": (notes within dateType on when used)
"global": false (so far I've only seen this set to false - not sure how it's used.)
"productCode": (so far I've only seen this null - not sure how it's used.)
Numbers below correspond with the attached picture/UI elements
dateType:

day (end: ""; start "yyyy-mm-dd")
week (end: "yyyy-mm-dd"; start: "yyyy-mm-dd") - runs Monday thru Sunday (not sure if that's required yet)
month (end: ""; start "yyyy-mm")
year (end: ""; start: "yyyy")

sourceType:

solar

home

hes (this is the "home energy system")

grid

The "cumulative stats" are sitting in the /charging_energy_service/get_system_running_info endpoint

The POST request only sends "siteId"
I will try and get some samples tomorrow of Request/Response for each page. I'd like to capture as much Solar/Battery/Grid behavior as possible in the responses.
I hope this helps!

@thomluther - I might be delusional at this point, but I think I found the endpoint the PPS/Powerwall is using for energy statistics (and I don't think you're currently leveraging it) - at least for the US Server
https://ankerpower-api.anker.com/charging_energy_service/energy_statistics
request.txt response.txt
Likewise there's a few others, but I haven't seen anything useful with them yet...
https://ankerpower-api.anker.com/charging_energy_service/report_device_data https://ankerpower-api.anker.com/charging_energy_service/get_system_running_info https://ankerpower-api.anker.com/charging_energy_service/get_installation_inspection https://ankerpower-api.anker.com/charging_energy_service/get_rom_versions

That is interesting indeed. Most of the endpoints I found start with power_service, your endpoints I never had on the radar.
Yes, the more examples you can provide, the easier an implementation can be.
In a first step it will be good to know all these endpoints and with which parameters they can be used. Then I can integrate them into the system_export tool in a first step to get a full snapshot of actual system data. From that point on, the meaning of the fields must be understood and described to use the properly for enhancing the Api cache structures and avoid clashes with existing fields.
Basically the power stats from the home screen should be different endpoint than the energy stats. Energy stats are more difficult to implement, since you need to run multiple queries to get all type of stats. Furthermore some data are only returned in the total of the queries time span, so to have those values on a daily base as used by HA, I need to query some types twice for today and yesterday to get all values for actual and past day.

Well, from what I can tell (and I think you mentioned this in another issue,) the real-time energy stats/display within the app are on the mqtt server and are merged into the daily energy stats every 5 mins to the cloud api.
I attempted a MitM to monitor the data flows. When I included the MQTT port, not only did I fail to capture the data, but the real-time stats were effectively frozen until I removed the port from monitoring. Instantly the real-time stats loaded.
I think I found one or two more endpoints but need to double check your working list to be sure. I will update with examples as soon as possible.

I found following endpoints for the charging_service:
PPS and Power Panel related:
    "charging_energy_service/energy_statistics",  # Energy stats for PPS and Home Panel
    "charging_energy_service/get_system_running_info",
    "charging_energy_service/get_device_infos",
    "charging_energy_service/get_rom_versions",
    "charging_energy_service/get_error_infos",
    "charging_energy_service/get_wifi_info",
    "charging_energy_service/get_installation_inspection",
    "charging_energy_service/sync_installation_inspection",
    "charging_energy_service/get_utility_rate_plan",
    "charging_energy_service/report_device_data",
    "charging_energy_service/restart_peak_session",
    "charging_energy_service/preprocess_utility_rate_plan",
    "charging_energy_service/ack_utility_rate_plan",
    "charging_energy_service/get_configs",
    "charging_energy_service/adjust_station_price_unit",
    "charging_energy_service/sync_config",
    "charging_energy_service/get_sns",
    "charging_energy_service/get_world_monetary_unit",

They do not work on the EU Api server with my account however:
Api Request Error: 503, message='Service Temporarily Unavailable'
The power_service endpoints work there...weird. Maybe the servers have different versions of the Api, otherwise I would have expected another type of response error.
You will have to explore them manually and figure out required parameter and response structures. Anything that is meaningful and working could I then add in the system_Export tool for the beginning.

Hi @thomluther -
I'm still testing calls and compiling the results... but out of curiosity... do you see any additional endpoints within: /charging_hes_svc ?
I've found /charging_hes_svc/get_device_product_info - but it appears to just be a list of Anker products (ironically none in the US.

Indeed, another whole set of endpoints you can explore.
    "charging_hes_svc/ota",
    "charging_hes_svc/check_update",
    "charging_hes_svc/get_installer_info",
    "charging_hes_svc/download_energy_statistics",
    "charging_hes_svc/get_wifi_info",
    "charging_hes_svc/update_wifi_config",
    "charging_hes_svc/get_device_product_info",
    "charging_hes_svc/report_device_data",
    "charging_hes_svc/get_auto_disaster_prepare_status",
    "charging_hes_svc/get_install_info",
    "charging_hes_svc/get_device_pn_info",
    "charging_hes_svc/get_device_card_list",
    "charging_hes_svc/get_device_card_details",
    "charging_hes_svc/get_system_running_time",
    "charging_hes_svc/get_system_profit_detail",
    "charging_hes_svc/get_tou_price_plan_detail",
    "charging_hes_svc/get_electric_utility_and_electric_plan_list",
    "charging_hes_svc/get_station_config_and_status",
    "charging_hes_svc/get_current_disaster_prepare_details",
    "charging_hes_svc/adjust_station_price_unit",
    "charging_hes_svc/update_hes_utility_rate_plan",
    "charging_hes_svc/quit_auto_disaster_prepare",
    "charging_hes_svc/restart_peak_session",
    "charging_hes_svc/check_function",
    "charging_hes_svc/remove_user_fault_info",
    "charging_hes_svc/user_event_alarm",
    "charging_hes_svc/sync_back_up_history",
    "charging_hes_svc/cancel_pop",

At least the 'charging_hes_svc/get_device_product_info' is also working for my account, can start looking at the others

Examples that work for my account but not with my devices. I also just tried with shared account that has no permission to devices, therefore I may see many permission errors:
await myapi.request("post", "charging_hes_svc/report_device_data",json={"siteIds":[siteId]}))
(200104) Anker Api Error: The installer system does not exist

await myapi.request("post", "charging_hes_svc/get_installer_info",json={"siteIds":[siteId]}))
(160003) Anker Api Error: The device has no access permission.

await myapi.request("post", "charging_hes_svc/get_wifi_info",json={"sn":deviceSn}))
  "data": {
    "ssid": "",
    "rssi": 100
  },

await myapi.request("post", "charging_hes_svc/get_install_info",json={"siteId":siteId}))
  "data": {
    "installLocation": "",
    "installEnv": ""
  },

Hints for exploring:

use the owner account to have full access to your devices
Include at least one Json parameter, e.g. "siteId":siteId to get a more meaningful error response that might reveal which parameter is missing.

I found following endpoints for the charging_service:
PPS and Power Panel related:
    "charging_energy_service/energy_statistics",  # Energy stats for PPS and Home Panel
    "charging_energy_service/get_system_running_info",
    "charging_energy_service/get_device_infos",
    "charging_energy_service/get_rom_versions",
    "charging_energy_service/get_error_infos",
    "charging_energy_service/get_wifi_info",
    "charging_energy_service/get_installation_inspection",
    "charging_energy_service/sync_installation_inspection",
    "charging_energy_service/get_utility_rate_plan",
    "charging_energy_service/report_device_data",
    "charging_energy_service/restart_peak_session",
    "charging_energy_service/preprocess_utility_rate_plan",
    "charging_energy_service/ack_utility_rate_plan",
    "charging_energy_service/get_configs",
    "charging_energy_service/adjust_station_price_unit",
    "charging_energy_service/sync_config",
    "charging_energy_service/get_sns",
    "charging_energy_service/get_world_monetary_unit",

They do not work on the EU Api server with my account however: Api Request Error: 503, message='Service Temporarily Unavailable' The power_service endpoints work there...weird. Maybe the servers have different versions of the Api, otherwise I would have expected another type of response error.
You will have to explore them manually and figure out required parameter and response structures. Anything that is meaningful and working could I then add in the system_Export tool for the beginning.

My initial pass at the charging_energy_service endpoints. I think there's a lot of overlap between these and the new ones, but I'll continue exploring and expanding.
PPS and Power Panel related:
    "charging_energy_service/energy_statistics",  # Energy stats for PPS and Home Panel
    "charging_energy_service/get_system_running_info", # Cumulative Home/System Energy Savings since Home creation date
    "charging_energy_service/get_device_infos", # Home Panel Info
    "charging_energy_service/get_rom_versions”, # Check for firmware update and download available packages
    "charging_energy_service/get_error_infos", # Unknown at this time
    "charging_energy_service/get_wifi_info", # Displays WiFi network connected to Home Power Panel
    "charging_energy_service/get_installation_inspection", # Unknown at this time - appears to say which page last viewed on App
    "charging_energy_service/sync_installation_inspection", #Unknown at this time
    "charging_energy_service/get_utility_rate_plan",
    "charging_energy_service/report_device_data",
    "charging_energy_service/restart_peak_session",
    "charging_energy_service/preprocess_utility_rate_plan",
    "charging_energy_service/ack_utility_rate_plan",
    "charging_energy_service/get_configs",
    "charging_energy_service/adjust_station_price_unit",
    "charging_energy_service/sync_config",
    "charging_energy_service/get_sns", # Displays Serial Numbers of attached PPS in Home
    "charging_energy_service/get_world_monetary_unit",

# /charging_energy_service/get_system_running_info Request

{
    "siteId": "932a71aa-i1b3-4f0c-a232-nj9023c02bab"
}

# /charging_energy_service/get_system_running_info Response

{
    "code": 0,
    "msg": "success!",
    "data": {
        "connect_infos": {
            "PowerPanelSN": true
        },
        "connected": true,
        "total_system_savings": 0,
        "system_savings_price_unit": "$",
        "save_carbon_footprint": 52.18,
        "save_carbon_unit": "kg",
        "save_carbon_c": 0.997,
        "total_system_power_generation": 52.34,
        "system_power_generation_unit": "KWh"
    },
    "trace_id": “redacted”
}

# /charging_energy_service/get_sns Request

{
    "main_sn": "PowerPanelSN",
    "macs": [
        "F38001MAC001",
        "F38002MAC002"
    ]
}

# /charging_energy_service/get_sns Response

{
    "code": 0,
    "msg": "success!",
    "data": {
        "mac_sn_map": {
            "F38002MAC002": "F38002SN",
            "F38001MAC001": "F38001SN"
        }
    },
    "trace_id": “redacted”
}

# /charging_energy_service/get_configs Request

{
    "siteId": "932a71aa-i1b3-4f0c-a232-nj9023c02bab",
    "sn": "PowerPanelSN",
    "param_types": []
}

# /charging_energy_service/get_configs Response

{
    "code": 0,
    "msg": "success!",
    "data": {
        "configs": []
    },
    "trace_id": “redacted”
}

# /charging_energy_service/report_device_data Request

{
    "siteIds": [
        "932a71aa-i1b3-4f0c-a232-nj9023c02bab"
    ],
    "ctrol": 1,
    "duration": 300
}

# /charging_energy_service/report_device_data Response
{
    "code": 0,
    "msg": "success!",
    "data": null,
    "trace_id": “redacted”
}

# /charging_energy_service/get_installation_inspection Request

{
    "sn": "PowerPanelSN"
}

# /charging_energy_service/get_installation_inspection Response
{
    "code": 0,
    "msg": "success!",
    "data": {
        "latest_result": true,
        "latest_time":<PHONE_NUMBER>,
        "latest_page": "/electricityScene",
        "need_self_inspection": false
    },
    "trace_id": “redacted”
}

# /charging_energy_service/get_wifi_info Request

{
    "siteId": "932a71aa-i1b3-4f0c-a232-nj9023c02bab",
    "sn": "PowerPanelSN"
}

# /charging_energy_service/get_wifi_info Response

{
    "code": 0,
    "msg": "success!",
    "data": {
        "ssid": “My WiFi Network Name”,
        "rssi": 100
    },
    "trace_id": “redacted”
}

# /charging_energy_service/get_device_infos Request

{
    "siteId": "932a71aa-i1b3-4f0c-a232-nj9023c02bab",
    "sns": [
        "PowerPanelSN",
        "F38001SN",
        "F38002SN"
    ]
}

# /charging_energy_service/get_device_infos Response

{
    "code": 0,
    "msg": "success!",
    "data": {
        "device_infos": [
            {
                "sn": "PowerPanelSN",
                "device_type": "A17B1",
                "ble_bind_type": 2,
                "ble_mac": “POWERPANELMA”,
                "wifi_bind_type": 2,
                "connect": false
            },
            {
                "sn": "F38001SN",
                "device_type": "A1790",
                "ble_bind_type": 2,
                "ble_mac": "F38001MAC001",
                "wifi_bind_type": 2,
                "connect": false
            },
            {
                "sn": "F38002SN",
                "device_type": "A1790",
                "ble_bind_type": 2,
                "ble_mac": "F38002MAC002",
                "wifi_bind_type": 2,
                "connect": false
            }
        ]
    },
    "trace_id": “redacted”
}

# /charging_energy_service/get_device_infos Request

{
    "main_sn": "PowerPanelSN",
    "device_rom_versions": [
        {
            "sn": "PowerPanelSN",
            "sub_version_infos": [],
            "type": "A17B1",
            "device_mac": "POWERPANELMA",
            "version": "v1.2.9"
        },
        {
            "sn": "F38002SN",
            "sub_version_infos": [
                {
                    "sn": “BP3800-2SN”,
                    "type": "A1790_15Ah",
                    "version": "v3.6.0"
                }
            ],
            "type": "A1790",
            "device_mac": "F38002MAC002",
            "version": "v2.0.9"
        },
        {
            "sn": "F38001SN",
            "sub_version_infos": [
                {
                    "sn": "BP3800-1SN",
                    "type": "A1790_15Ah",
                    "version": "v3.6.0"
                }
            ],
            "type": "A1790",
            "device_mac": "F38001MAC001",
            "version": "v2.0.9"
        }
    ]
}

# /charging_energy_service/get_device_infos Response

{
    "code": 0,
    "msg": "success!",
    "data": {
        "packages": [
            {
                "sn": "F38002SN",
                "pn": "A1790_low",
                "version": "v2.0.9",
                "is_forced": false,
                "md5": "666abf2e78252965058ba51ed4e9dea0",
                "url": "https://public-aiot-ohi-prod.s3.dualstack.us-east-2.amazonaws.com/anker-power/public/ota/2024/06/03/iot-admin/gS4zfLxxnqeiko5v/A1790_AllPackets_V2.0.9_LowVoltage_20240530.bin",
                "size": 783360,
                "need_Update": false,
                "introduction": "1. New supported devices: Double Power Hub\n2. Functions Optimized."
            },
            {
                "sn": "F38001SN",
                "pn": "A1790_low",
                "version": "v2.0.9",
                "is_forced": false,
                "md5": "666abf2e78252965058ba51ed4e9dea0",
                "url": "https://public-aiot-ohi-prod.s3.dualstack.us-east-2.amazonaws.com/anker-power/public/ota/2024/06/03/iot-admin/gS4zfLxxnqeiko5v/A1790_AllPackets_V2.0.9_LowVoltage_20240530.bin",
                "size": 783360,
                "need_Update": false,
                "introduction": "1. New supported devices: Double Power Hub\n2. Functions Optimized."
            }
        ],
        "sub_packages": [
            {
                "parent_sn": "F38002SN",
                "needUpdate": false,
                "device_type": "A1790_15Ah",
                "rom_version_name": "v3.6.0",
                "force_upgrade": false,
                "file_path": "https://public-aiot-ohi-prod.s3.dualstack.us-east-2.amazonaws.com/anker-power/public/ota/2024/06/03/iot-admin/hlLNpKZpkAwmFOlP/A1790_AllPackets_V3.6.0_LowVoltage_20240530.bin",
                "file_size": 783360,
                "file_md5": "666abf2e78252965058ba51ed4e9dea0",
                "change_log": "1. Fixed a bug. \n2. Optimized some functions.",
                "introduction": "1. Fixed a bug. \n2. Optimized some functions."
            },
            {
                "parent_sn": "F38001SN",
                "needUpdate": false,
                "device_type": "A1790_15Ah",
                "rom_version_name": "v3.6.0",
                "force_upgrade": false,
                "file_path": "https://public-aiot-ohi-prod.s3.dualstack.us-east-2.amazonaws.com/anker-power/public/ota/2024/06/03/iot-admin/hlLNpKZpkAwmFOlP/A1790_AllPackets_V3.6.0_LowVoltage_20240530.bin",
                "file_size": 783360,
                "file_md5": "666abf2e78252965058ba51ed4e9dea0",
                "change_log": "1. Fixed a bug. \n2. Optimized some functions.",
                "introduction": "1. Fixed a bug. \n2. Optimized some functions."
            }
        ]
    },
    "trace_id": “redacted”
}

# /charging_energy_service/get_error_infos Request

{

}

# /charging_energy_service/get_error_infos Response

{
    "code": 0,
    "msg": "success!",
    "data": {
        "error_infos": []
    },
    "trace_id": “redacted”
}

charging_hes_svc/get_device_card_details

This service appears to be used for the X1 series. The bulk of these APIs I don't have access to or return empty responses as you experienced.
Few exceptions:
charging_hes_svc/download_energy_statistics # Creates a CSV file export of all energy stats for selected time period
{     "siteId": "932a71aa-i1b3-4f0c-a232-nj9023c02bab",     "end": "",     "start": "2024-07-09",     "global": false,     "productCode": "",     "dateType": "day",     "sourceType": "solar" }
Response provides a link to a file:
{     "code": 0,     "msg": "success!",     "data": {         "fileUrl": "https://edge-aiot-ohi-prod.s3.dualstack.us-east-2.amazonaws.com/anker_power/edge/station_statistics_data/truncated",         "fileName": "Energy Data.csv"     },     "trace_id": "redacted" }
charging_hes_svc/get_wifi_info works exactly the same as charging_energy_service/get_wifi_info;
the charging_hes_svc introduces a new key on "station_id" opposed to "siteId" (though I will tell you the formatting has been inconsistent across the endpoints (stationId, station_id, stationID)
I dought I'll find much more in these services, but will loop back to the charging_energy_service and report back anything useful.

Yes, It appears the hes endpoints are for managed power services (home energy services?), since they can address multiple sites in the siteIds parameter. End consumer probably should use the charging_power endpoints.
It might be a way for external services to look end customer site data and modify them if they are listed as installer for the site...

I've continued to monitor some activity in the app and documenting the params - I'll have some updates in the near future...
However I've noticed the
/power_service/v1/site/get_scen_info endpoint is in fact still being used for the PowerPanel setup, but it is an encrypted body request/response.
The only thing I'm able to determine so far is that the requests all start with an epoch timestamp that has been bas64encoded. The rest of the request is encrypted using other methods I have yet to determine.

This request and response encryption is done by the app, but can also be used without encryption.
The login response uses EDHC encryption and this method is probably also used for the request data encryption, but there are additional header fields used in that case and I have not clue how they are generated, see #70

Hi @thomluther -
I dug in as best I could, but understanding you made some changes I'm happy to go through the proposed exercises. I can add one of your users to my system as a shared user. Which email address would you like me to provision?

Hi @thomluther - I dug in as best I could, but understanding you made some changes I'm happy to go through the proposed exercises. I can add one of your users to my system as a shared user. Which email address would you like me to provision?

I registered a new alias with Anker which you can use for the invite<EMAIL_ADDRESS>

@thomluther - Great, an invite has been sent. I would wait about 2 hours for my solar to activate for the day.

@thomluther - Great, an invite has been sent. I would wait about 2 hours for my solar to activate for the day.

Great, I accepted and that works, can see the home page of your system in read only mode as usual for shared accounts. But this is sufficient for the time being to start testing some queries against it and see if the power values are somewhere in the cloud and how to extract the energy values that are accessible for shared accounts as well.
I also checked again the actual site rules and as mentioned before, the site type with a power panel only supports the power panel device, but not the F3800 devices, which is weird compared to other site types...
But that might be the reason, why the F3800 consumption and SOC values are not reported to the cloud at all...
We will see which data can be pulled from power panel system types and how that can be integrated into the existing Api library structures to pick it up in the HA integration...

Hi @doublehelix46 , some updates on this:

I noticed in the app, that the home screen needs a couple of seconds to show the power consumption. Sometimes I even have to restart the App, to get them. I assume the reason is, that those are really not available on the cloud Api, but the App must trigger the F3800's to push their data to the mqtt server, so they can be merged into the home page in real time (about every 5-10 seconds). So it seems sometimes this trigger does not work when I just login to this user profile and the App must be restarted to get the mqtt trigger to work...
My conclusion on this: We cannot get the F3800 power values from the cloud Api, not even when they are configured into a power panel system (since the power panel system does weirdly only support the power panel model type alone, but not the F3800 model types. So they behave the same as any other Portable Power Supply model. Those devices publish their data ONLY to the MQTT servers when they are asked to do so (by the Anker app)... Someone would need to explore the mqtt server usage, a possible interface to it, how devices can be triggered to push their data, how communication is encrypted and how the mqtt servers could be utilized to grab the real time data. I'm not digging into the mqtt server topic by any means, since I have neither experience nor time to do that.
Attention: Triggering devices to publish data to the mqtt server 24x7 may increase their power consumption significantly, which may be a drawback for any battery device and noticeably decrease its efficiency. For that and other reasons, they probably push their real time data ONLY when queried by the App. I also don't think that the Anker power devices support local MQTT, since that is not foreseen in Anker's power device architecture. While saying that, the Anker Smart Meter may be an exception, since this also transmits real time data to the Solarbank 2 while internet is down as long as both are in the same WLAN. But this can also be realized via propriatary direct encrypted interfaces that will be established once the smart meter is configured into a SB system.
I added a lots of additional Api andpoint queries to the export class. As shared user, you can at least query the energy stats of a power panel system now. Those could be added to the Api library once the overall information architecture of the charging_service endpoints is better understood.
A power panel system owner can run more endpoint queries. Please use the new system_export tool from the main branch to run create a new anonymized export from your system You can create with default prompts (auto discover mode). I need to see, whether the minimum required payload parms are OK for those queries, and what information is returned and if all sensitive data is randomized. Since I believe the charging endpoints do not add too much new information, those could be incorporated to the existing Api class and data poller routines if valuable for power panel type systems (seems to be the only system type so far where they are used)
I added also queries for HES systems to the export class. Those will be used for X1 systems (which typically must be installed by professional installer, who will also initialize the system in the professional app for customer use by the consumer App? The data structure and queries for HES systems may be pretty different and may require a new Api class to handle such systems...
I added a new query to get latest OTA versions for any device. This might be usable to see latest available OTA versions and properly flag whether updates are available for a device. I need to get more examples of those response to see whether this is reliable (best case when an update is available for a device), and also how structure with children devices will look like (e.g. battery packs for Power Systems could be listed in the children structure)

Hi @doublehelix46
Did you have a chance to run the system export tool with your owner account?
Here is what I implemented so far which is also visible in the solarbank monitor tool. That is from the live query as member account  with anonymized IDs.
Solarbank Monitor (refresh 30 s, details refresh 300 s):
Sites: 1, Devices: 1
--------------------------------------------------------------------------------
Device         : SOLIX Home Power Panel  Alias         : SOLIX Home Power Panel
Serialnumber   : ABCDEF12345567890        Admin         : NO
System         : My Home  (Site ID: 12345678-abcd-efgh-ijkl-123456789012)
Wifi SSID      :
Wifi state     : Unknown                 Signal        :  --- % (--- dBm)
SW Version     : Unknown (Unknown)       Auto-Upgrade  : Unknown (OTA Unknown)
Cloud Status   : online                  Status code   : 1
--------------------------------------------------------------------------------
Energy details for System My Home (Site ID: 12345678-abcd-efgh-ijkl-123456789012):
Total Produced :    2.85 MWH             Carbon saved  :    2.84 T
Max savings    :   358.3 $               Price kWh     :   --.--
Today          : 2024-11-07              Yesterday     : 2024-11-06
Solar Energy   :   0.00 kWh              Solar Energy  :  16.38 kWh
Charged        :   0.00 kWh              Charged       :  12.02 kWh
Charged Solar  :   0.00 kWh              Charged Solar :  12.02 kWh
Charged Grid   :   0.00 kWh              Charged Grid  :   0.00 kWh
Discharged     :   2.11 kWh              Discharged    :   5.90 kWh
House Usage    :   2.12 kWh              House Usage   :  10.05 kWh
Solar Usage    :   0.00 kWh              Solar Usage   :   3.73 kWh
Battery Usage  :   2.11 kWh              Battery Usage :   5.90 kWh
Grid Usage     :   0.00 kWh              Grid Usage    :   0.42 kWh
Grid Import    :   0.01 kWh              Grid Import   :   0.43 kWh
Grid Export    :   0.00 kWh              Grid Export   :   0.63 kWh
Sol/Bat/Gri %  :   0/100/  0 %           Sol/Bat/Gri % :  37/ 58/  5 %
--------------------------------------------------------------------------------
Api Requests: 17 last hour, 17 last minute
Site refresh:  16 sec,  Device details refresh: 217 sec  (CTRL-C to abort)

However, the shared account has limited capabilities and only subset of information that might be possible.
While we haven't found yet the power values, at least the energy consumption is now available:
I enhanced the daily energy stats in the cached api object to be common with the fields and units as used already for solarbank systems. Additional fields have been added.
The advantage of a common structure in the cache is that the HA integration can easily reuse the defined entities and just need to be enhanced for the new ones. A few may also required a breaking change in the current naming, to make it more common and hopefully also usable for other storage systems like X1.
The app is showing more percentages, however I limit the percentage share only for the home consumption view. The percentages
actually reflect the share of energy sources for the home consumption, which is probably most relevant.
The shares how battery was loaded or how solar was used can be calculated by the energy values if really needed. I hope the naming makes it clear what the value is about (In HA the naming may be slightly different and will also be translated to other languages)
Last but not least, I noticed in the App that there is a diagram for SOC over time and I wonder where this data is coming from.
The energy stat response has fields for it, but in my weekly type requests that I do for today and yesterday, those fields are always empty:
    "totalEnergy": "37.23",
    "totalEnergyUnit": "KWh",
    "totalImportedEnergy": "",
    "totalImportedEnergyUnit": "",
    "totalExportedEnergy": "37.23",
    "totalExportedEnergyUnit": "KWh",
    "power": null,
    "powerUnit": "",
    "chargeLevel": null,

Interestingly there is also power field and I wonder whether there may be a combination of paramters to get the actual power or charge level of the F3800s...

@doublehelix46 The energy stats when used with the "dateType": "day" parameter will provide large lists for the power and chargeLevel fields.
However, these lists cover full day in 5 min intervals, so are really large.
But they seem to provide power and SOC values over time, depending which "sourceType" is used.
Potentially those queries could be used to report Power and SOC value, but power will be roghly in kW only, and refresh max. in 5 min intervals.
However, due to the hugh amount of data contained in those reponses, I'm reluctant to implement a regular power /soc refresh on those queries.
I haven't found yet parameters to limit the response just to e.g. last hour of the day. Do you know how that could be achieved?

I did nore testing on it and usability is limited for power values. Some caveats:

The time stamp is the local timestamp. For local usage of the Api, there should not be a time gap between the Api client and the time as recorded in the cloud. However, in my testing I have to consider timezone offset when looking for the last used timestamp in your data.
The usage is delayed by about 2-3 minutes. That means the 10:00 timestamp values will be filled only by about 10:02 - 10:03.

As a summary, it would be possible to extract some data from the energy stats, but you have to consider it as the last valid data point that you see in the App diagrams. It is delayed by 2-3 minutes, its rounded to kW with 2 decimals and it is averaged by 5 minute intervals. So I'm not sure whether it makes sense to report them as power values, since that could raise more questions than necessary.

Hi @thomluther -
I apologize for the delay I've been traveling, but I will absolutely run the extracts and tests with the Owner account. I recall most things being very similar between the Master/Sub accounts... only exception seemed to be more in the setup/device calls.
I agree, I had not personally found a way to get the real time stats - I'm fairly confident (and to your earlier comment) that the MQTT server handles the energy stats for the Power Panel. I did a lot of testing with the energy stats. I'll go back to my statements and see if I was able to get down to a specific time interval to reduce the response load.
I'll think through the solution further, but for me personally, even having the daily totals of Solar generated, Energy Used (and where - Load vs. Charging Battery) and then the depletion of the battery to plug into the Energy Monitor Dashboard is a huge plus. I happen to have a Sense energy monitor but I lose insight when leveraging the Home Panel to power the load when solar is not being generated.
I recognize that's my specific use case - but I will do my best to figure out if there's broader value.
Thank you for testing!

@doublehelix46
I added some code to extract the last 5 min avg values from todays energy stats. It was not as simple as I thought, because I want to limit the queries to once every 5 minutes max (more often does not make sense). On the other hand, I want to query the last average stat once it becomes available in the cloud to avoid the delay is too big.
Therefore at the beginning there are queries in each update interval until the change to a new datapoint is recognized and from then its limited to 5 minutes at most.
Here is what I get from your system in the monitor:
Solarbank Monitor (refresh 30 s, details refresh 300 s):
Sites: 1, Devices: 1
--------------------------------------------------------------------------------
Device         : SOLIX Home Power Panel  Alias         : SOLIX Home Power Panel
Serialnumber   : AZCBDFGH12345678        Admin         : NO
System         : My Home  (Site ID: <site-id>)
Wifi SSID      :
Wifi state     : Unknown                 Signal        :  --- % (--- dBm)
SW Version     : Unknown (Unknown)       Auto-Upgrade  : Unknown (OTA Unknown)
Cloud Status   : online                  Status code   : 1
Last Check ⌀   : 2024-11-12 22:36:11     Valid before  : 2024-11-12 16:39:58
Solar Power ⌀  : 0.00 KW                 Battery SOC   :   95 %
Charge Power ⌀ : 0.00 KW                 Discharge ⌀   : 0.43 KW
Home Usage ⌀   : 0.43 KW                 Grid Import ⌀ : 0.00 KW
--------------------------------------------------------------------------------
Energy details for System My Home (Site ID: <site-id>):
Total Produced :    2.94 MWH             Carbon saved  :    2.93 T
Max savings    :   372.5 $               Price kWh     :   --.--
Today          : 2024-11-12              Yesterday     : 2024-11-11
Solar Energy   :  17.89 kWh              Solar Energy  :  12.85 kWh
Charged        :  11.54 kWh              Charged       :   8.37 kWh
Charged Solar  :  11.26 kWh              Charged Solar :   7.79 kWh
Charged Grid   :   0.28 kWh              Charged Grid  :   0.58 kWh
Discharged     :   0.64 kWh              Discharged    :   3.96 kWh
House Usage    :  13.69 kWh              House Usage   :  17.45 kWh
Solar Usage    :   6.09 kWh              Solar Usage   :   5.01 kWh
Battery Usage  :   0.64 kWh              Battery Usage :   3.96 kWh
Grid Usage     :   6.96 kWh              Grid Usage    :   8.48 kWh
Grid Import    :   7.24 kWh              Grid Import   :   9.06 kWh
Grid Export    :   0.54 kWh              Grid Export   :   0.05 kWh
Sol/Bat/Gri %  :  44/  6/ 50 %           Sol/Bat/Gri % :  28/ 24/ 48 %
--------------------------------------------------------------------------------
Api Requests: 25 last hour, 25 last minute

So you see, including energy stats, there will be lots of initial queries, but that should go down to 3-4 per normal refresh after a while.
I compared the values with the App and that seems what I can get so far.
If you provide an export zip, I can see if there is more available and all sensitive data will be randomized.
Than I can start adding the powerpanel support to the HA integration.

Hi @thomluther -
I'm so sorry for the long delay. Attached is the export from the System Admin as requested. I still need to play around with the energy stats and the payloads to try to limit the data pull. I will do my best to get another update out to you next week.
Thank you again for your patience. Best,
Frank
SystemAdminExport112724.zip

Hi @doublehelix46
I found in the export log that charging queries were stopped on first parameter error. I fixed that in the export class.
Now all charging endpoint queries I have coded should be run, even if they may still hit parameter errors that will have to be fixed in the code.
For the energy query data reduction I'm not sure if that is possible. Since this response is basically what the App charts are displaying for today, and the chart always wants the full day data I guess since that is the default interval in the app.
According to the file sizes, each refresh for the Power Panel power values (5 min average) will receive about 225 KB data in total for required 4 energy queries. Initially this average power refresh method will be run by Home Assistant for each update interval until the minimum offset to last valid datapoint was found. From there, the query will run at most every 5 minutes when the next valid data point is expected.
So with default refresh interval of 60 seconds, in first hour there will be ~17 data refreshes to get latest average power (3,8 MB), and 12 refreshes in subsequent hours (2,7 MB). And this is only to get the Power Panel average power values. But the other queries do not return such large responses, so they can be ignored.
In HA, if those power average queries will cause issues or too much data traffic, you can exclude the power panel energy stats category in the configuration options.

Hi @thomluther - I reran the export after your updates. Providing a copy for reference.
Thank you again for your support!
SystemAdminExport_2024-12-02_1638.zip

Hi @doublehelix46
Unfortunately there is no additional info or there are still missing parameters with the queries I used.
So this is a pretty cumbersome process. I suggest you explore more of the charging_service Api endpoints for your system with the owner account and see if there are useful queries to get more details or to change any system settings via any of the Api endpoints. If you can sniff the App requests somehow, that might help to see how the cloud api requests are structured.
I think following endpoints may be worth further exploration:

charging_energy_service/get_utility_rate_plan
charging_energy_service/ack_utility_rate_plan
charging_energy_service/preprocess_utility_rate_plan
charging_energy_service/report_device_data
charging_energy_service/get_configs
charging_energy_service/restart_peak_session
charging_energy_service/adjust_station_price_unit

I don't think the charging_hes_svc endpoints are relevant for your power panel system. since many of them fail too in your setup.
What you might explore too are standard power services endpoint queries against your F3800 SNs, since they are typically done by the export class only when those SNs are part of the system. However, for power panel systems, they appear to be stand alone devices since they are not listed in the scen_info response.
So if you find more data for your system or devices on the cloud server and document the parameters and possible responses, we can add that to the library too. One first easy thing could be the energy price which can probably changed with the  charging_energy_service/adjust_station_price_unit endpoint. But I haven't seen a query or response to list the actual station price.


revisiting support for negative and zero years

The cf-conventions folks seem to have converged around the following solution for negative years (and year zero).
• For the current standard and julian calendars (and synonyms), zero and negative years are prohibited (cftime disallows year zero but allows negative years back to -4713 in the units string)
• For the current 360_day, 365_day, 366-day, and proleptic_gregorian calendars (and synonyms), year numbering is the complete set of integers, including zero and negative (this is consistent with the current cftime behavior, except for the proleptic_gregorian for which year zero is not allowed and the earliest allowed date is Nov 24 year -4714).
Based on this, the behavior of the proleptic gregorian calendar should be changed in cftime to allow year zero.   The Julian and mixed calendars would have to be changed to disallow negative years in the units definition.  These changes could be problematic, as many users could be relying on the current behavior.
For the CF discussion, see https://github.com/cf-convention/cf-conventions/issues/298

Reverted the change to proleptic_gregorian, since cf-convention/cf-conventions#298 seems to be stalled.  Also removed the warning message.

To recap, PR #234 adds support for year zero in real-world calendars via the has_year_zero kwarg.  The default behavior remains unchanged.

PR #234 merged


Update upstream dependency to v1.31.0

Issue #, if available: N/A
Description of changes:
Update upstream dependency to v1.31.0
go mod tidy
go mod vendor
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/lgtm

are there no vendor folder changes ?

No, running go mod vendor just updated modules.txt


Unsupported type warnings

If there's a type we don't support, e.g. polygon, we should print a warning that we are coercing it to a string and it may not work if it's across databases.

We already do that here: https://github.com/datafold/data-diff/blob/75b8c5d51e6c5b1562b5f3f4b0bb57f373aa2bd7/data_diff/diff_tables.py#L353


Ionic2 - Unable to setup SQLStorage (_ionicNative.Storage is not a constructor)

I'm trying to setup SqlStorage in my Ionic2 app, but I was not lucky enough to do so as I am receiving the following error:
I following the documentation, but that didn't work!

_ionicNative.Storage is not a constructor

import {SqlStorage, Storage, StatusBar} from 'ionic-native';

SaveInfo(){

this.storage = new Storage(SqlStorage, { name: 'userInfo' });

return this.http.get(this.postUrl, {search:params})
               .subscribe(
                 data => {

     this.storage.set('userName', 'TestUser');
     this.storage.set('userType', 'VIP');

});

Cordova CLI: 6.3.0
Ionic Framework Version: 2.0.0-beta.10
Ionic CLI Version: 2.0.0-beta.32
Ionic App Lib Version: 2.0.0-beta.18
ios-deploy version: 1.8.6
ios-sim version: 5.0.8
OS: Mac OS X El Capitan
Node Version: v4.4.7
Xcode version: Xcode 7.3.1 Build version 7D1014

This issue was moved to driftyco/ionic-native#379

Hello! As this was an issue with Ionic Native and not the framework I have moved this issue to that repo. Thanks for using Ionic!


Implement the ability to use different domain url

set ServiceDomain url using env. variable from properties file.

duplicate of #129


Swift framework friendly

Gave the framework an Umbrella-Headers.h file, and created a module.modulemap file so that it can be exported as a Dynamic library and used in Swift applications.

This is awesome! Hilariously I had something similar in the fbsimctl branch that I've now exported in #69. Could you rebase-on/merge #69 onto your branch, then I can merge your changes after?

@lawrencelomax So... I'm a bit confused.  Your code in #69 essentially does the same thing that my proposed changes would.  The main difference being that I tweaked the xcconfig settings to define it as a module (as specified in Apple's Docs ).
So... what is it that you're looking for out of my code?  I'm willing to do whatever... just wanted to understand.

@lawrencelomax Took my best guess as to what you were wanting.  Let me know if you wanted something different.

That's what I was looking for :+1:


guile_3_0: 3.0.8 -> 3.0.9

Changes: https://www.gnu.org/software/guile/news/gnu-guile-309-released.html
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 212673 run on x86_64-linux 1

2 packages built:

ao
guile_3_0

@ofborg build libfive ao


Update to use docker-compose

This updates the files to enable the use of docker-compose ensuring a quicker, easier, creation of new projects and environments.

Going to close this, as I think it is sorta getting stale.


Update node version to 16

related to #471

@CarlosQ96
As we use npm not yarn for this project, I removed yarn.lock file

Installed all, everything seems in order. We should do a deploy in staging to see if everything works.

Thanks Carlos, I will merge it tomorrow


CI: fix Deny failed

textwrap 0.15.1 was yanked because it should have been 0.16.
See https://github.com/clap-rs/clap/pull/4422
Signed-off-by: wanglei01<EMAIL_ADDRESS>

Since all dbs crates have been published, could the patches removed?


Uncaught (in promise) TypeError: d is not a function

I'm using your Javascript API to develop a web app that user uploads her/his picture and we want to detect faces in the picture.
this is my HTML codes:
<input type="file" id="user_pic" accept="image/x-png,image/gif,image/jpeg">
<img src="images/250x250.webp" id="preview" alt="">

and following code are what I wrote to face detection:
const MODEL_URL = '../faceapi_models'
Promise.all([
    faceapi.nets.ssdMobilenetv1.loadFromUri(MODEL_URL),
    faceapi.nets.faceRecognitionNet.loadFromUri(MODEL_URL),
    faceapi.nets.faceLandmark68Net.loadFromUri(MODEL_URL),
]).then((val) => {
    console.log(val)
}).catch((err) => {
    console.log('err')
})

const user_pic = document.getElementById('user_pic')
const preview = document.getElementById('preview')

user_pic.addEventListener('change', () => {
    const reader = new FileReader()
    reader.onload = (e) => {
        preview.src = e.target.result
    }
    reader.readAsDataURL(user_pic.files[0]);

    detectFaces(user_pic.files[0])
})

preview.onclick = () => user_pic.click()

async function detectFaces(input) {

    let imgURL = URL.createObjectURL(input)

    const imgElement = new Image()
    imgElement.src = imgURL

    const results = await faceapi.detectAllFaces(imgElement)
        .withFaceLandmarks()
        .withFaceExpressions()
        .then( results => {
            results.forEach(result => {
                const { x, y, width, height } = result.detection.box;
                console.log(x, y, width, height)
                // ctx.strokeRect(x, y, width, height);
            });
        });

}

Now whenever I select an image this error occured:
Uncaught (in promise) TypeError: d is not a function

What is problem?

i'm having the same problem? did you find any fix? @ahmadbadpey

I do not remember what I did exactly But I think just commented this lines:
        .withFaceLandmarks()
        .withFaceExpressions()

I do not remember what I did exactly But I think just commented this lines:
        .withFaceLandmarks()
        .withFaceExpressions()

After removing withFaceLandmarks(), did it not create any other issues?


Dev

Project is completed except few styling

I have implemented the article app where users will be able to create articles with images
voting for articles .
-The most rated article is on the top of the page
-The articles are arranged in order of the most recent one.
-The categories are placed in the navbar in order of their priority.
-Styling a backed project is a little bit challenging.


hashcat3: init at 3.10

Motivation for this change
We already have a 'hashcat', but it's at version 2.x, which is incompatible with hashcat 3.x.
Things done

[x] Tested using sandboxing
(nix.useSandbox on NixOS,
or option build-use-sandbox in nix.conf
on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] Linux

[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

This builds and runs on my machines, but I'm not yet convinced that it's portable. I'd be grateful if a couple other people could test that this package builds and that running result/bin/hashcat -b starts the benchmark running on at least one device (CPU, GPU, APU etc).

For someone not in the know, why not just have version 3?

Version 3 isn't backwards compatible with version 2, so I figured creating a new package would be the safest option.
On the other hand, I can't see any downsides of upgrading to version 3, so maybe replacing the version 2 package is a better idea.

Version 3 is also problematic, because it depends on OpenCL: see https://github.com/NixOS/nixpkgs/pull/16623

@kierdavis Travis reports a hash mismatch

@Mic92 thanks for digging that up. Looks like it's probably best to keep hashcat2 around until OpenCL on NixOS is more portable.
@joachifm looks like hashcat 3.20 has been released in the meantime, and the URL https://hashcat.net/files/hashcat-3.10.tar.gz now redirects back to the website homepage. I'll update it to the new download URL, https://hashcat.net/files_legacy/hashcat-3.10.tar.gz.

Thank you


chore: Platform release 2.69.0

:robot: I have created a release beep boop
2.69.0
2.69.0 (2023-08-31)
Features

Home page announcement (#2710) (9de235b)
master-api-key/roles: Add roles to master api key (#2436) (a46295b)
Use get-metadata-subscription to get max_api_calls (#2279) (42049fc)

Bug Fixes

ensure feature segments are cloned correctly (#2706) (414e62f)
env-clone/permission: allow clone using CREATE_ENVIRONMENT (#2675) (edc3afc)
environment document totals (#2671) (33c9bf2)
settings page margin (#2707) (ef0ca42)

flagsmith-frontend: 2.68.0
2.68.0 (2023-08-31)
Features

Home page announcement (#2710) (9de235b)
Use get-metadata-subscription to get max_api_calls (#2279) (42049fc)

Bug Fixes

environment document totals (#2671) (33c9bf2)
settings page margin (#2707) (ef0ca42)

2.68.0
2.68.0 (2023-08-31)
Features

admin action to delete all segments for project (#2646) (4df1b80)
master-api-key/roles: Add roles to master api key (#2436) (a46295b)
re-add totals and limits (#2631) (7a6a2c8)
Use get-metadata-subscription to get max_api_calls (#2279) (42049fc)

Bug Fixes

ensure feature segments are cloned correctly (#2706) (414e62f)
env-clone/permission: allow clone using CREATE_ENVIRONMENT (#2675) (edc3afc)
password-reset: rate limit password reset emails (#2619) (db98743)
user-create: duplicate email error message (#2642) (7b65a8d)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/Flagsmith/flagsmith/releases/tag/v2.69.0 :sunflower:

:robot: Release is at https://github.com/Flagsmith/flagsmith/releases/tag/flagsmith-frontend-v2.69.0 :sunflower:


#1703 Carbon 11, React 18, Webpack 5 for Elyra canvas

Draft PR Please don't merge
Fixes #1703
Developer's Certificate of Origin 1.1
   By making a contribution to this project, I certify that:

   (a) The contribution was created in whole or in part by me and I
       have the right to submit it under the Apache License 2.0; or

   (b) The contribution is based upon previous work that, to the best
       of my knowledge, is covered under an appropriate open source
       license and I have the right under that license to submit that
       work with modifications, whether created in whole or in part
       by me, under the same open source license (unless I am
       permitted to submit under a different license), as indicated
       in the file; or

   (c) The contribution was provided directly to me by some other
       person who certified (a), (b) or (c) and I have not modified
       it.

   (d) I understand and agree that this project and the contribution
       are public and that a record of the contribution (including all
       personal information I submit with it, including my sign-off) is
       maintained indefinitely and may be redistributed consistent with
       this project or the open source license(s) involved.

@matthoward366 All cypress tests fail with error - https://github.com/elyra-ai/canvas/actions/runs/8335604156/job/22815285980
TypeError: doc.setCanvasConfig is not a function

In my dev environment, I do see some test failures but other tests run okay. Do you know why we see the above error in build but not in dev environment?

Not really.  Possibly because it's running in prod mode?  Are you running the test harness in prod mode locally when running the tests?


Events displaying on same line

Hi,
Thanks for your calendar, it's very powerfull and complete, but I've got a pretty annoying problem.
When I've created a new event on a day which already have an event, the new one go one the same line than the other, so we can't see the two events on this day.
I was thinking it was my dev, but I've tryed on your example and I arrived to reproduce the same bug just when we create two events a day.
I join to this a picture because I'm not sure to be really clear.

Thank you !
Regards,
Audric

I can't reproduce the bug, can you document which browser and steps I need to take to reproduce it?

I've tryed with :

Google Chrome last build (70.0.3538.77) 64 bits
Mozilla Firefox (Quantum) 63.0 64 bits
Internet Explorer 11 (11.1358.14393) (blank page on https://clickermonkey.github.io/dayspan-vuetify/example/)

I went to your example : https://clickermonkey.github.io/dayspan-vuetify/example/
I've created a one day event (a blue one on the 11th november for example)
Then I've created another one in two days (can be a one day event with the same day) in purple between the 11th and 12th november
Now I just can see the last added (the purple one)
If I move it, then I can see behind the first event in blue
There is two captures.
The first is when I've created the two events (so the blue is behind the purple)

When I'm dragging the purple, I can see the blue (the dragging one is well put under the blue) but if I stop dragging, it go on the first line and back to the first screenshot

Hope it's clear, but I don't understand how I've got this problem and nobody notice it
Thanks !

Well, I've found what I was needed, I had to do the calendar rebuild method to update the calendar.
Like this :
this.$refs.calendar.rebuild(undefined, true, this.$refs.calendar.calendar.currentType)
It change the event display and it's well place after doing this.
I don't know if it's the correct method to resolve the problem but it's working.

Same issue here, @AudricCh solution worked, but I had to make few changes :
this.$refs.app.rebuild(undefined, true, this.$refs.app.currentType);

It seems the v-menu divs that are rendered for the CalendarEvents are already stacked. component:getStyleFull undoes this by rendering each event with a top offset equal to the (negative) index * eventHeight, effectively rendering them all on top of each other.
Thus, changing top to '0' in getStyleFull also solves this issue

If there are overlapping events, inspect your Calendar object and ensure updateRows is set to true - that calculates the row to which the events should be rendered on.
Let me know if that helps.

@ClickerMonkey that helped me along quite a bit. The problem is in the way I (and I guess the others as well) create the DaySpan Calendar to load into CalendarApp. I just copied your example of
{
  data: vm => ({
    calendar: Calendar.months()
  })
}

But this creates a Calendar with the default setting for updateRows, which is false. The solution is to change that line to
{
  data: vm => ({
    calendar: Calendar.months(undefined,undefined,undefined,{
      fill: true,
      updateRows: true
    })
  })
}

And now it renders correctly

Thanks for the heads up. I will look into adding updateRows: true as the default for calendar: months - and make sure it won't have any adverse effects.


Editing broke after encryption update

New push to encryption2 broke editing.

When you edit a password, the new password needs to be encrypted.
Currently, the edited, un-encrypted password is being pushed to the database. The error occurs because I am trying to decode a normal string. Adding encryption logic into the edit function should fix this.

Fixed in v0.6.0.


Make the ResourceManagerStringLocalizerFactory cache localizer instances

Turns out the performance of the ResourceManagerStringLocalizer is terrible in an actual app due to the way ResourceManager works. You really need to keep instances of ResourceManager around forever as it does a lot of its own caching internally and the existing localization experience in .NET apps today is designed around this premise.
The simplest change was to just make the ResourceManagerSringLocazlierFactory cache the instances of ResourceManagerStringLocalizer it creates, as they hold the ResourceManager inside of themselves, as well as a cache of missing resource manifest names.
This change gets us to a place where the ResourceManager instances are used more like they were intended to be, as well as the cache of missing resource lookups being effectively global. Performance gains are huge, e.g. localized home page from starter web template goes from >6s per page load to <20ms (that's not a typo, 6,700ms to 15ms, yes the ResourceManager really needs to be cached).

#156

@Eilon @ryanbrandenburg

You can remove unnecessary using System.Collections.Concurrent; in ResourceManagerStringLocalizer.cs and :+1: for this PR

:shipit:

96462b9528da1b01d5f1759f28e49f2fb7cb2d7d


Random Number generator issue while testing in Flutter

0
I have been working on a Flutter App and my application was put through a security check and they found an issue with Insecure Random number. After doing a thorough check I have found no instance of Random Number or class Random used in my project.
The error read " Insecure Random Number Generator used, do not make use of java.lang.Random" class.
If anyone can help us resolve this issue, pls comment.
Thanks in advance.

I don't think the code needs to be cryptographically secure either if you have not used the RNG in your code. That logic isn't doing something like creating initialization vectors for a block cipher etc. so it ought to be fine...
This should not be an infosec issue as it is an auto-import, though it is not getting used anywhere in the primary code, sometimes we get this type of issue while developing cross-platform applications.
Below is an example where you have to make sure while implementing the RNG:
REF 1.
Secure Implementation — java.security.SecureRandom
A secure Random number generator is one that exhibits the following properties:-
It appears random
Its value is unpredictable
It cannot be reliably produced after generation
Java’s SecureRandom class provides the above-mentioned properties. The secure random class uses entropy to generate random numbers. Entropy is using unpredictable input as a source. It could be either using hardware or OS implementation or using system processes such as timing events or interrupts. The following is the block diagram implementation for the same.
REF 2.
http://www.thesis.bilkent.edu.tr/0006566.pdf

Hi @asterixsol
It seems you are asking for assistance on personal code. Please see https://flutter.dev/community for resources and asking questions like this,
you may also get some help if you post it on Stack Overflow and if you need help with your code, please see https://www.reddit.com/r/flutterhelp/
Closing, as this isn't an issue with Flutter itself. If you disagree, please write in the comments and I will reopen it.
Thank you


FR: API/Link to look up Mac Addresses inside "DHCP Leases" page

Would be great to have the ability to look up a MAC address' manufacturer from the DHCP Leases page, when investigating new allocations

example of a tool - https://www.wireshark.org/tools/oui-lookup.html


Add contextual markers in translation strings

Since translations are enabled, we need to add contextual markers in code, to avoid wrong automatic translations.

Hi @artursmet I'm working on this since I'm translating Saleor into my language.
Atm the main thing is sale inside a discount context and sale as noun of to sell.
Related to this i've noticed that:

some model contextual markers need to be updated or created
some fields / models are not translated at all

I started some work here so you can see what I mean:
https://github.com/mirumee/saleor/compare/master...itbabu:add-translations
This process will generate few migrations.
Is it ok for you?

Hi @itbabu,
Thank you for your work, looks great. I'll be happy to see this as a pull request in Saleor :)

This is now implemented.

@elwoodxblues contextual markers are not yet implemented into the javascript code :-).
eg. contextual markers are necessary here for italian.
I started some work on it 2 weeks ago.
I'll do a PR soon.
Cheers

Thanks @itbabu


Can't install e.g. new packaging and CUDA version of torch simultaneously

This is related to the "Packages that exist on multiple indexes" in the README, to this closed ticket, and to the idea of pinning packages to repositories.
The pip compatibility readme says "in most cases, swapping out pip install for uv pip install should 'just work'" unless you "stray from common pip workflows"; I opened this as a new ticket because it's a specific example of not being able to get uv to work at all with a requirements.in that works with pip, and my impression is that installing a CUDA version of torch is a reasonably common workflow.
The issue I am facing is that torch specifies a bunch of packages in its CUDA extra-index-url, and you can also install vanilla torch from pip. So there's no way as far as I can see to install a new version of any of the packages here while also installing torch==2.1.2+cu118. Or if there is, please let me know!
Newest uv release:
❯ uv --version
uv 0.1.24

Install python-can in a venv. It depends on packaging>=23.1:
❯ uv pip install python-can==4.3.1
Resolved 5 packages in 24ms
Downloaded 4 packages in 42ms
Installed 5 packages in 9ms
 + msgpack==1.0.8
 + packaging==24.0
 + python-can==4.3.1
 + typing-extensions==4.10.0
 + wrapt==1.16.0

Install the CUDA version of torch, which requires this extra-index-url:
❯ uv pip install torch==2.1.2+cu118 --extra-index-url=https://download.pytorch.org/whl/cu118
Resolved 10 packages in 143ms
Installed 10 packages in 236ms
 + filelock==3.9.0
 + fsspec==2023.4.0
 + jinja2==3.1.2
 + markupsafe==2.1.3
 + mpmath==1.3.0
 + networkx==3.2.1
 + sympy==1.12
 + torch==2.1.2+cu118
 + triton==2.1.0
 - typing-extensions==4.10.0
 + typing-extensions==4.8.0

Now try to compile both of these in a requirements file:
❯ cat <<EOF >requirements.in
python-can==4.3.1
torch==2.1.2+cu118
EOF

It doesn't work with the extra-index-url, because the pytorch url provides only packaging==22.0:
❯ uv pip compile requirements.in --extra-index-url=https://download.pytorch.org/whl/cu118
  × No solution found when resolving dependencies:
  ╰─▶ Because only packaging<23.1 is available and python-can==4.3.1 depends on
      packaging>=23.1, we can conclude that python-can==4.3.1 cannot be used.
      And because you require python-can==4.3.1, we can conclude that the requirements are
      unsatisfiable.

It doesn't work with the other order either, because now we can't find our CUDA torch version:
❯ uv pip compile requirements.in --extra-index-url=https://pypi.org/simple --extra-index-url=https://download.pytorch.org/whl/cu118
  × No solution found when resolving dependencies:
  ╰─▶ Because there is no version of torch==2.1.2+cu118 and you require torch==2.1.2+cu118,
      we can conclude that the requirements are unsatisfiable.

I have figured out a workaround here. I can install torch and torchvision directly from the whl urls:
torch @ https://download.pytorch.org/whl/cu118/torch-2.1.2%2Bcu118-cp310-cp310-linux_x86_64.whl
torchvision @ https://download.pytorch.org/whl/cu118/torchvision-0.16.2%2Bcu118-cp310-cp310-linux_x86_64.whl

This leads to uv complaining that torchvision depends on torch==2.1.2, which isn't available, but I can get past that with an override file:
torch

which allows for any torch version.

Yeah, just confirming that your summary is correct, and this is somewhat unsolved beyond the workaround you described in your second post.
In the next version of uv, you shouldn't need the override file, since #2624 will correctly respect the local version specifier from the URL. So, you'll still need to use the direct wheel URLs, but you won't need the override.

The next version of uv will include an opt-in flag to allow this: https://github.com/astral-sh/uv/pull/2815


Build Warnings Related to Spectre Mitigation

With the latest release, most build warnings went away, except for the following:
https://github.com/nibanks/msh3/actions/runs/3868034900/jobs/6593213121#step:7:118
D:\a\msh3\msh3\ls-qpack\deps\xxhash\xxhash.c(461): warning C5045: Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified [D:\a\msh3\msh3\build\ls-qpack\ls-qpack.vcxproj]
D:\a\msh3\msh3\ls-qpack\deps\xxhash\xxhash.c(458): message : index 'p' range checked by comparison on this line [D:\a\msh3\msh3\build\ls-qpack\ls-qpack.vcxproj]
D:\a\msh3\msh3\ls-qpack\deps\xxhash\xxhash.c(461): message : feeds call on this line [D:\a\msh3\msh3\build\ls-qpack\ls-qpack.vcxproj]
...

Oh, I found one other warning (not spectre related):
https://github.com/nibanks/msh3/actions/runs/3868034900/jobs/6593213177#step:7:114
D:\a\msh3\msh3\ls-qpack\lsqpack.c(4222,5): warning C4061: enumerator 'LQRHS_ERROR' in switch of enum 'lsqpack_read_header_status' is not explicitly handled by a case label [D:\a\msh3\msh3\build\ls-qpack\ls-qpack.vcxproj]
D:\a\msh3\msh3\ls-qpack\lsqpack.h(340,6): message : see declaration of 'lsqpack_read_header_status' [D:\a\msh3\msh3\build\ls-qpack\ls-qpack.vcxproj]


Wallpapers and fancyzone setting's gone after hibernation in Win11

Microsoft PowerToys version
0.49.1
Running as admin

[X] Yes

Area(s) with issue?
General, FancyZones
Steps to reproduce
I closed my laptop cover and win11 went into hibernation.
Next day I turn up my laptop and a notification pops up says some powertoys features are blocked.
And the whole wallpapers are gone, only shows black background.
I also found all customized fancyzone setting are gone, I have to remake all the monitor settings.
I have connected multiple external monitors, not sure if that has to do with it.
✔ Expected Behavior
Should keep all the config after hibernation.
❌ Actual Behavior
wallpaper and fancyzone setting's gone.
Other Software
No response

Please include a “report bug” log from the PowerToy icon
we do not do anything to touch wallpaper and fancyzones is very monitor configuration dependent so if you had to adjust monitor settings again, that could explai n why FZ didn’t show your zones anymore.

Please include a “report bug” log from the PowerToy icon

Right-click on the tray icon and click Report Bug. Then drag-and-drop the generated file into the GitHub comment to upload it. Thanks!

What I mean the monitor setting is the Fancy zone customized layouts setting,
It's all gone and I have to redo all the layouts for different monitors.
Pls see attachment for the report.
Thanks!
PowerToysReport_2021-11-12-17-36-19.zip

Looks like https://github.com/microsoft/PowerToys/issues/14390.
In both cases after FancyZones launch there was a parsing error [error] Parsing quick keys error: JSON value not found.
I assume that before the reboot/hibernation there was an error that corrupted somehow the settings file. I'm not sure about the reasons for the data corruption, since there wasn't any error in logs before that, but I think we can do the data saving safer.
In the zones-settings.json we have independent things like devices, custom-zone-sets, templates, quick-layout-keys. Devices could be changed from FancyZones, and all others could be changed from the Editor only. But on every change, we rewrite the whole file both in FZ and Editor. So I'd like to split those into separate files and avoid unnecessary rewrites.

Thanks, I turned off hibernation, and so far it hasn't happended again.

Related to https://github.com/microsoft/PowerToys/issues/14782


[datagrid] expose a "state" method on custom filters to simplify clDgRefresh

Summary

What is the change?

ClrDatagridFilterInterface gets an optional state (or whatever) method with a { property: string; value: any } return type
StateProvider checks for the existence of this method before/instead-of returning the whole custom filter class

Why should it go in Clarity?
It'd make dealing with the refresh output easier.
Does this change impact existing behaviors? If so how?
Not that I see on quick inspection.
If this change introduces a new behavior, is this behavior accessible?

Use case
Here's my custom filter -- the template is basically <checkbox *ngFor="options">:
export class ClrDgCheckFilterComponent implements ClrDatagridFilterInterface<object> {
  @Input() options: Option[] = [];
  @Input() property = '';

  changes = new EventEmitter<true>();
  selected = new Set();

  // My request is that StateProvider knows to call this method if it exists
  get state() {
    if (!this.dirty) return null;
    return { propery: this.property, value: Array.from(this.selected) };
  }

  private get dirty() {
    return !!this.selected.size && this.selected.size !== this.options.length;
  }

  constructor(private dgFilter: ClrDatagridFilter) {
    this.dgFilter.setFilter(this);
  }

  accepts(entry: object) {
    if (!this.dirty) return true;

    const selected = this.selected.has(deepGet(entry, this.property));
    return selected;
  }

  isActive() {
    return this.dirty;
  }

  onChange({ val }: Option) {
    this.selected.has(val) ? this.selected.delete(val) : this.selected.add(val);
    this.changes.emit(true);
  }
}

Here's the current output from a built-in filter and this filter:

Ideally, I'd like to be able to have the output from my filter look just like the built-in. @amellnik if https://github.com/vmware/clarity/issues/2513 requires a more complex representation, I'd love to be able to keep in step with that as well.
Workarounds
Yep, handle the transformation in a service you provide to the component. Also open to suggestions 😄

By property you mean the property of the row object associated with that column, right?  If I'm understanding this correctly, this partially solves https://github.com/vmware/clarity/issues/2513.

I don't think so, but there's a chance that enhancement might solve my issue as well. The stackblitz isn't loading at the moment, and it's a little hard for me to grok exactly what your solution would entail. The main problem you're looking to solve seems really worthwhile by the way.
I'll update my original post with a concrete example.

Done!


[Impeller] Xcode is super crashy when profiling Impeller frames.

This is a bit unfortunate but we must work around it as this hinders our productivity.
Today, the crashes are observed mainly when the shaders for the frame pipelines are constructed from AIR libraries embedded into the Flutter Engine dylib and provided as data sources to [MTLDevice newLibraryWithData:error:].
Providing shader data as source seems to sidestep this crash. This has been observed using the Skia backend.
Impeller, in a special mode just to make shader debugging easier, must package shaders as source for easier instrumentation. This will make pipeline generation more expensive during context creation, but that is a worthy tradeoff for debuggability. Perhaps we can enable this only in profile modes.

@bdero reports that with Xcode 14.0.1 R & iOS 16, the crasher is gone. So this might not be necessary anymore!

I've verified the stability in versions 14.0 and above. Yay for "fixing" things by just waiting it out.


[TUBEMQ-475] add the offset clone api of the consume group

Adjust OffsetStorage class, add the consum group information reading APIs of zk storage;
Adjust OffsetService class, add query and modify APIs of group Offset;
Adjust BrokerAdminServlet class, add group query, group offset query, and group offset clone APIs

Codecov Report

Merging #368 (0eee56c) into master (b1d3d4c) will decrease coverage by 0.09%.
The diff coverage is 0.00%.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b1d3d4c...0eee56c. Read the comment docs.


File upload widget

from file storage
from camera

hi @snehmehta here is your very first widget 👍 Please ask questions.


Adicionar Tamiris Fernanda Malacrida à lista de contribuidores

Adicionar Tamiris Fernanda Malacrida à lista de contribuidores

Hi  @tamirismalacrida, I'm quite elated about your pull request. I wanna evolve this project to addresses various problems faced by first-time contributors. I'd love to learn about your journey in open source community, the problems, pain points you had etc.
Could you explain how you felt when you went through the tutorial, made a pull request and learned that I merged it?
We’ve recently added social share  to our web app. Could you please go to https://roshanjossey.github.io/first-contributions/#social-share and share your first contribution to open source?
Also, check out projects with easy issues while you’re there.


Improve consistency of controllers/services

This PR addresses most of the feedback to PR #1118. Specifically:

Using symbols as keys for controller parameters is more idiomatic Rails; we're still using strings in some places.

Addressed in 7f45f72e

I think it would make the division between controller and service clearer if any relevant constructor arguments were suffixed with _attributes vs _params.

Addressed in 4ac9889, 0a24416, 5e584e7

If a constructor argument is a Hash of the attributes associated with the model that is the main subject of the service, I probably wouldn't include the model name in the argument name, e.g. in an Attachment service I'd use attributes vs attachment_attributes as the constructor argument name.

Addressed in 4ac9889

It would be nice if all the service constructor arguments had a consistent ordering, e.g. user always comes first or last; and manual_id, section_uuid & attachment_id are always in that order.

Addressed in 5025380

You mention in the PR description that you've kept some form hashes intact and passed them in without splitting them into separate explicit arguments. I think this is a good idea. However, it looks as if in some places you've split them out, e.g. file & title in Attachment::CreateService#initialize. I'm not sure I'm so keen on that.

Addressed in 0a24416, 5e584e7

I'm going to fix the conflicts, rebase and force push.


Extensions don't install

We have written the needed data into your clipboard because it was too large to send. Please paste.

/duplicate of #78872


Improve timeout handling

Codecov Report

Merging #12 (9d805d6) into master (1ae8614) will decrease coverage by 0.86%.
The diff coverage is 77.27%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the GitHub App Integration for your organization. Read more.
@@            Coverage Diff             @@
##           master      #12      +/-   ##
==========================================
- Coverage   89.74%   88.88%   -0.86%
==========================================
  Files           2        2
  Lines         234      252      +18
==========================================
+ Hits          210      224      +14
- Misses         24       28       +4

Flag
Coverage Δ

unittests
88.88% <77.27%> (-0.86%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Files Changed
Coverage Δ

lib/io.lua
86.02% <77.27%> (-1.98%)
:arrow_down:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Patch for Last Crown Warriors Demo

Hi, could someone make a patch for the demo of Last Crown Warriors please? https://imanolea.itch.io/last-crown-warriors-demo

Done ;)
https://gist.github.com/BestPig/528fb9a19cbb638fac1278a641041881#last-crown-warriors-demo


add TIFF writer

It would be great to have a writer for tiff files that preserves as much metadata as possible, that can be read by ImageJ. We use single channel z-stack TIFF files for segmentation with Cellpose. It would be useful if users could also open the images in ImageJ and see properties like the channel name, pixel size, and z step.
I think a useful folder structure would be:
dataset > position > channel_name_t_idx.tiff

During an offline meeting @Soorya19Pradeep pointed out that CellPose takes TIFF files as input but does not require any metadata. @rachel-banks can you elaborate on why you need ImageJ metadata for this intermediate step? Also, are you expecting a python API or CLI for this writer?

@ziw-liu @rachel-banks I think that we need just enough metadata so that ImageJ readers (the built-in hyperstack reader and BioFormats reader) can load the ND data in the correct order.

It would be nice to have the metadata for someone (maybe an RA or scientist) working with the images to be able to easily access the metadata, without having to go to the zarr store.

Can you elaborate on what are these metadata and where are they extracted from?

My impression is that cellpose is not propagating the metadata to the output labels, is that correct @rachel-banks?
CZI is working on a metadata plugin for napari, so there should be an interface for it soon.

@ziw-liu metadata such as pixel size, z step, and channel name, they should all be in the micro-manager metadata
@JoOkuma that's correct

@ziw-liu metadata such as pixel size, z step, and channel name, they should all be in the micro-manager metadata

The Zarr stores written by iohub always have the channel name and their display color. Z-step are also written if it's converted from a MM dataset. Currently only NDTIFF conversion writes pixel sizes, but we plan to support that for OME-TIFF as well (#103). These will show up in napari as layer names or layer metadata (if using the plugin @JoOkuma mentioned).
Given that these properties are accessible from a GUI, I think we can avoid data duplication and fragmentation (the purpose of iohub) by helping the users view them in napari instead of ImageJ, and keeping the intermediate TIFFs minimal just for CellPose.

So it might be the case of contributing to cellpose so the metadata is propagated or writing a custom processing script and propagating the metadata yourself there.