some clippy fixes

I used rustfmt-nightly to format the changes in the latest commit, is that correct or do I have to use git-master rustfmt?

is that correct or do I have to use git-master rustfmt?

The self-tests run against the codebase with the same rustfmt produced by that codebase, so using a different version of rustfmt (like 1.4.20 on nightly) to format the code on the master branch will indeed be problematic.
You may want to revert bd1203db07da768f468d340e944de991992b690c and then just tweak your changes as necessary to ensure the self tests pass to validate formatting

CFG_RELEASE_CHANNEL="" CFG_RELEASE=""  cargo build --features rustfmt,cargo-fmt
./target/debug/cargo-fmt --all

throws an error: Unrecognized option: 'recursive'

You need to run the rustfmt bin, not cargo fmt

It's not working, I only get
$./target/debug/rustfmt  src/formatting/macros.rs
Warning: can't set `error_on_line_overflow = true`, unstable features can only be used on stable or beta when `unstable_features` is also enabled.
Warning: can't set `error_on_unformatted = true`, unstable features can only be used on stable or beta when `unstable_features` is also enabled.

And the file is unchanged

You need to use cargo run. Sorry, I was on my phone earlier and didn't realize you weren't doing this before
For example (drop the --check flag if you need to fix some formatting):
cargo +nightly run --bin rustfmt --features rustfmt -- src/lib.rs --check --recursive

Personally I feel like a few of these make the code trickier to read, particular the breaking of visual alignment in cases that had higher quantities of match arm patterns, but if that's what clippy wants then I'm okay with it :smile:


[Enhancement] Delete files after crash

could you implement that after a crash that here are more information or mark the vod or delete the files or reinitilize the recording or download the vod. So it does not stay like empty and says basicaly nothing.

i've found that in most cases a server restart fixes them (or the fixissues button i guess?)
i'm adding more and more checks, but there are many different combinations of broken that i haven't encountered yet

can you post the json here that includes the basic stuff? no file paths or mediainfo needed

can you post the json here that includes the basic stuff? no file paths or mediainfo needed

restart did not fix it. what is going on here?

"segments": [
"/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>4) - s202210e03.mp4",
"/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>0) - s202210e08.mp4",
"/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>4) - s202210e11.mp4",
"/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>0) - s202210e12.mp4"
],

