router-perf: latency calculation is not correct

In mb the delay is the second column in the output csv file
start_request(1),delay(2),status(3),written(4),read(5),method_and_url(6),thread_id(7),conn_id(8),conns(9),reqs(10),start(11),socket_writable(12),conn_est(13),tls_reuse(14),err(15)

delay: time in microseconds it took for a full response (e.g. a complete chunk-encoded message) to arrive since ``start_request''. If there was an error before we received the full response, the delay is the time it took to receive the error.

workload.py gets the second element to count the latency
https://github.com/cloud-bulldozer/e2e-benchmarking/blob/fe0b271b4bda985810b898189a8476395c3f8a44/workloads/router-perf-v2/workload.py#L52-L73
But in real test, with Executing 'mb -i /tmp/http-scale-mix.json -d 60 -o /tmp/results.csv', the total time is 60 seconds, but I get many results that the latency, could be avg and p95, are even longer than 60,000 ms
e.g.
11-29 12:40:56.869  Tue Nov 29 04:40:52 UTC 2022 Executing sample 1/2 using termination mix with 1 clients and 1 keepalive requests
11-29 12:40:56.869  Unable to use a TTY - input is not a terminal or the right kind of file
11-29 12:42:04.459  Executing 'mb -i /tmp/http-scale-mix.json -d 60 -o /tmp/results.csv'
11-29 12:42:04.459  Workload finished, results:
11-29 12:42:04.459  {
11-29 12:42:04.459      "termination": "mix",
11-29 12:42:04.459      "test_type": "mix",
11-29 12:42:04.459      "uuid": "2581f923-af0c-4ef0-a41d-e177c172b906",
11-29 12:42:04.459      "cluster.id": "df292922-446b-48e3-b8ea-034cae269eae",
11-29 12:42:04.459      "cluster.name": "qili-gcp-sdn-bnz5r",
11-29 12:42:04.459      "cluster.ocp_version": "4.12.0-0.nightly-2022-11-28-145121",
11-29 12:42:04.459      "cluster.kubernetes_version": "1.25",
11-29 12:42:04.459      "cluster.sdn": "OpenShiftSDN",
11-29 12:42:04.459      "cluster.platform": "GCP",
11-29 12:42:04.459      "requests_per_second": 12763,
11-29 12:42:04.459      "avg_latency": 156151,
11-29 12:42:04.459      "latency_95pctl": 530888,
11-29 12:42:04.459      "latency_99pctl": 615420,
11-29 12:42:04.459      "host_network": "true",
11-29 12:42:04.459      "sample": "1",
11-29 12:42:04.459      "runtime": 60,
11-29 12:42:04.459      "routes": 2000,
11-29 12:42:04.459      "conn_per_targetroute": 1,
11-29 12:42:04.459      "keepalive": 1,
11-29 12:42:04.459      "tls_reuse": true,
11-29 12:42:04.459      "number_of_routers": "2",
11-29 12:42:04.459      "200": 765836
11-29 12:42:04.459  }

If I read it correctly, delay: time in microseconds they are 615420 microseconds = 0.6s

Oh! sorry I misreading it as millisecond :P
1s =1000 ms/millisecond = 1,000,000 μs/ microseconds


Improve theme color experience

explain theme colors with new ThemeColorPopover component
carry theme colors from home to player page with new ThemeLink component
add theme colors to the code snippet with changes to DocsEmbed

Awesome!


Add support for Log Analytics Dedicated Cluster

Recently started to work with log analytics clusters and realized, that azurecaf not support this resource yet.
https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/azure-monitor/logs/logs-dedicated-clusters.md

@BlauerPulli are you going to submit a PR?


Unexplained GDScript crash

A crash that is not explained in the debugger. I'm documenting this here as an issue, I'll investigate the CPP later if I have time. It's a GDScript issue; it should at least point to the error correctly in the debugger.
(It's the game that crashes, not the editor.)
I'll provide the source code that generated it privately if somebody wants to help; it's gonna be tricky to come up with a MRP.
Version: Godot 3.2 beta (commit 5a1b7a6a90)
  Crash dump
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x3ef20) [0x7f634ffbaf20] (??:0)
[2] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x56cbe1] (/home/jabcross/godot/modules/gdscript/gdscript_function.cpp:509)
[3] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x50a53d] (/home/jabcross/godot/modules/gdscript/gdscript.cpp:1173)
[4] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2948bda] (/home/jabcross/godot/core/object.cpp:900)
[5] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x29e93f0] (/home/jabcross/godot/core/variant_call.cpp:1112 (discriminator 1))
[6] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x571c9b] (/home/jabcross/godot/modules/gdscript/gdscript_function.cpp:1084)
[7] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x50a53d] (/home/jabcross/godot/modules/gdscript/gdscript.cpp:1173)
[8] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2948bda] (/home/jabcross/godot/core/object.cpp:900)
[9] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x29e93f0] (/home/jabcross/godot/core/variant_call.cpp:1112 (discriminator 1))
[10] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x571c9b] (/home/jabcross/godot/modules/gdscript/gdscript_function.cpp:1084)
[11] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x50a53d] (/home/jabcross/godot/modules/gdscript/gdscript.cpp:1173)
[12] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2948bda] (/home/jabcross/godot/core/object.cpp:900)
[13] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x29e93f0] (/home/jabcross/godot/core/variant_call.cpp:1112 (discriminator 1))
[14] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x571c9b] (/home/jabcross/godot/modules/gdscript/gdscript_function.cpp:1084)
[15] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x50a53d] (/home/jabcross/godot/modules/gdscript/gdscript.cpp:1173)
[16] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2948bda] (/home/jabcross/godot/core/object.cpp:900)
[17] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2954e37] (/home/jabcross/godot/./core/variant.h:418)
[18] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2955fd5] (/home/jabcross/godot/core/object.cpp:1277)
[19] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19f8c32] (/home/jabcross/godot/scene/gui/base_button.cpp:135 (discriminator 2))
[20] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19f97f8] (/home/jabcross/godot/scene/gui/base_button.cpp:169)
[21] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19fc6c6] (/home/jabcross/godot/./core/reference.h:295)
[22] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x118d970] (/home/jabcross/godot/./core/reference.h:277)
[23] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2949a7b] (/home/jabcross/godot/./core/variant.h:418)
[24] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x29479f6] (/home/jabcross/godot/core/object.cpp:864)
[25] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19e29d1] (/home/jabcross/godot/./core/variant.h:418)
[26] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19e3f1f] (/home/jabcross/godot/./core/reference.h:295)
[27] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19e667f] (/home/jabcross/godot/./core/reference.h:295)
[28] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19e681c] (/home/jabcross/godot/./core/reference.h:295)
[29] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x74db4f] (/home/jabcross/godot/./core/reference.h:277)
[30] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x2948a49] (/home/jabcross/godot/core/object.cpp:921 (discriminator 1))
[31] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x294795e] (/home/jabcross/godot/core/object.cpp:849)
[32] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19b2d77] (/home/jabcross/godot/./core/variant.h:418)
[33] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x19b63ac] (/home/jabcross/godot/scene/main/scene_tree.cpp:430 (discriminator 6))
[34] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x45b2b6] (/home/jabcross/godot/./core/reference.h:295)
[35] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x457d4d] (/home/jabcross/godot/./core/list.h:292)
[36] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x449a2b] (/home/jabcross/godot/platform/x11/os_x11.cpp:2688)
[37] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x44bf30] (/home/jabcross/godot/platform/x11/os_x11.cpp:3253)
[38] /home/jabcross/godot/bin/godot.x11.opt.tools.64(main+0xe8) [0x438e48] (/home/jabcross/godot/platform/x11/godot_x11.cpp:56)
[39] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7f634ff9db97] (??:0)
[40] /home/jabcross/godot/bin/godot.x11.opt.tools.64() [0x43b74a] (??:?)
-- END OF BACKTRACE --
ERROR: _get_socket_error: Socket error: 104
   At: drivers/unix/net_socket_posix.cpp:211.

On further inspection, this seems happened when I used is on a deleted object. I found a workaround for my game, but the crash stands.
Having trouble getting the MRP to work.

Do you have any provided example?

Do you have any provided example?

I'm trying to isolate the problem from my code and make a MRP; I'll post it here as soon as it's ready.

Closing due to lack of update. Please comment if you can still reproduce this issue in the latest stable version of Godot.


SEARCH-677 302 redirect leading to 404, page still found in search re…

…sults

+1

Coverage increased (+0.001%) to 98.697% when pulling 77d920d5f5a3fdf92773760a4b20e8734e4f943d on websid:bugfix/SEARCH-677 into 74e30e3cbb39458e0a8d374b8bf64e0127b4747b on simgroep:master.


[Feature]: Add a option to edit the commit message upon it's generation

Description
It'd be cool if we could edit the commit message right from the terminal after it's been generated.
Suggested Solution
Provide an option in addition with accept and reject commit message called edit which would open up the user's default editor where changes can be made.
Alternatives
No response
Additional Context
No response

reopening, will take a look at this


Can Jimp write a jpg file which exactly have the same color which I set?

Expected Behavior
I used setPixelColor to operate the color of each pixels.
I used this to save the jpg file:
picture.quality(100).writeAsync(path);

I wish that Jimp can write a jpg file which exactly have the same color which I set.
Current Behavior
When I used getPixelColor to read the saved jpg,
I found that the colors are a little bit different with what I operated.
But this seems only effected with saving jpg.
After I saved the picture as bmp, I read the bmp file. I got the colors I wanted.
Steps to Reproduce

Use Jimp.read to read the jpg file.
Use setPixelColor to edit a color of a pixel.
Use quality(100).writeAsync to save the file as a new jpg.
Use Jimp.read to read the new jpg file.
Use getPixelColor to get the color which I edited.
Compare the color with what I set before.
They are different a little.

Context

Jimp Version: 0.6.0
Operating System: Windows 10 Pro 64bit
Node version: 111.6.0

So, may I save the color into jpg strictly as what I want?
Thank you for checking this.
Failure Logs
Nope.

I'm getting this issue, any fixes?


Add more on namespaces to the concept

Point out that namespace both - makes files unique within the space  and set permissions
a data set in a personal namespace can contain files from other namespaces owned by others.
only the person can add files to a personal namespave
there are group namespaces where any member of the group can add to a dataset.

done


General adjustments and documentation update

Documentation update

Added quick try-out (deploy concept learners)
Added introduction page on documentation
Reworked ontologies and knowledge base section
Added more resources and hyperlinks in Further Resource page
Removed Architecture page (for now) because it contains some outdated schemas

Since #161 is an old issue and the documentation is updated multiple times since then, we will consider it closed.
Removed directories: big_gitext and KGs #288

Created Ontolearn directory in our data server https://files.dice-research.org/projects/Ontolearn
KGs can now be downloaded from there, shell commands in located in ./download_external_resources
Updated README.md and respective documentation pages.
Changed GitHub Action workflow. Instead of tox, we now use pytest. See .github/workflows/test.yml

Made changes in accordance with PEP 8 Guide #33
There are still some recommendation left when you run flake8 which do not necessarily need to be changed now. (Jean has to take care of them because I don't want to mess with his code)
Added Trainer Class #263
Added missing documentation for modules/classes/methods

Not fully covered everything missing, but its a good update for now. The "Ontolearn API" part of the documentation is now more enriched and easier to navigate.

Added a test case for isolated ontology

I suppose the following checks: 'lint', 'test' and 'verify' should be removed now, right?

Yes please

The problem is that these checks are required by the develop branch which has the old GitHub action workflow. We either have to make this not required or skip them to make the merge so that develop branch is updated with the new workflow. I'm not able to do neither of them because I think I don't have permission. Can you please do that @Demirrr ? This post may help. You can complete the pull request and set the checks required again.

Sure. I will take care of it


textAlignment tag  textField

Which version of the WSTagsField are you using?
3.1.0
On which platform does the issue happen?
ios 11
Are you using Carthage?
no
Are you using Cocoapods?
1.4.0
Which version of Xcode are you using?
Xcode 9.2
Build version 9C40b
What did you do?
Describe the problem.
can you please add textAlignment to textField i made code to do this  , if you can look to it .
open var textAlignment: NSTextAlignment = .left{
didSet{
textField.textAlignment = textAlignment
}
}
i add it to WSTagsField file .
and it work perfect .
thanks

@abufaeys Ok, I'll add this. Thanks!

@abufaeys What's the intention. To only align the TextField text or align all the elements of the TagsField?

only align the TextField text , but if we can align all the elements of the TagsField this wil be better  .

@abufaeys  Align the TextField text is an easy change. Align all the elements will take more time.


"Find All References" results change depending on what files were previously open

TypeScript Version:  v4.1.0-dev-20201030

Search Terms:

find all references

Repro Steps
Example repository here: https://github.com/gluxon/ts-find-references-test-case It's pretty small. 6 files total.
The above repository has projects a, b, and c. a has a project reference to b and b has a project reference to c. (i.e The project reference graph is a -> b -> c.)
Scenario 1

Restart TS Server.
Open packages/c/src/index.ts and run "Find All References" on the export c.
No references are found except for the definition.

Requests:
{"seq":0,"type":"request","command":"open","arguments":{"file":"/Volumes/git/ts-find-references-example/packages/c/src/index.ts"}}
{"seq":1,"type":"request","command":"references","arguments":{"file":"/Volumes/git/ts-find-references-example/packages/c/src/index.ts","line":1,"offset":14}}

Response:
{
  "seq": 0,
  "type": "response",
  "command": "references",
  "request_seq": 1,
  "success": true,
  "body": {
    "refs": [
      {
        "file": "/Volumes/git/ts-find-references-example/packages/c/src/index.ts",
        "start": { "line": 1, "offset": 14 },
        "end": { "line": 1, "offset": 15 },
        "contextStart": { "line": 1, "offset": 1 },
        "contextEnd": { "line": 1, "offset": 30 },
        "lineText": "export const c: string = \"c\";",
        "isWriteAccess": true,
        "isDefinition": true
      }
    ],
    "symbolName": "c",
    "symbolStartOffset": 14,
    "symbolDisplayString": "const c: string"
  }
}

Scenario 2

Restart TS Server
Open packages/c/src/index.ts.
Open packages/a/src/index.ts.
Open packages/c/src/index.ts and run "Find All References" on the export c.
Reference to c found in packages/b/index.ts.

Request:
{"seq":0,"type":"request","command":"open","arguments":{"file":"/Volumes/git/ts-find-references-example/packages/c/src/index.ts"}}
{"seq":1,"type":"request","command":"open","arguments":{"file":"/Volumes/git/ts-find-references-example/packages/a/src/index.ts"}}
{"seq":2,"type":"request","command":"references","arguments":{"file":"/Volumes/git/ts-find-references-example/packages/c/src/index.ts","line":1,"offset":14}}

Response
{
  "seq": 0,
  "type": "response",
  "command": "references",
  "request_seq": 2,
  "success": true,
  "performanceData": { "updateGraphDurationMs": 5.578943002969027 },
  "body": {
    "refs": [
      {
        "file": "/Volumes/git/ts-find-references-example/packages/c/src/index.ts",
        "start": { "line": 1, "offset": 14 },
        "end": { "line": 1, "offset": 15 },
        "contextStart": { "line": 1, "offset": 1 },
        "contextEnd": { "line": 1, "offset": 30 },
        "lineText": "export const c: string = \"c\";",
        "isWriteAccess": true,
        "isDefinition": true
      },
      {
        "file": "/Volumes/git/ts-find-references-example/packages/b/src/index.ts",
        "start": { "line": 1, "offset": 10 },
        "end": { "line": 1, "offset": 11 },
        "contextStart": { "line": 1, "offset": 1 },
        "contextEnd": { "line": 1, "offset": 28 },
        "lineText": "import { c } from \"@ref/c\";",
        "isWriteAccess": true,
        "isDefinition": true
      },
      {
        "file": "/Volumes/git/ts-find-references-example/packages/b/src/index.ts",
        "start": { "line": 2, "offset": 18 },
        "end": { "line": 2, "offset": 19 },
        "lineText": "export const b = c;",
        "isWriteAccess": false,
        "isDefinition": false
      }
    ],
    "symbolName": "c",
    "symbolStartOffset": 14,
    "symbolDisplayString": "const c: string"
  }
}

Expected behavior:
Finding c's reference in package b should not depend on the user opening packages/a/src/index.ts or packages/b/src/index.ts.
Actual behavior:
References to c's export are only found after packages/a/src/index.ts is opened. This is somewhat surprising and makes "Find All References" appear non-deterministic to users.
Related Issues:

Not a related issue, but loading dependent projects of a definition got improved recently https://github.com/microsoft/TypeScript/pull/41126

At a technical level, this behavior is understandable. Opening a allows tsserver to discover project b, which has a project reference to c. Until that point, TS Server doesn't know b references c. It hasn't seen packages/b/tsconfig.json yet.
However at the end-user level, this behavior is extremely confusing. "Find All Reference" results appear arbitrary since they depend on what files have been open in the editor previously (sometimes somewhat by chance).

Also worth noting: Creating a "solution-style tsconfig.json" makes results deterministic, but that isn't documented.
An alternative would be to get tsserver to build a full project reference graph by looking at all tsconfig.json files in the project folder. It wouldn't load the entire project and its root names, just the tsconfig.json references array.

This is working as intended and we do not look for tsconfigs unless its in the ancestor directories to determine where to look.

Is that for performance reasons?

If I run fd tsconfig.json in a repository with ~300,000 files it returns in ~0.2s. But I understand that's with an SSD and a Rust util.
I also understand that this is by design, but my concern is that most TypeScript developers are not aware of this behavior and find it confusing. Should editors display a message perhaps that "not all source files in the project were considered"?

We have to stop somewhere short of scanning your entire hard drive. Once a project is loaded and there isn't direct evidence of others, config file searching stops.
This hasn't been a frequent source of feedback so far, so it seems like things are working as the majority of people would expect them to.

We have to stop somewhere short of scanning your entire hard drive. Once a project is loaded and there isn't direct evidence of others, config file searching stops.

I wasn't suggesting that the entire hard drive should be scanned. Editors generally have some sort of project scope that they're limited to and that scope can be passed to TS Server during initialization. (If it's not already.) TS Server also doesn't have to look at every file, it just has to scan and parse for a specific filename (tsconfig.json).
Scanning all tsconfig.json files also isn't the only solution. I can think of a few signaling improvements to reduce confusion:

Provide documentation on typescriptlang.org that solution-style configs files are required for editors to get full find reference results.
Make editors display a short message saying "results may be incomplete".

This hasn't been a frequent source of feedback so far, so it seems like things are working as the majority of people would expect them to.

If you told someone "Find All References results can change without any source code edits", I think most people would tell you that is not what they expect. It took me a several hours to understand this issue before creating it. The lack of feedback may be because people don't know there's behavior causing inconsistent results. They'll see the returned references list and believe it to be complete.
But I understand. At the moment I'm the only one asking for an improvement. I don't want to rush anything and have no hard feelings if this issue needs to wait for more feedback from others. 🙂

@RyanCavanaugh Can this remain open while it's waiting for more feedback? I imagine having it closed would decrease its discovery.


MQTT api changed

I tried using session.registerMQTT()
It doesn't work anymore
missing parameter for utils.registerMQTT(region)
Also API returns probably changed structure than it used to:
POST https://api.eu.ecp.electrolux.com/user-appliance-reg/api/v1.1/devices
{
	"status": "OK",
	"code": "ECP0000",
	"message": "Device created",
	"data": {
		"mqttUrl": "mqtt.eu.ecp.electrolux.com:443",
		"topic": "mobile/cmd/d:mobile:-1000000000_000000002",
		"featureTopic": "mobile/feature/d:mobile:-1000000000_000000002",
		"clientId": "d:mobile:-1000000000_000000002"
	}
}

so it no longer contains DeviceToken
Where did you find those APIs? Mobile app?
I decompiled Android apk com.electrolux.oneapp.android.aeg, but couldn't find any references to MQTT

Hi.
Electrolux was changed mqtt broker from IBM cloud to something different (Amazon cloud?).
In ADB logs there's some information about connection to MQTT broker

06-13 16:58:22.375  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:97] [http post] https://api.eu.ecp.electrolux.com/user-appliance-reg/api/v1.1/devices >>>>
06-13 16:58:22.402  3495  3606 I ESDK-Native: [curl_helpers.h:57] Curl version 7.60.0-DEV
06-13 16:58:22.690  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:102] [http response] 200 : {"status":"ERROR","code":"ECP0206","message":"Device: d:mobile:123456789_1234567890 is already registered to user: mail@gmail.com","data":{}}
06-13 16:58:22.690  3495  3606 D MQTT    : register {"status":"ERROR","code":"ECP0206","message":"Device: d:mobile:123456789_1234567890 is already registered to user: mail@gmail.com","data":{}}
06-13 16:58:22.691  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:56] [http del] https://api.eu.ecp.electrolux.com/user-appliance-reg/api/v1.1/devices
06-13 16:58:23.042  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:58] [http response] 200 : {"status":"OK","code":"ECP0000","message":"Device unregistered successfully","data":null}
06-13 16:58:23.043  3495  3606 D MQTT    : unregister {"status":"OK","code":"ECP0000","message":"Device unregistered successfully","data":null}
06-13 16:58:23.043  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:97] [http post] https://api.eu.ecp.electrolux.com/user-appliance-reg/api/v1.1/devices >>>>
06-13 16:58:23.292  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:102] [http response] 200 : {"status":"OK","code":"ECP0000","message":"Device created","data":{"mqttUrl":"mqtt.eu.ecp.electrolux.com:443","topic":"mobile/cmd/d:mobile:123456789_1234567890","featureTopic":"mobile/feature/d:mobile:123456789_1234567890","clientId":"d:mobile:123456789_1234567890"}}
06-13 16:58:23.292  3495  3606 D MQTT    : register2 {"status":"OK","code":"ECP0000","message":"Device created","data":{"mqttUrl":"mqtt.eu.ecp.electrolux.com:443","topic":"mobile/cmd/d:mobile:123456789_1234567890","featureTopic":"mobile/feature/d:mobile:123456789_1234567890","clientId":"d:mobile:123456789_1234567890"}}
06-13 16:58:23.292  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:405] Parsed
06-13 16:58:23.292  3495  3606 I ESDK-Native: [djinni_comm_api.cpp:409] IS AMAZON
06-13 16:58:23.295  3495  3597 E ROUTER+ : MQTT_RELAY resolved with Native
06-13 16:58:23.297  3495  3597 E ROUTER+ : OPEN_MQTT_BUS_ECP resolved with Native
06-13 16:58:23.297  3495  3597 I ESDK-Native: [mqtt_connection.cpp:110] Creating MQTT client
06-13 16:58:23.297  3495  3597 I ESDK-Native: [mqtt_connection.cpp:181] URL: ssl://mqtt.eu.ecp.electrolux.com:443, PW:{"type":"session","value":"q+CP+IN00PqgpYXcNmIXR9HlCf4NUafEr0lMhv8Uk1sTiPUqthcWbr0t9c0OH4eaPNLjoFDyyq+PQ6phRuZ0i6AaQS0BUPWqAL98s7dA+e5i4A7QrDtno3L85wneAQnTHAsGVsbPxFE8eBXB3Sj+jbxYCMokYaEXmT+vrj/kmYFIuD622YcI1yarRpY8LQoaP67kz6mONjXQq2nsIq9t11MISXIv/L7XNya01xT/veZLNDXa1Dr/CcKftCNk+uSK1lPL+G5lQPdwP4jis7hc5+A9w/m71UOHmesEQxhbaVqfWcKzB5TrTR6svy6DKdf4kMj2jmCiANGTRhtkU1q7dQ=="}
06-13 16:58:23.298  3495  3597 D MQTT    : start blocking mqtt client
06-13 16:58:23.298  3495  3597 I ESDK-Native: [paho_c_backend.cpp:146] MQTT pausing client disconnected = true
06-13 16:58:23.298  3495  3597 I ESDK-Native: [paho_c_backend.cpp:24] MQTT start
06-13 16:58:23.301  3495  3597 I ESDK-Native: [paho_c_backend.cpp:95] MQTT connect
06-13 16:58:23.301  3495  3597 I ESDK-Native: [paho_c_backend.cpp:108]<EMAIL_ADDRESS>{"type":"session","value":"q+CP+IN00PqgpYXcNmIXR9HlCf4NUafEr0lMhv8Uk1sTiPUqthcWbr0t9c0OH4eaPNLjoFDyyq+PQ6phRuZ0i6AaQS0BUPWqAL98s7dA+e5i4A7QrDtno3L85wneAQnTHAsGVsbPxFE8eBXB3Sj+jbxYCMokYaEXmT+vrj/kmYFIuD622YcI1yarRpY8LQoaP67kz6mONjXQq2nsIq9t11MISXIv/L7XNya01xT/veZLNDXa1Dr/CcKftCNk+uSK1lPL+G5lQPdwP4jis7hc5+A9w/m71UOHmesEQxhbaVqfWcKzB5TrTR6svy6DKdf4kMj2jmCiANGTRhtkU1q7dQ=="}
06-13 16:58:23.301  3495  3597 I ESDK-Native: [paho_c_backend.cpp:84] Using 'mqtt' protocol
06-13 16:58:23.301  3495  3597 I ESDK-Native: [paho_c_backend.cpp:131] Using cert file /data/user/0/com.aeg.myaeg/files/root_ca_pem.crt
06-13 16:58:23.301  3495  3597 I ESDK-Native: [paho_c_backend.cpp:136] Creating MQTT client
06-13 16:58:23.291  3495  3495 W RxCachedThreadS: type=1400 audit(0.0:10): avc: denied { getattr } for path="/proc/version" dev="proc" ino=4026532001 scontext=u:r:untrusted_app:s0:c67,c256,c512,c768 tcontext=u:object_r:proc_version:s0 tclass=file permissive=0
06-13 16:58:23.806  3495  3677 I ESDK-Native: [paho_c_backend.cpp:112] Connect success to: mqtt.eu.ecp.electrolux.com:443
06-13 16:58:23.806  3495  3677 I ESDK-Native: [paho_c_backend.cpp:67] (Re)connect success
06-13 16:58:23.808  3495  3677 I ESDK-Native: [paho_c_backend.cpp:176] MQTT Subscribe to 2 topics

but I can't connect with any MQTT client.
This integration don't use api from com.electrolux.oneapp.android.aeg, but com.aeg.myaeg and similar.

Hi @tomeko12
I have successfully used your MQTT-recepie for a year now, but since the whole thing moved to Amazon it stopped. I have used Charlie on the new app an see that there are some new autorization methods and URLs. I think thet use oauth2. First in the process the app goes to gigya.com to get idToken. The idToken is then used along with the "ordinary credintials" to autenticate at the new "Electrolux cloud"  resulting in an Authorization(token) that kan be used to GET device metrics at(with the info in the header):
https://api.eu.ocp.electrolux.one/appliance/api/v2/appliances?includeMetadata=false
I hope this can help, but I'm not to skilled(not really at all) in programming take a lead on this.

I can provide URLs and clear text requests and responds with both gigya.com and further with Electrolux-cloud

I was fiddling with the new oneapp API in my fork.
https://github.com/Woyken/pyelectroluxconnect/blob/main/src/pyelectroluxconnect/oneApp/apiClient.py
They are using websockets now, it does work. And seems quite responsive.
I'm wondering if @tomeko12 will want to merge and take on this new API

Hi.
It's looks like new Elecirolux/AEG OneApp uses another API, than Electrolux Connectivity Platform (ECP) used by pyelectroluxconnect. I think, that this OneAppApi is wrapper, that translate MQTT based ECP Api to more readable form (like pyelectroluxconnect).
In my opinion, OneAppApi is inconpatibile nad totally different from pyelectroluxconnect, and should by written from a scrath. @Woyken, you should publish Your API independly from pyelectroluxconnect, because, in mu opinion implementing it in pyelectoluxconnect make no sense.
It's better to develop Your API, than customize pyelectroluxconnect.

@tomeko12 thanks for your response.
Your point makes sense, it is probably a wrapper API around the original API.
Since the new API seems to have all the features I need, I'll fiddle with this idea on my own then

@Woyken , You should publish Your API, because I'm worry about that Electrolux will close access to ECP. Old mobile apps still working, but with message "This app is closing down".
I think, that now is good time to move effort to develop OneApp API.

@tomeko12 I'll slowly chip at it whenever I have some spare time. Life got quite busy lately 😅

Hey guys, this is probably more of a question to @Woyken as I cannot create issues in your repository.
I managed to get the WebSocket working. I have noticed that every two hours, the websocket disconnects "abnormally".
Did you also observe this behaviour?

I haven't tried keeping it connected for so long.
I think I'll end up doing some sort of polling and websocket hybrid solution...

I see. The WebSocket is very responsive. As far as I know now it's just for getting updates on the device's status.
Based on the data it sends out I don't see why you need a hybrid solution for reading the status.
Here's a snippet of when I ran a quick 30 min cycle:
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"applianceState","Value":"READY_TO_START","Timestamp":"2023-11-26T11:58:52Z"},{"Name":"minFinishInTime","Value":68400,"Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"remoteControl","Value":"TEMPORARY_LOCKED","Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"washingNominalLoadWeight","Value":9000,"Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"timeManagerLevel":"NORMAL","analogTemperature":"40_CELSIUS","EWX1493A_wmEconomy":true,"programUID":"COTTON_PR_ECO40-60"},"Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fCMiscellaneousState","Value":{"ecoLevel":6},"Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fcOptisenseLoadWeight","Value":65408,"Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":12600,"Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"minFinishInTime","Value":14400,"Timestamp":"2023-11-26T11:58:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"dwywWashData","Value":{"wmLoadWeight":90,"wmLoadMoisture":48,"programUID":"COTTON_PR_ECO40-60"},"Timestamp":"2023-11-26T11:58:53Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"remoteControl","Value":"NOT_SAFETY_RELEVANT_ENABLED","Timestamp":"2023-11-26T11:58:56Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"remoteControl","Value":"TEMPORARY_LOCKED","Timestamp":"2023-11-26T11:59:24Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"EWX1493A_wmEconomy":false,"programUID":"COTTON_PR_COTTONS"},"Timestamp":"2023-11-26T11:59:25Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fCMiscellaneousState","Value":{"ecoLevel":255},"Timestamp":"2023-11-26T11:59:25Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fcOptisenseLoadWeight","Value":65535,"Timestamp":"2023-11-26T11:59:25Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"analogTemperature":"30_CELSIUS","programUID":"DELICATE_PR_DELICATES","analogSpinSpeed":"800_RPM"},"Timestamp":"2023-11-26T11:59:25Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fCMiscellaneousState","Value":{"ecoLevel":6},"Timestamp":"2023-11-26T11:59:25Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fcOptisenseLoadWeight","Value":65408,"Timestamp":"2023-11-26T11:59:25Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":3840,"Timestamp":"2023-11-26T11:59:26Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"minFinishInTime","Value":7200,"Timestamp":"2023-11-26T11:59:26Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"washingNominalLoadWeight","Value":2000,"Timestamp":"2023-11-26T11:59:26Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"programUID":"QUICK_20_MIN_PR_20MIN3KG","analogSpinSpeed":"1200_RPM"},"Timestamp":"2023-11-26T11:59:26Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1200,"Timestamp":"2023-11-26T11:59:26Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"minFinishInTime","Value":3600,"Timestamp":"2023-11-26T11:59:26Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"washingNominalLoadWeight","Value":3000,"Timestamp":"2023-11-26T11:59:26Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"analogTemperature":"40_CELSIUS"},"Timestamp":"2023-11-26T11:59:27Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1800,"Timestamp":"2023-11-26T11:59:27Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"analogTemperature":"30_CELSIUS"},"Timestamp":"2023-11-26T11:59:27Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1200,"Timestamp":"2023-11-26T11:59:27Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"analogTemperature":"40_CELSIUS"},"Timestamp":"2023-11-26T11:59:28Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1800,"Timestamp":"2023-11-26T11:59:28Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"userSelections","Value":{"analogTemperature":"30_CELSIUS"},"Timestamp":"2023-11-26T11:59:28Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1200,"Timestamp":"2023-11-26T11:59:29Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"dwywWashData","Value":{"wmLoadWeight":30,"wmLoadMoisture":64,"programUID":"QUICK_20_MIN_PR_20MIN3KG"},"Timestamp":"2023-11-26T11:59:30Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"remoteControl","Value":"NOT_SAFETY_RELEVANT_ENABLED","Timestamp":"2023-11-26T11:59:33Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"doorState","Value":"CLOSED","Timestamp":"2023-11-26T12:00:03Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"applianceState","Value":"RUNNING","Timestamp":"2023-11-26T12:00:05Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"cyclePhase","Value":"WASH","Timestamp":"2023-11-26T12:00:05Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"doorLock","Value":"UNLOCKING","Timestamp":"2023-11-26T12:00:05Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"remoteControl","Value":"TEMPORARY_LOCKED","Timestamp":"2023-11-26T12:00:06Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fCMiscellaneousState","Value":{"optisenseResult":0},"Timestamp":"2023-11-26T12:00:06Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"doorLock","Value":"ON","Timestamp":"2023-11-26T12:00:06Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"remoteControl","Value":"ENABLED","Timestamp":"2023-11-26T12:00:09Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fCMiscellaneousState","Value":{"optisenseResult":2200},"Timestamp":"2023-11-26T12:00:49Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fcOptisenseLoadWeight","Value":65412,"Timestamp":"2023-11-26T12:00:50Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"dwywWashData","Value":{"wmLoadWeight":22,"dwywDataType":"FOR_UPDATE"},"Timestamp":"2023-11-26T12:00:51Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1140,"Timestamp":"2023-11-26T12:03:05Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1080,"Timestamp":"2023-11-26T12:04:35Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1020,"Timestamp":"2023-11-26T12:05:36Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":960,"Timestamp":"2023-11-26T12:06:36Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":900,"Timestamp":"2023-11-26T12:07:36Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":840,"Timestamp":"2023-11-26T12:08:37Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":780,"Timestamp":"2023-11-26T12:09:37Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":720,"Timestamp":"2023-11-26T12:10:37Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"cyclePhase","Value":"RINSE","Timestamp":"2023-11-26T12:10:47Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":660,"Timestamp":"2023-11-26T12:11:18Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":540,"Timestamp":"2023-11-26T12:11:48Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":480,"Timestamp":"2023-11-26T12:12:18Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":420,"Timestamp":"2023-11-26T12:13:18Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"cyclePhase","Value":"SPIN","Timestamp":"2023-11-26T12:13:50Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":360,"Timestamp":"2023-11-26T12:13:50Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"dwywWashData","Value":{"dwywDataType":"FOR_TD"},"Timestamp":"2023-11-26T12:13:51Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"cyclePhase","Value":"DRAIN","Timestamp":"2023-11-26T12:14:19Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"cyclePhase","Value":"SPIN","Timestamp":"2023-11-26T12:15:03Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":300,"Timestamp":"2023-11-26T12:15:03Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":240,"Timestamp":"2023-11-26T12:16:33Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":180,"Timestamp":"2023-11-26T12:17:34Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":120,"Timestamp":"2023-11-26T12:20:05Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"remoteControl","Value":"NOT_SAFETY_RELEVANT_ENABLED","Timestamp":"2023-11-26T12:20:09Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"doorLock","Value":"UNLOCKING","Timestamp":"2023-11-26T12:20:17Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"applianceState","Value":"END_OF_CYCLE","Timestamp":"2023-11-26T12:20:17Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"cyclePhase","Value":"UNAVAILABLE","Timestamp":"2023-11-26T12:20:18Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"doorLock","Value":"OFF","Timestamp":"2023-11-26T12:20:18Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":0,"Timestamp":"2023-11-26T12:20:18Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"timeToEnd","Value":1200,"Timestamp":"2023-11-26T12:21:52Z"},{"Name":"applianceState","Value":"READY_TO_START","Timestamp":"2023-11-26T12:21:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"doorState","Value":"OPEN","Timestamp":"2023-11-26T12:21:52Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"fcOptisenseLoadWeight","Value":65408,"Timestamp":"2023-11-26T12:21:52Z"}]}]}}

I thought I might make sense to keep polling every few minutes until device is "online" then websocket. If websocket disconnects, reconnect, but also fetch current status, to make sure we have all the lastest states. Until it's offline. Then keep on polling and waiting for it to be online.
I don't know if all devices from Electrolux are like mine but it take like 2 minutes to connect to wifi after I turn it on. Probably no point in trying to keep websocket alive for that long while the washing machine is offline for 14 hours or so (I have to send a ping command every few minutes to keep it alive)

I agree with the states. Upon starting you should poll /appliance/api/v2/appliances to get the states and then update according to the WS messages. I use that endpoint to resolve the appliance id's based on the nicknames I gave my devices anyway.
I have my appliances set up to stay connected all the time. I have checked the WS, when the device loses connection and I get these messages (timestamps are UTC):
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"connectivityState","Value":"disconnected","Timestamp":"2023-11-26T13:42:06Z"}]}]}}
{"ConnectionId":"Conn","Api":"STREAM","Version":"2.0","Payload":{"Appliances":[{"ApplianceId":"WM","Metrics":[{"Name":"connectivityState","Value":"connected","Timestamp":"2023-11-26T13:42:44Z"}]}]}}

Electrolux Life app has stopped working, have to use Electrolux app now so the old API is no longer working. There are a couple of projects that have popped up for the Electrolux OCP API for reference.
https://github.com/mafredri/electrolux-ocp
https://github.com/tomekkleszcz/homebridge-electrolux-devices / https://github.com/mafredri/homebridge-electrolux-devices/tree/mafredri/main

Ciao @tomeko12 and @Woyken,
let me know updates regarding creating a new python api or update.
I am available for any information regarding home assistant integration.
In case it is needed, please feel free to create pull request within the homeassistant_electrolux_status repo, I will approve as always as soon as possible

ping (want to follow)


Random theme from list

Allow oh-my-zsh to load random themes from a list of user favorite, as discussed here.

@apjanke It look better now.

Lookin' good to me, too. I will merge this in to my "Unify theme handling" PR.

@apjanke How is this PR progress?

#3743 – I think it's ready to go and waiting on approval from the maintainers; I just need to rebase it on master to take care of a merge conflict. I'll do so today. No ETA on it being merged though.

Okay, #3743 is rebased on master and ready to merge once the maintainers approve. Looks like I never got to incorporating your support for a specific list of themes for "random" to go through. I'll try to get that done today. Sorry for sleeping on this.


Open with Code conflicts with Sort by on English Windows

VSCode Version: 1.18.0
OS Version: 10.0.15063

Open with Code context menu item uses the same letter shortcut as Sort by in the Folder menu and as Open in the File menu. Open with code can still be reached by pressing o twice, but i is not conflicting with anything in both Folder and File context menu.
( FWIW For the folder menu the candiates are n, i, t ,c, d. From that only i is available in the File menu. )
Steps to Reproduce:

Have VSCode installed with the option "Open with code context menu" enabled.
Go to any folder and open the context menu using Shift+F10 or the context menu key on your keyboard
Press o to Open with C*o*de, but get S*o*rt by instead.

Reproduces without extensions: Yes
If you would accept the change I would be happy to create a PR.

What is the suggested alternative letter?

It is i.

Sure... why the hell not. I'll do it, since the change is in our private distro repo.

Awesome!


[Feature Request] Please add the splitting panel functio

Existing Component
否
Component Name
split
Description
ATT, Please add the splitting panel functio

Sorry, we have no plan to support this.


collada model doesn't appear while using the Index.html file in Glitch

Hi @gftruj,
Firstly, this is a fantastic repository and very useful for beginners with A-frame. I am trying to simulate the elf and the stormtrooper files using the frame on Glitch.
I've included the directory structure below. I placed all the 3D model files and images in the assets directory.

The output I get is this

Could you suggest something?
Thanks

Hi, looks like it was out of date (either the three loader, or my usage for aframe 1.2.0).
I've updated the collada-model so it uses the 'newest' THREE.ColladaLoader, and the component.
It seems to be working, but it reports a warning (looks like it's intentional tho).
Let me know if it's working for you as well,
Thanks a lot for reporting an issue btw!
Cheers

Hi, looks like it was out of date (either the three loader, or my usage for aframe 1.2.0). I've updated the collada-model so it uses the 'newest' THREE.ColladaLoader, and the component. It seems to be working, but it reports a warning (looks like it's intentional tho). Let me know if it's working for you as well,
Thanks a lot for reporting an issue btw! Cheers

Thanks for your response. This seems to work properly on JSFiddle. However, I've not tested it locally on my machine.


Added proper millisecond time stamp calculation in nrTimestamp()

Probem
Current implementation of nrTimestamp() depends on external flow to update the milliseconds value which is bound to be wrong values for total time in milliseconds.
Solution
Use the Roku OS method GetMilliseconds() to get the current millisecond and append to the returned timestamp value.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


subtitle not supported like title

I want to display a table with a subtitle as well as a title, but I find that I cannot do this directly as the class Table doesn't have an refinable attribute called subtitle, only a title. So instead I include the table (stripped of its original title) in a page, below the page's title and subtitle. This item in the documentation https://docs.iommi.rocks/en/latest/cookbook_parts_pages.html#how-do-i-override-part-of-a-part-page shows me how I can add a subtitle as well as a title to a page, and over-ride both of them. But it seems to infer that both subtitle and title are treated in an equivalent way, whereas I have found that they're not. In the snippet below I found two working methods of introducing a subtitle - method A is the documented way, and method B I stumbled upon myself. Method B is probably inferior because it mixes the style h2 with the content, but it avoids the (to me mysterious) children__child construct. In both methods I found

You do not need to declare the title in the class because it is already there by default, at the top of the page in the desired h1 style. You just need to assign it a value, which can be done in the response to the request, and must be done there, because it depends on a parameter of the request.

You do need to declare the subtitle in the class, above where you declare the table, because if you don't, it will appear on the page underneath the table instead of above it. This applies to both method A, where the class declaration also sets the h2 style, and method B, where the class declaration is only there to establish the position of the subtitle on the page. It automatically appears below the title, which, as stated, does not need to be declared in the class.

So, is the treatment of subtitle as a second-class citizen compared to title intentional and actually desirable for flexibility, and if this is so, could this be made clearer in the documentation? And would you say method A is to be recommended over method B, or vice-versa, or either is ok?
class MyPage(Page):

  # subtitle = ''           # Method B: sets the position of member `subtitle` above the table, but not the h2 style
  subtitle = html.h2('')    # Method A: sets the position of member `subtitle` above the table incorporating h2 style
  my_table = ScheduleTable()

def schedule_view(request, id):

  return MyPage(

    title = f'Table {id:02d}',
    # parts__subtitle = html.h2(f'For schedule {id:01d}'),          # Method B: refers to `subtitle`` in MyPage and sets the h2 style
    parts__subtitle__children__child = f'For schedule {id:01d}',    # Method A: refers to `subtitle`` in MyPage and is able to inherit the h2 style
    parts__my_table__rows = TeamTemplate.objects.filter(schedule__pk = id),
  )

I've discussed this a bit with @jlubcke and I think this actually shows a bit of a design flaw with Table. We have an idea how to fix this, that we will hopefully look at in the coming week.
Until then I think I'd do this:
class SomePage(Page):
    subtitle = html.h2('subtitle')
    table = SomeTable()
    class Meta:
        title = 'Title'

Which is strictly speaking a bit wrong, as the auto-header level stuff won't properly work with it, but it should work fine for your use case.

Unless I am mistaken, the difference between my use-case and your suggestion is that I have an extra parameter id whose value is only known when a request is made, and so I don't think the value of subtitle (in your example) can be assigned in the class declaration in mine. Instead I have the f-string f'For schedule {id:01d}', which as I understand, can only be assigned dynamically in the view. (It's an artificial example, because I use the same id,  in a redundant kind of way, to construct the title, but in real life I actually do want to pass a parameter used exclusively to construct the subtitle)

You can do late evaluation though. Or even use templates. As long as you can get to the data from the request object you should be good.

I think that's what I did in my original post (?) in both methods A and B. They both work btw. I just wanted to show how much easier it is to do it with a title (which as you point out, can be applied directly to Table) rather than a subtitle.

Ah. Yea, then I agree.

iommi 5.2.0 is released that enabled you to insert arbitrary stuff in the table. So now you can do this:
Table(auto__model=Foo, title='Some title', outer__subtitle=html.h2('Subtitle here', after='h_tag')

Not working for me in iommi 5.3.0, maybe because I need to set the subtitle dynamically instead of declaring it in the class?
def flight_view(request, event_id, stage_number):

  event_stage = Stage.objects.get(event = EventStage.get_event(request), stage_number=stage_number)
  event_stage_schedule_num = event_stage.schedule.pk

  return FlightTable(
    title = Event.objects.get(pk = event_id).name,
    # outer__subtitle = f'Stage {stage_number:01d}', # dynamically resolved at request time - what I require
    # outer__subtitle = html.h2('xyz', after='h_tag'), # fixed test try 1 - fails
    outer__subtitle = 'xyz', # simpler fixed text try 2 - also fails
    rows = TeamTemplate.objects.filter(schedule = event_stage_schedule_num),
  )

I get this error:
Environment:

Request Method: GET
Request URL: http://<IP_ADDRESS>:8000/flight/1/1/

Django Version: 3.2.14
Python Version: 3.10.4
Installed Applications:
['events.apps.EventsConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'iommi']
Installed Middleware:
['iommi.live_edit.Middleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'iommi.sql_trace.Middleware',
 'iommi.profiling.Middleware',
 'iommi.middleware']

Traceback (most recent call last):
  File "C:\Users\david\OneDrive\Documents\ksail2\ksail2_root\events\views.py", line 120, in <iommi declaration>
    return FlightTable(

The above exception () was the direct cause of the following exception:
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\__init__.py", line 90, in iommi_middleware
    return render_if_needed(request, get_response(request))
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\__init__.py", line 73, in render_if_needed
    raise e from fake
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\__init__.py", line 63, in render_if_needed
    response = response.bind(request=request)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\part.py", line 110, in bind
    result = super(Part, self).bind(parent=parent, request=request)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\traversable.py", line 184, in bind
    result.on_bind()
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\table.py", line 1831, in on_bind
    self.outer(_name='outer')
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\declarative\namespace.py", line 118, in __call__
    return call_target(*args, **params)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\declarative\util.py", line 17, in argument_injector_wrapper
    __init__orig(self, *new_args, **new_kwargs)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\shortcut.py", line 32, in wrapper_for_with_defaults
    instance = __target__(*args, **kwargs)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\fragment.py", line 168, in __init__
    super().__init__(_collect_instantiated_at_info=False, **kwargs)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\shortcut.py", line 32, in wrapper_for_with_defaults
    instance = __target__(*args, **kwargs)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\part.py", line 85, in __init__
    super(Part, self).__init__(**kwargs)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\traversable.py", line 68, in __init__
    super().__init__(**kwargs)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\declarative\util.py", line 28, in init_hook_wrapper
    __init__orig(self, *args, **kwargs)
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\declarative\dispatch.py", line 10, in dispatch_defaults_wrapper
    return f(*args, **Namespace(defaults, kwargs))
  File "C:\Users\david\OneDrive\Documents\ksail2\env_ksail2\lib\site-packages\iommi\refinable.py", line 171, in __init__
    raise TypeError(

Exception Type: TypeError at /flight/1/1/
Exception Value: Fragment object has no refinable attribute(s): "subtitle".
Available attributes:
    after
    assets
    attrs
    children
    endpoints
    extra
    extra_evaluated
    include
    iommi_style
    tag
    template

It doesn't seem to like outer__subtitle  being assigned to anything. But the method I described originally of inserting the table inside a page is working fine for me, so I can continue to use that.

doh!
The example should have been:
Table(
    auto__model=Foo,
    title='Some title',
    outer__children__subtitle=html.h2('Subtitle here', after='h_tag')
)

For your dynamic case you might want:
outer__children__subtitle = Fragment(after='h_tag', template=Template(f'Stage {{ stage_number }}')

or something along those lines..

Confirming ok when I use this:
outer__children__subtitle = html.h2(f'Stage {stage_number:01d}', after='h_tag')

Great!


Fix search button and search bar placeholder alignment

Fixes #50
Please add hacktoberfest-accepted label it is my first hacktoberfest contribution

I just updated the lioness project please run git pull the get the latest changes then make your commit


New sidebar with new icons

What is the purpose of the change:

Updates new sidebar with new header image, as well as new icons:

Linear Task
Linear Task URL
Brief Changelog

Update osmosis block logo
Update icons for some of the pages (didn't rename pages)
Increase icon size
Remove some redundant HTML elements
Unify some icons within sprite.svg, and added currentColor to some icons with hardcoded colors

Related: uses text color instead of opacity for selected item styles

Testing and Verifying

Summary by CodeRabbit

New Features

Enhanced the MainMenu component with new properties and improved rendering logic for better UI consistency.
Updated localization entries for "settings" and "notifications" to support multiple languages.

Refactor

Simplified the MainMenu and related components by removing unused props and optimizing import statements.
Adjusted icon usage and sizes across various components for a more consistent visual experience.

Bug Fixes

Changed error logging in the SkipBridgeProvider class to use console.error for better error visibility.

Chores

Removed unnecessary logging across multiple components and tests to clean up the console output.

Tests broken on missing translations, but inlang is currently not working. In Discord working with inlang to get translations again.


Add Gene - has_sequence_variant - SequenceVariant operation to myvariant.info smartAPI annotation

In the SmartAPI metadata for myvariant.info, we annotate the SequenceVariant - is_sequence_variant_of - Gene edge (see Block 1 below), but not (currently) the reverse Gene - has_sequence_variant - SequenceVariant.  Would be good to annotate the reverse direction.  More details at https://github.com/NCATSTranslator/testing/issues/108#issuecomment-907323733
Block 1:
    variantAssociatedWithGene:
    - supportBatch: true
      inputSeparator: ","
      parameters:
        fields: dbsnp.gene.geneid
      predicate: is_sequence_variant_of
      source: "infores:dbsnp"
      requestBody:
        body:
          q: "{inputs[0]}"
          scopes: dbsnp.rsid
        header: application/x-www-form-urlencoded
      inputs:
      - id: DBSNP
        semantic: SequenceVariant
      outputs:
      - id: NCBIGene
        semantic: Gene
      response_mapping:
        "$ref": "#/components/x-bte-response-mapping/variant-gene"

The new x-bte operation has been added and I can get results from a query like this
{
    "message": {
        "query_graph": {
            "nodes": {
                "n0": {
                    "categories": ["biolink:Gene"],
                    "ids": ["NCBIGene:3778"]
                },
                "n1": {
                    "categories": ["biolink:SequenceVariant"]
                }
            },
            "edges": {
                "e01": {
                    "subject": "n0",
                    "object": "n1"
                }
            }
        }
    }
}


Crash Android Release

Random Crash Android Release React native 71.7

@robbywh I am facing the same issue and here is the error:
* What went wrong:
Could not determine the dependencies of task ':robbywh_react-native-zendesk-messaging:compileDebugAidl'.
> Could not resolve all task dependencies for configuration ':robbywh_react-native-zendesk-messaging:debugCompileClasspath'.
   > Could not resolve zendesk.messaging:messaging-android:2.9.0.
     Required by:
         project :robbywh_react-native-zendesk-messaging
      > Could not resolve zendesk.messaging:messaging-android:2.9.0.
         > Could not get resource 'https://zendesk.jfrog.io/ui/native/repo/zendesk/messaging/messaging-android/2.9.0/messaging-android-2.9.0.pom'.
            > Could not HEAD 'https://zendesk.jfrog.io/ui/native/repo/zendesk/messaging/messaging-android/2.9.0/messaging-android-2.9.0.pom'. Received status code 403 from server: Forbidden

@robbywh I am facing the same issue and here is the error:
* What went wrong:
Could not determine the dependencies of task ':robbywh_react-native-zendesk-messaging:compileDebugAidl'.
> Could not resolve all task dependencies for configuration ':robbywh_react-native-zendesk-messaging:debugCompileClasspath'.
   > Could not resolve zendesk.messaging:messaging-android:2.9.0.
     Required by:
         project :robbywh_react-native-zendesk-messaging
      > Could not resolve zendesk.messaging:messaging-android:2.9.0.
         > Could not get resource 'https://zendesk.jfrog.io/ui/native/repo/zendesk/messaging/messaging-android/2.9.0/messaging-android-2.9.0.pom'.
            > Could not HEAD 'https://zendesk.jfrog.io/ui/native/repo/zendesk/messaging/messaging-android/2.9.0/messaging-android-2.9.0.pom'. Received status code 403 from server: Forbidden

I Have the same issue. Could not resolve zendesk.messaging:messaging-android:2.9.0
Did you find any solution for this issue?

@hamedfoodready I had to add below section in android -> build.gradle
allprojects {
    repositories {
        maven {
            url "https://zendesk.jfrog.io/artifactory/repo"
        }
    }
}

Hello guys, I have moved to another company and I don't work with Zendesk anymore. Feel free to open the PR or tell me if you want to become a collaborator

I want to become a collabrator

I am interested

Hello guys, I have moved to another company and I don't work with Zendesk anymore. Feel free to open the PR or tell me if you want to become a collaborator

I am interested @robbywh


Fix Project structure

Expected behavior
all the routes and database connection should not be inside the server.js file.
Actual behavior
Routes and database connection should have separate folders .

[ ] Assign this to me

@1-ankush-1
Sure! You can start working on this issue.
Kindly read the Contributing Guidelines carefully.
Thank You


More than 130 powercalc light entities per room. Why?

System Health details
System Information

version
core-2024.7.3

installation_type
Home Assistant OS

dev
false

hassio
true

docker
true

user
root

virtualenv
false

python_version
3.12.4

os_name
Linux

os_version
6.6.31-haos-raspi

arch
aarch64

timezone
Europe/Bucharest

config_dir
/config

Home Assistant Community Store

GitHub API
ok

GitHub Content
ok

GitHub Web
ok

GitHub API Calls Remaining
4982

Installed Version
1.34.0

Stage
running

Available Repositories
1460

Downloaded Repositories
40

HACS Data
ok

Home Assistant Cloud

logged_in
false

can_reach_cert_server
ok

can_reach_cloud_auth
ok

can_reach_cloud
ok

Home Assistant Supervisor

host_os
Home Assistant OS 12.4

update_channel
stable

supervisor_version
supervisor-2024.06.2

agent_version
1.6.0

docker_version
26.1.4

disk_total
57.8 GB

disk_used
16.7 GB

healthy
true

supported
true

host_connectivity
true

supervisor_connectivity
true

ntp_synchronized
true

virtualization

board
rpi5-64

supervisor_api
ok

version_api
ok

installed_addons
File editor (5.8.0), Home Assistant Google Drive Backup (0.112.1), Duck DNS (1.18.0), Let's Encrypt (5.0.25), Samba share (12.3.1), Studio Code Server (5.15.0), Advanced SSH & Web Terminal (18.0.0)

Dashboards

dashboards
3

resources
28

views
15

mode
storage

Recorder

oldest_recorder_run
July 19, 2024 at 06:17

current_recorder_run
July 28, 2024 at 22:02

estimated_db_size
986.04 MiB

database_engine
sqlite

database_version
3.45.3

Checklist

[X] I have read the FAQ to see if there is a known solution to my problem.
[X] I have enabled debug logging for my installation.
[X] I have filled out the issue template to the best of my ability.
[X] This issue only contains 1 issue (if you have multiple issues, open one issue for each issue).
[X] This issue is not a duplicate issue of currently previous issues..

Describe the issue
Why Powercalc is creating so many entities?

In integrations there are approx 130 times the group Bedroom and LivingRoom. Kitchen speaker has no issues

Reproduction steps

add lights
group them by room
wait couple of days
...

Debug logs
this is the only reference to powercalc found in debug logs

2024-07-28 22:02:36.438 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration powercalc which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant

Diagnostics dump or YAML config
No response

Which version of Powercalc are you using?
There was a similar bug reported some time ago, I think a month / 2 months ago.
But this issue should be fixed.
Let's first check if you are on the latest version? Otherwise we'll need to investigate further.

I am on the latest build, isn't it?

Yes you are on the latest.
You are sure there are still new entries added? Could also be an old issue. Powercalc does not automatically clear it up, as HA raises an error when I try that.
I can instruct you how to clean it up, but let's first validate if there are no new entries added anymore.

How can I check if new entries are added?

They are added.
sensor.livingroom_lights_power_131 was created today at 3:00 (UTC+3)/ At that time I rebooted the HA hardware

So, it makes sense to clean them up.

They are added. sensor.livingroom_lights_power_131 was created yesterday at 3:00 (UTC+3)/ At that time I rebooted the HA hardware

Hmm ok, that a pitty, was pretty sure the actual issue was solved but apparantly it still persists.
Could you provide diagnostics of this config entry? You can do by clicking three dots next to Configure and next click Download diagnostics.
Things can be cleaned up by editing config/.storage/core.config_entries file. Make sure to make a backup before you edit.
You can remove all the duplicate entries from the JSON file and restart afterwards.

They are added. sensor.livingroom_lights_power_131 was created yesterday at 3:00 (UTC+3)/ At that time I rebooted the HA hardware

Hmm ok, that a pitty, was pretty sure the actual issue was solved but apparantly it still persists. Could you provide diagnostics of this config entry? You can do by clicking three dots next to Configure and next click Download diagnostics.
Things can be cleaned up by editing config/.storage/core.config_entries file. Make sure to make a backup before you edit. You can remove all the duplicate entries from the JSON file and restart afterwards.

I have 4 lights in Livingroom (group) and 2 in Bedroom (group). You have all the lights and the first group from each room. As a sidenote, the groups are created automatically, the devices remain the same.
I will let you know the output after the cleaning up procedure.
powercalc.zip

Powercalc does a check if config entry with certain unique_id already exists before attempting to create a new one:
https://github.com/bramstroker/homeassistant-powercalc/blob/master/custom_components/powercalc/sensors/group.py#L305
Looking at your diagnostics of the Livingroom Lights config entry I see unique_id is set, but apparently powercalc thinks there is no config entry yet. There must be some flaw in the logic.
Could you please also check if unique_id is set for the duplicate entries? Either by looking at diagnostics JSON or directly in config/.storage/core.config_entries?

After cleaning config/.storage/core.config_entries file and deleting 1040 entities and entries in db for those entities, the integration is clean. Hopefully, it will remain that way :)
I would wait a couple more days to be sure the issue was fixed before closing the issue.
Thank you @bramstroker for your quick response, fix and support.

@edmund-1 glad its resolved for you.
Did it stay clean or were new duplicates created again after new restarts?


Fixed inconsistency in appearance of input field.

Description

Made the Input field's appearance  consistent  in both light and dark modes across all screen sizes.
Implemented a focus effect on the input field.

Issue #49 📐

I Ayushi Choudhary have worked for #49

Guidelines 🔐
I accept the fact that I have followed the guidelines and have not copied the codes from around the internet

[x] Contribution Guidelines
[x] Code of Conduct

Issue to be closed 🛅

My pull request closes #49

Screenshots 📷
Here are the pictures of changes that I have made 🔽

Added focus effect:

Looks good to me. Merging it right away.

Make sure to star this repo if you liked contributing to it. ⭐


New package: Hashing v0.0.1

Registering package: Hashing
Repository: https://github.com/erich-9/Hashing.jl
Created by: @erich-9
Version: v0.0.1
Commit: feefd6606b9ecec4942db98afccfcea163da3e42
Reviewed by: @erich-9
Reference: https://github.com/erich-9/Hashing.jl/commit/feefd6606b9ecec4942db98afccfcea163da3e42#commitcomment-141188686
Description: Fast cryptographic hash functions for Julia

Thanks for the package! It would be much easier to tell what this package is for and how to use it if it had documentation.
[noblock]

Congrats on the registration! I agree with Lilith, and I would also suggest changing the name to something more specific. A package as generic as Hashing.jl might make people believe it is related to hash tables, and therefore possibly part of Julia's standard library.

Thanks for the comments!
The package is intended to be usable in place of SHA.jl where performance matters. It also extends the functionality.
I just finished writing the first version of the documentation.  I hope it clarifies why I believe the name to be well chosen.
[noblock]

[noblock]
Indeed the documentation is a welcome addition. To someone like me, unfamiliar with cryptography, Hashing.jl still sounds too closely related to standard library objects like sets or dicts, implemented with hash tables. How about CryptographicHashing.jl? Longer package names are almost never a bad thing

Yes, I also considered this name before registration. But in my opinion it's too bulky for such a basic package (just think of collecting the non-cryptographic hash functions you mentioned in a package named NonCryptographicHashing.jl).
Anyway, I think you have a point and maybe there's a less ambiguous name (choosing the current one, I was in particular influenced by the name of the comparable Python package hashlib).
Taking the Rust crate hashes as an inspiration for the name Hashes.jl would probably not resolve ambiguities... But then there's the closely related crate digest, which defines the traits implemented by the (cryptographic) hash algorithms. So what do you think of Digests.jl? It'll  probably make the package somewhat harder to find, since people nowadays speak of hashes instead of digests. But that's fine with me.

If it were up to me (which it's not) I would call it CryptographicHashFunctions.jl or CryptographicHashing.jl, both of which would autocomplete after "]add Cryptog", whereas Hasing.jl would autocomplete after "]add Hashin".
I like packages that, when possible, tell me a pretty complete story about themselves from the name alone.
The story I would tell about this package is

It provides pretty much all the cryptographic hash functions you could want, and does so at high performance using _jll libraries that link to external libraries that use platform dependent hardware acceleration.

From that, "high performance" is not something that should imo be included in the name, otherwise every other package would be HighPerforamnceBlah.jl (though well done, this is much faster than SHA.jl on my hardware). The fact that it uses _jll libraries is an implementation detail. In theory someone could contribute faster or similarly performant implementations written in Julia and it would not be breaking to switch to thoes, hence that should not belong in the name. That leaves "cryptographic hash functions", so I would call it CryptographicHashFunctions.jl and only ever type Cryptog[tab] because I'm lazy and my editors and Pkg both autocomplete.
Separately, this is a pretty nice package (from the very limited poking at it that I've done) and when folks search for "cryptographic hash functions in Julia", I want this to come up. The name CryptographicHashFunctions.jl is a great match for that search query. Searching "hashing in julia" on Brave, the top seven answers are related to the Base.hash function, which is understandable because that is a much more common usage of the word "hash" than cryptographic usage (most programming is not in adversarial contexts). The fact that the this package's hash functions have nice cryptographic properties (except for MD4/MD5/etc.) is a key feature of this package that sets it apart from Base.hash. I think that should be reflected in the name.
(I don't think Digests.jl is an improvement.)
[noblock]

Thanks for the detailed and helpful opinion. You convinced me and I'll call it CryptographicHashFunctions.jl after all. As it happens, it'll then be a direct descendant of SHA.jl via the following chain of Wikipedia quasi-synonyms (which I'm not going to follow to the end): SHA ➔ SecureHashAlgorithms ➔ SecureHashFunctions ➔ CryptographicHashFunctions ➔ CHF
This pull request can thus be closed. I'll open a new one for the renamed package.

Closed in favor of https://github.com/erich-9/CryptographicHashFunctions.jl


add play button

@hamirmahal I think you might have accidentally closed the PR

@hamirmahal I think you might have accidentally closed the PR

I did. I was able to figure out the play/pause button issue and made a commit, but I'm not sure how to make that commit appear here, or if it's even possible. I'm in the process of creating a new PR, but I haven't hit the "Create pull request" button, yet.

This pull request closes #54 if we choose to merge it.


Content-Type header missing when passing BASIC Authentication

I am using request to interact with TestRail API. Since it uses basic authentication I am setting the headers as follows:
var mainHeaders = {
      'Authorization':'Basic ' + new Buffer(config.userName + ":" + config.APIKEY).toString("base64"),
      'Content-type': 'application/json'
  };

but the TestRail API rejects saying Content-Type header is missing. Checking the response from the server I can see the client request header was:
{
  "Authorization": "Basic <my authentication data>",
  "accept": "application/json",
  "referer": "http://xxxxx.testrail.net/index.php?/api/v2/get_cases/1&suite_id=1"
}

So I am assuming the Content-Type header is being removed somehow.
Is there any reason the Content-Type header could be removed from the request header object? The header above is all I set.
It might not be request problem, but I am current lost. Any help is appreciated?
Thanks
Paulo

Since the body is empty, I wasn't passing anything. After I added an dummy JSON object, the content-type was passed over.
Is it possible that the body content dictates what Content-Type is, overriding what I define ? Is that something request is doing ?
Thanks

Tested on latest node&request:
'use strict';

const request = require('request');

request({
	url: 'http://requestb.in/13pfrx01',
	headers: {
		'Authorization':'Basic ' + new Buffer('test:test').toString("base64"),
		'Content-Type': 'application/json'
	}
});

It works fine, the website receives the header correctly with no body specified.
Does the test rails server treat headers case sensitive?
Did you specify json: true in the request options?


Diffs from master to dev should not exists

Please fix the differences that are showing from dev to master, there should be no code diff, please let me know what is the problem.
https://github.com/hack4impact-uiuc/mentee/compare/master...dev

Everything was merged @eslamzaaki but, still showing differences so this issue is still pending


Icon size changes when pulling node from palette into view

Current Behavior

I was just creating a contrib node.
As icon of this node I'm using an (oversized) .png graphics.
The size of the nodes icon displayed increases when the node is pulled from the palette and dropped into the view.
Environment

Node-RED version: v3.1.1
Node.js version: v16.18.1
Platform/OS: macOS Sonoma 14.2
Browser: Chrome

A consequence of the different rendering code used in the sidebar (all html/css) and the main workspace (svg).

Might be - yet doesn't need to.
Looks like there's a different width setting active for the two cases.
I'll check if there's a potential fix w/ reasonable effort...

Analysis:
Icons in the palette get the red-ui-palette-icon class.
https://github.com/node-red/node-red/blob/0e8d3127944a91f39fb49bcb4b388b184ce11edd/packages/node_modules/%40node-red/editor-client/src/js/ui/utils.js#L1311-L1312
For the palette, red-ui-palette-icon is defined with width: 20px.
https://github.com/node-red/node-red/blob/0e8d3127944a91f39fb49bcb4b388b184ce11edd/packages/node_modules/%40node-red/editor-client/src/sass/palette.scss#L184-L191
Icon files, in case they don't carry the ending.svg, are scaled to "largestEdge max 30 pixels":
https://github.com/node-red/node-red/blob/0e8d3127944a91f39fb49bcb4b388b184ce11edd/packages/node_modules/%40node-red/editor-client/src/js/ui/view.js#L4150-L4162
Proposal:
To keep a consistent appearance, this should rather be "largestEdge max 30 pixels && width max 20 pixels"
img.onload = function() {
    if (!iconUrl.match(/\.svg$/)) {
        var largestEdge = Math.max(img.width,img.height);
        var scaleFactor = 1;
        if (largestEdge > 30) {
            scaleFactor = 30/largestEdge;
        }
        var width = img.width * scaleFactor;
        if (width > 20) {
            scaleFactor *= 20/width;
            width = 20;
        }
        var height = img.height * scaleFactor;
        icon.attr("width",width);
        icon.attr("height",height);
        icon.attr("x",15-width/2);
        icon.attr("y", (30-height)/2);  // to center img vertically
    }

PR?

(though generally we suggest white only icons... ;-)

Fixed by #4491


Coco SSD MobileNet support

How can I use the make_image_classifier with Coco SSD MobileNet models?

@JesseWebDotCom,
Can you please clarify why do you want to use MobileNet for Image Classification because those are the Pre-Trained Models for Object Detection. For Image Classification, you can use Inception_ResNet or EfficientNet or MNAS_Net, etc..
For more details, please check this Image Classification Link. Thanks!

I’m new to all this so please bear with me.  I current use the coco ssd mobilenet v2 to detect objects seen through my home security cameras (ex there is a car in the driveway).  That model was recommended because the of the amount of camera feeds that need to be processed.   I would like to get the granularity of “car in the driveway” to “fedex truck in the driveway”.  I thought this project would help.  Thanks


BUG: changing WAMP_NEAR_EXPLORER_URL variable for frontend in docker-compose doesn't do anything

It seems that the CMD given to the frontend server, ["npm", "run", "start:local-wamp-with-indexer-testnet"], causes it to run a bunch of hardcoded stuff (and thus, ignore the WAMP_NEAR_EXPLORER_URL environment variable that Docker Compose sets). This just happens to work because the hardcoded localhost:8080 is the same as what the WAMP server gets set to in the Compose file, but trying to run the WAMP on a different interface or port will cause the frontend to try in vain to connect to it on localhost:8080.
This can be seen clearly from what the frontend is doing in its logs:
><EMAIL_ADDRESS>start:local-wamp-with-indexer-testnet

> env 'NEAR_NETWORKS=[{"name": "testnet", "explorerLink": "http://localhost:3000/", "aliases": ["localhost:3000", "<IP_ADDRESS>:3000"], "nearWalletProfilePrefix": "https://wallet.testnet.near.org/profile"}]' npm run start:local-wamp-with-indexer

><EMAIL_ADDRESS>start:local-wamp-with-indexer

> env NEAR_EXPLORER_DATA_SOURCE=INDEXER_BACKEND npm run start:local-wamp

><EMAIL_ADDRESS>start:local-wamp

> env WAMP_NEAR_EXPLORER_URL=ws://localhost:8080/ws npm run start

><EMAIL_ADDRESS>start

> next start

ready - started server on <IP_ADDRESS>:3000, url: http://localhost:3000

EDIT: More specifically, this happens because of this task in frontend's package.json: "start:local-wamp": "env WAMP_NEAR_EXPLORER_URL=ws://localhost:8080/ws npm run start"

@mieubrisse Thanks for bringing this up! I will take a closer look shortly

@mieubrisse Yeah, this is indeed a bug just as you described. Would you mind submitting a PR fixing it? :pray:

@frol happy to do so but what should be the fix? I could remove the WAMP_NEAR_EXPLORER_URL from the package.json, but from the way it's structured it looks like devs might rely on the current configuration

@mieubrisse I think we should change docker-compose.yml to use pure npm run start and specify all the environment variables explicitly in the docker-compose.yml, so they are fully configurable.

We moved away from WAMP, problem is solved :)


make apply-patches work for core package contributions

the problem
contributors to core packages want to test their contributions, but usually they don't have it merged into elm-janitor "stack-XY" branches.
So instead they would have it in
a) a local copy of the elm-core repo
b) a pull request to the elm-core repo
c) sometimes in a branch to elm-janitor (bundeling some PRs to the respective elm-core package)
currently the only way to use apply-patches is, if you have access to elm-janitor and the guts to create a stack-1.0.x branch (which will also potentially break all current users of apply-patches, as your new branch would be picked up for them).
implementation
i guess this would require some major rewrites, as currently the implementation is passing around a "version".
Challenges:

add code for not downloading but copying from a local folder
add solution for telling the version of unpublished packages

Especially the second I see as a little challenging:
they don't have a bumped version in elm.json as this is the responsibility of evan (after merging in some PRs, he will bump the version). So instead the version in the repo would be incremented?
I think this has the potential of making the elm-janitor contributions a little easier as well.
As all the "stack-1.0.x" branches would not be required anymore, but just the elm-janitor/main branch would be enough.
But that is also why I cant take over that task as novice, as it will probably require some deeper thoughts from people who already set up that system.

Thank you for your comment @a-teammate.
I wanted this script to be something that I can run in CI with few dependencies.
Its aim is to download and unpack stable patch versions (from the branch stack-x.z.y), and to mark the last commit on this branch inside the elm-janitor-commit.json file to track changes between local and remote.
It would be possible to add another script to download code from other remote repositories, or to copy it from a local directory into the proper place inside $ELM_HOME, but as you already mentioned there would be many possibilities.
So I also consider the first challenge you mentioned a hard one.
If this repo were to include such a script, it would be separate (because it behaves very different to the download-only one), and I would prefer to have it in another repo and CLI tool instead.
I like your idea of incrementing a value/version with every change, but for the patches it made sense to show which "official version" was changed, so stack-1.0.5 means that a stack of changes was applied on top of the 1.0.5 release of the upstream repository, so there should be no confusion what base version was extended.
The commit id does not directly tell you how many versions have passed between the locally installed one and the latest, but that information is at least recoverable (unless the branch is rebased, where it would only tell us that it is now different). But if we increment a value, there would need to be a single source of truth, which would be at least a problem when mixing local changes from the file system and changes downloaded with git.
The main benefit of having stack-x.y.z branches is that multiple versions could be patched.
If some people rely on the janitor-patched version of core/1.0.5, but Evan would for instance only include some of the fixes on a next v2.0.0 with other major breaking changes, we can still install stack-1.0.5 and a stack-2.0.0 version from elm-janitor and get those fixes for both upstream versions.
Or if v1.0.6 addresses only one bug in a different way (than the patch in janitor), the other changes from the stack could be applied again.
For working with the core packages, I would use another approach, and consider addressing the problems you listed out of scope of the apply-patches script.

Working with the core packages and the challenges you mention reminded me of a repository that I showed during elm-camp but did not publish yet. There I started creating tests for each patch included into the elm-janitor stacks.
I was trying to get it in a publishable state (so I could also include a link) but you are already waiting two weeks for an answer, and I did not yet manage that, so I wanted to at least respond.
I hope to finish cleaning up the repo next weekend.

To test the janitor fixes and mess with the core packages, I created a repository and added every forked core package of elm-janitor as a git submodule.
Then I also added the original elm/* repositories as another remote repo to each.
When I now link the submodules into a custom $ELM_HOME directory, I can switch between different branches (official, stack-*, PRs) without much hassle, and still ensure that my custom versions are not a requirement for Elm projects that don't need the changes.
For example:
# The Elm compiler respects this environment variable
ELM_HOME=/tmp/elm-home

ln -s `pwd`/packages/core $ELM_HOME/0.19.1/packages/elm/core/1.0.5

# remove (potentially outdated) build artifacts created by the Elm compiler
rm -rf packages/*/artifacts.dat

# and remove local Elm caches from the current project
rm -rf elm-stuff

# then I can make a build using the patched versions
elm make src/Main.elm

If you are confused about the many branches, Rupert documented the approach for branch naming in
https://github.com/elm-janitor/manifesto/blob/master/git-help.md
I only added a few bash scripts to help with tedious tasks like clearing the caches, or linking repositories, but maybe it makes sense to create something platform-independent.

Hello @a-teammate, I actually managed to upload my test suite.
https://github.com/elm-janitor/test-suite#readme
If you are interested in developing bugfixes to Elm core repositories, please give it a try.

ah, sorry for the late reply! I don't have github notifications activated..
very cool! thank you! will use


explore how to validate raw data

Goal: confirm that the correct raw data files were uploaded relative to the accompanying metadata

Current work in progress document: https://docs.google.com/spreadsheets/d/1hcxhvTEehozVU6wMifwgSLoERMnG47YbcP4ahwvP4Rg/edit?usp=sharing
Overall checkpoints for raw datafiles:

Make sure the appropriate fastq files are present
Make sure fastq files are the expected lengths
When possible, check to see if expected barcode is present in the appropriate fastq file using whitelist