No values after disconnect

Can you change something so that when you disconnect it will continue to be displayed.

But not everyone wants that so I'm gonna have to think about it. 😉

Here you  can see what me Problem is to 0 go it from the inverter this not direct a problem from the py

2024-08-16 20:36:56.897 ERROR (MainThread) [custom_components.solarman.coordinator] Timeout fetching solarmanm80 data
2024-08-16 20:39:58.335 ERROR (MainThread) [custom_components.solarman.coordinator] Error fetching solarmanm80 data: [3907049102] Querying <IP_ADDRESS>:8899 failed.
2024-08-16 20:48:31.958 WARNING (MainThread) [custom_components.solarman.api] [3907049102] Querying (0 - 112) failed. #0 [NoSocketAvailableError: Cannot open connection to <IP_ADDRESS>]
2024-08-16 20:48:32.158 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Querying attempts left: 4
2024-08-16 20:48:32.158 INFO (MainThread) [custom_components.solarman.api] [3907049102] Connecting to <IP_ADDRESS>:8899
2024-08-16 20:48:35.221 WARNING (MainThread) [custom_components.solarman.api] [3907049102] Querying (0 - 112) failed. #0 [NoSocketAvailableError: Cannot open connection to <IP_ADDRESS>]
2024-08-16 20:48:35.623 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Querying attempts left: 3
2024-08-16 20:48:35.623 INFO (MainThread) [custom_components.solarman.api] [3907049102] Connecting to <IP_ADDRESS>:8899
2024-08-16 20:48:38.678 WARNING (MainThread) [custom_components.solarman.api] [3907049102] Querying (0 - 112) failed. #0 [NoSocketAvailableError: Cannot open connection to <IP_ADDRESS>]
2024-08-16 20:48:39.278 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Querying attempts left: 2
2024-08-16 20:48:39.278 INFO (MainThread) [custom_components.solarman.api] [3907049102] Connecting to <IP_ADDRESS>:8899
2024-08-16 20:48:42.390 WARNING (MainThread) [custom_components.solarman.api] [3907049102] Querying (0 - 112) failed. #0 [NoSocketAvailableError: Cannot open connection to <IP_ADDRESS>]
2024-08-16 20:48:43.191 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Querying attempts left: 1
2024-08-16 20:48:43.191 INFO (MainThread) [custom_components.solarman.api] [3907049102] Connecting to <IP_ADDRESS>:8899
2024-08-16 20:48:46.293 WARNING (MainThread) [custom_components.solarman.api] [3907049102] Querying (0 - 112) failed. #0 [NoSocketAvailableError: Cannot open connection to <IP_ADDRESS>]
2024-08-16 20:48:47.295 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Querying attempts left: 0, aborting.
2024-08-16 20:48:47.295 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Request failed. [Previous State: Disconnected (-1)]
2024-08-16 20:48:47.295 INFO (MainThread) [custom_components.solarman.api] [3907049102] Disconnecting from <IP_ADDRESS>:8899
2024-08-16 20:48:51.895 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Scheduling 1 query request. #0
2024-08-16 20:48:51.896 DEBUG (MainThread) [custom_components.solarman.api] [3907049102] Querying (0 - 112) ...

What am I looking at? Is that the time when your inverter goes offline?

Yes the gaps or the 0 values are during the night

I have had intermittent problems with connecting but my sensors go unavailable which is the correct state, HA displays it as a gap.
I discovered that the wireless stick was randomly connecting to another AP with a lower signal level which caused the connection issues. I solved the problem by creating a dedicated SSID on the nearest AP and then connecting to that. I still get occasional connection problems but have always found that powering off/on the Wi-Fi router and stick has solved them. I don't think the stick hardware is the best....
If the connection problem can't be solved by the integration then you can create a template sensor that checks the value and only updates when the value is valid i.e. available and not zero

I mean I could add configuration item which you toggle when you don'T want to loose the values after dc. BUT, I'm not sure if it won't bring more issues than it solves....

I have tried blocking the connection to my inverter many times and on all occasions I get a blank in the graph where the sensor went unavailable. None of the sensors went to Zero so I can't replicate the issue @CrazyUs3r is having on my system.

As far as I know this is happening only on some models which are using profiles deye_2mppt/4mppt and deye_string. So it's a "device specific thing" and it's complete BS!!!! But we were able to (thanks to our "amazing" integration 😆) mitigate it by applying validation (has to be > 0) on the values which were causing issues. It think @CrazyUs3r was able to figure it out first. 👏

@gedger What you mean is that you want to block your inverter from the internet. When I block mine, the values are also only there, although I think the inverter sends the data to the Chinese server, but if it can't get there, it doesn't have the current time and just shows me nonsense.

Ho you are blocking it? Removing info about the server (Server A Setting, maybe also Optional Server Setting) on this page: http://{inverter_ip}/config_hide.html is not enough?

First I blocked the connection in the fritzbox and later in adguard to see both variants. I had not yet deleted the connection under config_hiden

If you decide to try it let me know the result!

If I lock everything then the only problem is that the device time is wrong, then the daily values, for example, are not reset but reading and writing the values still works.

I would be interested to be able to run the inverter completely local.
As far as I understand that is not possible cause of the time.

I think I'll try the docker
https://github.com/Hypfer/deye-microinverter-cloud-free/tree/master/dummycloud

I've just tested it locally but the docker doesn't offer any option to set the time, so the inverter gets the GMT time but I can see that the inverter gets its response to changing the time.

Can't you write to the date/time registers via Solarman, that works for me.

No. Your time does not fit the time setting because low year high hour and so on in the pdf

+1 for values visible when disconnected. Even optionally. I would rather have an option to choose if I want to see 0 or unknown.

No. Your time does not fit the time setting because low year high hour and so on in the pdf

I thought the Solarman stick was completely optional for inverters, well it is for Solis. I operated mine without the stick plugged in and instead used a direct RS485 connection to read/write all the values including setting the date and time. I can still do the same when the Solarman stick is plugged in. I inky have the stick as Solis couldn't offer support without the remote connection.

+1 for values visible when disconnected. Even optionally. I would rather have an option to choose if I want to see 0 or unknown.

So if your inverter goes off-line or because there is a temporary connection problem then you want all the values to go to zero! You'll end up with the graph shown when this issue was raised which, in my view, is highly undesirable. Also what about monthly totals should they go to zero too? A alternative solution is to leave the values at whatever the last read value was. However, then all the values are in incorrect as they no longer reflect the true state of the inverter. That's why HA has the unavailable state, I can't connect to the inverter so I can't tell you the value hence it marks it as unavailable.
If anyone wishes for this behaviour then it can easily be achieved by using template sensors. The value can then be set to whatever you like. So my vote is to leave as is.

Ok maybe you are right! :) The problem is that I use current production sensor to calculate different things like excess power etc.
I managed to create sensor which basically works like this - if unknown then = 0.
Other sensors I don't actually use so this is not a big problem for me.

I think each user and each application may have a slightly different requirement so template sensors seem the way to go.
Another idea would be to add a new option to the validation. Min, Max, "Unavailable":value ?

I think some sensors have 0 during night so it could be shown as fake 0. :)

I do hope my grid voltage stays above zero though 😆

I do hope my grid voltage stays above zero though 😆

😆 😆 😆 A good one. Fking yes! 😆

I have this strong feeling that we will mess more things up with this than we solve.. If there is anything to solve in the first place, imo.

I have ask chatgpt he say the coordinator need samthing like this. @davidrapan can you look
`class SolarmanDataUpdateCoordinator(DataUpdateCoordinator):
def init(self, hass, api):
super().init(hass, _LOGGER, name="solarman", update_interval=timedelta(minutes=1))
self.api = api
self.last_data = None
async def _async_update_data(self):
    try:
        data = await self.api.get_data()
        if data:
            self.last_data = data
        return self.last_data
    except Exception as err:
        _LOGGER.warning("Error fetching data: %s", err)
        return self.last_data

`

I'm sorry but this makes no sense to me as you'll be reporting incorrect values! When the inverter is not connected then the integration has no idea what the true value is so it should be displayed as unavailable. If you display the last value then you will have to check that the inverter is connected to determine whether the sensor value being shown is actually correct which is surely is the wrong way round?

You can use a template sensor to achieve this.
https://community.home-assistant.io/t/support-retrieving-the-last-known-value-in-templates-for-unavailable-sensor-entities/663710

Thinking about this it sounds like you should bet trying to work out why the inverter is off-line so much. When I had an issue with a device I setup a command line sensor to regularly run nmap to determine the state of the device. You need to change the IP address to match your inverter.
You get 3 states returned.
3 - Inverter is up and port 8899 is open
2 - Inverter is up but port 8899 is not open
1 - Host not available
command_line:
  - sensor:
      name: Inverter Network Status
      command: "nmap -p 8899 <IP_ADDRESS> | grep -cE 'Starting|8899/tcp open|Host is up'"
      scan_interval: 60   # every 60 seconds
      value_template: "{{ value }}"

I too have this request. And while I do understand everything above I think it makes sense for a few sensors to keep the value. For example
The inverter total prodcution:

there is a gap when the inverter is offline, which is understandable but the value goes to unavaiable which is a weird view on a dashboard.
for the total production and daily production I therefor have created the following:
- trigger:
    - platform: state
      entity_id: sensor.inverter_today_production
      not_to:
        - unknown
        - unavailable
  sensor:
    name: "SofarSolar_vandaag_zero"
    state: '{{ trigger.to_state.state }}'
    unique_id: "SofarSolar_vandaag_zero"
    unit_of_measurement: "kWh"
    state_class: "total"
    device_class: "Energy"

- trigger:
    - platform: state
      entity_id: sensor.inverter_total_production
      not_to:
        - unknown
        - unavailable
  sensor:
    name: "SofarSolar_totaal_zero"
    state: '{{ trigger.to_state.state }}'
    unique_id: "SofarSolar_totaal_zero"
    unit_of_measurement: "kWh"
    state_class: "total_increasing"
    device_class: "Energy"

for the current active output I've created the following:
  - name: "SofarSolar_actueel_zero"
    state: "{{ states('sensor.inverter_output_active_power')|float(0) }}"
    unique_id: "SofarSolar_actueel_zero"
    unit_of_measurement: "W"
    state_class: "total"
    device_class: "Energy"

These are all in the template.yaml file and are only used for displaying on a dashboard, to make sure there is just a 0 instead of "unavailable".

Maybe we could show unavailable only for measurement values...
But still it has so many POV not just that, "Yeah the value proly did not change during that offline period." But what if the inverer just got disconnected from the network? That means it will show again wrong value... But (another one) total wouldn't be that much wrong as measurement values...
And many more... lol.

Hey @davidrapan what you think for this coordinator Skript
from __future__ import annotations
import logging
from typing import Any
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import *

_LOGGER = logging.getLogger(__name__)

class InverterCoordinator(DataUpdateCoordinator[dict[str, Any]]):
    def __init__(self, hass: HomeAssistant, inverter):
        super().__init__(hass, _LOGGER, name=inverter.name, update_interval=TIMINGS_UPDATE_INTERVAL, always_update=False)
        self.inverter = inverter
        self._counter = -1
        self._last_data = None  # Hinzugefügt: Variable zum Speichern der letzten Daten

    def _accounting(self) -> int:
        if self.last_update_success:
            self._counter += 1
        return int(self._counter * self._update_interval_seconds)

    async def _async_update_data(self) -> dict[str, Any]:
        try:
            # Daten vom Wechselrichter abrufen
            data = await self.inverter.get(self._accounting())
            self._last_data = data  # Die abgerufenen Daten speichern
            return data
        except Exception:
            # Wenn ein Fehler auftritt (z.B. der Wechselrichter ist offline)
            if self._last_data is not None:
                _LOGGER.warning("Wechselrichter offline, zeige letzte bekannte Daten an.")
                return self._last_data  # Letzte bekannte Daten zurückgeben
            else:
                self._counter = 0
                raise  # Wenn keine vorherigen Daten vorhanden sind, Fehler auslösen

    async def async_shutdown(self) -> None:
        _LOGGER.debug("async_shutdown")
        await super().async_shutdown()
        await self.inverter.shutdown()

Hi @CrazyUs3r, it's not necessary to save the last state like this. The state is already there within the sensors data and is just hidden behind Unavailable label whenever there is disconnect from the device.

And we dont want to see this one info in all other 40 entities. For example why after sunshine "today production" is not available if today production is 10kwh etc.

@szyx22, That is true until 11:59 PM. The only sensors which are potential candidates for preserving on device disconnects are Total * sensors.

@CrazyUs3r, did you had the chance to try set time using new Date & Time entity?

@davidrapan I still have to configure a lot of things in the Python server, but reading and writing works with the current version. This morning there was a small bug with the wrong time, which was due to my server.

What do you mean? I was talking just about configuration from the HA side w/ no server involved.

sorry yes it works from the ha side the inverter hit it

So It could be used to set the time for example every time HA and inverter connects using automation, no? And it could potentially solve time sync issue completely in a cloudless environment? Or am I missing something?

For that part I don't think you've made a mistake or forgotten anything. Unfortunately it just has no effect on the data when the sun is gone

I'll test it tomorrow morning, switch on my local server on the inverter and disconnect it completely from the network, then I'll let you know tomorrow what happens.

As I mentioned before the Total * sensors could be made persistent during inverter disconnects. Is that enough for you?

I would love to see this!
Writing date & time would be great as well. I blocked internet connection for my inverter so it won't talk to anything outside my network. Sadly the daily production values are not resetting anymore.
Besides that is it possible to make the daily production sensors persistent as well and reset them to zero at 0:00am ?
My model: Deye SUN-M200G4-EU-Q0

I would love to see this!

Okay then,

Writing date & time would be great as well. I blocked internet connection for my inverter so it won't talk to anything outside my network. Sadly the daily production values are not resetting anymore.

That is already possible.

Besides that is it possible to make the daily production sensors persistent as well and reset them to zero at 0:00am ?

That is somewhat out of scope of the integration but you can certainly do it yourself using utility meters.

I still think this is the wrong approach, the whole point of the unavailable state is to say that the sensor is offline and its state is unknown. Even the total sensors are questionable, if the last state of the day_ total is kept then it will be wrong from midnight until the inverter comes back online. The monthly_total will also be wrong but only 1 day per month at midnight.
If people want to display the old state and possibly reset them at midnight then HA has all the tools to do this by using template sensors and utility meters. HA also has the conditional option on most of the UI components now so you can display something meaningful on the dashboard rather than unavailable.
Perhaps a better option is for all sensors to have an attribute "last_state" so the sensor can go unavailable but the last_state still found?

if the last state of the day_ total is kept then it will be wrong from midnight until the inverter comes back online. The monthly_total will also be wrong but only 1 day per month at midnight.

Everytime I use term Total * i realy mean total, not today or daily not even monthly. 😉
So that's why I said that Today * sensors are out of scope.

Date & Time entity was transferred from a sensor under proper datetime platform and should be in "Configuration" section.

Date & Time entity was transferred from a sensor under proper datetime platform and should be in "Configuration" section.

You mean this entity listet in the "Configuration" category, right:

In my case datetime.bkw1_date_time
It was never available since I set up the integration.

Hmmm that's weird.. could you show me debug log?

At my its running

In my systemlog are two messages:
Logger: homeassistant.components.datetime
Quelle: helpers/entity_platform.py:595
Integration: Datum/Uhrzeit (Dokumentation, Probleme)
Erstmals aufgetreten: 12:57:55 (4 Vorkommnisse)
Zuletzt protokolliert: 13:00:31

Error adding entity datetime.bkw1_date_time for domain datetime with platform solarman
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 595, in _async_add_entities
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 909, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1366, in add_to_platform_finish
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1005, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1130, in _async_write_ha_state
    self.__async_calculate_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1067, in __async_calculate_state
    state = self._stringify_state(available)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1011, in _stringify_state
    if (state := self.state) is None:
                 ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/datetime/__init__.py", line 104, in state
    if (value := self.native_value) is None:
                 ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/functools.py", line 995, in __get__
    val = self.func(instance)
          ^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/solarman/datetime.py", line 60, in native_value
    return self._attr_native_value.replace(tzinfo = ZoneInfo(self.coordinator.hass.config.time_zone))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: str.replace() takes no keyword arguments

and this one:
Dieser Fehler wurde von einer benutzerdefinierten Integration verursacht

Logger: homeassistant
Quelle: custom_components/solarman/datetime.py:60
Integration: Solarman (Dokumentation, Probleme)
Erstmals aufgetreten: 12:58:01 (15 Vorkommnisse)
Zuletzt protokolliert: 13:00:41

Error doing job: Task exception was never retrieved (None)
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 258, in _handle_refresh_interval
    await self._async_refresh(log_failures=True, scheduled=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 453, in _async_refresh
    self.async_update_listeners()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 168, in async_update_listeners
    update_callback()
  File "/config/custom_components/solarman/entity.py", line 44, in _handle_coordinator_update
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1005, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1130, in _async_write_ha_state
    self.__async_calculate_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1067, in __async_calculate_state
    state = self._stringify_state(available)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1011, in _stringify_state
    if (state := self.state) is None:
                 ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/datetime/__init__.py", line 104, in state
    if (value := self.native_value) is None:
                 ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/functools.py", line 995, in __get__
    val = self.func(instance)
          ^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/solarman/datetime.py", line 60, in native_value
    return self._attr_native_value.replace(tzinfo = ZoneInfo(self.coordinator.hass.config.time_zone))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: str.replace() takes no keyword arguments

I don't know how i can create debug log of solarman only. When enableing it in the device view, I get a log of all my integrations.

It looks like you don't have properly set time zone. Or have some issue with it.

Don't know what i can do wrong with the time zone :D I can just set it in Settings -> General

Me neither honestly... But if you could discover what's stored in self.coordinator.hass.config.time_zone in your case maybe it will help.

Like Laho812  I'm also not able to set datetime, the field is greyed out. (Deye Sun 1600 G4, 4 MPPT Profile).
Timezone is set in configuration.yaml with coordinates.

Please share the debug log

Me neither honestly... But if you could discover what's stored in self.coordinator.hass.config.time_zone in your case maybe it will help.

Can you tell me how to check the value this variable?

@davidrapan in the last 2 day is at night the same All states a store in ha

Please share the debug log

Dieser Fehler wurde von einer benutzerdefinierten Integration verursacht
Logger: homeassistant
Quelle: custom_components/solarman/datetime.py:63
Integration: Solarman (Dokumentation, Probleme)
Erstmals aufgetreten: 11:28:06 (50 Vorkommnisse)
Zuletzt protokolliert: 11:35:38
Error doing job: Task exception was never retrieved (None)
Traceback (most recent call last):
File "/config/custom_components/solarman/datetime.py", line 61, in native_value
return datetime.strptime(self._attr_native_value, DATETIME_FORMAT).replace(tzinfo = ZoneInfo(self.coordinator.hass.config.time_zone))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/_strptime.py", line 554, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/_strptime.py", line 333, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '48/0/0 0:0:0' does not match format '%y/%m/%d %H:%M:%S'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 258, in _handle_refresh_interval
await self._async_refresh(log_failures=True, scheduled=True)
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 453, in _async_refresh
self.async_update_listeners()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 168, in async_update_listeners
update_callback()
File "/config/custom_components/solarman/entity.py", line 43, in _handle_coordinator_update
self.async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1005, in async_write_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1130, in _async_write_ha_state
self.__async_calculate_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1067, in __async_calculate_state
state = self._stringify_state(available)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1011, in _stringify_state
if (state := self.state) is None:
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/datetime/init.py", line 104, in state
if (value := self.native_value) is None:
^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/datetime.py", line 63, in native_value
_LOGGER.debug(f"SolarmanDateTimeEntity.native_value: {format_exception(e)}")
^
NameError: name 'e' is not defined
Timezone is set in the configuration.yaml.
I am able to set the datetime with this Integration on my two Deye 12k, but not on the 1600 G4. Maybe the registers are incorrect?

fix: Datetime & Time platforms exceptions handling

Perfect, thanks!

To night all data unknown with your New python type

Keeping values of total sensor for disconnected devices is not yet done. I'll go for it when I have proper test environment setup for it. 😉

Last night the values are safe

But it should be shown as Unavailable, though... 🤔

Thats correct

hey, do you have any idea why the coordinator still doesn't save the data when offline?

⚠ feat: Experimental - Add persistent sensor type

Next night i try it

So with the bad weather that is currently happening in Germany, my inverter went off at around 5pm and lo and behold, the three values remain the same. Would it be necessary to store certain figures for all values or does it still have to be transferred for numbers and the rest?

As already stated before those are the only sensors for which is somewhat safe to keep last known values.

HA can't differentiate between offline and online but disconnected inverter so if later happens and you keep values of some other sensors it can mess up short and long term stats.
When I for example compare behavior with other integrations let's say shelly devices they also don't keep last known values on disconnects.

Still.. the more i think about it the more it seems it's still really bad idea to keep any values at all... I know it's proly pain in the *ss how it mess ups dashboards and all during disconnects cause before I wrote this integration I was using the one from Stephan and I had frequent disconnects (almost every minute or so..) and that whole thing led me to make my own, hah...

And where you can't use it for example at all are Today's sensor because if you did you will have values from previous day up until the morning...

I can understand the problem, it is always a problem with ha, with Stefan's script the problem was also several times a day, with yours everything is running much better, except that at night, thank God, there is only one error, but that is clear. No contact with the IP..... I think you for your innovations

It would be nice to don't have to create helpers, but tbh it's not a big deal. So I created utility meters for my dashboards. They even have an advantage: if you have to change your inverter, you can simply change the base entity of your helper and that's it. No need to change the dashboards.

Hey somethine is wrong with multiply
Multiply is only voltage.
Deye pv Watt is from ha multiply the solarman is from repo

Hey @CrazyUs3r, thanks for catching that!
fix: Custom sensors in-place multiply operation

Update fix.. i see it Tomorrow

@davidrapan I think you can safely provide "last known data" for total_increasing state classes and provide 0 for measurement classes.
For others, yea, maybe let's keep those at unavailable for now. But for the above two it's pretty clear and the original solarman integration worked clearly better in that regard.
I worked around with hand-crafted template sensors that wrap solarman's now. But that was an extremely error prone procedure. There's many wrong or incomplete information on the web on how to accomplish that (just read through https://community.home-assistant.io/t/sensor-display-last-known-value-instead-of-unavailable/200081)
So please fix it at least for the above two classes.
(Today's sensors are completely bogus on my inverter anyway, I don't care about that personally.)

I am using the solarman integration by Stephan Joubert and one of the issues that let me think to switch to this one here is the annoying behavior at night when the inverter is offline (Deye800): if homeassistant is restarted with the inverter offline, the solarman integration crashes and does not come back when the inverter is powered on in the morning - so homeassistant needs to be restarted to bring back the solarman integration.
My tests so far have shown that this integration here does not show this problem. It starts with the inverter offline and catches up with it as soon as the inverter goes online in the morning.
But this integration here introduces a new problem: for the time the inverter is offline, the sensors show the values that they had when the inverter went offline.
From what I understand from the "persistent" patch above, only the "increasing" and "total increasing" sensors should have values and all others should have "unavailable" (like all sensors do with the other solarman integration).

⚠ feat: Experimental - Add persistent sensor type

Hi @raspitoaster,
Deeper investigation of the matter revealed that this behavior is "feature" of HA which means that init flow won't add any sensors unless there is successful connection and thus won't display values even for RestoreSensors. Protentional "workaround" would be to change row: https://github.com/davidrapan/ha-solarman/blob/e507fbe6031f31906a5e4b79de3a0b91c4fffca4/custom_components/solarman/init.py#L76
to:
await coordinator.async_refresh()

So you can try and test this change for your installation. But I'm not really sure of the implications for other functionalities which rely on setup retries on failure, etc.

Thanks for investigating!
As said, I am happy that your integration does not require to be restarted (like Stephans) when Home Assistant was restarted with the inverter offline. This is the main reason why I want to switch to yours.
I do not care that the "total" sensors show "unavailable" in that situation if they come back to life when the inverter comes back online (which is the case, so I am fine). Anyway, I will test the workaround proposed by you as soon as I find some time.
But more important: I really don't like that the other sensors show wrong values (the last ones before the inverter went offline) whole night long until the inverter comes back online in the morning.

Hey @raspitoaster, can I have question? Or for anyone with 2MPPT microinverter.. Are you guys able to configure and load your devices with deye_4mppt.yaml profile w/o any issues???
Thanks!

I had no problems with the last 2mppt. I have no problems with the coordinator that you didn't want, everything works.

It's almost the same, there is only the difference with 2 more mppt controllers

Yes, that's why I'm asking. Wanna make sure that reading of those values doesn't cause any issues.

Hey @CrazyUs3r, can you read registers 186 or 187 on your microinverter? If yes does it have value?

Hey @davidrapan I'll try it later

So I tried it yesterday and it stopped at 124

You mean you can't read registers bigger than 124?

Here my register

Ah, 125 is limit of the amount of registers in single request. Try read Register 186 w/ quantity 2, please.

Tomorrow when the inverter is online in Germany is bad weather

You have right this work

Hey you have See this Problem again

You can leave it for a while.

Was that reading during the day with PV1 and PV2 Current > 0 A?

It was not good weather again but pv1 and 2 current was 0.5 to 1A

Okay so not zero but still reading of 186 and 187 was zero? Ah, I had big hopes that those register would give power values :(

Hey you have See this Problem again
With .6_4

v24.12.08

Okay so not zero but still reading of 186 and 187 was zero? Ah, I had big hopes that those registers would give power values :(

Tomorrow I'll look at 186 187 every hour. Should I also scan more, e.g. 150 to 215

Should I also scan more, e.g. 150 to 215

Sure, why not!

So 5h scanning and everything the same
"150": 2750
"151": 1830
"152": 5150
"153": 4750
"154": 32573
"155": 0
"156": 0
"157": 0
"158": 0
"159": 0
"160": 0
"161": 0
"162": 0
"163": 0
"164": 0
"165": 0
"166": 0
"167": 0
"168": 0
"169": 0
"170": 0
"171": 0
"172": 0
"173": 0
"174": 0
"175": 0
"176": 0
"177": 0
"178": 0
"179": 0
"180": 0
"181": 0
"182": 0
"183": 0
"184": 0
"185": 0
"186": 0
"187": 0
"188": 0
"189": 0
"190": 0
"191": 0
"192": 0
"193": 0
"194": 0
"195": 0
"196": 0
"197": 0
"198": 0

Mhhh, sad.

Hey @davidrapan i think we must change the fault Code to Single

Huh, it translates to, so i guess that's not right:

F5: DC Bus2 Uneven Voltage
F17
F21
F24
F25

Does the values change over time or stays the same?

The last days it is the same.  I try Tomorrow to split it and show again


Feature/modify client app user data state

Centralizes setting of server url and base path in client app (both set based on whether the app is run locally in development and the presence of environment variables), updates user app state stored in React context component, and removes no longer used mock routes.

@dpgalloway something occurred to me about the server app's auth routes...
We have a client app route for /login which react router uses to load the <Login /> component. There's a normal link the user clicks which essentially performs a GET request to the server's /login route. That's fine in local development because the client app and server app are running on different ports, so the "server url" and "client url" are different... But when deployed to Cloud.gov they're the same, so I'm pretty sure there'll be a conflict.
Any reason we shouldn't mount the auth routes at something like /auth instead of the server root, like we're doing for the api routes. For example, in app/server/app/routes/index.js) make the following change:
- router.use("/", require("./auth"));
+ router.use("/auth", require("./auth"));

We'd then update the client app to point to {serverUrl}/auth/login and there won't be a clash with react router resolved login route and express login route when both apps are served from the same url on Cloud.gov


Update http4s-core, http4s-dsl to 0.21.19

Updates

org.http4s:http4s-core
org.http4s:http4s-dsl

from 0.21.17 to 0.21.19.
GitHub Release Notes - Version Diff
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.http4s" } ]

labels: library-update, semver-patch

Superseded by #333.


Possibility to add Bluetooth-Proxy instead of Hosts BT-Stack

I realized that commissioning uses the Hosts Bluetoothstack. In edge-environments or in combination with Homeassistant or/and running Esphome-Bluetooth-Proxy it would be great if the matter-server could be configured to use this external-bluetooth-device for commissioning. I know. Low priority. But I really would appreciate the effort. Nevertheless: Many thanks for the server.

At this time we do not use the built-in commissioning because it requires a bluetooth adapter and even if that is present it will crash the bluetooth integration (or vice versa). Commissioning is doen using the HA Companion Apps (see the documentation) and it will use the bluetooth adapter of the phone doing the commissioning as well as handling the wifi/thread credentials.
At some point we will also open up the possibility to do the commissioning directly from the HA host but we need to work out both the UI for that in some config panel and fix the coexistence issues of Bluetooth.
The idea of using the bluetooth proxies popped in our heads as well and that would offcourse be awesome but that will require a lot of work as currently the whole bluetooth provisioning is done by the sdk itself (and we just pass in an adapter). It is on the wish list but do not expect it to arrive anytime soon.


Ignore patched hooks files from code coverage

This PR adds multiple files to be ignored by coverage:

component_sentry.py: not fully featured instrumentation in the agent
datastore_motor.py: not fully featured instrumentation in the agent
adapter_paste.py: no longer being actively supported - on maintenance mode only

Codecov Report

Merging #849 (410a32c) into main (57720fd) will decrease coverage by 0.83%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main     #849      +/-   ##
==========================================
- Coverage   76.21%   75.39%   -0.83%
==========================================
  Files         198      196       -2
  Lines       19327    19304      -23
  Branches     3307     3303       -4
==========================================
- Hits        14731    14554     -177
- Misses       3746     3919     +173
+ Partials      850      831      -19

see 6 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Roll engine 7471ddea463d..0c9c293b56cc (3 commits)

https://github.com/flutter/engine/compare/7471ddea463d...0c9c293b56cc
git log 7471ddea463dd0a95a2b6d8e3a9028df70c56cee..0c9c293b56cc588b28ea985ccecc3935ffcf9a4a --no-merges --oneline
0c9c293b5 Add Rect.fromCenter() constructor (flutter/engine#8716)
74abe2965 Roll src/third_party/skia 8413ff13fefa..b14574924ab3 (4 commits) (flutter/engine#8745)
95fd36cad Roll src/third_party/dart 1f1592edce..e70273c306 (78 commits)
The AutoRoll server is located here: https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md
If the roll is causing failures, please contact the current sheriff (liyuqian@google.com), and stop
the roller if necessary.

Auto-roller completed checks. About to merge.


WindowResize issue

Hi @sa-si-dev,
Found another issue after updating to the latest version (on the scope of https://github.com/sa-si-dev/virtual-select/issues/169) that is related with the window resize, when a resize occurs the dropdown balloon is not following the input.
Thanks for your work!
Cheers,
JR

@joselrio I will check and fix it in the future release.
Thanks for letting me know it.

@joselrio This issue has been fixed in the release v1.0.32


SQL Server conversion error when trying to access frontend

I've imported the entry files into the database successfully, but I keep getting this same error when trying to access any page on the frontend:
SQLSTATE[42000]: [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Conversion failed when converting from a character string to uniqueidentifier.

SELECT * FROM [entries] WHERE [id] IN (home, 51f3e305-2028-4fec-91cb-d2e079af5250)

I know the UUID there is from another page as that's been successfully imported. I've also deleted the home.md file through Statamic just in case that was causing any issues, and I've also cleared the cache too.
Application Name: Statamic
Laravel Version: 10.23.1
PHP Version: 8.1.4
Composer Version: 2.6.5
Environment: local
Debug Mode: ENABLED
URL: localhost
Maintenance Mode: OFF

Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: CACHED

Drivers
Broadcasting: log
Cache: statamic
Database: sqlsrv
Logs: single
Mail: smtp
Queue: sync
Session: file

Statamic
Addons: 2
Antlers: runtime
Stache Watcher: Disabled
Static Caching: Disabled
Version: 4.21.0 PRO

Statamic Addons
aryehraber/statamic-captcha: 1.10.0
statamic/eloquent-driver: 3.0.0

Statamic Eloquent Driver
Asset Containers: eloquent
Assets: eloquent
Blueprints: eloquent
Collection Trees: eloquent
Collections: eloquent
Entries: eloquent
Forms: eloquent
Global Sets: eloquent
Global Variables: eloquent
Navigation Trees: eloquent
Navigations: eloquent
Revisions: eloquent
Taxonomies: eloquent
Terms: eloquent

I've not got any experience with SQL server, but I would guess the issue is the id of home - did you try removing that row in the database or assigning it a valid UUID? Failing that you could try converting to integer based IDs rather than UUIDs.

Presumably I would just need to drop the existing entries table, publish the migration for int based IDs, and change the model back to EntryModel::class?

Correct

Unfortunately no change there - even with an empty entries table, it seems to really want to find a page with this UUID for some reason:
SQLSTATE[42000]: [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Error converting data type nvarchar to bigint.

select * from [entries] where [id] = 51f3e305-2028-4fec-91cb-d2e079af5250

Might you have some data in one of your entries (or terms) thats still linked by that id?

Might you have some data in one of your entries (or terms) thats still linked by that id?

It was exactly this! It seems that when I deleted those pages, despite not showing up in the CP anymore, they were still saved in the database under the trees for the user navigations I have. So when I signed out, I now saw this error with 2 other UUIDs for now deleted pages:
select * from [entries] where [id] in (home, 6cb90e03-172d-4f6b-b6b4-1b6d3f029660, 2b35ccc0-42d1-4c48-8850-c7e8cf36c32e)
Meanwhile, I could get to the home page once signed in by removing the deleted pages from that navigation.
Thanks for your help with all of this, Ryan!


Build redshift metadata extractor

https://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html

FYI - I was able to point #63 at redshift. Query worked unchanged from the one I wrote up in the postgres one

@p5k6  that's awesome :)

will take a look the pr :)

solved by https://github.com/lyft/amundsendatabuilder/pull/63. Thanks @p5k6


How to change logo?

I can change colors etc. but I can't find how to change the logo. Is it referenced in a twig file?

I also can't seem to figure this out.

The logo is defined in https://github.com/getgrav/grav-theme-learn2/blob/develop/templates/partials/logo.html.twig
You can change it there directly (remembering that updating the theme will overwrite the change), or create a child theme (http://learn.getgrav.org/themes/customization#theme-inheritance) and change that Twig file content with your own logo.

Grav is a great idea, unfortunately it needs a lot of refinement, every skeleton takes a different approach at styling and configuring the presentation layer, the standards for such work is almost non-existent, so your logo in one skeleton is stored here, in another one it's stored there, your css is called Bob, his css is called John ... and so on, for the average coders, it's nice, but a real hassle

@jadoux grav gives full control to the theme makers, and as such some differences will arise. The core team attempts to create standards and best practices to make things but sometimes it's not possible as things change and people work differently.
In my opinion, Grav's idea is unlike most common CMS out there. By that i mean, it's designed so that coders/developers have a extremely flexible and powerful base for any type of project they have. You can customize and shift Grav to whatever you need it to be.
Of course, this means its harder for basic users to do their own sites on Grav. Personally, I'm happy as a developer to have a super flexible option instead of having to be stuck with bloated CMS's like wordpress, squarespace, etc

@ricardo118 it is definitely a very promising system, but setting standard for any software architecture, let alone a CMS, is the aim of any architect, in other words, look at IOS vs Android, while IOS is highly standardized, apple products are rarely bloated, Android on the other hand, with its flexibility, gives a lot of room for bloat and disorganization, too much flexibility leads at times to disastrous results

I have to agree with @ricardo118  There is a lot of messaging around GRAV saying that it's easy to use. That is true if you are a seasoned developer. The documentation is a dead end for beginners like me, it's not living up to my hopes. I have spent 20 hours sifting documentation mostly meant for Linux and assuming I already know every path.  Several skeletons contain broken constructs. Manual download of admin into the Windows skeletons just creates fatal errors (so far true with open publishing, x corporation and others).

@HubTode you meant to say that you agree with @jadoux.

I also agree with jadoux too: 100% of the users installing a CMS needs to change the logo, one of the very first task to do to setup a website !
It is always a nightmare to change it, and a long search to find a topic giving a working solution: it is definitely something to correct; most of the users are not developpers, and we lose hours or days...


beacon.getBlockV2 in the new sszv2 can't seem to parse the response correctly

Describe the bug
beacon.getBlockV2 can't seem to parse json response received from server correctly, erroring instead in the ssz v2 code.
import {networkGenesis} from "@chainsafe/lodestar-light-client/lib/networks";
import {networksChainConfig} from "@chainsafe/lodestar-config/networks";
import {getClient} from "@chainsafe/lodestar-api";
import {createIBeaconConfig} from "@chainsafe/lodestar-config";
import {fromHexString} from "@chainsafe/ssz";

const config = createIBeaconConfig(networksChainConfig.kiln, fromHexString(networkGenesis.kiln.genesisValidatorsRoot));
const api = getClient(config, {baseUrl: "https://lodestar-kiln.chainsafe.io"});

async function fetchBlock():Promise<void> {
  const data = await api.beacon.getBlockV2("0xed440b4cda86dec9055fd0129186c0f952735e479ecd47f2d4254cae07b4fe0a");
  console.log(data);
}

fetchBlock()

Code run in the new sszv2 lodestar:
bash-5.1# ts-node testBlockV2.ts
Error: hex argument type object must be of type string
    at Object.fromHexString (/usr/app/lodestar/node_modules/@chainsafe/ssz/src/util/byteArray.ts:19:11)
    at ByteListType.fromJson (/usr/app/lodestar/node_modules/@chainsafe/ssz/src/type/byteArray.ts:106:19)
    at ContainerType.fromJson (/usr/app/lodestar/node_modules/@chainsafe/ssz/src/type/container.ts:342:36)
    at ContainerType.fromJson (/usr/app/lodestar/node_modules/@chainsafe/ssz/src/type/container.ts:342:36)
    at ContainerType.fromJson (/usr/app/lodestar/node_modules/@chainsafe/ssz/src/type/container.ts:342:36)
    at ContainerType.fromJson (/usr/app/lodestar/node_modules/@chainsafe/ssz/src/type/container.ts:342:36)
    at Object.fromJson (/usr/app/lodestar/packages/api/src/utils/types.ts:149:44)
    at Object.request [as getBlockV2] (/usr/app/lodestar/packages/api/src/client/utils/client.ts:73:27)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async fetchBlock (/usr/app/lodestar/testBlockV2.ts:13:16)

While this works in the pre sszv2 commit:
commit 3e1f9b26fa2d5b852ab0832340e97541541cf612 (HEAD)
Author: dadepo<EMAIL_ADDRESS>Date:   Sun Apr 3 21:09:35 2022 +0200

Code run in the pre sszv2:
bash-5.1# ts-node testBlockV2.ts
{
  data: {
    message: {
      slot: 199737,
      proposerIndex: 12779,
      parentRoot: [Uint8Array],
      stateRoot: [Uint8Array],
      body: [Object]
    },
    signature: Uint8Array(96) [
      142, 242,  49,  82, 105,  13, 210,  39, 150,   1, 121,  73,
      206,  18, 132, 155, 221, 167, 163, 207,   1, 118, 139, 158,
      108, 104, 228, 196, 122, 102, 138, 240,  99,  20, 143, 231,
        1,  28, 129, 249, 172, 196, 229,  73, 176, 171,  70,  17,
       25,  39, 172, 131, 162, 108,  28,   2,  33, 197, 187, 212,
      125,   6, 169, 220,  67, 162, 114,  98,  29,  50, 211,  99,
       78, 109, 224, 229, 197, 109, 207,  30, 235, 221, 240,  25,
        7, 197, 237, 252, 223,  38, 110,  83, 126,  60, 192,  66
    ]
  },
  version: 'bellatrix'
}

The execution payload returned by that URL is
        "execution_payload": {
          "parent_hash": "0x3fef46ff162d7893a4a99a290beb2a8bd990036ebcf0da1190d679381ce9cb9e",
          "fee_recipient": "0xf97e180c050e5ab072211ad2c213eb5aee4df134",
          "state_root": "0x143a76eb213e46e1e51ee78d26db32025f953b2d04f95d0b07f58d1634cfac37",
          "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
          "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
          "prev_randao": "0x480057438bc0b1209ac42d55cf3180807d213a27512e5865ed8102c8bfdb83e9",
          "block_number": "214896",
          "gas_limit": "8000000",
          "gas_used": "0",
          "timestamp": "1649404344",
          "extra_data": [],
          "base_fee_per_gas": "7",
          "block_hash": "0xaa2030a604182b00e1f7bda53cc11e8100fc02d2a6f7dad387e53c77aea96b13",
          "transactions": []
        }

This JSON serialization is invalid according to current ssz version because an empty extra_data field must be 0x not []. I have tried to recreate this error with ssz-v2 but it correctly serializes an empty extra_data to 0x. What version is that node running?

This JSON serialization is invalid according to current ssz version because an empty extra_data field must be 0x not []. I have tried to recreate this error with ssz-v2 but it correctly serializes an empty extra_data to 0x. What version is that node running?
It's running Lodestar/v0.35.0-beta.0/master/+35/08f98c21 it defined extra_data as List[Uint8], so empty value is []
https://github.com/ChainSafe/lodestar/blob/4d766d1ad6569dc3f4aa628c57c695f1abc7828e/packages/types/src/bellatrix/sszTypes.ts#L49

updated the kiln node to latest:
@lodestar-kiln-v2:~# docker logs kiln-lodestar | grep git
Apr-08 10:05:29.915[]                 info: Lodestar version=v0.35.0-beta.0/master/+50/43111801 (git), network=mainnet

The extra data is still coming: [] as the json response of the api

The extra data is still coming: [] as the json response of the api

ssz-v2 is merged only in master not latest stable. You should run 'next' tag there

The extra data is still coming: [] as the json response of the api

ssz-v2 is merged only in master not latest stable. You should run 'next' tag there

its next only, 43111801 is the latest commit in master i think whiich i grepped on the log
@lodestar-kiln-v2:~# docker logs kiln-lodestar | grep git
Apr-08 10:05:29.915[]                 info: Lodestar version=v0.35.0-beta.0/master/+50/43111801 (git), network=mainnet

Could you add a unit test to assert correct behavior here in Lodestar master?

@g11tech Closing as you said things are working now


dlist insert_in_order and print_list

Joseph and Edward's completed portion of the doubly-linked list assignment

Recreated changes in commit cf61569ede27a9a10dee3f529d3e2c9607fd5ac4, closing this because it's been merged.


PurgeCSS + RemarkPrism Conflict

Description
When using both the @gridsome/remark-prismjs transformer (based on these instructions) and the gridsome-plugin-purgecss plugin. PurgeCSS is removing the prismjs css despite it being used by the code blocks in the markdown based sourced pages.
Steps to reproduce
Checkout this branch:
https://github.com/zacnomore/portfolio/tree/demonstrate-purgecss-prismjs-conflict
yarn gridsome build
Navigate to dist/assets/css/0.styles.xxxx.css
Note the file size
Remove this from `gridsome.config.js
    {
      use: 'gridsome-plugin-purgecss'
    },

yarn gridsome build
Navigate to dist/assets/css/0.styles.xxxx.css
Note the larger file size from the prismjs styling being included
Expected result
PurgeCSS would not remove the prismjs styles since they are used in the final generated html
Actual result
PurgeCSS removes the prismjs styles
Environment

Libs:
@gridsome/cli v0.3.0
gridsome v0.7.7

Browser: All, none? It's not really browser related.
- [ ] Chrome (desktop) version XX
- [ ] Chrome (Android) version XX
- [ ] Chrome (iOS) version XX
- [ ] Firefox version XX
- [ ] Safari (desktop) version XX
- [ ] Safari (iOS) version XX
- [ ] IE version XX
- [ ] Edge version XX

For Tooling issues:
- Node version: v10.15.3
- Platform:  Mac

Others:
gridsome info
------------------------------------------------------------------------------
  System:
    OS: macOS Mojave 10.14.6
    CPU: (12) x64 Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
  Binaries:
    Node: 10.15.3 - /var/folders/s0/5yvl85f918x41fd_wx9p3h1j40qvfd/T/yarn--1570759062487-0.4239502627949241/node
    Yarn: 1.17.3 - /var/folders/s0/5yvl85f918x41fd_wx9p3h1j40qvfd/T/yarn--1570759062487-0.4239502627949241/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v10.15.3/bin/npm
  Browsers:
    Chrome: 77.0.3865.90
    Safari: 13.0.2
  npmPackages:
    @gridsome/plugin-sitemap: ^0.2.2 => 0.2.2
    @gridsome/remark-prismjs: ^0.2.0 => 0.2.0
    @gridsome/source-filesystem: ^0.6.1 => 0.6.1
    @gridsome/transformer-remark: ^0.3.4 => 0.3.4
    gridsome: ^0.7.7 => 0.7.7
    gridsome-plugin-purgecss: ^1.0.12 => 1.0.12

This is rather silly, I should really be filing this with the purgecss plugin, not the remark prism plugin....

Curious, did you get this solved?

Unfortunately not, for the moment I pulled it out of the project. The plugin is very small though, repo
I suspect this is an order of operation issue

As I stumbled on this while looking for a solution, I'll share what I found here.
PrismJS classes are added on client side that's why they are removed by PurgeCSS.
By whitelisting some PrismJS classes, it works. See more whitelisting options here.
module.exports = {
  plugins: [
    {
      use: 'gridsome-plugin-purgecss',
      options: {
        whitelistPatterns: [/token.*/, /class.*/],
        whitelistPatternsChildren: [/token.*/, /class.*/],
      }
    }
  ]
}

I tested the code from @mariofriz and it didn't work for me, but the below did once I ran gridsome build I saw the expected styles.
module.exports = {
  plugins: [
    {
      use: 'gridsome-plugin-purgecss',
      options: {
         whitelistPatternsChildren: [/^token/, /^pre/, /^code/],
      }
    }
  ]
}

GRIDSOME - just incase the above solution didn't work for some weird reason.
Try adding a safelist in your gridsome.config.js as shown below. It worked for me.
{
        use: 'gridsome-plugin-purgecss',
        options: {
          safelist: {
            greedy: [/^token/, /^pre/, /^code/, /token$/, 'pre', 'gridsome']
          },
        }
}


cmd/compile: inline marker targets not reachable after assembly on ppc64x

It looks like issue #40473 also affects ppc64x based on this trybot run for CL 247697: https://storage.googleapis.com/go-build-log/8548211f/linux-ppc64le-buildlet_059f3c62.log. It should be relatively easy to fix with a code change similar to that done for s390x in CL 247697.

/cc @randall77 @laboger

@mundaym I don't think the test in your CL is correct for ppc64x. If you look in cmd/compile/internal/ppc64/ggen.go function ginsop it is not generating a NOP but OR R0,R0,R0 for the inline marker. So this instruction won't get removed by PPC64 assembler and we shouldn't have the same problem as on S390x.

It's a tricky one to explain. I think of it as a 'use-after-free' bug:

The compiler produces a Prog value representing an instruction and saves a pointer to it for use later as an inlining mark.
The assembler rewrites the Prog into a GOT lookup and replaces the original Prog with a NOP.
The assembler removes that NOP Prog from the Text linked list. It does not assign the Prog a valid PC value.
The linker reads from the pointer to the (now dead and unreachable) Prog that the compiler saved and uses it to produce invalid inlining table data.

The invalid inlining table data only appears to cause an infinite loop during traceback when the invalid PC value in the unscheduled Prog happens to correspond to an instruction that is part of the same inlined function (therefore the traceback never escapes the inlined function). This appears to be a rare situation.
It should be OK for the assembler to leave NOPs in the Text linked list since they do not produce actual code. Keeping them in the linked list however means they are scheduled and their PC value is valid (though really it points to the next instruction).

gopherbot please backport to 1.15 and 1.14.

@laboger What are the effects of this bug?  That is, why should the CL be backported?  I can't quite figure out what the actual problem is here.  Thanks.

This is related to #40473. Tracebacks hang because inline marker information is corrupted.

The change for s390x depends on this one. In the s390x fix, code was added to detect when the inline marker information was out of sync and that check fails on ppc64x. This change is needed to prevent that check from failing, as well as preventing the error that could occur when they are out of sync.

@gopherbot Please backport to 1.14 and 1.15
This bug can cause tracebacks to hang.  There is no workaround.


Use a Traction instance for the May 31 2023 AnonCreds Workshop

I'm (delighted to be) on the hook to host an AnonCreds workshop with Hyperledger on May 31.    I can create the slides and materials easily, but it is called a workshop, and I'm working with Rodolfo Mirando of Roots.ID on that part.  We need a way to have users try out creating a credential, issuing it and verifying it, where more time is spent on the AnonCreds part, and less on the Aries part.
Akiff, Hannah, Aaron and I talked at OSS and think that Traction could be a great way to do this.  We would have each participant requisition and receive a Traction agent. They use that to create a schema or two, connect to a holder and issue a credential (or two) and they do a presentation request with multiple credentials.
To do that we need some effort on the Enterprise Apps team (yes, these will go into issues if we want to go forward):

deploy (if needed) an instance of Traction that can be used.  Or use an existing one.
make sure we can support the load -- we'll have as many participants as possible get their instance before the workshop.
Use BC Wallet as the holder — display QR codes for the interactions.

Might also enable having the agent to connect to itself as the holder -- so that participants only need one agent.  Evidently that doesn't work today for some reason.

Construct a script for them to follow -- with space for them to do their own playing with the schema and the presentation request.

Confirming we can use the BC Wallet — that it is available globally,
More details to follow.

We should be able to use https://tenant-ui-dts-dev.apps.silver.devops.gov.bc.ca as instance - c.c.: @WadeBarnes
For the load testing, can we use @usingtechnology script/load tester to figure out the provisioning part? The "genera" usage should be fine, I think, maybe we just tweak and increase the resources a bit.

@swcurran instance has been deployed ( see https://github.com/bcgov/DITP-DevOps/issues/74 ) and credentials to innkeeper provided separately.
Do you need a hand building/improving the script to follow, or are we good as long as the instance is up and running?


Logger Not Part of the Boilerplate?

Add a logger component/feature to the boilerplate to capture and save the logs displayed in the terminal/console in a specific folder.

Add a logger component/feature to the boilerplate to capture and save the logs displayed in the terminal/console in a specific folder.

Added log feature


(MAINT) Upgrade to Beaker 2.14.x

@camlow325
This should fix the debian8 smoke test failures.

:+1:


Adding list reservations API to Microsoft.Capacity

MSFT employees can try out our new experience at OpenAPI Hub  - one location for using our validation tools and finding your workflow.

Changelog
Please ensure to add changelog with this PR by answering the following questions.

What's the purpose of the update?

[ ] new service onboarding
[X] new API version
[ ] update existing version for new feature
[ ] update existing version to fix swagger quality issue in s360
[ ] Other, please clarify

When you are targeting to deploy new service/feature to public regions? Please provide date, or month to public if date is not available yet. - By July 15, 2021
When you expect to publish swagger? Please provide date, or month to public if date is not available yet. August 1, 2021
If it's an update to existing version,  please select SDKs of specific language and CLIs that require refresh after swagger is published.

[ ] SDK of .NET (need service team to ensure code readiness)
[ ] SDK of Python
[ ] SDK of Java
[ ] SDK of Js
[ ] SDK of Go
[ ] PowerShell
[ ] CLI
[ ] Terraform
[X] No, no need to refresh for updates in this PR

Contribution checklist:

[X] I commit to follow the Breaking Change Policy of "no breaking changes"
[X] I have reviewed the documentation for the workflow.
[X] Validation tools were run on swagger spec(s) and errors have all been fixed in this PR. How to fix?

If any further question about AME onboarding or validation tools, please view the FAQ.
ARM API Review Checklist

[X] Ensure to check this box if one of the following scenarios meet updates in the PR, so that label “WaitForARMFeedback” will be added automatically to involve ARM API Review. Failure to comply may result in delays for manifest application. Note this does not apply to data plane APIs, all “removals” and “adding a new property” no more require ARM API review.

Adding new API(s)
Adding a new API version
[ ] Ensure to copy the existing version into new directory structure for first commit (including refactoring) and then push new changes including version updates in separate commits. This is required to review the changes efficiently.
Adding a new service

[X] Please ensure you've reviewed following guidelines including ARM resource provider contract and REST guidelines. Estimated time (4 hours). This is required before you can request review from ARM API Review board.

[X] If you are blocked on ARM review and want to get the PR merged with urgency, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.

Breaking Change Review Checklist
If there are following updates in the PR, ensure to request an approval from Breaking Change Review Board as defined in the Breaking Change Policy.

[ ] Removing API(s) in stable version
[ ] Removing properties in stable version
[ ] Removing API version(s) in stable version
[ ] Updating API in stable or public preview version with Breaking Change Validation errors
[ ] Updating API(s) in public preview over 1 year (refer to Retirement of Previews)

Action: to initiate an evaluation of the breaking change, create a new intake using the template for breaking changes. Addition details on the process and office hours are on the Breaking change Wiki.
Please follow the link to find more details on PR review process.

Thank you for copying the existing version into new folder for first commit. It helps in reviewing the change.
I assume you followed the below guideline, please mark the checklist appropriately
Ensure to copy the existing version into new directory structure for first commit (including refactoring) and then push new changes including version updates in separate commits. This is required to review the changes efficiently.

From the changes I don't see new API being added and lots of changes in terms of removing enum's etc. Please confirm if this is expected.

I also see you've not copied all the paths in the new version, it will break your SDK's/CLI/PS. It's also highlighted in some of the automated checks, please closely review the automated checks and resolve.

Changes looks good from ARM perspective, please follow the process given @ https://dev.azure.com/azure-sdk/internal/_wiki/wikis/internal.wiki/212/Swagger-PR-Review to continue

@ArcturusZhang I have gotten all validations to pass except for go and python.  The errors they show don't make sense to me.  For example, it says there is a duplicate ReservationOrderList definition, but there is only one per api-version.
Are those fixable?  How do I proceed with this PR?

@ArcturusZhang would you please review again

@jianyexi would you please review this?  There are breaking changes, but it's a new api-version so I think it's ok.

@jianyexi Jianye Xi FTE would you please review this? There are breaking changes, but it's a new api-version so I think it's ok.

@jianyexi Jianye Xi FTE would you please review this? There are breaking changes, but it's a new api-version so I think it's ok.

Why did you remove some paths , it's not allowed even in new api version ?

@jianyexi Jianye Xi FTE would you please review this? There are breaking changes, but it's a new api-version so I think it's ok.

Why did you remove some paths , it's not allowed even in new api version ?

I didn't remove any paths between stable versions.  There are some paths in a preview api-version that I didn't include in this new stable version.  Is that required?  I can bring them in if needed.

@jianyexi - would you take another look?  I added the paths that were in preview to this stable release.

@jianyexi Jianye Xi FTE - would you take another look? I added the paths that were in preview to this stable release
Are these paths ready to merge into stable version ?

@jianyexi Jianye Xi FTE - would you take another look? I added the paths that were in preview to this stable release
Are these paths ready to merge into stable version ?

The paths are ready to merge into stable.  I put Do Not Merge in the title because we are still deploying the api-version and will then update the manifest, but it's otherwise ready.

@jianyexi  We have made all of the necessary changes to support the new api-version, so we are now ready to merge this.

There are cross version breaking changes ,could you follow the action to get approval:
https://github.com/Azure/azure-rest-api-specs/pull/14849#issuecomment-902367089

There are cross version breaking changes ,could you follow the action to get approval:
#14849 (comment)

@jianyexi, I reduced the cross-version breaking changes to only the return error message, which we're required to change for compliance.  Does that change the need to get a breaking change review?  The customer impact will be minimal.

There are cross version breaking changes ,could you follow the action to get approval:
#14849 (comment)

@jianyexi Jianye Xi FTE, I reduced the cross-version breaking changes to only the return error message, which we're required to change for compliance. Does that change the need to get a breaking change review? The customer impact will be minimal.

The format change also need to be approved

@jianyexi can this be completed now?  I got the breaking change sign-off.


Add SeismicMesh

SeismicMesh is pretty cool for parallel 2D/3D mesh generation in Python and represents a general purpose mesh generator that is competitive with CGAL and Gmsh as was established in the JOSS article. It also is the only open source implementation of parallel DistMesh on the web that, at the very least, is well-documented.
Also, Antoine wants to know if you still go to "Süss War Gestern" :]

Also, Antoine wants to know if you still go to "Süss War Gestern" :]

Hehehe.. It's been closed for almost a year now (-> rona) but sure!

Also, Antoine wants to know if you still go to "Süss War Gestern" :]

Hehehe.. It's been closed for almost a year now (-> rona) but sure!


dtrace support compiled into the runtime

Early experiments and trying to make dtrace work with pony runtime.
Although systemtap isn't supposed to be a top level directory..
This commit allows for the example program helloworld tracing with this command:
sudo stap -v ../../systemtap/all.stp -c ./helloworld -I ../../systemtap/tapsets/
more of a proof of concept really..

Any particular reason you closed this @mkdubik?

This was a dirty experiment nowhere near ready for a pull request. It was meant for the fork. Fully operational dtrace support that follows standard is coming soon..

Nice

@mkdubik I'm really looking forward to this. Nice work.


Flutter 3 & Dev Changes

"" cupertino_icons: ^1.0.2
flutter_cube: ^0.1.1
ar_flutter_plugin: ^0.7.3
path_provider: ^2.0.4
flutter_archive: ^4.1.1
url_launcher: ^6.0.10
arcore_flutter_plugin: ^0.1.0
model_viewer_plus: ^1.5.0
"" I was Checking the Project For fun and had upgrade and made some changes if u want I can make a new branch and push let me know soon @iambrijeshtoo

@hrushikeshhd18 can you send me? im struggling to build the apk

@hrushikeshhd18 can you show me how to build the app?


Forcing ASCII for this ASCII encoded certificate

Checklist

[x] I've run bundle exec rspec from the root directory to see all new and existing tests pass
[x] I've followed the fastlane code style and run bundle exec rubocop -a to ensure the code style is valid
[x] I've read the Contribution Guidelines
[x] I've updated the documentation if necessary.

Motivation and Context
This change allows the Apple Root Certificate to be successfully downloaded when using update_project_provisioning.
This fix was tested by running these changes against my local project. Without them I got the same issue as is detailed in https://github.com/fastlane/fastlane/issues/11752. After the fix, the certificate is downloaded successfully.
Description
This file is ASCII, so here I am opening it for write and explicitly using the ASCII encoding. Otherwise, we encountered a crash when trying to convert it to UTF-8.

I signed it!


Added some of the missing str methods

I've added some of the missing methods, currently have isalnum, isnumeric, isdigit, title, swapcase, isalpha, replace, and center. The center method does center the string but I haven't found a way to fill in custom characters around it using format!() just yet

Ha, nicely done! If you feel lucky, you could try the format, f-string or % style formatting as well ;)

Sure thing! I'll try to implement that as soon as I can


Does this FileTransfer plugin works?

I have tried in android and ios both the logs say download is successful but when i check the directory, the file is not there

@prasath003 retrieveImage confirms whether the image is indeed at the selected location or not. What does that show when you click it?
Also if you want to physically see it you will need to check out the answers here for iOS and something like this for Android

Let me know if you have any more issues!

@dsgriffin  Am using Rooted Android 7.1.2 Phone and iOS Jailbreak 10.1.1. I went and checked the files folder in both it's not getting downloaded, only change is downloading directly from server link will it be an issue??

If you click Retrieve downloaded image what does the dialog popup say? It should show the location of where you stored the file.
If you are downloading from a server link it will be fine but of course will need to change some things such as imageLocation and image variables inside downloadImage()

This gives me success, but the file is getting downloaded.
const fileTransfer: FileTransferObject = this.transfer.create();
const url = 'https://someserver/file.pdf';
fileTransfer.download(url, this.file.dataDirectory + 'file.pdf').then((entry) => {
console.log('download complete: ' + this.file.dataDirectory);
}, (error) => {
console.log("download error :"+error)
});
I think am doing something wrong,anyway thank you @dsgriffin.


Adding GlobalAveragePooling1D

So I'm relatively new to the swift ecosystem, let me know if there are any errors. Afaik my understanding of GlobalAveragePooling in a single dimension is returning the mean * the no of batches if it's a multi-batch input.

Did you sign the CLA?

@rxwei yeah i have


User narrative

Relates to test-driven development. Develop a user narrative for taco, and develop command line interface around that.
For example: I want to trim some reads. How do I create/use taco-read-filtering? Can I use a local config/params file? Do I need the config/params file in the repo?
What about data - what if my reads live locally? What if they're available in scratch space on the cluster?  (If we target AWS as a platform, that simplifies things somewhat, as we're always assuming a green-field deployment and thus assuming read data is going to be remote/in a bucket. But we're trying to keep taco platform agnostic.)

dahak would take URLs for read files, but if they were present locally on the machine it would not use the URL or try to download them. Need to improve on that.
Simply imposing the requirement that the user specify a URL would exclude users who want to use taco on local data - not sensible. So perhaps we could have n option to take a URL, or take an absolute path, and if the data is not available at the absolute path the workflow fails (i.e. if the user wants to provide their data locally, they must ensure their data is available on the local machine where the snakemake task will run).

http://nih-data-commons.us/use-case-library/glossary/
Scientific objective: a description of a scientific process, told without reference to a specific technology solution. Focuses on resources required, method(s) followed, and outcome(s) targeted.
User epic: a story, told from the user's perspective that captures a valuable set of interactions with tools (e.g. software solutions) in the service of achieving the scientific objective.
User story: a specific piece of an epic that translates to a well-scoped and defined piece of software or data engineering work.

Trimming Reads
Scientific objective:

The researcher wants to trim some reads, which they have obtained from X. (Here, X is an instrument, a colleague, a workshop data set, a hard drive that was mailed to them, etc.).

User epic:
(already somewhat naturally broken up into user stories)

(Background) The researcher does not have access to institutional HPC or cluster resources, but they do have a credit card. Therefore they would like to use cloud computing platforms to trim their reads. The researcher can estimate roughly how much time, memory, or compute resources should be used, but is not entirely certain. Similarly, the researcher knows that they need multiple compute nodes but does not know about networks or cloud architecture.

(Background) The researcher has a complex workflow with multiple programs with complex language and library dependencies, so they would like to use conda, and would also prefer to use docker or singularity if possible.

(Once) The researcher downloads and installs dahak-taco on their local machine. dahak-taco will allow them to run workflows that live in repositories that have dahak-taco wrappers.

(Once) The researcher downloads and installs dahak-bespin on their local machine. dahak-bespin will allow them to use the AWS API to automatically allocate cloud cluster resources, which will allow them to run dahak workflows.

(Once per workflow) The researcher downloads the workflow repository. This workflow repository will contain a dahak-taco wrapper and will define a set of workflow preferences and configuration options. The user can set these or leave them blank to use default values. The user does this using a JSON or YAML file.

(Once per workflow) The researcher should use dahak-bespin to start up, manage, and shut down a workflow cluster in the cloud. (Think of this like a background service that you start/stop/restart, where the service is the cloud cluster.) dahak-bespin does not arbitrarily create cluster after cluster, and leave them unmanaged and undestroyed - dahak-bespin only handles creating or destroying or managing one cluster at a time. All nodes in the cluster are set up to accept workflow tasks from dahak-taco.

POINT OF CLARIFICATION: running a workflow using multiple machines can take one of two forms:

(1) the workflow is broken down into a task dependency diagram and tasks are distributed to each node according to cost; or
(2) the entire workflow is run on a single machine, and multiple machines only allow you to scale the number of times, in parallel, a workflow can be run.
dahak-taco uses (2), mainly because: it is a lot easier than (1), Snakemake already implements (1), and doing (1) requires compute nodes to have a unified scheduler/task queue. No thanks.

(Once per workflow) When the user has configured their workflow and is ready to run it, they start up a workflow cluster in the cloud using dahak-bespin (e.g., something like, edit a bespin config file, and then do bespin start). This gives the user a cluster in the cloud that is ready to accept workflows from dahak-taco. (Note that this is set up to do exactly one dahak-taco workflow per machine. There is no further distribution of tasks across machines.)

(Many times) The user runs a dahak-taco workflow. Each workflow is given a particular machine/worker node to utilize. The workflow contains instructions itself for how to gather results at the end. Snakemake handles this when the workflow is run.

POINT OF CLARIFICATION: currently not sure of the mechanism for passing info about nodes from dahak-bespin to dahak-taco.


[FLOC-3695] Fix broken run_sphinx job by fixing broken docs links

Docker probably changed their SSL configuration, which broke our links that were redirecting from http://docs.docker.com to https://docs.docker.com. Updating the links to correctly point to https://docs.docker.com removes these errors from the build. Unfortunately, it does so because we do not check https links. Fixing that problem is out of scope for this patch, since the priority is to unbreak master.
In addition, since master started breaking due to https links, we added extra failures by deleting some buildbot jobs. I've taken the liberty of updating the documentation that used those examples.

I'm satisfied with these changes.

links are working - thanks @jml

Not much luck getting a lot of green on jenkins.  However, the failures all seem to be jenkins problems.  Manually verified this change fixes the problems on my system (where I was able to reproduce the problems).  And pretty sure there's no mechanism for these changes to be causing any of the other red.  So, merging.


Bugfix/492

Addresses Issue #492. Potentially a bit of a hack but I have struggled to come up with anything more graceful.

Any news on this ?

It looks like the CI tests failed for reasons outside of my control. I am not sure how to kick those tests off again.

Could just resubmit it?

Although https://github.com/adamwdraper/Numeral-js/pull/608/commits/eafdd0b80fea3b5298bc6ba39f2f020cf41c39e7 seems to fix the same problem anyway


Bad query

In the class ApineUserFactory, the method "create_by_group" contains a bad SQL query. Normally, "SELECT ID from `apine_users` where group=$group" would work. In this case, the keyword "group" in reserved in MySQL and is therefore not considered a column name, but that specific keyword and thus the query fails. The query should be replaced by "SELECT ID from `apine_users` where `group`=$group".

Thanks for your feedback. A fix will be included in our next commit.


close tab when Connection Closed

This doesn't work for me. Javascript is not supposed to be able to close windows it did not open, so I'm not sure this is possible.


[EDA] ContentVersion trigger

Critical Changes
Changes
Issues Closed
W-9203961
New Metadata
Triggers

TDTM_ContentVersion.trigger

Unpackaged Metadata
Deleted Metadata
Testing Notes

Trigger appeared with proper name and version setting in Setup > Apex Triggers and contained NO logic.
Triggers did not appear in a search in the Trigger Handler tab. I tested this by entering the trigger name into the Trigger Handler "All Trigger Handlers" list view

QA Passes - Merging

FYI @juliesnow  - I had Chris Bunkers (an AC dev) add release notes for this 232 PR. There's no doc updates for EDA, but it will need to go into the Release Notes for 232. It's very similar to how we handled this PR. Thanks.

Thanks, @agoolsby!


push sample image to MCR

202410
Current steps when run azd up:

provision: on provison step, use placeholder image mcr.microsoft.com/azurespringapps/default-banner:distroless-2024022107-66ea1a62-87936983 for all the container apps, will import this placeholder image to private ACR when do provision.
package: package the projects under src/
deploy: build all images and push to private image, and update the container apps to new built images.

The step 2 is time costing
And the azd up takes about 70 minutes, up to 40 minutes on package stage.
If we prepare all the images in advance, we could use the images for all container apps on the provision stage.
And after provision, the sample environment is ready
Target:
Create Github Action for the project, build / push images to MCR with single trigger
We may first find the manual steps to push images to MCR

MCR delaration https://github.com/microsoft/mcr/pull/3580


The new default UI theme has blurry edges

Godot version
4.0-stable x86_64
System information
Ubuntu 22.04, Intel Iris Plus Graphics G7, Xorg
Issue description
The default UI theme has blurred edges around focus boxes. Perhaps other lines of rectangles used in the UI have a slight blur.

It is a good thing to antialias the corners; I would expect the straight edges of the rectangle to be pixel-perfect for a polished look.

The blurry edges on the sides make the default theme look a bit unfinished. Even if a bit outdated, the previous default UI theme in Godot 3.5 had a more polished look with crisp edges.
It is noticeable especially on full HD, non Retina / high-dpi screens where the grid of pixels is still visible.
Steps to reproduce
Create new project and a Control scene.
Add a few Button and LineEdit controls. Run the scene.
See that the outline around the focused control has a blurry edge.
Minimal reproduction project
N/A

This is because antialiasing is enabled on the default theme's styleboxes to make them smoother, especially if they are rotated: https://github.com/godotengine/godot/blob/fba9416fe0046c32b19d47523eab95e9e6036093/scene/resources/default_theme/default_theme.cpp#L59

I had a look at the StyleBoxFlat code, and it seems that there are two things happening with the antialiasing code:

The addition of additional triangles to smooth the edge
Something with the UVs I do not really understand, that makes the whole thing blurry
Seems the latter was added lately. Both share the same antialiasing factor. Perhaps if we keep the former only? I am experimenting with that part of code on my side for another improvement.

Sure, the OpenGL antialiasing is unreliable and literature about line drawing using triangles recommend the extra polygons to fade the border to transparent, even for simple lines.
I also thought about applying a pixel shader, but is it doable to only part of the drawing instructions?

Also, if we want some drawing code that draws perfect edges even if the viewport is zoomed, it should be aware of the actual rendered resolution and adjust accordingly. For instance, the thickness of edge adjustment using triangles should be relativelly smaller if the resolution is higher or the view is zoomed in.

This would require updating the polygon buffer every time the viewport size or camera zoom changes, but there's no way to ensure this can be done quickly. For StyleBoxFlat specifically, we could recreate them when the viewport size changes, but there's no way for a resource to listen to a viewport signal to my knowledge.

I fixed those blurry edges and the rendering is much better
https://github.com/godotengine/godot/pull/76132


Getting the custom 404 page to work

Might not be the best place to ask, but the custom 404 page does not work when I either create a 404.astro or not_found.html -- do you know why this might be?
Thanks for this wonderful tool!

Turns out it can be done by creating a not_found.html file in the /public/ directory!

ill remember this tip if i have the same issue arise- thanks!


Crashes when attempting to use flash while taking pictures in devices that does not support flash.

device.hasFlash property has not been checked in FSCameraView before configuring and using flash.

@saugat135 Thanks!


Docs updates on range distr. and copy from worker in append distr.

DESCRIPTION: Docs updates on range distr. and copy from worker in append distr.
I provided solutions to some problems I mentioned in release 9.5 doc testing from Quick Tutorials, Develop and FAQ sections:

We don't support COPY from worker nodes on append-distributed tables anymore, so I removed those sections. See https://github.com/citusdata/citus/pull/3261

As also discussed with @onderkalaci, we don't explain range-based distribution on the docs, so it's better to remove all mentions of range-distributed tables on the docs.

Lastly, node_capacity_function was erroring out due to type mismatch. I simply changed the return type from boolean to int.

-- example of node_capacity_function

CREATE FUNCTION v2_node_double_capacity(nodeidarg int)
    RETURNS boolean AS $$
    SELECT
        (CASE WHEN nodename LIKE '%.v2.worker.citusdata.com' THEN 2 ELSE 1 END)
    FROM pg_dist_node where nodeid = nodeidarg
    $$ LANGUAGE sql;

ERROR:  return type mismatch in function declared to return boolean
DETAIL:  Actual return type is integer.
CONTEXT:  SQL function "v2_node_double_capacity"

I tested v2_node_double_capacity, it should return real type instead of int. I am changing the function accordingly.

I tested v2_node_double_capacity, it should return real type instead of int. I am changing the function accordingly.


Ability to set Dialog for TrackSelectionDialogBuilder

[REQUIRED] Use case description
Currently TrackSelectionDialogBuilder uses either androidx.appcompat.app.AlertDialog$Builder or AlertDialog.Builder in the build(). My app is using Material3, but other people might be using Material2 or even there own theme.
My current issue is that I can't theme the Dialog to Material3 even when using the setTheme().
Proposed solution
I'm proposing to either add a new constructor which could take in an object extending AlertDialog.Builder or adding a new setter to do so.
There is even a solution of making TrackSelectionDialogBuilder an abstract class and let the users implement their own which would shift the issue of displaying the right dialog/theming onto the user.
Note: I could propose a PR for the selected solution

Sorry for a delay in replying. Could you explain why setTheme doesn't work?
From what I can tell, building for platform with android.app.AlertDialog.Builder:
https://github.com/androidx/media/blob/d13a0f4ec62ca092b79746a5725b62a3244cc5b4/libraries/ui/src/main/java/androidx/media3/ui/TrackSelectionDialogBuilder.java#L251-L252
and building with AndroidX with androidx.appcompat.app.AlertDialog.Builder
https://github.com/androidx/media/blob/d13a0f4ec62ca092b79746a5725b62a3244cc5b4/libraries/ui/src/main/java/androidx/media3/ui/TrackSelectionDialogBuilder.java#L272-L278
should both respect the themeResId that is passed. Are you saying that neither builder inflates the dialog correctly?

Hello,
I should have put some code. Yes the themeResId isn't respected for Material3.
<style name="CustomTrackSelectionTheme" parent="ThemeOverlay.Material3.MaterialAlertDialog" />

TrackSelectionDialogBuilder(
            context,
            "Select Quality",
            player,
            C.TRACK_TYPE_VIDEO
        ).apply {
            setTrackFormatComparator { o1, o2 -> o2.height - o1.height }
            setTheme(R.style.CustomTrackSelectionTheme)
        }.build().show()

And the result looks like above while material3 dialog have rounded corner and looks more like https://m3.material.io/components/dialogs/overview#310aaace-3c78-4b14-a878-ab8e724c5c06

Stumbled upon https://developer.android.com/reference/com/google/android/material/dialog/MaterialAlertDialogBuilder
and I quote:

An extension of AlertDialog.Builder for use with a Material theme (e.g., Theme.MaterialComponents).
This Builder must be used in order for AlertDialog objects to respond to color and shape theming provided by Material themes. The type of dialog returned is still an AlertDialog; there is no specific Material implementation of AlertDialog.

We can possible try to have something like
TrackSelectionDialogBuilder(
            context,
            "Select Quality",
            player,
            C.TRACK_TYPE_VIDEO
        ).apply {
            setTrackFormatComparator { o1, o2 -> o2.height - o1.height }
            setIsMaterial(true)
            setTheme(R.style.CustomTrackSelectionTheme)
        }.build().show()

and have the build() method make a choice between 3 types
  /** Builds the dialog. */
  public Dialog build() {
    @Nullable Dialog dialog;
    if (isMaterial) {
      dialog = buildForMaterial3();
    } else {
      dialog = buildForAndroidX();
    }
    return dialog == null ? buildForPlatform() : dialog;
  }

where buildForMaterial3() makes use of MaterialAlertDialogBuilder(Context context, int overrideThemeResId)
The problem of course is that since MaterialAlertDialogBuilder extends androidx.appcompat.app.AlertDialog.Builder, then both buildForMaterial3() and buildForAndroidX() will have to use reflection.
We will discuss internally and I will get back to you on this, but thank you in the meantime for suggesting this enhancement.

Thank you

The problem of course is that since MaterialAlertDialogBuilder extends androidx.appcompat.app.AlertDialog.Builder, then both buildForMaterial3() and buildForAndroidX() will have to use reflection.
The issue about this is that I'm using Material3 but some people might be using Material2 that's why I was proposing to delegate this to users with an abstract class or something like this.


[Console] more secondary output choices (IDFGH-8525)

Related Issue: https://github.com/espressif/esp-idf/issues/9877
Add UART and USB CDC "Seconday Console" options to kConfig & implement.

choice ESP_CONSOLE_SECONDARY

    config ESP_CONSOLE_SECONDARY_UART
        bool "UART"
        depends on ! ESP_CONSOLE_UART_DEFAULT && ! ESP_CONSOLE_UART_CUSTOM

    config ESP_CONSOLE_SECONDARY_USB_CDC
        bool "USB CDC"
        depends on ! ESP_CONSOLE_USB_CDC

Just like before, it is only shown if it is not the primary console.
Tested on an ESP32-S3.

Thanks for your contribution.

I'm thinking of updating this PR with "bools" instead of a "choice", so that more outputs can be selected.
As described here: https://github.com/espressif/esp-idf/issues/9986

The most important change is the panic.c change, so that the stacktrace it printed on the secondary console as well.
If you want me to revise this PR and make fewer changes, let me know.  The panic.c change is the only one I really need =)

Any thoughts on this?
If we don't want all these changes, we should at least add USB Serial/JTAG Secondary Console to panic.c

I split this up into 2 commits, and made the first commit its own PR: kConfig

@igrr rebased!

I'll do some more testing and make sure they all work.
Will report back.

Okay. Made some big changes to the diff.
I combined the primary & secondary UART, like you suggested. It's a good change.
I added more internal KConfigs for when either primary or secondary is enabled.
I've tested:

building S2, all 4 permutations
building S3, all 14? permutations (CDC does not support dual core yet)
Running the Console Example for S2, UART
Running the Console Example for S3, UART, UART + Serial JTAG,  Serial JTAG + UART

Closing this PR in favor a a new one, with less noise.
https://github.com/espressif/esp-idf/pull/10132


MF Connector rounds floats when they have trailing zeroes, 7segment decimal point goes off by one when that happens.

Describe the bug
Set value to 123.450 and send it to a display.
Note that this, or any other value, if it is full hundredths (123.450 for example) this gets truncated by MF to 123.45, but if it is having also a significant digit as the third decimal (123.451 for example) it is not truncated.
So the main issue I guess is, MF should not truncate decimals even when there are no significant numbers there - or we would need to have a way to set the number of decimals we want. In many cases this doesnt matter at all. But sometimes it does, like here when the 7segment shows the value as 1234.50.
Expected behavior
Should not round values automatically without asking. Keep whatever you have and Round() explicitly if needed.
Though I guess it might not be as simple, it might not be MF that does truncation of zeros, it could be simconnect / xplane too, which makes it hard to define what precision the data should have.
Details

MobiFlight Version: git as of 2023/01/01

a float number doesn't have a certain number of decimals. This is not a MobiFlight issue, that is how numbers are handled internally. What you are describing is a formatting issue and here the best way to do it is a "modifier" which allows to format the number eg ###.### or something alike.
The decimal point placement is a second issue in my opinion. But I will have to reproduce this first in the unit test.

sorry I must have missed my coffee when writing this.
I agree there needs to be a modifier to format the floats into a string, or manual Transform with Round and math in the current lack of it.
But the actual issue I was going to file is that the 7segment display seems to display those floats inconsistently depoending on whether the last digit is a zero or not. If the last digit is zero, the whole fraction part gets shifted t the right

This is from Mathias, and I had the same issue, I think the whole fractional part shifts one character to the right, and the decimal point segment display has no digit shown.
Like if you show a radio frequency or other decimal number on the digits, and the third decimal is not a zero, it works correctly:
123.456
But if you have the third decimal being a zero, it gets handled as 123.45 and the segments show the decimal point with an empty digit:

Actually the decimal point location seems to vary depending on the value. Like 123.456 makes the decimal point correct, but if you have 123.50, you get 123 .50

Two things:

I will have to double check why it's not the case for you but the main branch should be able to handle decimal numbers (floats) and correctly set the decimal point so that it doesn't occupy an entire digit but is placed together with a number. (on your pics thats not the case which is weird)

There is no concept at the moment for an automatic alignment of a number based on its decimal point. apparently the numbers are aligned to the right in your case, so the number of digits after the decimal point affect where the decimal point will be.

At the moment I only consider the first item a bug in case it doesn't work.
Formatting modifiers will address the 2nd option.

I can reproduce the issus and will fix it. Thanks!


Gain calculation for Neuropixel 2.0 might be wrong

For commercial 2.0 probes, the manual says the ADC is 12 bits, which would make the highest positive value to be 2048, not 8192, as is hardcoded in the code. In the metadata of my recordings, imMaxInt=2048.
Jennifer Colonnel's code here uses the imMaxInt to calculate the gain factor.

@alejoe91 Please have a look, thanks! :)

The per channel gain part is already read from the imro table for 1.0, so that should be correct as is.
I didn't touch the immaxInt (512) for 1.0, because I assumed all 1.0 probe were 10bit and didn't want to introduce changes that might make people's old data inconsistent with new runs of Neo. Although it seems that immaxInt has been in SpikeGLX for a while. So we could also change it for 1.0, for consistency with 2.0 and only use the hardcoded 512 if the immaxInt is not in Meta.
If 1.0 were all 10bit, and I would rather not change it. But if you think we should, I can update the PR later this week.


Other Options broken for new machine drivers

Rancher Version: master 6/13
Steps to Reproduce:

Add a machine driver
Go to Add host and select other

Results:

[x] Other options is broken and missing information

[x] Generic driver is only giving me four fields

[x] If I have more then 1 driver, the other options from first driver are copied to any other driver I select in drop-down.

Version - master 6/14
Verified fixed