{     "version": 2,     "type": "twitch",     "uuid": "cd60b59e-8d90-4f9d-9c27-622275483561",     "capture_id": "39931344936",     "streamer_name": "Bonjwa",     "streamer_id": "73437396",     "streamer_login": "bonjwa",     "channel_uuid": "d644bc75-5bd2-40fe-a36f-6e2ee7585bad",     "chapters": [         {             "started_at": "2022-10-10T17:02:58.554Z",             "game_id": "417752",             "game_name": "Talk Shows & Podcasts",             "title": "Bonjwa Briefing mit Leon und Matteo",             "is_mature": false,             "online": false,             "viewer_count": 3576,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/417752.jpg"         },         {             "started_at": "2022-10-10T17:02:58.930Z",             "game_id": "417752",             "game_name": "Talk Shows & Podcasts",             "title": "Bonjwa Briefing mit Leon und Matteo",             "is_mature": false,             "online": true,             "viewer_count": 3576,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/417752.jpg"         },         {             "started_at": "2022-10-10T17:04:17.755Z",             "game_id": "417752",             "game_name": "Talk Shows & Podcasts",             "title": "Bonjwa Briefing mit Leon und Matteo !gheed #Werbung",             "is_mature": false,             "online": true,             "viewer_count": 3942,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/417752.jpg"         },         {             "started_at": "2022-10-10T17:04:18.262Z",             "game_id": "417752",             "game_name": "Talk Shows & Podcasts",             "title": "Bonjwa Briefing mit Leon und Matteo !gheed #Werbung",             "is_mature": false,             "online": true,             "viewer_count": 3942,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/417752.jpg"         },         {             "started_at": "2022-10-10T18:04:10.738Z",             "game_id": "509658",             "game_name": "Just Chatting",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 6490,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/509658.jpg"         },         {             "started_at": "2022-10-10T18:04:10.751Z",             "game_id": "509658",             "game_name": "Just Chatting",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 6490,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/509658.jpg"         },         {             "started_at": "2022-10-10T20:47:37.472Z",             "game_id": "1906677264",             "game_name": "Rogue: Genesia",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 7133,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/1906677264.jpg"         },         {             "started_at": "2022-10-10T20:47:37.723Z",             "game_id": "1906677264",             "game_name": "Rogue: Genesia",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 7133,             "box_art_url": "https://lsdvr.mebert-server.de/cache/covers/1906677264.jpg"         },         {             "started_at": "2022-10-10T22:06:15.060Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 4088,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:06:19.569Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 4088,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:06:30.880Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 4088,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:06:37.687Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 4088,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:06:57.964Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund mit Lion",             "is_mature": false,             "online": true,             "viewer_count": 4088,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:07:13.025Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund mit Lion",             "is_mature": false,             "online": true,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:07:16.844Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund mit Lion",             "is_mature": false,             "online": true,             "viewer_count": 3934,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:07:19.191Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 3934,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:07:22.269Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund",             "is_mature": false,             "online": true,             "viewer_count": 3934,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:07:49.650Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund mit Lion",             "is_mature": false,             "online": true,             "viewer_count": 3934,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-10T22:07:47.775Z",             "game_id": "556660222",             "game_name": "Marauders",             "title": "Mental am Abgrund mit Lion",             "is_mature": false,             "online": true,             "viewer_count": 3934,             "box_art_url": "redacted"         },         {             "started_at": "2022-10-11T02:20:12.123Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         },         {             "started_at": "2022-10-11T02:20:19.022Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         },         {             "started_at": "2022-10-11T02:20:42.550Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         },         {             "started_at": "2022-10-11T02:20:42.700Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         },         {             "started_at": "2022-10-11T02:21:04.162Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         },         {             "started_at": "2022-10-11T02:21:13.805Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         },         {             "started_at": "2022-10-11T02:21:34.012Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         },         {             "started_at": "2022-10-11T02:21:34.900Z",             "game_id": "",             "game_name": "",             "title": "Streamende",             "is_mature": false,             "online": true,             "viewer_count": 494,             "box_art_url": ""         }     ],     "segments": [         "/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>4) - s202210e03.mp4",         "/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>0) - s202210e08.mp4",         "/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>4) - s202210e11.mp4",         "/usr/local/share/twitchautomator/data/storage/vods/bonjwa/Season 202210/bonjwa (2022)<PHONE_NUMBER>0) - s202210e12.mp4"     ],     "is_capturing": false,     "is_converting": false,     "is_finalized": false,     "duration": 0,     "saved_at": "2022-10-11T02:21:37.148Z",     "created_at": "2022-10-10T13:42:53.635Z",     "not_started": false,     "prevent_deletion": false,     "failed": false,     "bookmarks": [],     "cloud_storage": false,     "stream_resolution": "1080p60",     "capture_started": "2022-10-10T13:43:02.369Z",     "capture_started2": "2022-10-10T13:43:13.721Z",     "started_at": "2022-10-10T13:41:30.000Z",     "stream_number": 13,     "stream_season": "202210",     "stream_absolute_season": 1 }

the fact that a single vod has multiple segments is more of an issue here, that should definitely not be happening

are you not getting any "fix;;" or bright colored messages at boot for this vod?

it feels like this one should be triggered

are you not getting any "fix;;" or bright colored messages at boot for this vod?

There are multiple vods that are like this I did not touch any file. Will check the log later again if there is said message.

i'm enhancing the add segment message, but generally there should never be more than one segment per vod. has this happened before?

i'm enhancing the add segment message, but generally there should never be more than one segment per vod. has this happened before?

Like I wrote there are other streams that have that. But will look at it later.

can you post the json here that includes the basic stuff? no file paths or mediainfo needed

it happend all on the same day 10.10 but for different reason two have no chapters the other has chapters but is still "running".

you must have a really strange setup going on honestly

current master now has a few warnings when more than 1 segment is added to a vod, keep a lookout for that


Simpler curvy edges

Is it possible to bend edges like below automatically? If not, would a PR be welcome?

let
	function points_on_circle(n, c = Point(0, 0))
		x = range(0, 2, n + 1)
		x = x[2:end]

		Point2.(sinpi.(x), cospi.(x)) .+ Ref(c)
	end

	function rotate_vector(pt::Point2, α)
		x, y = pt
		sα, cα = sincos(α)
		Point2(x * cα - y * sα, x * sα + y * cα)
	end

	function get_tangents(g, node_locs, α=0.1)
		map(edges(g)) do edge
			diff = node_locs[dst(edge)] - node_locs[src(edge)]
			tangents = rotate_vector.(Ref(diff), [α, -α])
		end
	end

	g = SimpleWeightedDiGraph([
			0 1 1;
			2 0 1;
			2 2 0
			])

	node_locs = points_on_circle(nv(g))
	layout = _ -> node_locs
	tangents = get_tangents(g, node_locs, 0.1)
	edge_width = weight.(edges(g))
	graphplot(g;
		tangents, layout, edge_width,
		axis = (aspect = DataAspect(), )
	)

end

I need to agree that it is not very convenient drawing the Bezier curves for big networks.
I think a major improvement can be easily made if the tangents points are given not only as relative to the src.dst node positions but also relative to the coordination system defined by a cartesian coordinating system with the x axis being the direct straight edge from src to dst. This way only a coordinate transormation needs to be made before drawing the bezier graphs. This should also trigger digraph edges to be symmetrical if same tangents are given.

I've implement my sketch above in #48 . What do you think?

That's amazing! Thank you!
(And sorry for not having pursued this any further.)

I also think it's a nice feature. Allow me to collaborate a little bit more on what I meant.
Right now tangents being passed are treated with a rather counter-intuituve reference system, which for me makes it impossible to directly pass in the correct values.
See the picture attached for an explanation:

Given a bezier point (p1, p2) now, p1 is being treated according to x1-y1 and p2 according to x2-y2. That being said the reference system is irrelative to the direct edge connecting the two nodes.
I think a rotation could be used to make the reference system of point p1 be x1'-y1' and from p2 x2'-y2', thus dependant on the direct interconnecting edge.
This can lead to much more intuituve plotting. Please have a look to the pluto notebook (shared as a .gz)
eZtangets.jl.html.gz
or as pdf file: eZtangents.pdf

when the interconnecting edge is not horizontal or vertical I see that there is some offset, making it not completely symmetrical. It can be seen in the last plot in the notebook

Yeah you totally have a point there! For context, I've created the tangents interface to allow for this plot:

For that specific usescase the global coordinate system is the right choice. I'd also argue that the word tangent implies a global coordinate system since tangents are usually defined in that space. It is also the only option which extends easily to 3D.
However, we totally need a way of specifying this "locally:" the big question is the right kind of interface. I don't want to add 10 different methods for drawing curvy edges, i think this will be confusing.
Distance from straight line: this is implementend in the PR. I think it is the most straight forward interface. There is a "right" distance for the control points such as the resulting spline looks like a circle segment [1], which is probably the best look for this kind of graphs. The use should not care about this. In order to deal with [1] one might add another parameter, distance_space=:data and distance_space=:pixel.
I think there is also a need for a more low level interface to place the control points (for example in a rotated coordinate system as you suggested). Do you think it would be beneficial to have this in cartesian coordinates? Another way would be to specify an angle and a distance per control point.
Maybe it would be also sufficient to provide a real low level interface: the user could provide a function f(src, dst, i)->(c1, c2) which gets the positions of the source and destination vertex of the i-th edge and returns a tuple of two control points, than it would be relatively easy to implement whatever you like.
[1] There is a subtle difference between pixel space and data space here which is not implemented in the PR. I guess thats also the reason why your last example plot looks kinda asymetric. Try with ax.aspect = DataAspect().

One could even go all in on the f(src, dst, i) -> (c1, c2) interface. Getting rid of all of the other options and provide prebuild functions such as:

waypoint_edge([p1, p2,...])
simple_curvy_edge(distance; space=[:pixel, :data])
global_tangents(...)
local_tangents(...)

Hm but given that 2/3 of questions regarding GraphMakie are due to the layout interface this kind of interface does not seem to be intuitive for a lot of users.

[1] There is a subtle difference between pixel space and data space here which is not implemented in the PR. I guess thats also the reason why your last example plot looks kinda asymetric. Try with ax.aspect = DataAspect().

Yes, Now it looks fully symmetrical. true!
Regarding "local" and "global" perpective, I guess both are kind of local (translated to the src or dst node), but the "global" holds on to the same global directions, while the "local"  in addition rotates about the dst-src vector.
I see that in your example the "global" view is needed.

Another way would be to specify an angle and a distance per control point

Actually I think that such a relative polar system would be a more straightforward choice and more easy to configure.
For my use case curve_distance would suffice, and probably is also the simplest to use. But for drawing more fancy graphs, indeed a lower level "local" or "global" interface is needed. Putting everything as a key-value argument in the graphplot function, it will bring much unneeded confusion.
I actually see the tangents as part of the more general layout. And given that the layout also expects an input function, tangents could work similarly as you proposed getting a function f(src, dst, i)->(c1, c2). Some default functions (or tools like "global" or "local" view) can be given, in the same way that there are default functions for the layout.


Lots of spelling mistakes

Problem description
Found a bunch of spelling mistakes across 40 documents
Suggestions for a fix
Will upload fix

I'm assigning hackathon points to this because the PR is so good. Thanks, @stevenhanna6 :)


Nous Plug A1Z (TS011F by _TZ3000_2putqrmw) dropping out and coming back, no clue why

Bug description
I have zha integration running with skyconnect zigbee coordinator. The problem is present with normal firmware and multprotocoll software as well.
I have two devices: Nous Plug A1Z (TS011F by _TZ3000_2putqrmw).
Both show the same behaviour: Sometimes they cannot be switched from the gui (switch slides back after some seconds) or automations. Some time later they react normally. Even when you cannot control the device, it gives updates on power consumption etc.
See debug log of error below
or for extended log with startup and switch working:
https://pastebin.com/vxPnPEbq
Nwk: 0x6adb
2023-05-04 15:17:33.124: System reboot/startup
2023-05-04 15:20:35.607 to
023-05-04 15:20:51.978: Switch cannot be controlled (do not understand logs/exact moment of failure, probably:
<EmberStatus.DELIVERY_FAILED: 102>
...nothing changed, waiting
2023-05-04 15:31:56.047: off command executed properly
2023-05-04 15:32:07.137: on command executed properly
2023-05-04 15:32:14.322: off command executed properly
2023-05-04 15:32:23.381: on command executed properly
Steps to reproduce
Switch plug
Problem comes and goes, no clue why
Expected behavior
execute on/off command
Device signature
Device signature
{
  "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
  "endpoints": {
    "1": {
      "profile_id": "0x0104",
      "device_type": "0x010a",
      "input_clusters": [
        "0x0000",
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006",
        "0x0702",
        "0x0b04",
        "0xe000",
        "0xe001"
      ],
      "output_clusters": [
        "0x000a",
        "0x0019"
      ]
    }
  },
  "manufacturer": "_TZ3000_2putqrmw",
  "model": "TS011F",
  "class": "zhaquirks.tuya.ts011f_plug.Plug"
}``

</details>

### Diagnostic information

<details><summary>Diagnostic information</summary>

```json
{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2023.5.0",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.10.11",
    "docker": true,
    "arch": "x86_64",
    "timezone": "Europe/Berlin",
    "os_name": "Linux",
    "os_version": "6.1.25",
    "supervisor": "2023.04.1",
    "host_os": "Home Assistant OS 10.1",
    "docker_version": "23.0.3",
    "chassis": "vm",
    "run_as_root": true
  },
  "custom_components": {
    "hacs": {
      "version": "1.32.1",
      "requirements": [
        "aiogithubapi>=22.10.1"
      ]
    },
    "nodered": {
      "version": "1.2.0",
      "requirements": []
    }
  },
  "integration_manifest": {
    "domain": "zha",
    "name": "Zigbee Home Automation",
    "after_dependencies": [
      "onboarding",
      "usb"
    ],
    "codeowners": [
      "@dmulcahey",
      "@adminiuga",
      "@puddly"
    ],
    "config_flow": true,
    "dependencies": [
      "file_upload"
    ],
    "documentation": "https://www.home-assistant.io/integrations/zha",
    "iot_class": "local_polling",
    "loggers": [
      "aiosqlite",
      "bellows",
      "crccheck",
      "pure_pcapy3",
      "zhaquirks",
      "zigpy",
      "zigpy_deconz",
      "zigpy_xbee",
      "zigpy_zigate",
      "zigpy_znp"
    ],
    "requirements": [
      "bellows==0.35.2",
      "pyserial==3.5",
      "pyserial-asyncio==0.6",
      "zha-quirks==0.0.99",
      "zigpy-deconz==0.21.0",
      "zigpy==0.55.0",
      "zigpy-xbee==0.18.0",
      "zigpy-zigate==0.11.0",
      "zigpy-znp==0.11.1"
    ],
    "usb": [
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*2652*",
        "known_devices": [
          "slae.sh cc2652rb stick"
        ]
      },
      {
        "vid": "1A86",
        "pid": "55D4",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus v2"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*zigstar*",
        "known_devices": [
          "ZigStar Coordinators"
        ]
      },
      {
        "vid": "1CF1",
        "pid": "0030",
        "description": "*conbee*",
        "known_devices": [
          "Conbee II"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8A2A",
        "description": "*zigbee*",
        "known_devices": [
          "Nortek HUSBZB-1"
        ]
      },
      {
        "vid": "0403",
        "pid": "6015",
        "description": "*zigate*",
        "known_devices": [
          "ZiGate+"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*zigate*",
        "known_devices": [
          "ZiGate"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8B34",
        "description": "*bv 2010/10*",
        "known_devices": [
          "Bitron Video AV2010/10"
        ]
      }
    ],
    "zeroconf": [
      {
        "type": "_esphomelib._tcp.local.",
        "name": "tube*"
      },
      {
        "type": "_zigate-zigbee-gateway._tcp.local.",
        "name": "*zigate*"
      },
      {
        "type": "_zigstar_gw._tcp.local.",
        "name": "*zigstar*"
      },
      {
        "type": "_slzb-06._tcp.local.",
        "name": "slzb-06*"
      }
    ],
    "is_built_in": true
  },
  "data": {
    "ieee": "**REDACTED**",
    "nwk": 27355,
    "manufacturer": "_TZ3000_2putqrmw",
    "model": "TS011F",
    "name": "_TZ3000_2putqrmw TS011F",
    "quirk_applied": true,
    "quirk_class": "zhaquirks.tuya.ts011f_plug.Plug",
    "manufacturer_code": 4417,
    "power_source": "Mains",
    "lqi": 104,
    "rssi": -74,
    "last_seen": "2023-05-04T22:14:06",
    "available": true,
    "device_type": "Router",
    "signature": {
      "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
      "endpoints": {
        "1": {
          "profile_id": "0x0104",
          "device_type": "0x010a",
          "input_clusters": [
            "0x0000",
            "0x0003",
            "0x0004",
            "0x0005",
            "0x0006",
            "0x0702",
            "0x0b04",
            "0xe000",
            "0xe001"
          ],
          "output_clusters": [
            "0x000a",
            "0x0019"
          ]
        }
      },
      "manufacturer": "_TZ3000_2putqrmw",
      "model": "TS011F"
    },
    "active_coordinator": false,
    "entities": [
      {
        "entity_id": "select.tz3000_2putqrmw_ts011f_power_on_state_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "select.tz3000_2putqrmw_ts011f_backlight_mode_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "sensor.tz3000_2putqrmw_ts011f_rms_current_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "sensor.tz3000_2putqrmw_ts011f_rms_voltage_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "sensor.tz3000_2putqrmw_ts011f_power_factor_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "sensor.tz3000_2putqrmw_ts011f_active_power_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "sensor.tz3000_2putqrmw_ts011f_summation_delivered_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "switch.tz3000_2putqrmw_ts011f_switch_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "switch.tz3000_2putqrmw_ts011f_child_lock_2",
        "name": "_TZ3000_2putqrmw TS011F"
      },
      {
        "entity_id": "button.tz3000_2putqrmw_ts011f_identify_2",
        "name": "_TZ3000_2putqrmw TS011F"
      }
    ],
    "neighbors": [
      {
        "device_type": "Router",
        "rx_on_when_idle": "On",
        "relationship": "Parent",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0xFDB2",
        "permit_joining": "Unknown",
        "depth": "1",
        "lqi": "69"
      },
      {
        "device_type": "Coordinator",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0x0000",
        "permit_joining": "Unknown",
        "depth": "0",
        "lqi": "28"
      }
    ],
    "routes": [],
    "endpoint_names": [
      {
        "name": "ON_OFF_PLUG_IN_UNIT"
      }
    ],
    "user_given_name": "nous_plug_2",
    "device_reg_id": "ea01a4e254e7103480d89c20f6e4acee",
    "area_id": "serverraum",
    "cluster_details": {
      "1": {
        "device_type": {
          "name": "ON_OFF_PLUG_IN_UNIT",
          "id": 266
        },
        "profile_id": 260,
        "in_clusters": {
          "0x0000": {
            "endpoint_attribute": "basic",
            "attributes": {
              "0x0000": {
                "attribute_name": "zcl_version",
                "value": 3
              },
              "0x0001": {
                "attribute_name": "app_version",
                "value": 77
              },
              "0x0004": {
                "attribute_name": "manufacturer",
                "value": "_TZ3000_2putqrmw"
              },
              "0x0005": {
                "attribute_name": "model",
                "value": "TS011F"
              },
              "0x0007": {
                "attribute_name": "power_source",
                "value": 1
              },
              "0xfffe": {
                "attribute_name": "attr_reporting_status",
                "value": 0
              }
            },
            "unsupported_attributes": {}
          },
          "0x0003": {
            "endpoint_attribute": "identify",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0004": {
            "endpoint_attribute": "groups",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0005": {
            "endpoint_attribute": "scenes",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0006": {
            "endpoint_attribute": "on_off",
            "attributes": {
              "0x0000": {
                "attribute_name": "on_off",
                "value": 1
              },
              "0x4001": {
                "attribute_name": "on_time",
                "value": 0
              },
              "0x4002": {
                "attribute_name": "off_wait_time",
                "value": 0
              },
              "0x8000": {
                "attribute_name": "child_lock",
                "value": 0
              },
              "0x8001": {
                "attribute_name": "backlight_mode",
                "value": 1
              },
              "0x8002": {
                "attribute_name": "power_on_state",
                "value": 2
              }
            },
            "unsupported_attributes": {
              "0x4003": {
                "attribute_name": "start_up_on_off"
              }
            }
          },
          "0x0702": {
            "endpoint_attribute": "smartenergy_metering",
            "attributes": {
              "0x0000": {
                "attribute_name": "current_summ_delivered",
                "value": 516
              },
              "0x0200": {
                "attribute_name": "status",
                "value": 0
              },
              "0x0300": {
                "attribute_name": "unit_of_measure",
                "value": 0
              },
              "0x0301": {
                "attribute_name": "multiplier",
                "value": 1
              },
              "0x0302": {
                "attribute_name": "divisor",
                "value": 100
              },
              "0x0303": {
                "attribute_name": "summation_formatting",
                "value": 0
              },
              "0x0306": {
                "attribute_name": "metering_device_type",
                "value": 0
              }
            },
            "unsupported_attributes": {
              "0x0400": {
                "attribute_name": "instantaneous_demand"
              },
              "0x0100": {
                "attribute_name": "current_tier1_summ_delivered"
              },
              "0x0102": {
                "attribute_name": "current_tier2_summ_delivered"
              },
              "0x0304": {
                "attribute_name": "demand_formatting"
              },
              "0x0104": {
                "attribute_name": "current_tier3_summ_delivered"
              },
              "0x0106": {
                "attribute_name": "current_tier4_summ_delivered"
              },
              "0x0108": {
                "attribute_name": "current_tier5_summ_delivered"
              },
              "0x010a": {
                "attribute_name": "current_tier6_summ_delivered"
              }
            }
          },
          "0x0b04": {
            "endpoint_attribute": "electrical_measurement",
            "attributes": {
              "0x0505": {
                "attribute_name": "rms_voltage",
                "value": 233
              },
              "0x0508": {
                "attribute_name": "rms_current",
                "value": 0
              },
              "0x050b": {
                "attribute_name": "active_power",
                "value": 0
              },
              "0x0602": {
                "attribute_name": "ac_current_multiplier",
                "value": 1
              },
              "0x0603": {
                "attribute_name": "ac_current_divisor",
                "value": 1000
              }
            },
            "unsupported_attributes": {
              "0x0300": {
                "attribute_name": "ac_frequency"
              },
              "0x0601": {
                "attribute_name": "ac_voltage_divisor"
              },
              "0x0302": {
                "attribute_name": "ac_frequency_max"
              },
              "0x0600": {
                "attribute_name": "ac_voltage_multiplier"
              },
              "0x0604": {
                "attribute_name": "ac_power_multiplier"
              },
              "0x0605": {
                "attribute_name": "ac_power_divisor"
              },
              "0x0401": {
                "attribute_name": "ac_frequency_divisor"
              },
              "0x0507": {
                "attribute_name": "rms_voltage_max"
              },
              "0x0400": {
                "attribute_name": "ac_frequency_multiplier"
              },
              "0x0000": {
                "attribute_name": "measurement_type"
              },
              "0x050a": {
                "attribute_name": "rms_current_max"
              },
              "0x0403": {
                "attribute_name": "power_divisor"
              },
              "0x050d": {
                "attribute_name": "active_power_max"
              },
              "0x050f": {
                "attribute_name": "apparent_power"
              },
              "0x0402": {
                "attribute_name": "power_multiplier"
              }
            }
          },
          "0xe000": {
            "endpoint_attribute": "tuya_is_pita_0",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0xe001": {
            "endpoint_attribute": "tuya_external_switch_type",
            "attributes": {
              "0xd030": {
                "attribute_name": "external_switch_type",
                "value": 0
              }
            },
            "unsupported_attributes": {}
          }
        },
        "out_clusters": {
          "0x000a": {
            "endpoint_attribute": "time",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0019": {
            "endpoint_attribute": "ota",
            "attributes": {},
            "unsupported_attributes": {}
          }
        }
      }
    }
  }
}

Logs
Logs

<details><summary>Logs</summary>

```python
2023-05-04 15:20:31.569 DEBUG (MainThread) [bellows.zigbee.application] Free buffers status EzspStatus.SUCCESS, value: 251
2023-05-04 15:20:31.569 DEBUG (MainThread) [bellows.zigbee.application] ezsp_counters: [MAC_RX_BROADCAST = 44, MAC_TX_BROADCAST = 49, MAC_RX_UNICAST = 50, MAC_TX_UNICAST_SUCCESS = 47, MAC_TX_UNICAST_RETRY = 4, MAC_TX_UNICAST_FAILED = 0, APS_DATA_RX_BROADCAST = 1, APS_DATA_TX_BROADCAST = 1, APS_DATA_RX_UNICAST = 48, APS_DATA_TX_UNICAST_SUCCESS = 18, APS_DATA_TX_UNICAST_RETRY = 0, APS_DATA_TX_UNICAST_FAILED = 20, ROUTE_DISCOVERY_INITIATED = 9, NEIGHBOR_ADDED = 2, NEIGHBOR_REMOVED = 0, NEIGHBOR_STALE = 0, JOIN_INDICATION = 0, CHILD_REMOVED = 0, ASH_OVERFLOW_ERROR = 0, ASH_FRAMING_ERROR = 0, ASH_OVERRUN_ERROR = 0, NWK_FRAME_COUNTER_FAILURE = 0, APS_FRAME_COUNTER_FAILURE = 0, UTILITY = 0, APS_LINK_KEY_NOT_AUTHORIZED = 0, NWK_DECRYPTION_FAILURE = 0, APS_DECRYPTION_FAILURE = 0, ALLOCATE_PACKET_BUFFER_FAILURE = 0, RELAYED_UNICAST = 0, PHY_TO_MAC_QUEUE_LIMIT_REACHED = 0, PACKET_VALIDATE_LIBRARY_DROPPED_COUNT = 0, TYPE_NWK_RETRY_OVERFLOW = 0, PHY_CCA_FAIL_COUNT = 0, BROADCAST_TABLE_FULL = 0, PTA_LO_PRI_REQUESTED = 0, PTA_HI_PRI_REQUESTED = 0, PTA_LO_PRI_DENIED = 0, PTA_HI_PRI_DENIED = 0, PTA_LO_PRI_TX_ABORTED = 0, PTA_HI_PRI_TX_ABORTED = 0, ADDRESS_CONFLICT_SENT = 0, EZSP_FREE_BUFFERS = 251]
2023-05-04 15:20:34.626 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0xFDB2:1:0x0702]: async_force_update
2023-05-04 15:20:34.626 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0xFDB2:1:0x0702]: Reading attributes in chunks: ['current_summ_delivered', 'status']
2023-05-04 15:20:34.627 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0702] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=76, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>)
2023-05-04 15:20:34.629 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0702] Sending request: Read_Attributes(attribute_ids=[0, 512])
2023-05-04 15:20:34.629 DEBUG (MainThread) [bellows.zigbee.application] Sending packet ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xFDB2), dst_ep=1, source_route=None, extended_timeout=False, tsn=76, profile_id=260, cluster_id=1794, data=Serialized[b'\x00L\x00\x00\x00\x00\x02'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2023-05-04 15:20:34.634 DEBUG (MainThread) [bellows.ezsp.protocol] Send command sendUnicast: (<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 0xfdb2, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=76), 77, b'\x00L\x00\x00\x00\x00\x02')
2023-05-04 15:20:34.636 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0x6ADB:1:0x0702]: async_force_update
2023-05-04 15:20:34.637 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0x6ADB:1:0x0702]: Reading attributes in chunks: ['current_summ_delivered', 'status']
2023-05-04 15:20:34.638 DEBUG (MainThread) [zigpy.zcl] [0x6ADB:1:0x0702] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=78, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>)
2023-05-04 15:20:34.639 DEBUG (MainThread) [zigpy.zcl] [0x6ADB:1:0x0702] Sending request: Read_Attributes(attribute_ids=[0, 512])
2023-05-04 15:20:34.640 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'24e321a9602a1500a4904b27ad5493499d4e27e7a0c967c7fdc66389fee37d387e'
2023-05-04 15:20:34.645 DEBUG (MainThread) [bellows.zigbee.application] Sending packet ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x6ADB), dst_ep=1, source_route=None, extended_timeout=False, tsn=78, profile_id=260, cluster_id=1794, data=Serialized[b'\x00N\x00\x00\x00\x00\x02'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2023-05-04 15:20:34.646 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0xFDB2:1:0x0b04]: async_update
2023-05-04 15:20:34.646 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0xFDB2:1:0x0b04]: Reading attributes in chunks: ['active_power', 'rms_current', 'rms_voltage']
2023-05-04 15:20:34.647 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0b04] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=80, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>)
2023-05-04 15:20:34.648 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0b04] Sending request: Read_Attributes(attribute_ids=[1291, 1288, 1285])
2023-05-04 15:20:34.649 DEBUG (MainThread) [bellows.zigbee.application] Sending packet ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xFDB2), dst_ep=1, source_route=None, extended_timeout=False, tsn=80, profile_id=260, cluster_id=2820, data=Serialized[b'\x00P\x00\x0b\x05\x08\x05\x05\x05'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2023-05-04 15:20:34.650 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0x6ADB:1:0x0b04]: async_update
2023-05-04 15:20:34.650 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0x6ADB:1:0x0b04]: Reading attributes in chunks: ['active_power', 'rms_current', 'rms_voltage']
2023-05-04 15:20:34.653 DEBUG (MainThread) [zigpy.zcl] [0x6ADB:1:0x0b04] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=82, command_id=<GeneralCommand.Read_Attributes: 0>, *direction=<Direction.Server_to_Client: 0>)
2023-05-04 15:20:34.654 DEBUG (MainThread) [zigpy.zcl] [0x6ADB:1:0x0b04] Sending request: Read_Attributes(attribute_ids=[1291, 1288, 1285])
2023-05-04 15:20:34.655 DEBUG (MainThread) [bellows.zigbee.application] Sending packet ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x6ADB), dst_ep=1, source_route=None, extended_timeout=False, tsn=82, profile_id=260, cluster_id=2820, data=Serialized[b'\x00R\x00\x0b\x05\x08\x05\x05\x05'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2023-05-04 15:20:35.603 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'43e3a1a9602a15189e007e'
2023-05-04 15:20:35.603 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8520dd7e'
2023-05-04 15:20:35.606 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received sendUnicast: [<EmberStatus.SUCCESS: 0>, 170]
2023-05-04 15:20:35.607 DEBUG (MainThread) [bellows.ezsp.protocol] Send command sendUnicast: (<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 0x6adb, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=78), 79, b'\x00N\x00\x00\x00\x00\x02')
2023-05-04 15:20:35.609 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'35e021a9602a156933904b27ad5493499d4e27e5a2c967c5fdc66389fe2f4d7e'
2023-05-04 15:20:35.614 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'53e3b1a96b2a1500a4904b27ad5493499d4e2701a0ce6782147e'
2023-05-04 15:20:35.614 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8610be7e'
2023-05-04 15:20:35.615 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received messageSentHandler: [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 64946, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=170), 77, <EmberStatus.SUCCESS: 0>, b'']
2023-05-04 15:20:35.616 DEBUG (MainThread) [bellows.zigbee.application] Received messageSentHandler frame with [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 64946, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=170), 77, <EmberStatus.SUCCESS: 0>, b'']
2023-05-04 15:20:35.622 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'64e0a1a9602a1519ead37e'
2023-05-04 15:20:35.622 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'87009f7e'
2023-05-04 15:20:35.623 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received sendUnicast: [<EmberStatus.SUCCESS: 0>, 171]
2023-05-04 15:20:35.624 DEBUG (MainThread) [bellows.ezsp.protocol] Send command sendUnicast: (<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 0xfdb2, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=80), 81, b'\x00P\x00\x0b\x05\x08\x05\x05\x05')
2023-05-04 15:20:35.628 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'47e121a9602a1500a4904b21a15493499d4e27fbbcc767dbfdcd6681f97b3a4b757e'
2023-05-04 15:20:35.637 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'74e0b1a9112a15b658964d24ab1593499ccfaf155f339874efde2f88fc7e3f823fcfde6f8fffc7d9d5ca697a107e'
2023-05-04 15:20:35.637 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8070787e'
2023-05-04 15:20:35.641 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received incomingMessageHandler: [<EmberIncomingMessageType.INCOMING_UNICAST: 0>, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY|APS_OPTION_RETRY: 320>, groupId=0, sequence=129), 136, -66, 0xfdb2, 255, 255, b'\x18L\x01\x00\x00\x00%\xd4\x02\x00\x00\x00\x00\x00\x02\x00\x18\x00']
2023-05-04 15:20:35.641 DEBUG (MainThread) [bellows.zigbee.application] Received incomingMessageHandler frame with [<EmberIncomingMessageType.INCOMING_UNICAST: 0>, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY|APS_OPTION_RETRY: 320>, groupId=0, sequence=129), 136, -66, 0xfdb2, 255, 255, b'\x18L\x01\x00\x00\x00%\xd4\x02\x00\x00\x00\x00\x00\x02\x00\x18\x00']
2023-05-04 15:20:35.642 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xFDB2), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=129, profile_id=260, cluster_id=1794, data=Serialized[b'\x18L\x01\x00\x00\x00%\xd4\x02\x00\x00\x00\x00\x00\x02\x00\x18\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=136, rssi=-66)
2023-05-04 15:20:35.643 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0702] Received ZCL frame: b'\x18L\x01\x00\x00\x00%\xd4\x02\x00\x00\x00\x00\x00\x02\x00\x18\x00'
2023-05-04 15:20:35.644 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0702] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=76, command_id=1, *direction=<Direction.Client_to_Server: 1>)
2023-05-04 15:20:35.649 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'05e1a1a9602a151ee83e7e'
2023-05-04 15:20:35.650 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8160597e'
2023-05-04 15:20:35.645 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0702] Decoded ZCL frame: TuyaZBMeteringCluster:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x0000, status=<Status.SUCCESS: 0>, value=TypeValue(type=uint48_t, value=724)), ReadAttributeRecord(attrid=0x0200, status=<Status.SUCCESS: 0>, value=TypeValue(type=bitmap8, value=<bitmap8.0: 0>))])
2023-05-04 15:20:35.652 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received sendUnicast: [<EmberStatus.SUCCESS: 0>, 172]
2023-05-04 15:20:35.655 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'UPDATE devices_v11\n                    SET last_seen=:ts\n                    WHERE ieee=:ieee AND :ts - last_seen > :min_last_seen_delta', {'ts':<PHONE_NUMBER>.64289, 'ieee': a4:c1:38:30:58:ce:1d:74, 'min_last_seen_delta': 30.0})
2023-05-04 15:20:35.657 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'15e1b1a96b2a1500a4904b21a15493499d4e2707bcce673f0b7e'
2023-05-04 15:20:35.657 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'82503a7e'
2023-05-04 15:20:35.661 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'UPDATE devices_v11\n                    SET last_seen=:ts\n                    WHERE ieee=:ieee AND :ts - last_seen > :min_last_seen_delta', {'ts':<PHONE_NUMBER>.64289, 'ieee': a4:c1:38:30:58:ce:1d:74, 'min_last_seen_delta': 30.0}) completed
2023-05-04 15:20:35.662 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received messageSentHandler: [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 64946, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=172), 81, <EmberStatus.SUCCESS: 0>, b'']
2023-05-04 15:20:35.663 DEBUG (MainThread) [bellows.zigbee.application] Received messageSentHandler frame with [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 64946, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=172), 81, <EmberStatus.SUCCESS: 0>, b'']
2023-05-04 15:20:35.664 DEBUG (MainThread) [bellows.ezsp.protocol] Send command sendUnicast: (<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 0x6adb, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=82), 83, b'\x00R\x00\x0b\x05\x08\x05\x05\x05')
2023-05-04 15:20:35.665 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>)
2023-05-04 15:20:35.667 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>) completed
2023-05-04 15:20:35.668 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'52e621a9602a156933904b21a15493499d4e27f9bec767d9fdcd6681f97b3a2e867e'
2023-05-04 15:20:35.673 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'25e1b1a9112a15b658904124ab1593499cccab145f339874e8de3388f77b3f8eebcdd66a8fdedbdbd0d769ada02355ea7e'
2023-05-04 15:20:35.673 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'83401b7e'
2023-05-04 15:20:35.679 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received incomingMessageHandler: [<EmberIncomingMessageType.INCOMING_UNICAST: 0>, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY|APS_OPTION_RETRY: 320>, groupId=0, sequence=130), 140, -65, 0xfdb2, 255, 255, b'\x18P\x01\x0b\x05\x00)\x00\x00\x08\x05\x00!\x1c\x00\x05\x05\x00!\xe6\x00']
2023-05-04 15:20:35.679 DEBUG (MainThread) [bellows.zigbee.application] Received incomingMessageHandler frame with [<EmberIncomingMessageType.INCOMING_UNICAST: 0>, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY|APS_OPTION_RETRY: 320>, groupId=0, sequence=130), 140, -65, 0xfdb2, 255, 255, b'\x18P\x01\x0b\x05\x00)\x00\x00\x08\x05\x00!\x1c\x00\x05\x05\x00!\xe6\x00']
2023-05-04 15:20:35.680 DEBUG (MainThread) [zigpy.application] Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xFDB2), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=130, profile_id=260, cluster_id=2820, data=Serialized[b'\x18P\x01\x0b\x05\x00)\x00\x00\x08\x05\x00!\x1c\x00\x05\x05\x00!\xe6\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=140, rssi=-65)
2023-05-04 15:20:35.680 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0b04] Received ZCL frame: b'\x18P\x01\x0b\x05\x00)\x00\x00\x08\x05\x00!\x1c\x00\x05\x05\x00!\xe6\x00'
2023-05-04 15:20:35.681 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0b04] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, direction=<Direction.Client_to_Server: 1>, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=80, command_id=1, *direction=<Direction.Client_to_Server: 1>)
2023-05-04 15:20:35.682 DEBUG (MainThread) [zigpy.zcl] [0xFDB2:1:0x0b04] Decoded ZCL frame: TuyaZBElectricalMeasurement:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x050B, status=<Status.SUCCESS: 0>, value=TypeValue(type=int16s, value=0)), ReadAttributeRecord(attrid=0x0508, status=<Status.SUCCESS: 0>, value=TypeValue(type=uint16_t, value=28)), ReadAttributeRecord(attrid=0x0505, status=<Status.SUCCESS: 0>, value=TypeValue(type=uint16_t, value=230))])
2023-05-04 15:20:35.687 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'36e6a1a9602a151f6ff27e'
2023-05-04 15:20:35.687 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8430fc7e'
2023-05-04 15:20:35.690 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 1794, 0, 724))
2023-05-04 15:20:35.698 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 1794, 0, 724)) completed
2023-05-04 15:20:35.697 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received sendUnicast: [<EmberStatus.SUCCESS: 0>, 173]
2023-05-04 15:20:35.701 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>)
2023-05-04 15:20:35.704 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>) completed
2023-05-04 15:20:35.707 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 1794, 512, <bitmap8.0: 0>))
2023-05-04 15:20:35.714 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 1794, 512, <bitmap8.0: 0>)) completed
2023-05-04 15:20:35.714 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>)
2023-05-04 15:20:35.715 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>) completed
2023-05-04 15:20:35.716 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'UPDATE devices_v11\n                    SET last_seen=:ts\n                    WHERE ieee=:ieee AND :ts - last_seen > :min_last_seen_delta', {'ts':<PHONE_NUMBER>.68081, 'ieee': a4:c1:38:30:58:ce:1d:74, 'min_last_seen_delta': 30.0})
2023-05-04 15:20:35.717 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'UPDATE devices_v11\n                    SET last_seen=:ts\n                    WHERE ieee=:ieee AND :ts - last_seen > :min_last_seen_delta', {'ts':<PHONE_NUMBER>.68081, 'ieee': a4:c1:38:30:58:ce:1d:74, 'min_last_seen_delta': 30.0}) completed
2023-05-04 15:20:35.718 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>)
2023-05-04 15:20:35.718 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>) completed
2023-05-04 15:20:35.719 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 2820, 1291, 0))
2023-05-04 15:20:35.727 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 2820, 1291, 0)) completed
2023-05-04 15:20:35.728 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>)
2023-05-04 15:20:35.729 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>) completed
2023-05-04 15:20:35.730 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 2820, 1288, 28))
2023-05-04 15:20:35.730 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 2820, 1288, 28)) completed
2023-05-04 15:20:35.734 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>)
2023-05-04 15:20:35.735 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>) completed
2023-05-04 15:20:35.740 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 2820, 1285, 230))
2023-05-04 15:20:35.740 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method execute of sqlite3.Connection object at 0x7f961b854640>, 'INSERT INTO attributes_cache_v11 VALUES (?, ?, ?, ?, ?)\n                    ON CONFLICT (ieee, endpoint_id, cluster, attrid)\n                    DO UPDATE SET\n                        value=excluded.value WHERE value != excluded.value', (a4:c1:38:30:58:ce:1d:74, 1, 2820, 1285, 230)) completed
2023-05-04 15:20:35.743 DEBUG (Thread-4) [aiosqlite] executing functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>)
2023-05-04 15:20:35.743 DEBUG (Thread-4) [aiosqlite] operation functools.partial(<built-in method commit of sqlite3.Connection object at 0x7f961b854640>) completed
2023-05-04 15:20:37.221 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'46e6b1a96b2a156933904b27ad5493499c4e2700a2a86789567e'
2023-05-04 15:20:37.221 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8520dd7e'
2023-05-04 15:20:37.223 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received messageSentHandler: [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 27355, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_NONE: 0>, groupId=0, sequence=171), 79, <EmberStatus.DELIVERY_FAILED: 102>, b'']
2023-05-04 15:20:37.224 DEBUG (MainThread) [bellows.zigbee.application] Received messageSentHandler frame with [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 27355, EmberApsFrame(profileId=260, clusterId=1794, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_NONE: 0>, groupId=0, sequence=171), 79, <EmberStatus.DELIVERY_FAILED: 102>, b'']
2023-05-04 15:20:37.225 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0x6ADB:1:0x0702]: failed to get attributes '['current_summ_delivered', 'status']' on 'smartenergy_metering' cluster: Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>
2023-05-04 15:20:37.274 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'56e6b1a96b2a156933904b21a15493499c4e2706bea867504c7e'
2023-05-04 15:20:37.275 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8610be7e'
2023-05-04 15:20:37.278 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received messageSentHandler: [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 27355, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_NONE: 0>, groupId=0, sequence=173), 83, <EmberStatus.DELIVERY_FAILED: 102>, b'']
2023-05-04 15:20:37.278 DEBUG (MainThread) [bellows.zigbee.application] Received messageSentHandler frame with [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 27355, EmberApsFrame(profileId=260, clusterId=2820, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_NONE: 0>, groupId=0, sequence=173), 83, <EmberStatus.DELIVERY_FAILED: 102>, b'']
2023-05-04 15:20:37.280 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0x6ADB:1:0x0b04]: failed to get attributes '['active_power', 'rms_current', 'rms_voltage']' on 'electrical_measurement' cluster: Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>
2023-05-04 15:20:41.571 DEBUG (MainThread) [bellows.ezsp.protocol] Send command readCounters: ()
2023-05-04 15:20:41.574 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'66e721a9a52a85657e'
2023-05-04 15:20:42.235 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xFDB2](TS011F): Device seen - marking the device available and resetting counter
2023-05-04 15:20:42.235 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xFDB2](TS011F): Update device availability -  device available: True - new availability: True - changed: False
2023-05-04 15:20:42.321 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'67e7a1a9a52a24b26f947e25995596499c4e26abecce558be9c66389ea7e35a7e9cdde6f8fffc7dbd5d2698c4623a9ec763ba5ea758241984c2613b1e070381c0e07bbe5ca658a459a4d9e4f9ff7c3d9d46a35a25190482430057e'
2023-05-04 15:20:42.322 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'87009f7e'
2023-05-04 15:20:42.325 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received readCounters: [[49, 54, 52, 51, 4, 0, 1, 1, 50, 20, 0, 22, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
2023-05-04 15:20:42.327 DEBUG (MainThread) [bellows.ezsp.protocol] Send command getValue: (<EzspValueId.VALUE_FREE_BUFFERS: 3>,)
2023-05-04 15:20:42.330 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'77e421a9fe2a16391f7e'
2023-05-04 15:20:42.337 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'70e4a1a9fe2a15b3a2c1277e'
2023-05-04 15:20:42.338 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8070787e'
2023-05-04 15:20:42.342 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received getValue: [<EzspStatus.SUCCESS: 0>, b'\xfb']
2023-05-04 15:20:42.343 DEBUG (MainThread) [bellows.zigbee.application] Free buffers status EzspStatus.SUCCESS, value: 251
2023-05-04 15:20:42.344 DEBUG (MainThread) [bellows.zigbee.application] ezsp_counters: [MAC_RX_BROADCAST = 49, MAC_TX_BROADCAST = 54, MAC_RX_UNICAST = 52, MAC_TX_UNICAST_SUCCESS = 51, MAC_TX_UNICAST_RETRY = 4, MAC_TX_UNICAST_FAILED = 0, APS_DATA_RX_BROADCAST = 1, APS_DATA_TX_BROADCAST = 1, APS_DATA_RX_UNICAST = 50, APS_DATA_TX_UNICAST_SUCCESS = 20, APS_DATA_TX_UNICAST_RETRY = 0, APS_DATA_TX_UNICAST_FAILED = 22, ROUTE_DISCOVERY_INITIATED = 10, NEIGHBOR_ADDED = 2, NEIGHBOR_REMOVED = 0, NEIGHBOR_STALE = 0, JOIN_INDICATION = 0, CHILD_REMOVED = 0, ASH_OVERFLOW_ERROR = 0, ASH_FRAMING_ERROR = 0, ASH_OVERRUN_ERROR = 0, NWK_FRAME_COUNTER_FAILURE = 0, APS_FRAME_COUNTER_FAILURE = 0, UTILITY = 0, APS_LINK_KEY_NOT_AUTHORIZED = 0, NWK_DECRYPTION_FAILURE = 0, APS_DECRYPTION_FAILURE = 0, ALLOCATE_PACKET_BUFFER_FAILURE = 0, RELAYED_UNICAST = 0, PHY_TO_MAC_QUEUE_LIMIT_REACHED = 0, PACKET_VALIDATE_LIBRARY_DROPPED_COUNT = 0, TYPE_NWK_RETRY_OVERFLOW = 0, PHY_CCA_FAIL_COUNT = 0, BROADCAST_TABLE_FULL = 0, PTA_LO_PRI_REQUESTED = 0, PTA_HI_PRI_REQUESTED = 0, PTA_LO_PRI_DENIED = 0, PTA_HI_PRI_DENIED = 0, PTA_LO_PRI_TX_ABORTED = 0, PTA_HI_PRI_TX_ABORTED = 0, ADDRESS_CONFLICT_SENT = 0, EZSP_FREE_BUFFERS = 251]
2023-05-04 15:20:49.804 DEBUG (MainThread) [zigpy.zcl] [0x6ADB:1:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direction=<Direction.Server_to_Client: 0>, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False), tsn=84, command_id=0, *direction=<Direction.Server_to_Client: 0>)
2023-05-04 15:20:49.805 DEBUG (MainThread) [zigpy.zcl] [0x6ADB:1:0x0006] Sending request: off()
2023-05-04 15:20:49.806 DEBUG (MainThread) [bellows.zigbee.application] Sending packet ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x6ADB), dst_ep=1, source_route=None, extended_timeout=False, tsn=84, profile_id=260, cluster_id=6, data=Serialized[b'\x01T\x00'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
2023-05-04 15:20:49.807 DEBUG (MainThread) [bellows.ezsp.protocol] Send command sendUnicast: (<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 0x6adb, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_ENABLE_ROUTE_DISCOVERY: 256>, groupId=0, sequence=84), 85, b'\x01T\x00')
2023-05-04 15:20:49.812 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'00e521a9602a156933904b23aa5493499d4e27ffb8cd66dffd01dc7e'
2023-05-04 15:20:50.376 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'01e5a1a9602a151c06d77e'
2023-05-04 15:20:50.376 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8160597e'
2023-05-04 15:20:50.379 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received sendUnicast: [<EmberStatus.SUCCESS: 0>, 174]
2023-05-04 15:20:51.973 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'11e5b1a96b2a156933904b23aa5493499c4e2705b8a867f90e7e'
2023-05-04 15:20:51.974 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'82503a7e'
2023-05-04 15:20:51.977 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received messageSentHandler: [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 27355, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_NONE: 0>, groupId=0, sequence=174), 85, <EmberStatus.DELIVERY_FAILED: 102>, b'']
2023-05-04 15:20:51.977 DEBUG (MainThread) [bellows.zigbee.application] Received messageSentHandler frame with [<EmberOutgoingMessageType.OUTGOING_DIRECT: 0>, 27355, EmberApsFrame(profileId=260, clusterId=6, sourceEndpoint=1, destinationEndpoint=1, options=<EmberApsOption.APS_OPTION_NONE: 0>, groupId=0, sequence=174), 85, <EmberStatus.DELIVERY_FAILED: 102>, b'']
2023-05-04 15:20:51.978 DEBUG (MainThread) [homeassistant.components.zha.core.cluster_handlers] [0x6ADB:1:0x0006]: command failed: 'off' args: '()' kwargs '{}' exception: 'Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'
2023-05-04 15:20:52.345 DEBUG (MainThread) [bellows.ezsp.protocol] Send command readCounters: ()
2023-05-04 15:20:52.348 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'12ea21a9a52ae7227e'
2023-05-04 15:20:52.367 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'22eaa1a9a52a21b262947e25995596499c4e26abecce558be9c66389eb7e34a7e9cdde6f8fffc7dbd5d2698c4623a9ec763ba5ea758241984c2613b1e070381c0e07bbe5ca658a459a4d9e4f9ff7c3d9d46a35a251904824d84a7e'
2023-05-04 15:20:52.367 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'83401b7e'
2023-05-04 15:20:52.372 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received readCounters: [[52, 59, 52, 51, 4, 0, 1, 1, 50, 20, 0, 23, 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
2023-05-04 15:20:52.373 DEBUG (MainThread) [bellows.ezsp.protocol] Send command getValue: (<EzspValueId.VALUE_FREE_BUFFERS: 3>,)
2023-05-04 15:20:52.377 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'23eb21a9fe2a16d74d7e'
2023-05-04 15:20:52.387 DEBUG (bellows.thread_0) [bellows.uart] Data frame: b'33eba1a9fe2a15b3a26a787e'
2023-05-04 15:20:52.387 DEBUG (bellows.thread_0) [bellows.uart] Sending: b'8430fc7e'
2023-05-04 15:20:52.390 DEBUG (MainThread) [bellows.ezsp.protocol] Application frame received getValue: [<EzspStatus.SUCCESS: 0>, b'\xfb']
2023-05-04 15:20:52.392 DEBUG (MainThread) [bellows.zigbee.application] Free buffers status EzspStatus.SUCCESS, value: 251

Additional information
extended log with startup and switch working:
https://pastebin.com/vxPnPEbq
Any help is much appreciated :-D!

I would like to close this issue for now.
I just found out that this might be a simple range issue. Probably both devices were placed on the absolute edge, so that sometimes they were reachable, sometimes not. Why in some situation the messages with status information went through and the command messages did not is not clear for me. Nevertheless if I place them close to the coordinator/mesh router device, they work as expected.
Sorry for any confusion or effort caused!


visual basic

I deed ask Microsoft to split visual studio in many small part because it's too heavy for my old computer , I don't know if they gonna respond me

lol, good luck!

thank you


Select item in dropdown and add to grid, no popup

whats the best approach?
Have a dropdown on top of grid with sku's when selecting fetch sku info from db, and add item to grid?
Thanks

Closing due to inactivity.


Re-export smallvec crate from bevy_utils

Matches versioning & features from other Cargo.toml files in the project.
Objective
Resolves #10932
Solution
Added smallvec to the bevy_utils cargo.toml and added a line to re-export the crate. Target version and features set to match what's used in the other bevy crates.

For the crates that rely on bevy_utils already, we should use this re-export instead.

Got a little tripped up with bevy_reflect's smallvec compiler feature, but I think I've got it now.
All bevy sub-crates that used smallvec were also using bevy_utils, so I was able to get them all moved over. If we'd like to upgrade from 1.6 to 1.11, this should make it easier.

Yep, feel free to upgrade in this PR.

This should be ready for review btw


How to handle errors?

In es-observable we can handle errors via error method in Observer.
What is the best practics to do same thing in derivablejs?
function fetch<V>(url): Observable<V> {
....
}

fetch('/test').subscribe({
  next(v: V) {
   console.log('new data')
  },
  error(err: Error) {
     console.log('data error')
  }
})

And second question: how to adopt observable? I try this, but how to pass start/stop handlers to atom in observableToAtom?
class AtomObserver<V> {
    _atom: Atom<V>;

    constructor(atom: Atom<V>) {
        this._atom = atom
    }

    next(v: V): void {
        this._atom.set(v)
    }

    complete(v?: ?V): void {
        if (v) {
            this._atom.set(v)
        }
    }

    error(err: Error): void {
        // @todo: handle errors in derivable
        throw err
    }
}

function observableToAtom<V>(v: V, observable: Observable<V>): Atom<V> {
  const va = atom(v)
  let sub: Subscription;
  const start = () => {
    sub = observable.subscribe(new AtomObserver(va))
  }
  const stop = () => {
    if (sub)  sub.unsubscribe()
  }

  // how to pass start, stop to va ?
  return va
}

Derivables are synchronous and pure functions of the current state of the world.
Because they are synchronous, you can just surround calls to .get() with try/catch!
However, I can't think of a situation in which that wouldn't be a code smell. Pure functions should only throw errors when:

They are given incorrect arguments
They are buggy

But the first one doesn't apply to derivables because you provide the arguments, not some library user. So all errors are the result of bugs and you should be aiming to 'catch' them at dev time (with the help of setDebugMode(true)).
Another error recovery strategy is to use transactions inside try/catch when changing the values in atoms. If an uncaught error bubbles up during a transaction, the state of the world is reset to how it was before the start of the transaction and the error is thrown again outside of the transaction. Then you can catch that error and deal with it if need be.
e.g.
try {
  transact(() => { /* ...set some atom values */});
catch (e) {
  // handle e safe in the knowledge that the state of the world is still consistent.
}

ok, thanks.
But what about converting observable to derivable.
I need subscribe atom to observable and unsubscribe it if nobody listens atom.
How to use reactor in this case?
class AtomObserver<V> {
    _setValue: (val: V) => void;
    _stop: () => void;

    constructor(
        setValue: (val: V) => void,
        stop: () => void
    ) {
        this._setValue = setValue
        this._stop = stop
    }

    next(v: V): void {
        this._setValue(v)
    }

    complete(v?: ?V): void {
        if (v) {
            this._setValue(v)
        }
        this._stop()
    }

    error(err: Error): void {
        // @todo: handle errors in derivable
        throw err
    }
}

class ObservableReactor<V> extends Reactor<V> {
    _observable: Observable<V, Error>;
    _sub: ?Subscription;
    _setValue: (val: V) => void;

    constructor(
        setValue: (val: V) => void,
        observable: Observable<V, Error>
    ) {
        super()
        this._setValue = setValue
        this._observable = observable
    }

    _stop = () => this.stop();

    onStart(): void {
        this._sub = this._observable.subscribe(new AtomObserver(this._setValue, this._stop))
    }

    onStop(): void {
        if (this._sub) this._sub.unsubscribe()
    }
}

function atomExt<V>(
    v: V,
    observable: Observable<V, Error>
): Atom<V> {
    const va: Atom<V> = atom(v)
        const setValue = (val: V) => {
            va.set(val)
        }
        const or = new ObservableReactor(setValue, observable)

        // something wrong here
        const r = va.reactor(or)
        r.start()

    return va
}

const v = 'test1'
const o = new Observable((observer) => {
  observer.next('test2')
  observer.complete('test3')
})
const a = atomExt(v, o)

a.react((v) => {
  console.log(v)
})
// outputs only test1

This is a separate issue. Do you mind opening a new issue for it so I can close this one?

thanks :)


import atlaskit component will overwrite original style?

When I import atlaskit component,
styled-components will fail to generate css.
and this won't happen if I use npm run clean to remove all sample code.
after import Button from '@atlaskit/button';
styled-components still generated the class but without any css

Steps to reproduce
npm run setup
npm install @atlaskit/button -S
add import Button from '@atlaskit/button';
npm run start
Versions

React-Boilerplate: v3.5.0
Node/NPM: v8.9.1 / v5.5.1
Browser: v65.0.3325.181

I just tried your steps with the latest @atlaskit/button (7.0.0) and everything worked for me. The expected font-size line was present in the CSS.

I'm not sure what's happening here but given that the page looks fine in your screenshot, this could be a devtool glitch or something. Either way, it's very unlikely to be a bug on the react-boilerplate end so closing for now.

@julienben
Thanks for help, but I try again and still have same issue.
So I add more detail below.
Steps to reproduce

git clone ...
npm run setup
npm install
npm install @atlaskit/button -S
add "import Button from '@atlaskit/button';" at app/containers/HomePage/index.js
npm run start

Before import atlaskit component,  which create by styled-component has been generated a class (.jwizic) and correct style (text-align: center)

After import atlaskit, class still exist but style is missing

And the reason I post here is because after I run "npm run clean", this issue won't happen again.
So I guess maybe some setting about styled-component at original example is conflict with atlaskit packages.
And hope to figure out the root cause.
Thanks again for the help.

Seems strange indeed. Was anybody else able to reproduce this?
Either way, styled-components needs to be upgraded from 2.3 to 3.2. Maybe try this in your project and see if it fixes the issue.

probably cause by the conflict about styled-components version(below issue),
and was fixed by re-install node modules, thanks
https://github.com/styled-components/styled-components/issues/1305

Might cause by conflict on styled-components version.
https://github.com/styled-components/styled-components/issues/1305
And as the suggestion at the document,
re-install node modules solve the problem, thanks.


Try to prevent workflow run on tag pushes

Based on https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#example-ignoring-branches-and-tags. May inform https://github.com/SuffolkLITLab/ALKiln/issues/380.
Not sure how we test this without just pushing to main.

Let's give it a try! Looks right to me. We'll wait for the next tag I think


missing  #include "TimerInterrupt_Generic_Debug.h" in ESP8266TimerInterrupt_Generic.h

missing  #include "TimerInterrupt_Generic_Debug.h" in ESP8266TimerInterrupt_Generic.h

Hi @mikyjazz
Thanks for the info.
It's redundant and not necessary, and won't create any compile error because of
https://github.com/khoih-prog/TimerInterrupt_Generic/blob/378b3c2f025fe4b40949f0da739519ada4489137/src/TimerInterrupt_Generic.h#L56
Anyway, I've just added to main for consistency to many more files.


Added testfixture.getTestFileAndLine()

testfixture.getTestFileAndLine() returns the file and line of the first *_test.go file to appear in the stack and returns in this schema relative/path/to/file_test.go:123. The result can be used to augment entities so that we always can tell which test created an entity that is a left-over and not cleaned up for example.

Ike Plugins (test-keeper)
Thank you @kwk for this contribution!

It appears that no tests have been added or updated in this PR.
Automated tests give us confidence in shipping reliable software. Please add some as part of this change.
If you are an admin or the reviewer of this PR and you are sure that no test is needed then you can use the command /ok-without-tests as a comment to make the status green.
For more information please head over to official documentation. You can find there how to configure the plugin.

This looks interesting! Could you add a test to verify that it works as expected ?

@xcoulon I ran go test ./controller -update to regenerate the golden files (see 558a9f0) and on top of that I've written a test for the function alone (see 932c87f).

thanks @kwk ! I approve this PR :)

So, the golden files need to be updated whenever there is a change which may not be related to the test at all. This doesn't look like a good thing.  This will make code-review harder as it will contain unrelated file changes.

So, the golden files need to be updated whenever there is a change which may not be related to the test at all. This doesn't look like a good thing. This will make code-review harder as it will contain unrelated file changes.

@baijum I partially agree. What do you think about having only the function name and file printed in the golden files - something like (see function // github.com/fabric8-services/fabric8-wit/test/testfixture_test.TestGetGetTestFileAndFunc // in test/testfixture/testfixture_test.go)?

@kwk file name + function name sounds good. Let's skip the line number.

Grrr, tests are failing with this error:
--- FAIL: TestRunAreaREST (0.83s)
    --- FAIL: TestRunAreaREST/TestShowArea (0.09s)
        --- FAIL: TestRunAreaREST/TestShowArea/Success (0.06s)
            --- FAIL: TestRunAreaREST/TestShowArea/Success/OK (0.01s)
            	area_testing.go:959: invalid response media type: [oK5tNRNg] 400 invalid_request: length of type.name must be less than or equal to 63 but got value "area c397625e-f5d0-4822-8ada-5d026f0ebf92 (see function github.com/fabric8-services/fabric8-wit/controller_test.(*TestAreaREST).TestShowArea.func1 in controller/area_blackbox_test.go)" (len=183), comp: less than or equal to, expected: 63, attribute: type.name, value: area c397625e-f5d0-4822-8ada-5d026f0ebf92 (see function github.com/fabric8-services/fabric8-wit/controller_test.(*TestAreaREST).TestShowArea.func1 in controller/area_blackbox_test.go), len: 183
            --- FAIL: TestRunAreaREST/TestShowArea/Success/Using_ExpiredIfModifedSince_Header (0.01s)
            	area_testing.go:959: invalid response media type: [Q7z2NgNF] 400 invalid_request: length of type.name must be less than or equal to 63 but got value "area c397625e-f5d0-4822-8ada-5d026f0ebf92 (see function github.com/fabric8-services/fabric8-wit/controller_test.(*TestAreaREST).TestShowArea.func1 in controller/area_blackbox_test.go)" (len=183), expected: 63, attribute: type.name, value: area c397625e-f5d0-4822-8ada-5d026f0ebf92 (see function github.com/fabric8-services/fabric8-wit/controller_test.(*TestAreaREST).TestShowArea.func1 in controller/area_blackbox_test.go), len: 183, comp: less than or equal to
            --- FAIL: TestRunAreaREST/TestShowArea/Success/Using_ExpiredIfNoneMatch_Header (0.01s)
            	area_testing.go:959: invalid response media type: [iWDOWLTa] 400 invalid_request: length of type.name must be less than or equal to 63 but got value "area c397625e-f5d0-4822-8ada-5d026f0ebf92 (see function github.com/fabric8-services/fabric8-wit/controller_test.(*TestAreaREST).TestShowArea.func1 in controller/area_blackbox_test.go)" (len=183), comp: less than or equal to, expected: 63, attribute: type.name, value: area c397625e-f5d0-4822-8ada-5d026f0ebf92 (see function github.com/fabric8-services/fabric8-wit/controller_test.(*TestAreaREST).TestShowArea.func1 in controller/area_blackbox_test.go), len: 183

Why do we need to have a limit on area names that is that low?

I don't see a length constraint in areas table. I am fine with revoking the name length constraint from code.

@baijum I think I'm instead just returning the package name in a shorter fashion as shown here: https://play.golang.org/p/9rOVanrTJSP

I don't see a length constraint in areas table. I am fine with revoking the name length constraint from code.

The length constraint is on the design of the area:
a.Attribute("name", d.String, "The Area name", nameValidationFunction)

and that nameValidationFunction function goes like this:
var nameValidationFunction = func() {
	a.MaxLength(63) // maximum name length is 63 characters
	a.MinLength(1)  // minimum name length is 1 characters
	a.Pattern("^[^_|-].*")
	a.Example("name for the object")
}

Back in the days @hectorj2f created this in https://github.com/fabric8-services/fabric8-wit/pull/1286. Let me see if we really need this for areas. @aslakknutsen can we relax that length check for areas by removing the upper limit of allowed characters?


Run Fails with Snort Installed

This fails because snort has a home directory but not a bashrc
2018-04-17 21:34:06,795 p=25491 u=root |  ok: [localhost]
2018-04-17 21:34:06,802 p=25491 u=root |  TASK [common : Install required dependencies] **********************************
2018-04-17 21:34:07,331 p=25491 u=root |  ok: [localhost] => (item=[u'default-jdk', u'libnotify-bin', u'openjdk-8-jdk', u'openjdk-8-source', u'unzip', u'vim', u'vim-gnome', u'zenity'])
2018-04-17 21:34:07,339 p=25491 u=root |  TASK [common : Touch VM profile] ***********************************************
2018-04-17 21:34:07,476 p=25491 u=root |  ok: [localhost]
2018-04-17 21:34:07,483 p=25491 u=root |  TASK [common : Add profile to user bashrc] *************************************
2018-04-17 21:34:07,694 p=25491 u=root |  failed: [localhost] (item={'gid': u'1001', 'uid': u'998', 'homedir': u'/home/snort', 'user': u'snort'}) => {"failed": true, "item": {"gid": "1001", "homedir": "/home/snort", "uid": "998", "user": "snort"}, "msg": "Destination /home/snort/.bashrc does not exist !", "rc": 257}
2018-04-17 21:34:07,798 p=25491 u=root |  ok: [localhost] => (item={'gid': u'1000', 'user': u'fromeca', 'homedir': u'/home/fromeca', 'uid': u'1000'})
2018-04-17 21:34:07,810 p=25491 u=root |  NO MORE HOSTS LEFT *************************************************************
2018-04-17 21:34:07,811 p=25491 u=root |  	to retry, use: --limit @/root/.ansible/pull/fromeca-virtual-machine/local.retry

2018-04-17 21:34:07,812 p=25491 u=root |  PLAY RECAP *********************************************************************
2018-04-17 21:34:07,812 p=25491 u=root |  localhost                  : ok=11   changed=0    unreachable=0    failed=1```

Workaround would be to ensure the home directory exists and the file does as well.
sudo mkdir /home/snort
sudo touch /home/snort/.bashrc
sudo chown -R snort:snort /home/snort

Long-term, we probably should also check:

That a user's home directory actually exists before considering it a valid user
Automatically touch ~/.bashrc for these users and ensure its owned by them

@cfrome77 Can you answer the following questions:

Did you create the account for snort yourself? Or was it created by a package?
Did the software get installed through apt or did you did you have to download it and run a script?

The snort user account was created by running:

sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort

Snort was manually installed from source following the steps from: http://sublimerobots.com/2017/01/snort-2-9-9-x-ubuntu-installing-snort/

Thanks, @cfrome77! I think we can move forward with that information.
To roles/common/tasks/main.yml, we should add to the user checks section that the shell isn't /sbin/nologin. That seems to be common for users like this (like the syslog user in Ubuntu). Unlike our discussion in #117, I don't think a UID check would have helped us here since this a system user (the -r flag to useradd).
@ripleymj do you have opinions on this?

Ahh, nologin may fix it when we clean up the detection logic, but checking for bashrc before writing may not be a bad idea either.

How about:

Add a item.value.5 != "/sbin/nologin" check
Ensure the home directory exists and is owned by the user using Ansible's file module state=directory, owner, etc.
Add create=yes, mode=0640, and owner=$owner to the lineinfile to .bashrc, this way the file will be created if it doesn't exist.

I'm going to comment here, rather than dragging half of this off to the PR. We'd already discussed refining the user detection in #117. The snort user here would have been skipped under both the nologin and UID rules, so this problem wouldn't have happened. Additionally, the man page for useradd says that system accounts created with -r do not get home directories.
I'm not sure I'm comfortable with the patch adding home directories for users where they're missing. Defining one for a system user puts things in a non-default state, and finding a "regular" user without a home directory may just be cause for us to abort. If we actually encountered something like that, I'm not sure what else is safe to assume.


Crash when closing popups

Hi, this is the bug we discussed on Reddit. As you can see in the video, it only happens with menus and not with tooltips. In this case, only Gimp crashes, but sometimes xwayland-xdg-shell crashes too.
The problem is that the surface is being destroyed before its role which is a protocol error. The same happens in other compositors like Sway.
debug.log
Btw I am using a scale factor of 2.

I tested it on Sway and on Louvre's built-in examples. The log clearly indicates that the wl_surface of the popup is being destroyed before the xdg_popup and xdg_surface. While this behavior is not explicitly described as a client error in the protocols, it is considered bad practice. This can lead to problems on the compositor side, such as inefficient cleanup of surfaces and roles (resulting in unnecessary client resources lingering and wasting memory), improper fade-out animations, and so on. That's why some compositors treat it as a client error and simply close the connection with the client. This could be easily fixed by destroying the resources in this order xdg_popup -> xdg_surface -> wl_surface.

If you can get another debug.log with WAYLAND_DEBUG=1 set on xwayland-xdg-shell that would be helpful

Okay, I'll upload the log again. I had tried the built-in xwayland-xdg-shell logging options, but it generated logs larger than 70 MB.

Nice, if you decide to change it, let me know and I'll test it again.

Hmm, it seems it's still not working :( I tested it on Louvre, Sway, and Wayfire (bug/destroy-role-before-surface branch).

While this behavior is not explicitly described as a client error in the protocols

I was wrong, it's actually a protocol error.

Did you see the protocol error again?

Yes, the wl_surface is still being destroyed first. Filtering the logs, it seems you're using subsurfaces for topbar menus. So maybe the same problem needs to be addressed for the wl_subsurface role.

I think the type for those kind of windows is NET_WM_WINDOW_TYPE_MENU according to this.

Hooray! Now it's working on Sway, Louvre, and Wayfire (and probably any compositor). Also, the GIMP splash screen looks better with the recent changes made on the main branch. I'll continue testing it periodically to catch any potential issues.


Document CreateThingOptions

The options parameter of createThing is currently undocumented. This PR adds documentation (I'll link to a preview when it's deployed).

[ ] I've added a unit test to test for potential regressions of this bug. N/A
[x] The changelog has been updated, if applicable.
[x] Commits in this PR are minimal and have descriptive commit messages.

Hmm, CreateThingLocalOptions and CreateThingPersistedOptions don't seem to get listed in the docs - let me debug that a bit.

OK, fixed.


"Empty" messages comming from DirectLine

Describe the bug
Recently we started to get "empty" or incomplete messages from directline randomly, this messages represent between 1% and 2% of the total messages.
Usually we get a response like this:
{
    "type": "message",
    "id": "EepDdNGyZlBdtvN116472-us|0000006",
    "timestamp": "2021-10-11T15:51:49.3327947Z",
    "channelId": "directline",
    "from": {
        "id": "DevMainBotNew",
        "name": "DevMainBotNew"    },
    "conversation": {
        "id ": "EepDdNGyZlBdtvN116472-us"    },
    "attachmentLayout": "list",
    "inputHint": "expectingInput",
    "attachments": [{
        "contentType": "application/vnd.microsoft.card.hero",
        "content": {
            "text ": "Please use your phone keypad to enter your five digit zipcode now.",
            "lgtype ": "HeroCard "        }
    }],
    "entities": [],
    "replyToId ": "EepDdNGyZlBdtvN116472-us|0000004"
}

And this is the response that we are randomly getting:
{
  "type": "message",
  "id": "D6jHza4IrvW77I9VmDdQfo-6|0000040",
  "timestamp": "2021-10-06T21:04:16.57671Z",
  "channelId": "directline",
  "from": {
    "id": "BOTPRODMainBot",
    "name": "BOTPRODMainBot"
  },
  "conversation": {
    "id": "D6jHza4IrvW77I9VmDdQfo-6"
  },
  "inputHint": "expectingInput",
  "attachments": [],
  "entities": [],
  "replyToId": "D6jHza4IrvW77I9VmDdQfo-6|0000039"
}

That "empty" response is returned no matter if the expected response it's a normal message, a hero card or an activity card, sometimes retrying with the same watermark returns the right response but sometimes the same "empty" message is returned again and again.

Version
1.4.1
Browser

[X] Electron distribution
[ ] Chrome
[ ] Safari
[ ] Firefox
[ ] Edge

OS

[X] macOS
[X] Windows
[ ] Ubuntu

To Reproduce
Steps to reproduce the behavior:
This happens randomly and at different steps of the conversation and it only happens after the bot has been deployed to Azure, never on the local machine.
Expected behavior
I would expect to not receive "empty" messages
Additional context
As mentioned earlier, this was not happening before, it started to happen a couple of weeks ago; the changes that were made to the bot were minor flow changes and we have re deployed a few times.

We are trying to capture the error, I'll post the trace as soon as we have it.

Sorry for the late response, we captured the network traffic with Wireshark, you can download the session from here: https://drive.google.com/file/d/1z6Li_MN3v0BPLk-MZhjGxNftyFBuCSir/view?usp=sharing
The empty message was present a few times. let me know if you need any other thing from our side.

@pedro-ramirez-suarez, were you able to re-run the capture session using the above instructions?

I have not but we think that we have identified the cause and seems related with some time outs, I'll post more details later.

Closing due to inactivity. If the problem persists, please feel free to re-open.


Add VisualStudio GhostDoc plugin setting file

Add VisualStudio GhostDoc plugin setting file

I came here to submit a PR for this :dancers:
I :heart: GhostDoc, but the fact that it creates a $(SolutionFile).GhostDoc.xml file for each solution I open with Visual Studio is super annoying.
In the 50+ repos (mostly .NET) I've contributed to, I've yet to see anyone actually committing this file to the repository.
This makes me really want to include it by default in the VisualStudio .gitignore. If you really want to commit it, it's easy to comment the one line :smile:
Is this something that you'd consider? We could either reopen this or I could submit a new PR.

@khellang I think a PR with a *.sln.GhostDoc.xml rule - with appropriate comments - is acceptable.
Having a source of truth to point to about what this file represents (and why it can be excluded from version control) always helps get these things through.
Feel free to open a PR and rally the troops to your cause :grin: