[$500] Workspace - Two different IOUs are created

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: <IP_ADDRESS>
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
Issue found when executing PR https://github.com/Expensify/App/pull/34092
Action Performed:

Create a workspace
Open the workspace chat
Create a distance split IOU from the composers + button with any destinations
Open both IOU details

Expected Result:
There should be only one IOU
The map should be visible
Actual Result:
Two different IOUs appeared.
The map isn't showing on any of them
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/b5f867ab-e033-4e14-bc9b-d52cd8853d12
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01e854e11c780c2016
Upwork Job ID:<PHONE_NUMBER>595680256
Last Price Increase: 2024-02-20

We think that this bug might be related to #wave6
CC @greg-schroeder

Can't repro this bug. I can see the map.

Proposal
Please re-state the problem that we are trying to solve in this issue.
When Split bill is used in a Workspace Chat, distance money request can be generated which creates inconsistency.
What is the root cause of that problem?
Here, we check if distance request tab should be shown. And, currently, we show the distance request tab for Workspace Chat (aka policy expense chat). However, we allow generating split bill requests for only manual and scan request types. Since we can attempt split bill generation via the menu option for workspace chats, we do not check if the ioutType is split for workspace chats. I think this is the root cause.
What changes do you think we should make in order to solve the problem?
We can solve this problem by not showing the Distance tab when iouType is of split type like this here.
const shouldDisplayDistanceRequest = (isExpenseChat && iouType !== CONST.IOU.TYPE.SPLIT) || isExpenseReport || isFromGlobalCreate;

What alternative solutions did you explore? (Optional)
Alternatively, if we want to support generation of split bill request for distance request type, we will have to update createTransaction here for the case of distance request type and split` as iou type which is currently missing. Also, I think BE changes may be required as we are adding a new feature. Also, other FE changes would be required. Based on the feedback on this, we can decide on further steps.

@laurenreidexpensify @greg-schroeder
Can we confirm the expected behavior here?
Unlike the mentioned expected behavior in OP, it looks like we should not be showing the distance tab when the split bill is initiated via the menu.
The reason why I think so is that we do not have any support for generating split bills for distance requests.
Instead, we only support split bills for manual and scan request types.

I have done a really poor job of reviewing this properly due to competing priorities - I will be looking at this in depth tomorrow (Fri 16 Feb) and confirming how we move it forward, and how it overlaps with Wave 6

Hey @rojiphil - I checked with the team and we support bill splits for distance requests, just like any other expense.

Another quick point here @rojiphil - we should be showing the map

@eVoloshchak can you take a look at the proposal above? thanks

@rojiphil bump if you have a chance to do that update to your proposal :)

@rojiphil bump if you have a chance to do that update to your proposal :)

Apologies for the delay. I will update the proposal today

Proposal
Updated to support split bill generation for distance requests in workspace chats
cc @eVoloshchak

There should be only one IOU

@laurenreidexpensify
As I understand, we generate two previews for split bills.  So, I am not sure why OP expects only one IOU here.
Maybe this came up as we show only one preview initially for scan requests until the scanning operation completes in the server following which the split bill generation is completed. But distance requests do not have an intermediate step like this.
What do you think about this?

Seems like this issue also falls within the larger plan of P2P-Distance requests-Frontend here
So curious to know what you think of the proposal here as this issue also needs BE support.
cc @neil-marcellini @koko57

@neil-marcellini could you take a look - https://github.com/Expensify/App/issues/35961#issuecomment-1967119690 -thanks

@neil-marcellini adding you for feedback on https://github.com/Expensify/App/issues/35961#issuecomment-1967119690

@laurenreidexpensify thanks for assigning me, that makes it way more visible! I think that we should close this issue, given that we do not actually support splits for distance requests yet. We're building that out with the P2P distance requests project, and once that's done it will work properly.
The reason the option shows in app now is that we figured it wasn't worth the effort to hide the option given that we'll make it work soon. That's a bit controversial and I'm open to hiding split for distance until it's working.


Supporting Scheduled Sagemaker Notebooks in VPC Mode

The current cloud formation template does not support running Sagemaker Processing jobs within a VPC.
To solve this, the scheduling lambda function should be passed VpcConfig from the Sagemaker Studio domain if present.
Possibly, it should be passed to the InvokeNotebookLambda before being passed to the boto3 SDK call to Sagemaker create_processing_job, which ensures the Sagemaker processing instance has access to VPC resources.
Also, I believe the policy might need certain permissions to ec2 although the ones I have listed might be too many.
Policies:         - PolicyName: root           PolicyDocument:             Version: 2012-10-17             Statement:               - Effect: Allow                 Action:                   - sagemaker:CreateProcessingJob                   - iam:PassRole                   - ec2:DeleteNetworkInterface                   - ec2:CreateNetworkInterface                   - ec2:CreateNetworkInterfacePermission                   - ec2:DeleteNetworkInterface                   - ec2:DeleteNetworkInterfacePermission                   - ec2:DescribeNetworkInterfaces                   - ec2:DescribeVpcs                   - ec2:DescribeDhcpOptions                   - ec2:DescribeSubnets                   - ec2:DescribeSecurityGroups                 Resource: '*' InvokeNotebookLambda:     Type: AWS::Lambda::Function     Properties:       FunctionName: RunNotebook       Description: A function to run Jupyter notebooks using SageMaker processing jobs       Handler: index.lambda_handler       Runtime: python3.7       Role: {"Fn::GetAtt" : ["LambdaExecutionRole", "Arn"] }       Timeout: 30       VpcConfig:         SecurityGroupIds:          - 'sg-<xxxx>'         SubnetIds:          - 'subnet-<xxxx>'          - 'subnet-<xxxx'
The VpcConfig should be passed into the boto3 create_processing_job request in the invoked lambda function:
"NetworkConfig": {        "EnableInterContainerTrafficEncryption": boolean,       "EnableNetworkIsolation": boolean,       "VpcConfig": {           "SecurityGroupIds": [ "string" ],          "Subnets": [ "string" ]       }    }
In the code of the lambda template:
B['NetworkConfig'] = {'EnableInterContainerTrafficEncryption': False,'EnableNetworkIsolation': False,'VpcConfig': {'SecurityGroupIds': ['sg-<xxxx>'],'Subnets': ['subnet-<xxxx>','subnet-<xxxx>']}} V=boto3.client('sagemaker');H=V.create_processing_job(**B);W=H['ProcessingJobArn'];X=re.sub('^.*/','',W);return X
As of now, Scheduled Sagemaker Notebooks running Sagemaker Processing Jobs on Sagemaker Processing Instances do not have access to private resources within the VPC attached to Sagemaker Studio upon its domain creation.

Thank you!
I managed to get it working with running the job via command line by passing the Networking Config as --extra
--extra '{ "NetworkConfig": { "EnableInterContainerTrafficEncryption": false, "EnableNetworkIsolation": false, "VpcConfig": { "SecurityGroupIds": [ "sg-xxx" ], "Subnets": [ "subnet-xxx" ] } } }'
I would really like if the UI would pass the vpc config from the sagemaker domain automatically.


Added upload_image functionality

What does this PR do?
Added upload_image functionality for both posts and stories
from PIL import Image
from instagram_private_api import Client

api = Client(username=...,password=...)

with Image.open('/Users/kn0wm4d/Desktop/test.jpg') as img:
   photo_data = open('/Users/kn0wm4d/Desktop/test.jpg', 'rb')
   width, height = img.size
   size = (width, height)

api.upload_image(photo_data, quality=80, size=size, caption='Test', story=False)

Why was this PR needed?
Because IG deprecated post_photo (experimental endpoint).
What are the relevant issue numbers?
#305
Does this PR meet the acceptance criteria?

[x] Passes flake8 (refer to .travis.yml)
[x] Docs are buildable
[x] Branch has no merge conflicts with master
[ ] Is covered by a test

the upload_image functionality returns a 500 HTTP Error
urllib.error.HTTPError: HTTP Error 500: Internal Server Error


Fix metric deletion on group delete

This PR contains 2 related fixes:
Deleting ALL metrics of a consumer group
The burrow_kafka_topic_partition_status metric for a deleted consumer group was dangling because we neglected to clear the corresponding gauge.
Fixes https://github.com/linkedin/Burrow/issues/797
Handling the case when user only deletes a specific consumer group's topic
Previously, we deleted all consumer group metrics when a group's topic was deleted. With this change we make sure to check for the case where a topic is provided (i.e. user wants to delete only a specific topic of a consumer group) and delete only the metrics that match both consumer group and topic.

I fixed the Lint issue for the new code. Let me know if there's anything else.

Many thanks ❤


aria-selected warning rule contradicts official W3C examples

Hi,
I've recently come face to face with the warning message The attribute aria-selected is not supported by the role listitem. This role is implicit on the element li. while trying to implement a combobox element.
While the listitem spec does not point to aria-selected as being a supported property, the official W3C ARIA examples do recommend using aria-selected in combination with the li tag for the items in the listbox of a combobox system.
Could/Should the rule be revised?

My mistake! I failed to notice that the li in comboboxes was supposed to be given a role="option"! Adding this role, I have no issue anymore :) Sorry for the bother!


docs: improve "Hosting with Apache"

Description

improve document structure

Checklist:

[x] Securely signed commits
[] Component(s) with PHPDoc blocks, only if necessary or adds value
[] Unit testing, with >80% coverage
[x] User guide updated
[] Conforms to style guide

The current doc says to set the document root to /opt/lamp/apache2/htdocs/myproject/public,
and /opt/lamp/apache2/htdocs is the document root of the main server.
This is not good.
<Directory "/opt/lamp/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

<VirtualHost *:80>
    DocumentRoot "/opt/lamp/apache2/htdocs/myproject/public"
    ServerName myproject.local
    ErrorLog "logs/myproject-error_log"
    CustomLog "logs/myproject-access_log" common
</VirtualHost>

https://codeigniter4.github.io/CodeIgniter4/installation/running.html#virtual-hosting

Changed the location of the project folder: https://github.com/codeigniter4/CodeIgniter4/pull/7679/commits/3bab114bdbf96587112c0759d82447b61942a0fd


H-bond is not alligned to Snake mode view in some cases

Steps to Reproduce

Go to Macro - Snake mode
Load from HELM using paste from clipboard: RNA1{R(C)P.R(C)P}|RNA2{R(U)P.R(U)P.R(U)P}$RNA1,RNA2,6:pair-5:pair|RNA1,RNA2,2:pair-8:pair$$$V2.0

Actual behavior
H-bond goes strait from base to phosphate

Expected behavior
H-bond follows snake pattern

Versions

Ketcher Version 2.28.0-rc.1 Build at 2024-12-03; 17:04:52
Indigo Version 1.27.0-rc.1.0-g8d656a341-wasm32-wasm-clang-19.0.0
Chrome Version 131.0.6778.109 (Official Build) (64-bit)
Win10

Issue found while testing - https://github.com/epam/ketcher/issues/5712

Verified.

Versions

Ketcher Version 2.28.0-rc.2 Build at 2024-12-10; 18:40:08
Indigo Version 1.27.0-rc.1.0-g8d656a341-wasm32-wasm-clang-19.0.0
Chrome Version 131.0.6778.140 (Official Build) (64-bit)
Win10


Make logs less scary

From discord: https://discord.com/channels/593655374469660673/593655641445367808/985190327600156712
Lodestar syncing Ropsten from scratch with Geth, can get kinda noisy. It'd be friendly to make these logs look less scary:
consensus_1          | Jun-11 14:32:54.003[]                 info: Syncing - 1.8 hours left - 6.81 slots/s - slot: 86264 (skipped 45275) - head: 40989 0xf0f4…e5b1 - finalized: 0xd37c…7768:1278 - peers: 50
consensus_1          | Jun-11 14:33:06.003[]                 info: Syncing - 1.9 hours left - 6.70 slots/s - slot: 86265 (skipped 45196) - head: 41069 0x9bf2…6e0d - finalized: 0xab60…7236:1281 - peers: 51
consensus_1          | Jun-11 14:33:15.450[CHAIN]           error: Error onSyncAggregate  attestedData not available
consensus_1          | Error: attestedData not available
consensus_1          |     at LightClientServer.onSyncAggregate (file:///usr/app/packages/lodestar/src/chain/lightClient/index.ts:446:15)
consensus_1          |     at LightClientServer.onImportBlockHead (file:///usr/app/packages/lodestar/src/chain/lightClient/index.ts:209:10)
consensus_1          |     at importBlock (file:///usr/app/packages/lodestar/src/chain/blocks/importBlock.ts:211:33)
consensus_1          |     at processChainSegment (file:///usr/app/packages/lodestar/src/chain/blocks/index.ts:101:13)
consensus_1          |     at JobItemQueue.runJob (file:///usr/app/packages/lodestar/src/util/queue/itemQueue.ts:92:22)
consensus_1          | Jun-11 14:33:18.000[]                 info: Syncing - 1.9 hours left - 6.63 slots/s - slot: 86266 (skipped 45113) - head: 41153 0x0d0f…e32d - finalized: 0xc2f0…f091:1284 - peers: 51
consensus_1          | Error: REQUEST_ERROR_EMPTY_RESPONSE
consensus_1          |     at file:///usr/app/packages/lodestar/src/network/reqresp/request/collectResponses.ts:20:13
consensus_1          |     at runMicrotasks (<anonymous>)
consensus_1          |     at processTicksAndRejections (node:internal/process/task_queues:96:5)
consensus_1          |     at withTimeout (file:///usr/app/packages/utils/src/timeout.ts:19:12)
consensus_1          |     at sendRequest (file:///usr/app/packages/lodestar/src/network/reqresp/request/index.ts:137:25)
consensus_1          |     at ReqResp.sendRequest (file:///usr/app/packages/lodestar/src/network/reqresp/reqResp.ts:158:22)
consensus_1          |     at ReqResp.goodbye (file:///usr/app/packages/lodestar/src/network/reqresp/reqResp.ts:100:5)
consensus_1          |     at PeerManager.goodbyeAndDisconnect (file:///usr/app/packages/lodestar/src/network/peers/peerManager.ts:603:7)
consensus_1          | Error: REQUEST_ERROR_EMPTY_RESPONSE
consensus_1          |     at sendRequest (file:///usr/app/packages/lodestar/src/network/reqresp/request/index.ts:175:13)
consensus_1          |     at runMicrotasks (<anonymous>)
consensus_1          |     at processTicksAndRejections (node:internal/process/task_queues:96:5)
consensus_1          |     at ReqResp.sendRequest (file:///usr/app/packages/lodestar/src/network/reqresp/reqResp.ts:158:22)
consensus_1          |     at ReqResp.goodbye (file:///usr/app/packages/lodestar/src/network/reqresp/reqResp.ts:100:5)
consensus_1          |     at PeerManager.goodbyeAndDisconnect (file:///usr/app/packages/lodestar/src/network/peers/peerManager.ts:603:7)
consensus_1          | Jun-11 14:33:30.002[]                 info: Syncing - 1.9 hours left - 6.62 slots/s - slot: 86267 (skipped 45025) - head: 41242 0x6af7…3203 - finalized: 0x1c5e…1b65:1286 - peers: 50

Yep would love to have someone devoting time on making Lodestar print less red

Has anyone been seeing this response lately (v1.7.x and up) while syncing from scratch? If not, I think it's justified to close this and reopen a new issue if this persists.

:+1: closing


Issue #34: Replace '//Use this file to write queries.' with something more meaningful.

@monty241,
Thanks for your contribution.
To ensure that the project team has proper rights to use your work, please complete the Contribution License Agreement at https://cla.microsoft.com.
It will cover your contributions to all Microsoft-managed open source projects.
Thanks,
Microsoft Pull Request Bot

@monty241, thanks for signing the contribution license agreement. We will now validate the agreement and then the pull request.
Thanks, Microsoft Pull Request Bot

We're not taking this at this point. In the future we'll update the default connector template with more meaningful comments.


Add supported data types to doc comments for indexedProperties

Indexing BOOL/Bool and NSDate properties have been supported from v0.97.1.
Closes https://github.com/realm/realm-cocoa/issues/3339
CC @jpsim @mrackwitz

:+1:

:+1:


[Feature]: Support v2-to-v3 transformation of waiters

Self-service

[ ] I'd be willing to implement this feature

Input code
import AWS from "aws-sdk";

const Bucket = "BUCKET_NAME";
const client = new AWS.S3({ region: "REGION" });

await client.createBucket({ Bucket }).promise();
await client.waitFor("bucketExists", { Bucket }).promise();

Expected Output
import { S3, waitUntilBucketExists } from "@aws-sdk/client-s3";

const Bucket = "BUCKET_NAME";
const client = new S3({ region: "REGION" });

await client.createBucket({ Bucket });
await waitUntilBucketExists({ client, maxWaitTime: 60 }, { Bucket });

Additional context
Blog post: Waiters in modular AWS SDK for JavaScript

The waiter configuration in v2 has the following optional values:

delay: The number of seconds to wait between requests
maxAttempts: The maximum number of requests to send while waiting

If these values are not provided, the waiter waits indefinitely
Source code: https://github.com/aws/aws-sdk-js/blob/5ac0a5e169d3bf6c430be12f2d5e6fd528b682d4/lib/service.d.ts#L6-L16
The waiter configuration in v3 has the following equivalent values:

maxWaitTime: [required] The amount of time in seconds a user is willing to wait for a waiter to complete.
minDelay: The minimum amount of time to delay between retries in seconds
maxDelay: The maximum amount of time to delay between retries in seconds

Source code: https://github.com/aws/aws-sdk-js-v3/blob/6fe57fe8259ae25d1696ce7ff1765c5048715e23/packages/types/src/waiter.ts#L3-L38
The codemod will have to make following decisions:

What should be the default value of maxWaitTime in v3, if no options are defined in v2.
What should be the value of minDelay in v3, if delay is defined in v2.
What should be the value of maxWaitTime in v3, when:

Only maxAttempts is defined in v2.
When both delay and maxAttempts is defined in v2.

Decisions from internal discussions within AWS SDK for JavaScript team:

What should be the default value of maxWaitTime in v3, if no options are defined in v2.

180 seconds to be safe. We mention 60 seconds in Waiters in modular AWS SDK for JavaScript blog post.

What should be the value of minDelay in v3, if delay is defined in v2.

The value of delay should be same as minDelay

What should be the value of maxWaitTime in v3, when only maxAttempts is defined in v2.

The value in can be 210maxAttempts to start with.
The waiter in v2 uses linear backoff. The multiplier 2 is added for service calls which happen during waiting time in v3.
The value of 10 is an approximate mean of minDelay provided in waiter models. In future, this value should be computed off minDelay numbers specific to service, and we should create a feature request for it.

What should be the value of maxWaitTime in v3, when both delay and maxAttempts is defined in v2.

The value can be 2*delay*maxAttempts complying to previous explanation.


Use PHP_BINARY constant for syntax checking

Currently the LintManager class check syntax by running php -l path/, it can cause some errors if the php binary has another name.

https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/master/src/Linter/Linter.php

@keradus sorry :smile:


Steps to resolve needs clarification

The document says this:
To resolve this issue do one of the following:
Remove the Azure AD account (owner) from all admin roles.
Hard Delete the Quarantined object in the cloud.
The next sync cycle will take care of soft-matching the on-premise user to the cloud account (since the cloud user is now no longer a global GA).
Restore the role memberships for the owner.

I think the phrase "One of the following" is incorrect. Maybe "One of" the first two items. Otherwise, I'd just wait for the next sync cycle, but that isn't working.
Secondly, this paragraph needs some explanation of the possible issues of demoting the AD account, which AD account (O365 or On Prem?), and what the downsides are.
Statements like "Hard Delete" sound like we're destroying mailboxes. IT sounds like there's 3 accounts: On-Prem, O365 mailbox, and Azure AD. We need some clarity as to which account to either delete or demote, and what the implications and problems are.
I'm not going to go delete the owner of the company.
Thank you,
    == John ==

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: d14c8605-c13c-b30d-1061-7f518a5549df
Version Independent ID: 06bd2278-094d-3056-26f8-653d1eaebe58
Content: Azure AD Connect: Troubleshooting Errors during synchronization
Content Source: articles/active-directory/hybrid/tshoot-connect-sync-errors.md
Service: active-directory
Sub-service: hybrid
GitHub Login: @billmath
Microsoft Alias: billmath

@jgwinner, Thank you for sharing the query. We are looking into this and will get back to you soon with more clarity on the steps you mentioned.

@jgwinner We checked the above and found that this is correct as you would not be able to delete the conflicted Azure AD/O365 Admin object to fix the duplicate account conflict. For sync of the correct on-prem account to the Azure AD we need to make sure that on-premise account UPN is not available on the Azure AD.
I think we can ad a section of making sure that there is another GA account available in Azure AD before we hard delete the conflicted account.  I am engaging the content author to provide more information on this and review the possible changes.
@billmath Could you please review this request ?

Are you saying if I'm<EMAIL_ADDRESS>in my local AD that I cannot have an email address of<EMAIL_ADDRESS>in O365?
Seriously?
How does the first account get setup? The above is mandatory when creating an O365 account, as is the multiple SMTP addresses.
In this case, I already demoted one of the accounts, but I'm still getting the conflicted address complaint, every 30 minutes. It's driving me crazy.
Again,
this is not a duplicate.
This really upsetting we're STILL talking about duplicates. There are NO duplicates. ldfix has confirmed that. It reports no duplicates.
    == John ==

@jgwinner Thank you for the feedback.  I have created a work item for this so that we can track it, review it, and get the documentation updated if required.  Unfortunately I don't have an eta but I will update this issue once the documentation is live.  At this point we can go ahead and close this until the update is live.  Thanks!
#please-close


Helm charts

Did you guys ever considered building an helm chart and have it graduated to https://github.com/helm/charts/tree/master/stable/ ?
I have done one for your project here : https://github.com/kronostechnologies/helm-chart-awscred

Hey @nvanheuverzwijn! I never personally got into using Helm as a tool in my pocket (not that other's can't, just my personal experience). Happy to bring something in if you'd like to send a PR. =)

@stevesloka Seems like there is a chart in helm hub : https://hub.helm.sh/charts/kir4h/registry-creds
The charts looks very good. Maybe we could update the README to use it ?

The github source : https://github.com/kir4h/charts/tree/master/charts/registry-creds


Pr comments for auth file proxy

If you look at my last commit, I only made changes to 3 files. I'm not sure why github is saying I changed 19 files. Maybe I'm not using it the right way.

I think I'm going to try and cherry pick the last commit to merge. I'm not a Github Wizard too, and you have not pulled the latest version before the PR, so a lot of conflict appear because I had already changed parts of it (like the quotes). I'll merge it somehow. Thank you for the effort of reviewing this and making these changes.


ref(traffic_sim): AJD-696 clean up metics, provide out_of_range

Types of PR

[ ] New Features
[x] Upgrade of existing features
[ ] Bugfix

Link to the issue
https://tier4.atlassian.net/browse/AJD-696
Description

Removed all metrics - metrics_manager_ no longer exists in traffic_simulator::API.
Based on metric::OutOfRangeMetric, a new job was developed - it is added to the job_list_ for Vehicles (including Ego).
To ensure max_jerk limits, it has been added to the Performance and DynamicConstaints msgs and classes.
Also provided definitions of maxJerk as Performance in Entity definition in scenario and an interface to set its limit - setJerkLimit().
Ensured that the BehaviorParameter is set correctly for Vehicles (including Ego):

removed the issue with max_acceleration == 0 for Ego,
ensured that values from Performance are taken into account when setting DynamicConstraints,
added saving of default DynamicConstraints for the ability to reset them.

Ensured the ability to set the BehaviorParameter based on the values of Properties from the Entity definition in the scenario.

How to review this PR.
Others

@hakuturu583
I've reverted all changes related to maxJerk/max_jerk.
I've added max_jerk as a variable in the class EntityBase.
My change related to setJerkLimit(), ensured that max_jerk is set based on maxJerk in scenarios.
I've tested this by adding maxJerk==0.1 in the scenario with Bicycle0 - the exception is thrown correctly.

Again, I apologize for the earlier changes with maxJerk in DynamicConstraints, I wasn't aware that maxJerk couldn't be there.
Please let me know if this solution is correct.

I add some comment, how do you think about this implentation?
https://github.com/tier4/scenario_simulator_v2/pull/979#discussion_r1147112715

@hakuturu583

I suggest to add functions like this
API::checkOutofRange(const std::string & entity_name, speed_limit, jerk_limit, etc...)
When the API::checkOutOfRange function calls, the entity append checkOutOfRnage job.

I believe that such a solution is not necessary, because now I also do not pass jerk limit (or any limit)  on constructor in entity class.
Moreover, developed job out_of_range works at the limits taken from getBehaviorParameter().dynamic_constraints.
Thanks to this, if the DynamicConstraints for some Entity change - out_of_range will take into account the updated values.
If I understand correctly, limits in DynamicConstraints can be changed by methods:

setDynamicConstrains()
setVelocityLimit()
setJerkLimit()
setAccelerationLimit()
setDecelerationLimit()
resetDynamicConstraints()

Which are used for example in EntityBase::requestSpeedChangeWithConstantAcceleration(...) (link)
So if the DynamicConstraints are changed here I believe that setting fixed limits when creating a job may not be a good solution.
I believe that out_of_range should always have the currently valid limits
(based on the current values in getBehaviorParameter().dynamic_constraints)

I believe that such a solution is not necessary, because now I also do not pass jerk limit (or any limit) on constructor in entity class.
Moreover, developed job out_of_range works at the limits taken from getBehaviorParameter().dynamic_constraints.
Thanks to this, if the DynamicConstraints for some Entity change - out_of_range will take into account the updated values.
If I understand correctly, limits in DynamicConstraints can be changed by methods:

OutOfRange Metric is a function to check that the current implementation in the master branch does not take into account DynamicConstraints updates and that it does not produce more than the jerk specified in the scenario.
Therefore, it is not necessary to consider updates.

@hakuturu583
I've developed another solution to activate the OUT_OF_RANGE job.
I've updated the PR description - please take a look.
In summary:
Now the job is activated in  activatePerformanceAssertion - as it was with the metric.
Value limits are passed in the activation method - the limits are fixed, aren't updated when DynamicConstrains changes in Entities.
I believe that the current solution introduces much less changes and the developed job is fully equivalent to the metric.


Skip the ARW files?

Kudos. Even works on my old out of date NEX-6 camera.
I had a little trouble figuring out how to put in the WPA password, but that's not your problem. When I tried to connect to the other WiFi that I have I could put in the pw without issue.
But I take photos with JPG + ARW and can't see a way to skip uploading the ARW to google. Takes too long doing both, obviously. Just a checkbox to skip those would be nice.
Thanks again.
ww

Done in 1.4


Bump nodejs-basic schema version to 2.2.2

What does this PR do?:
Summarize the changes. Are any stacks or samples added or updated?
Updates schema version to match sample devfile: https://github.com/nodeshift-starters/devfile-sample/pull/45
Which issue(s) this PR fixes:
Link to github issue(s)
fixes devfile/api#1590
PR acceptance criteria:

[X] Contributing guide
Have you read the devfile registry contributing guide and followed its instructions?
[ ] Test automation
Does this repository's tests pass with your changes?
[ ] Documentation
Does any documentation need to be updated with your changes?
[ ] Check Tools Provider
Have you tested the changes with existing tools, i.e. Odo, Che, Console? (See devfile registry contributing guide on how to test changes)

How to test changes / Special notes to the reviewer:

/hold
ODC only supports up to 2.2.1: https://github.com/michael-valdron/openshift-console/blob/1b1da7381671226f81d135987e45aa35c827a376/go.mod#L9
Going to revise my changes to the sample first, and I'll either close or revise this PR once that is done.

https://github.com/devfile/registry/pull/415#issuecomment-2150747124

FYI @Jdubrick

No revisions needed here, closing this PR.

See https://github.com/nodeshift-starters/devfile-sample/pull/46 for revision changes.


Clear new equipment preview when development is unsuccessful

If you turn away to look at another tab, say, while you are making equipments, it's a bit difficult to tell whether the contents of the new equipment preview are for the current attempt or the last successful one.  Granted, you could just wait a few seconds to see the penguin but that rather defeats the purpose of having the equipment preview eh?

Actually just reading the source code I found you could close the CraftGear box by clicking on it.  Still a suggestion though.

gotcha :+1:

Or better yet, just display a "penguin" icon with "Equipment crafting failed" notification for a few seconds before it clears off.

For this issue, I would go for "display penguin icon with Equipment crafting failed text and leave it for users to close it by themselves"


feature: upgrade containerd version to v1.0.3

Ⅰ. Describe what this PR did
Upgrade containerd to make the pouchd stable.
The version of containerd will be changed from v1.0.0 to v1.0.3
Ⅱ. Does this pull request fix one issue?

fixes #1141
Ⅲ. Describe how you did it
# for the vendor
$ govendor fetch<EMAIL_ADDRESS>
Ⅳ. Describe how to verify it
It's the dependency upgrade. I have tested pouch run -it busybox /bin/sh in local and it passed.
It should be covered by CI.
Ⅴ. Special notes for reviews
NONE

Codecov Report

Merging #1148 into master will increase coverage by 0.13%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1148      +/-   ##
==========================================
+ Coverage   15.19%   15.32%   +0.13%
==========================================
  Files         173      173
  Lines        9705     9779      +74
==========================================
+ Hits         1475     1499      +24
- Misses       8125     8172      +47
- Partials      105      108       +3

Impacted Files
Coverage Δ

pkg/kernel/kernel.go
72.72% <0%> (-27.28%)
:arrow_down:

pkg/utils/utils.go
78.75% <0%> (-3.95%)
:arrow_down:

client/client.go
28.57% <0%> (-1.87%)
:arrow_down:

cli/cli.go
0% <0%> (ø)
:arrow_up:

client/volume_remove.go
100% <0%> (ø)
:arrow_up:

Please help to review if the containerd 1.0.3 would influence the current pouchd. @HusterWan
In addition, please help review the installation part to check if more improvement in the package building is needed. @Letty5411

@fuweid the following script also need to be updated, they are used to build package:
./hack/package/deb/Makefile:	wget --quiet https://github.com/containerd/containerd/releases/download/v1.0.0/containerd-1.0.0.linux-amd64.tar.gz -P $(TMP)
./hack/package/rpm/build.sh:    wget --quiet https://github.com/containerd/containerd/releases/download/v1.0.0/containerd-1.0.0.linux-amd64.tar.gz -P $TMP

@Letty5411 I have updated based on your comment. Please help me to check. Thanks

Please help me to check. Thanks

LGTM

https://github.com/containerd/containerd/pull/2186, i think upgraded containerd should contain this pr,
grpc-go has some bug in old version which used by containerd, so we should also upgrade grpc-go version.
@fuweid @allencloud WDYT?

I think upgraded containerd should contain this pr. grpc-go has some bug in old version which used by containerd, so we should also upgrade grpc-go version.

@HusterWan Actually I am not the side of using a non-released version of containerd, although the non-release version covered the grpc-go bug you mentioned.

LGTM


add handlebars templates support

fixes #7

Coverage increased (+1.02%) to 75.397% when pulling 25fe6920d027b3334989eb8f21fda073428eba52 on fature/templating into 3bb96d1ff5a427a8154747d1571bb0f452f95880 on master.


Slightly more visible and more compact ticks

nicer_ticks@591 aka 20200525.2 vs master ewma over 49 builds from 2 to 590


[Feature request] Implementing auto-update

My Usecase:
I use prefill every night to pre fill my lancache. A cronjob starts up an LXC, runs an update script, runs the prefill and shut the LXC down.
Motivation:
A version check is still implemented, but a quiet (maybe optional) autoupdate can be usefull for a headless lancache-prefill.
Maybe https://github.com/soonic6/steam-lancache-prefill-update could be implemented for auto-updates.

Implementation Tasks

[ ] Scripts

[ ] Implement Bash based update script.  https://github.com/tpill90/steam-lancache-prefill/blob/master/scripts/update.sh
[ ] Implement Powershell based update script, for Windows.  https://github.com/tpill90/steam-lancache-prefill/blob/master/scripts/update.ps1

[ ] Publish

[ ] Include update.sh in Linux, OSX, and ARM publish package
[ ] Include update.ps1 in Windows publish package

[ ] Documentation

[ ] Reference new update scripts in Updating section in readme https://github.com/tpill90/steam-lancache-prefill#updating

@tpill90 from the script that @soonic6 posted you can also hand over the current path from prefill directly to the script if that's something from interest, this is basically a install/update script on it's own.

Released in v1.6.0


Support any image format and implement proper file type detection.

Upon attempting to upload a WebP for my blog cover image, I was presented with the following error:

The image type you uploaded is not supported. Please use .PNG, .JPG, .GIF, .SVG.

By simply changing the file extension from .webp to .jpg it accepted the file, but served it with Content-Type:image/jpeg.
This raises two concerns:

Ghost arbitrarily blocks many image formats. Ghost should allow any format.

Ghost’s file type detection is primitive and can not accurately judge file types. This results in the serving of false content types.

As of posting, support for WebP is currently at the top of the Ghost wishlist.
I would recommend looking into how the program file detects file types.

Hey @SushiDude and welcome to the Ghost issue tracker on GitHub!

Ghost arbitrarily blocks many image formats. Ghost should allow any format.

It's not arbitrary, it's intentional. We try to support 80 % of the use cases which are covered with the available file formats. Feel free to open a PR for adding WebP to the list of supported files. If it is considered a valuable addition by the community the PR will be merged.
For security reasons we don't allow uploading of any file format (see: https://www.owasp.org/index.php/Unrestricted_File_Upload).

Ghost’s file type detection is primitive and can not accurately judge file types. This results in the serving of false content types.

Correct. Therefore we ask to please upload a file with the correct format and not to rename the file extension ;-). The file detection is quite primitive because it has to work with different combinations of Node.js, operating systems and browsers. Any pointers to useful libraries (maintained, no compilation required, Windows/Linux/OSX compatible) are highly appreciated.

As of posting, support for WebP is currently at the top of the Ghost wishlist.

Support for WebP is not the main subject of the item on the wish list. It asks for "Image Optimization" which is actively discussed in issue #4453.

@sebgie

It's not arbitrary, it's intentional.
For security reasons we don't allow uploading of any file format (see: https://www.owasp.org/index.php/Unrestricted_File_Upload).

This fails to make sense.  To prevent the owner and administrator of a blog from uploading a malicious file in order to protect the blog from himself? There are massive issues with this:

Why would the owner of a blog want to attack himself?
The owner already can include code in any blog post because it is Markdown which is really just HTML. The administrator could use the Code Injection feature. The person who runs the blog likely has root on the server and control over the domain.
The file upload restriction feature can be fooled by changing the file name. I doubt you even read the OWASP link that you posted, considering how you missed the massive “Weak Protection Methods and Methods of Bypassing” section. Not to mention that SVGs, which you consider to be a safe file format, can include JavaScript and CSS.

We try to support 80 % of the use cases which are covered with the available file formats.

You could support 100% of the use cases by removing this intentional security feature.

Any pointers to useful libraries (maintained, no compilation required, Windows/Linux/OSX compatible) are highly appreciated.

While I have never used it before, mmmagic appears to be a decent Node.js library. It is asynchronous and is just a binding to libmagic--which is the library that file uses. However, this has to be compiled.

Any pointers to useful libraries ... no compilation required

Ghost’s dependency tree already has a massive number of compiled libraries and programs. Why does the file type detection library need to not require compilation?

Fantastic. I look forward to your PR to improve image handling.  No dependencies with native bindings, though.

Ghost’s dependency tree already has a massive number of compiled libraries and programs.

You're going to have to back that claim up by showing your work.  Pretty sure you could run an instance of Ghost in production without any dependencies that require native bindings.

As to the original point, I agree that is is unnecessary to white-list acceptable file types. If you have security concerns, you should blacklist file-types you find to be a risk, rather than restrict functionality by only allowing those which you have decided to place in the config file.
What type of files are you concerned about?

@jaswilli

You're going to have to back that claim up by showing your work. Pretty sure you could run an instance of Ghost in production without any dependencies that require native bindings.

Off the top of my head I can think of SQlite and Node.js which requires OpenSSL, V8, zlib, and libuv which are all massive and are written in C/C++.

I look forward to your PR to improve image handling.

I never said that I was going to submit a pull request. I am not familiar with the Ghost code base and this seems like a fairly simple change; it would be better for one of the Ghost developers to implement.

Hi @SushiDude,
Please submit feature requests via our wishlist rather than through GitHub, as that allows us to measure traction. We use this list to help determine what goes into the roadmap and how to prioritise features - you'll see image optimisation, including WebP support are top of the list right now. You can also access the wishlist any time from inside the Ghost admin:
.
(screenshot from Zelda)


Can you see recent rising interest rates affect home sales? If so where?

https://www.dolthub.com/repositories/dolthub/us-housing-prices-v2
Latest housing price bounty data must contain recent sales. Mortgage interest rates have gone up massively in the past 6 months. Can you see an effect in the recent housing sale data, either in velocity or price? If so, where?

https://www.dolthub.com/blog/2022-04-13-many-faces-of-housing-market/

That's a good template :-)


miscellaneous simpler F401

Picking some commits from https://github.com/gdmcbain/scikit-fem/tree/379

Apparently that removed also stuff that's still needed. I'm fixing those.

I think the rest of the unused imports should be fixed with linter exceptions (i.e. #noqa).


VG 3979 OVerview map recently used tool persistence

Can one of the admins verify this patch?

[Current coverage][cc-pull] is 82.12%

Merging [#29][cc-pull] into [master][cc-base-branch] will decrease coverage by -<.01%

@@             master        #29   diff @@
==========================================
  Files           111        111
  Lines          7074       7080     +6
  Methods        1514       1515     +1
  Messages          0          0
  Branches       1034       1035     +1
==========================================
+ Hits           5812       5814     +2
- Misses         1262       1266     +4
  Partials          0          0

Powered by Codecov. Last updated by [0b3a9a4...b449edd][cc-compare]
[cc-base-branch]: https://codecov.io/gh/voyagersearch/navigo/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/voyagersearch/navigo/compare/0b3a9a43369f815429481c08b9f7412b12abf39b...b449eddec4b04344a79779630b0054876dbf562f
[cc-pull]: https://codecov.io/gh/voyagersearch/navigo/pull/29?src=pr


add support for type:module razzle.config.js

Uses package.json's type field to determine whether to require() or await import()
The package.json detection is modelled on getPublicUrl in razzle/packages/razzle/config/paths.js and doesn't implement the full spec described by https://nodejs.org/api/packages.html#type ("The nearest parent package.json is defined as the first package.json found when searching in the current folder, that folder’s parent, and so on up until a node_modules folder or the volume root is reached.")

Will not add to razzle core unless it is backwards compatible.

@fivethreeo await is already being used in that file (e.g. razzleOptions = await plugin.modifyOptions({) and was added in nodejs v8.
This change is backwards compatible.
In the latest commit, I noticed that that function was already requiring package.json, so this PR no longer tries to do it again.

If someone wants to opt-in to ECMAScript modules, they have to set type: "module" in package.json and convert razzle.config.js from commonjs to ECMAScript module. Had they tried using type: "module" before this PR, it would've errored because razzle was trying to require an ECMAScript module, but ECMAScript modules can only be import'ed.
There's further work to do, (e.g. setting webpackConfig.experiments.outputModule = true) so this PR alone doesn't enable ECMAScript modules, but is a step in that direction.


createRole

It seems that without github issue nothing changing here, so here we go:
Code:

$guild->createRole($opts) ->then(
function ($role) {
$this->log('updateUser', 'Create role ok. (' . $role->name . ')');
},
function (\Exception $e) {
$this->log('updateUser', 'Create role not ok. ' . $e->getMessage());
}
);

Error:

Create role not ok. An error occurred in the underlying stream

On dev-develop it will create some roles, some - dont. Also creating duplicate roles. Overall - working strange.

Can you update your project with composer update?

composer.json:

"team-reflex/discord-php": "dev-develop",

composer update:

Nothing to install or update

composer show | grep react/http-client

react/http-client                    v0.4.14             Asynchronous HTTP client library.

Any news?

I'll try reproduce this a bit later today.

Works fine for me, are you sure you are on the latest version?

updated now just before test:

Removing react/stream (v0.4.4)
Installing react/stream (v0.4.5)
Updating team-reflex/discord-php dev-develop (1651097 => 8f6d568)

Test: http://pastebin.com/pkJkcHR7
Result:

Create role ERROR (role_14) Connection closed before receiving response
Create role ERROR (role_29) Connection closed before receiving response
Create role ERROR (role_20) Connection closed before receiving response
Create role ERROR (role_30) Connection closed before receiving response
Create role ERROR (role_26) Connection closed before receiving response
Create role ERROR (role_16) Connection closed before receiving response
Create role ERROR (role_51) Connection closed before receiving response
...
Some roles ok, some - "new role".

You may be getting ratelimited. Closing due to age.


Verify state template bindings work in a unit test

Given a simple state like:
 {
  template: '
{{ name }}
',
  controller: function($scope) {
    $scope.name = 'Fred';
  }
}

I'd like to write a Karma-Jasmine unit-test that verifies that when this state is current, the view is rendered as

Fred

and not

{{ name }}

I think the missing element is that I need a way for the test to provide a  for the state to render the template into.  I guess I could do that if I ran such a test in a stand-alone page I wrote myself for that purpose, but I can't figure out how to do that when running the test with Karma.
Nevertheless, I have not been able to find any example of this, and am wondering whether such a test is even possible.  I have already covered what I want with Protractor (end-to-end), but I still think that there should be a way to test that the controller and template bindings are working properly in a unit-test first.

This is a better question for stackoverflow. Yes there should probably be examples for how to write tests for ui-router but there are quite a few guides out there already like this first one I found on google: http://nikas.praninskas.com/angular/2014/09/27/unit-testing-ui-router-configuration/
If you wanted to do a documentation pull request once you find a sufficient answer, we would gladly review and pull it in if its helpful

Yeah, I'm already in communication with Nikas.  I'll try to post what I've
found out to Stackoverflow when I get a chance.  I might also post a PR for
the Readme or a Wiki page on this.
On Tue, Aug 11, 2015 at 6:34 PM Eddie Monge<EMAIL_ADDRESS>wrote:

Closed #2164 https://github.com/angular-ui/ui-router/issues/2164.
—
Reply to this email directly or view it on GitHub
https://github.com/angular-ui/ui-router/issues/2164#event-379738891.

Hey Isiden, did you find a way for doing that?
That's exactly what I'm trying to do, but my ui-view template is always empty when I compile the view from my UT...
Thanks!


DEMO page or "djangocms-blog users" links?

There is no DEMO page, isn't it?
Is there somewhere a list of djangocms-blog users?

No currently demo page planned.
While I know a few present and past contributors of djangocms-blog, there is way to track them and no official list, but it'd nice to have one.
I'll try to come up with some ideas how to build one

Added a list of known djangocms-blog websites to the README section


Performance Improvements

I recently utilized this plugin and found it incredibly valuable for our specific use case.
However, in the process of integrating it into my project, I encountered opportunities for enhancement. I took the liberty to locally modify the plugin code to better suit our needs and would like to discuss these adjustments here. Below are the improvements I've implemented:

Asynchronous Download Method: I modified the download method to return a boolean value, indicating the success of native code execution for download of file. Additionally, developers can await the download method calls which ensures successful download before proceeding to the next line of code.

iCloud Compatibility: Following Apple's developer guidelines, apps leveraging iCloud should confine data storage exclusively within the iCloud container. Thus, it's recommended to avoid simultaneous usage of local storage and the local iCloud container. To streamline integration with Flutter, I introduced a new method within the method channel to return the iCloud container directory. This empowers developers to create or manipulate files directly within the designated location, ensuring automatic synchronization with iCloud. Consequently, this enhancement might render the upload method redundant

I believe these enhancements could greatly improve the plugin's functionality and usability across various projects. Looking forward to discussing these modifications further and collaborating on refining the plugin for broader usage.

@vishalrao8 In the process of using this plugin, I encountered some issues and it seems that the author is no longer maintaining it. Can I use the modified version of the plugin provided by you?

I have not published the modified code yet. What issue did you face?

#42 I can only know that I called it, but I cannot know whether it has finished executing because onDone is ineffective.

Can you explain your use case? Which method did you use?

await ICloudStorage.upload(
          containerId: icloudid,
          filePath: getPath(element),
          destinationRelativePath: element,
          onProgress: (stream) async {
            stream.listen(
              (progress) async {
                print(progress);
              },
              onDone: () {
                uploadcount--;
                print(uploadcount);
                print('done');
              },
              cancelOnError: true,
            );
          },
        );

await ICloudStorage.upload(
          containerId: icloudid,
          filePath: getPath(element),
          destinationRelativePath: element,
          onProgress: (stream) async {
            stream.listen(
              (progress) async {
                print(progress);
              },
              onDone: () {
                uploadcount--;
                print(uploadcount);
                print('done');
              },
              cancelOnError: true,
            );
          },
        );

I cannot see any printed content.我看不到任何打印内容。

But in fact, the file has been uploaded, and the code is valid. It's just that I cannot know when it will finish.

Ideally, you need not track progress of upload process because upload process is handled by iOS system. It may happen quickly or after some time. (Like waiting for wifi or ideal device conditions)
Your responsibility should be to just move the targeted file to local iCloud directory. Rest of process is implicit.
The code modified by me also introduces a new method which will return directory path of local iCloud container so that one can directly manipulate files in that space.
The working of this upload method is not ideal as it repeatedly deletes existing file from iCloud container directory and moves your file from and to directory, but it will still give required output.

I cannot see the file which i uploaded on the iCloud drive.
this is my code -
void upload() async {
// ignore: prefer_const_declarations
final fileName = "AvexTest.txt";
final directory = await getApplicationDocumentsDirectory();
final tempPath = "${directory.path}/$fileName";
final File  file = File(tempPath);
file.writeAsString("This is the content");
await ICloudStorage.upload(
containerId: 'iCloud.id.avex.defy',
filePath: tempPath,
destinationRelativePath: 'AvexFolder/AvexTest.txt',
onProgress: (stream) {
stream.listen(
(progress) => print('Upload File Progress: $progress'),
onDone: () => print('Upload File Done'),
onError: (err) => print('Upload File Error: $err'),
cancelOnError: true,
);
},
);
@vishalrao8 @no-chili

Are you trying to check the file via iCloud drive application on iPhone? It won't upload there unless you ask it to.
https://fatbobman.com/en/posts/in-depth-guide-to-icloud-documents/

@no-chili @SunilKividor PR has been created with code changes, you can use improved version temporarily to avoid dependency of PR merge and release. This change might resolve your issues.


Error on parsing tydom response ('NoneType' object has no attribute 'publish')

Using k-line shutters (they work fine from the delta dore app)
tydom2mqtt    | 2023-10-02 11:51:39,898 - websockets.client    - DEBUG   - % sending keepalive ping
tydom2mqtt    | 2023-10-02 11:51:39,898 - websockets.client    - DEBUG   - > PING 9b b5 87 02 [binary, 4 bytes]
tydom2mqtt    | 2023-10-02 11:51:39,987 - websockets.client    - DEBUG   - < PONG '' [0 bytes]
tydom2mqtt    | 2023-10-02 11:51:59,919 - websockets.client    - DEBUG   - % sending keepalive ping
tydom2mqtt    | 2023-10-02 11:51:59,920 - websockets.client    - DEBUG   - > PING e1 86 13 43 [binary, 4 bytes]
tydom2mqtt    | 2023-10-02 11:51:59,996 - websockets.client    - DEBUG   - < PONG '' [0 bytes]
tydom2mqtt    | 2023-10-02 11:52:17,448 - websockets.client    - DEBUG   - < BINARY 50 55 54 20 2f 64 65 76 69 63 65 73 2f 64 61 74 ... 0a 0d 0a 30 0d 0a 0d 0a [255 bytes]
tydom2mqtt    | 2023-10-02 11:52:17,451 - tydom.MessageHandler - DEBUG   - PUT /devices/data or /areas/data message detected !
tydom2mqtt    | 2023-10-02 11:52:17,454 - tydom.MessageHandler - DEBUG   - Message received detected as (msg_data)
tydom2mqtt    | 2023-10-02 11:52:17,455 - tydom.MessageHandler - INFO    - Device update (id=1694678874, endpoint=1694678874, name=Bureau, type=shutter)
tydom2mqtt    | 2023-10-02 11:52:17,456 - tydom.MessageHandler - ERROR   - Error on parsing tydom response ('NoneType' object has no attribute 'publish')
tydom2mqtt    | 2023-10-02 11:52:17,457 - tydom.MessageHandler - ERROR   - Incoming data ([{"id":<PHONE_NUMBER>, "endpoints": [{"id":<PHONE_NUMBER>, "error": 0, "data": [{"name": "position", "validity": "upToDate", "value": 100}]}]}])
tydom2mqtt    | 2023-10-02 11:52:17,459 - tydom.MessageHandler - ERROR   - 'NoneType' object has no attribute 'publish'
tydom2mqtt    | Traceback (most recent call last):
tydom2mqtt    |   File "/app/tydom/MessageHandler.py", line 360, in parse_response
tydom2mqtt    |     await self.parse_devices_data(parsed=parsed)
tydom2mqtt    |   File "/app/tydom/MessageHandler.py", line 470, in parse_devices_data
tydom2mqtt    |     await self.parse_endpoint_data(endpoint, i["id"])
tydom2mqtt    |   File "/app/tydom/MessageHandler.py", line 684, in parse_endpoint_data
tydom2mqtt    |     await new_cover.update()
tydom2mqtt    |   File "/app/sensors/Cover.py", line 73, in update
tydom2mqtt    |     await self.setup()
tydom2mqtt    |   File "/app/sensors/Cover.py", line 68, in setup
tydom2mqtt    |     self.mqtt.mqtt_client.publish(
tydom2mqtt    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tydom2mqtt    | AttributeError: 'NoneType' object has no attribute 'publish'
tydom2mqtt    | 2023-10-02 11:52:17,472 - tydom.MessageHandler - DEBUG   - Incoming data parsed with success
tydom2mqtt    | 2023-10-02 11:52:19,923 - websockets.client    - DEBUG   - % sending keepalive ping
tydom2mqtt    | 2023-10-02 11:52:19,923 - websockets.client    - DEBUG   - > PING '(8Ѷ' [text, 4 bytes]
tydom2mqtt    | 2023-10-02 11:52:19,987 - websockets.client    - DEBUG   - < PONG '' [0 bytes]

Hello,
same issue for me.

I have the same issue here.

I have the same issue here.

So I solved it, by checking my configuration.
self.mqtt.mqtt_client.publish crashes if mqtt_client is null, which means that the mqtt connection was not done.
I changed and checked that my HA mosquitto was with the right username and password (it wasn't) and now I don't have the issue anymore about this error.
(However, I still have no devices created in MQTT, but that's another story/bug, unrelated to this one.

@jbkempf thank you, it was indeed the mqtt connection. Turns out rabbitmq could not handle the "unparseable payload" thus closing connection abruptly on tydom2mqtt. I tried it on mosquitto mqtt server and it now runs fine.

@jbkempf thank you, it was indeed the mqtt connection.

😎 cool

If everything's fine, I can close the issue.


Add attrs and/or dataclasses presets to Python generator

Reason/Context
Please try answering few of those questions

Why we need this improvement? Both attrs and dataclasses provide concise and powerful data class representation. Reference: https://www.attrs.org/en/stable/why.html#data-classes
How will this change help? New help sections

Description
Please try answering few of those questions

What changes have to be introduced? Add attrs and/or dataclasses presets to Python generator
Will this be a breaking change? No
How could it be implemented/designed? -

Thanks for the feature request @tokarenko! That sounds like a good improvement 🔥 Are you willing to try and provide it?
How to contribute a new preset is still in progress, but you can get a preview here.

Thank you for welcoming my enhancement request and your suggestion to join efforts. I will not be able to help because I have no experience with Node.js and I am quite limited in time at the moment... You are doing a great job here and I am trying to use it to enhance my Python project with AsyncAPI descriptions and code generation.

@tokarenko do you have an example you can provide of an output you are looking for? Maybe based on some example input?
I would love to convert this into a good-first-issue to make it more likely to be picked up 🙂

Please check generator at https://app.quicktype.io/ with the following settings:
"Source type" = "JSON schema"
"Language" = "Python"
"Version" = "3.7"
"Classes only" = selected

@jonaslagoni Does this issue still valid? I want to work on this issue but need some guidance.

It is @ankur0904, however I cant give much. If all it is is adding @dataclass in front of the class syntax then it should be straight forward, but it all depends on how much you need to change 🙂
Here is the generic approach to solving this issue:

Determine the proper data models that you want to generate
Add a new Python preset: https://github.com/asyncapi/modelina/blob/master/docs/contributing.md#adding-a-new-preset
Adapt the preset so it generate the right output: https://github.com/asyncapi/modelina/blob/master/docs/presets.md
Add an example for the new preset: https://github.com/asyncapi/modelina/blob/master/docs/contributing.md#adding-examples
Adapt the docs

That should be it 🙂

@jonaslagoni Thanks for your detailed insight.


Support EG4 6000XP

Would love to see support for EG4 6000XP. Will download the code and see what I can do to help contribute.

If you can point me to documentation on connection type (RS232, RS485) and some details about the protocol, that would be helpful. For RS485+Modbus, if there's no documentation available, the modbus-read command can be useful to find out what registers are available

Download a release binary of wombatt for you system (windows, linux ARM/ARM64 for a Pi or linux AMD64 for intel), or build wombatt from source, then save the following lines to a file named format.txt:
u16:state
u16:pv1_voltage:V:0.01
u16:pv2_voltage:V:0.01
u16:pv3_voltage:V:0.01
u16:battery_voltage:V:0.1
u8:soc
u8:soh
u16:internal_fault
u16:pv1_power:W
u16:pv2_power:W
u16:pv3_power:W
u16:charging_power:W
u16:discharging_power:W

Now you need to connect the INV485 port (also try the 485A and 485B) to a RS485 to USB converter (i.e., something like https://www.amazon.com/Industrial-Bidirectional-Resettable-Protection-300bps-3MbpsBaudrateSupport/dp/B0B8DWLT1V/) and plug that converter to a computer.
Assuming the wombatt binary and the above file are in the same folder, and that the RS485 to USB converter shows as /dev/ttyUSB0 , run the following command:
./wombatt modbus-read -B 19200 --protocol ModbusRTU -O format.txt -p /dev/ttyUSB0 --id 1 --start 0 --count 12
If the output makes sense, we're on the right track and I'd need to make a couple of general-purpose changes to support Modbus in the monitor-inverter command, and then add a struct containing all the fields that you deem most relevant (or all?)  to a new struct that will be used to read the modbus data into and display it or send it to MQTT.

Do you have any thoughts about getting the data via an existing wireless/wired connection? Currently the device is connected to a private wired network (which is how it can send the data to the 'cloud' if I enabled it), so I wonder if there's a tcp command that can get the data.

I don't think that the dongle would expose the port directly, but you could try using 'nmap' to find open ports at the IP address assigned to the dongle and see if any of those ports might be it.
What I would try in this case is a main-in-the-middle approach. For this you need 4 RS485 to USB adapters and a Pi or other computer on which you can run commands and have the 2 adapters connected at the same time. One adapter goes to the inverter, the other adapter goes to the dongle. Then run the wombatt forward command and that will show you the data that goes back and forth between the inverter and the dongle. With a bit of luck, that data will use the same modbus protocol documented for the inverter and could be extracted without sending any actual request from the device inspecting the data.

I did confirm with EG that the WLAN adapter does NOT support getting data.
Where would you connect the RS485 port to that adapter? The only port I know of is the battery comm, but I don't think it would chat about inverter data. I wonder what port I would use...

Ah yes, I remember that part of the manual. I just need to open up mine and see where these 'meters' are at.

GOT IT! When I took the adapter cover off, there are 4 wires... blue, red, white, and black
B - black wire
A - white wire
And results...
wombatt.exe modbus-read -B 19200 --protocol ModbusRTU -O format.txt -p COM6 --id 1 --start 0 --count 12
State: 705
Pv1_voltage: 0.01V
Pv2_voltage: 133.63V
Pv3_voltage: 131.1V
Battery_voltage: 1336.7V
Soc: 50%
Soh: 48%
Internal_fault: 13361
Pv1_power: 25443W
Pv2_power: 24929W
Pv3_power: 2838W
Charging_power: 267W
Discharging_power: 0W

If the output makes sense, we're on the right track and I'd need to make a couple of general-purpose changes to support Modbus in the monitor-inverter command, and then add a struct containing all the fields that you deem most relevant (or all?)

My one comment on the output is that the actual number values are incorrect. Hopefully it is just an struct mismatch.

If the output makes sense, we're on the right track and I'd need to make a couple of general-purpose changes to support Modbus in the monitor-inverter command, and then add a struct containing all the fields that you deem most relevant (or all?)

My one comment on the output is that the actual number values are incorrect. Hopefully it is just an struct mismatch.

Right, I was about to say that some values look wrong.
Can you run another command for me?
./wombatt modbus-read -B 19200 --protocol ModbusRTU -p COM6 --id 1 --start 0 --count 40
and let me know the output. That should help me writing tests and start fetching the most interesting values from the long list of registers.
It would also be very helpful if you can take a look at the table in https://eg4electronics.com/backend/wp-content/uploads/2023/10/EG4-6000XP-MODBUS-Communication-Protocol.pdf at the table under "3. Register Mapping Table 1) Input register". For the first 40 registers, which will be fetched by the command above, try to provide as many known values as possible. I.e., if you know by other means the value of SOC and SOH, total PV prouction per string, their voltage, charging or discharging power, etc... This will help me narrow down any issues with the struct alignment.
Additional tests like trying ID 2 if you have a second inverter or seeing if lowering the baud rate to 9600 produces different values might also be helpful.
Thanks!

I thought I would get clever and write the hex int values out to see if I could correlate them, but it seems to have made it even worse. Here are the first 20:
00 | 0xC102 | 49410 | 002 | 193
01 | 0x0100 | 00256 | 000 | 001
02 | 0x3334 | 13108 | 052 | 051
03 | 0x3633 | 13875 | 051 | 054
04 | 0x3734 | 14132 | 052 | 055
05 | 0x3032 | 12338 | 050 | 048
06 | 0x3134 | 12596 | 052 | 049
07 | 0x6363 | 25443 | 099 | 099
08 | 0x6161 | 24929 | 097 | 097
09 | 0x160B | 05643 | 011 | 022
10 | 0x0B01 | 02817 | 001 | 011
11 | 0x0000 | 00000 | 000 | 000
12 | 0x1802 | 06146 | 002 | 024
13 | 0x0701 | 01793 | 001 | 007
14 | 0x1425 | 05157 | 037 | 020
15 | 0x0100 | 00256 | 000 | 001
16 | 0x0100 | 00256 | 000 | 001
17 | 0x0000 | 00000 | 000 | 000
18 | 0x0000 | 00000 | 000 | 000
19 | 0x2600 | 09728 | 000 | 038

Got it!
The command you sent is reading the holding registers, not the input registers. I'm not sure what command to issue for those, but I found a modbus c# library and read the input registers and got data that is actually meaningful (I was able to match the serial number of register 115, length 5) (although the bytes are reversed).

Ok, good grief.. sorry to spam you. I finally got the numbers to match. I should not reverse the hex values even though I must reverse for the serial number -- no idea why!
This reading is taken at night-- and I think a lot of 0s because the inverter is UTC so new day.
No   |  AB-Hex  |  AB-Int |  A-Int  |  B-Int
000  |  0x0040  |  00064  |   000   |   064 // correct, 0x40 is "night" mode (battery only); Day will switch to C0 (second hex)
001  |  0x0000  |  00000  |   000   |   000
002  |  0x0000  |  00000  |   000   |   000
003  |  0x0F49  |  03913  |   015   |   073 // there is no PV3, I can only assume that it just makes stuff up
004  |  0x020D  |  00525  |   002   |   013 // correct, battery voltage is 52.5v (AB-Int)
005  |  0x0057  |  00087  |   000   |   087 // correct, SOC is 87% (B-Int)
006  |  0x0000  |  00000  |   000   |   000
007  |  0x0000  |  00000  |   000   |   000
008  |  0x0000  |  00000  |   000   |   000
009  |  0x0000  |  00000  |   000   |   000
010  |  0x0000  |  00000  |   000   |   000
011  |  0x009A  |  00154  |   000   |   154 // correct, discharge is around ~150w (AB-Int)
012  |  0x0000  |  00000  |   000   |   000
013  |  0x0000  |  00000  |   000   |   000
014  |  0x1801  |  06145  |   024   |   001
015  |  0x0000  |  00000  |   000   |   000
016  |  0x0000  |  00000  |   000   |   000
017  |  0x0000  |  00000  |   000   |   000
018  |  0x005A  |  00090  |   000   |   090
019  |  0x0000  |  00000  |   000   |   000
020  |  0x095F  |  02399  |   009   |   095
021  |  0x2740  |  10048  |   039   |   064
022  |  0x5052  |  20562  |   080   |   082
023  |  0x176D  |  05997  |   023   |   109
024  |  0x0092  |  00146  |   000   |   146
025  |  0x00B6  |  00182  |   000   |   182
026  |  0x0000  |  00000  |   000   |   000
027  |  0x0000  |  00000  |   000   |   000
028  |  0x0000  |  00000  |   000   |   000
029  |  0x0000  |  00000  |   000   |   000
030  |  0x0000  |  00000  |   000   |   000
031  |  0x0000  |  00000  |   000   |   000
032  |  0x0000  |  00000  |   000   |   000
033  |  0x0000  |  00000  |   000   |   000
034  |  0x0003  |  00003  |   000   |   003
035  |  0x0002  |  00002  |   000   |   002
036  |  0x0000  |  00000  |   000   |   000
037  |  0x0000  |  00000  |   000   |   000
038  |  0x0F51  |  03921  |   015   |   081
039  |  0x0E88  |  03720  |   014   |   136
...
096  |  0x0004  |  00004  |   000   |   004  //4 is correct
097  |  0x0190  |  00400  |   001   |   144  //400 correct

The first reply that you posted, starting with bytes "02 c1" seems like some kind of error response because the second byte has the highest bit set to 1.
You are correct and I should be using the 'Read Input Register' (0x04) command instead of the 'Read Holding Register' (0x03) command. That's an easy fix.
You're getting somewhere in this last message. How did you get that data? Specifically I'd like to know all the bytes sent to request it and all the bytes that were received, not just the register data bytes.

Interesting note on the 0xC1, it should be C0. I'll have to pull a fresh check tomorrow when charging and see if it goes back to C0. I think it will; I had the battery comm messed up. An earlier communication had it as "00 C0".
I got the data the same way you are getting it, just using the input rather than holding registers. If I pull the "holding" ones I get the exact match with what wombatt returns.
I am using FluentModbus (nuget C# library);
using var client = new ModbusRtuClient()
{
    BaudRate = 19200,
    StopBits = StopBits.One,
    Parity = Parity.None
};
client.Connect("COM6", ModbusEndianness.LittleEndian);
var registers = client.ReadInputRegisters(0x01, 0, 40).ToArray();

Ok, to follow up from last night, my holding numbers match exactly with your wombatt command. So whatever you are doing, if you change it to input registers (0x04), you'll probably get the same data below.
I dumped the data from 138 registers (and snipped my serial number part out). For the data I could identify and matched correctly, I put a comment on the line with name=value. Some of the lines make no sense (marked with ?) -- weird values that seem wild. Both "L1" and "L2" eps output voltage should be 120/121 volts, but didn't find that below.
Data at 2024-02-20T14:42:56:
00 C0 09 CA 00 00 0F 80 02 14 00 58 00 00 01 54 00 00 00 00 00 EF 00 00 00 00 00 00 18 01 00 00 00 00 00 00 00 64 00 00 09 78 27 40 20 02 17 71 00 26 00 26 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 0B 00 0C 00 00 00 00 0F 78 0E AF 00 E3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 93 00 00 00 50 00 00 00 79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1F 00 2E 00 31 00 2B 00 00 36 CA 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 3A 98 75 30 02 30 00 00 00 00 00 00 C0 00 00 00 00 00 12 00 AB BF 00 00 60 1C 04 A5 00 03 00 04 01 90 01 5E 00 00 00 00 0D 09 0C FD 00 DC 00 6E 02 16 00 01 02 13 00 00 00 00 00 00 00 00 00 00 01 04 00 00 .. .. .. .. .. .. .. .. .. .. 07 CA 00 00 00 00 36 E0 02 00 7C C1 00 14 04 AF 04 BA 00 10 00 15 00 10 00 18 00 02 00 0B 00 10 00 00 00 6C

No   |  AB-Hex  |  AB-Int |  A-Int  |  B-Int
000  |  0x00C0  |  00192  |   000   |   192  // state = PV off-grid (0xC0)
001  |  0x09CA  |  02506  |   009   |   202  // vpv1 = 250.6v
002  |  0x0000  |  00000  |   000   |   000  // vpv2 = 0
003  |  0x0F80  |  03968  |   015   |   128  // vpv3 = ???? (does not exist)
004  |  0x0214  |  00532  |   002   |   020  // vbat = 53.2v
005  |  0x0058  |  00088  |   000   |   088  // SOC = 88%
006  |  0x0000  |  00000  |   000   |   000  // internal fault code = 0 (none)
007  |  0x0154  |  00340  |   001   |   084  // Ppv1 = 340w
008  |  0x0000  |  00000  |   000   |   000  // Ppv2 = 0
009  |  0x0000  |  00000  |   000   |   000  // Ppv3
010  |  0x00EF  |  00239  |   000   |   239  // Pcharge = 239w
011  |  0x0000  |  00000  |   000   |   000  // Pdisch = 0
012  |  0x0000  |  00000  |   000   |   000  // VacR
013  |  0x0000  |  00000  |   000   |   000  // VacS
014  |  0x1801  |  06145  |   024   |   001  // VacT  ???
015  |  0x0000  |  00000  |   000   |   000  // Fac
016  |  0x0000  |  00000  |   000   |   000  // Pinv
017  |  0x0000  |  00000  |   000   |   000  // Prec
018  |  0x0064  |  00100  |   000   |   100  // IinvRMS ??
019  |  0x0000  |  00000  |   000   |   000  // PF
020  |  0x0978  |  02424  |   009   |   120  // VepsR  ???
021  |  0x2740  |  10048  |   039   |   064  // VepsS ???
022  |  0x2002  |  08194  |   032   |   002  // VepsT  ???
023  |  0x1771  |  06001  |   023   |   113  // Feps = 60.01Hz
024  |  0x0026  |  00038  |   000   |   038  // Peps
025  |  0x0026  |  00038  |   000   |   038  // Seps
026  |  0x0000  |  00000  |   000   |   000  // Ptogrid = 0
027  |  0x0000  |  00000  |   000   |   000  // Ptouser = 0
028  |  0x0002  |  00002  |   000   |   002  // Epv1_day = 0.2kWh
029  |  0x0000  |  00000  |   000   |   000  // Epv2_day = 0
030  |  0x0000  |  00000  |   000   |   000  // Epv3_day = 0
031  |  0x0000  |  00000  |   000   |   000  // Einv_day = 0
032  |  0x0000  |  00000  |   000   |   000  // Erec_day = 0
033  |  0x0000  |  00000  |   000   |   000  // Echg_day = 0
034  |  0x000B  |  00011  |   000   |   011  // Edischg_day = 1.1kWh
035  |  0x000C  |  00012  |   000   |   012  // Eeps_day = 1.2kWh
036  |  0x0000  |  00000  |   000   |   000  // Etogrid_day = 0
037  |  0x0000  |  00000  |   000   |   000  // Etouser_day = 0
038  |  0x0F78  |  03960  |   015   |   120  // Vbus1  ??
039  |  0x0EAF  |  03759  |   014   |   175  // Vbus2  ??
040  |  0x00E3  |  00227  |   000   |   227  // Epv1_all L=22.7kWh
041  |  0x0000  |  00000  |   000   |   000
042  |  0x0000  |  00000  |   000   |   000
043  |  0x0000  |  00000  |   000   |   000
044  |  0x0000  |  00000  |   000   |   000
045  |  0x0000  |  00000  |   000   |   000
046  |  0x0000  |  00000  |   000   |   000
047  |  0x0000  |  00000  |   000   |   000
048  |  0x0000  |  00000  |   000   |   000
049  |  0x0000  |  00000  |   000   |   000
050  |  0x0093  |  00147  |   000   |   147  // Echg_all L=14.7kWh
051  |  0x0000  |  00000  |   000   |   000
052  |  0x0050  |  00080  |   000   |   080
053  |  0x0000  |  00000  |   000   |   000
054  |  0x0079  |  00121  |   000   |   121  // Eeps_all L=12.1kWh
055  |  0x0000  |  00000  |   000   |   000
056  |  0x0000  |  00000  |   000   |   000
057  |  0x0000  |  00000  |   000   |   000
058  |  0x0000  |  00000  |   000   |   000
059  |  0x0000  |  00000  |   000   |   000
060  |  0x0000  |  00000  |   000   |   000
061  |  0x0000  |  00000  |   000   |   000
062  |  0x0000  |  00000  |   000   |   000
063  |  0x0000  |  00000  |   000   |   000
064  |  0x001F  |  00031  |   000   |   031  // Tinner=31C
065  |  0x002E  |  00046  |   000   |   046  // Tr1=46C
066  |  0x0031  |  00049  |   000   |   049  // Tr2=49C
067  |  0x002B  |  00043  |   000   |   043  // TBat=43C
068  |  0x0000  |  00000  |   000   |   000
069  |  0x36CA  |  14026  |   054   |   202
070  |  0x0005  |  00005  |   000   |   005
071  |  0x0000  |  00000  |   000   |   000
072  |  0x0000  |  00000  |   000   |   000
073  |  0x0000  |  00000  |   000   |   000
074  |  0x0000  |  00000  |   000   |   000
075  |  0x0000  |  00000  |   000   |   000
076  |  0x0000  |  00000  |   000   |   000
077  |  0x0000  |  00000  |   000   |   000
078  |  0x0000  |  00000  |   000   |   000
079  |  0x0000  |  00000  |   000   |   000
080  |  0x0002  |  00002  |   000   |   002  // bat type,branch = 02
081  |  0x3A98  |  15000  |   058   |   152  // MaxChgCurr=150A
082  |  0x7530  |  30000  |   117   |   048  // MaxDischCurr=300A
083  |  0x0230  |  00560  |   002   |   048  // ChargeVoltRef=56.0
084  |  0x0000  |  00000  |   000   |   000  // DischgCutVolt=0
085  |  0x0000  |  00000  |   000   |   000
086  |  0x0000  |  00000  |   000   |   000
087  |  0xC000  |  49152  |   192   |   000
088  |  0x0000  |  00000  |   000   |   000
089  |  0x0000  |  00000  |   000   |   000
090  |  0x1200  |  04608  |   018   |   000
091  |  0xABBF  |  43967  |   171   |   191
092  |  0x0000  |  00000  |   000   |   000
093  |  0x601C  |  24604  |   096   |   028
094  |  0x04A5  |  01189  |   004   |   165
095  |  0x0003  |  00003  |   000   |   003
096  |  0x0004  |  00004  |   000   |   004
097  |  0x0190  |  00400  |   001   |   144  // BatCapacity=400Ah
098  |  0x015E  |  00350  |   001   |   094  // BatCurrent_BMS=3.5A
099  |  0x0000  |  00000  |   000   |   000
100  |  0x0000  |  00000  |   000   |   000
101  |  0x0D09  |  03337  |   013   |   009
102  |  0x0CFD  |  03325  |   012   |   253
103  |  0x00DC  |  00220  |   000   |   220
104  |  0x006E  |  00110  |   000   |   110
105  |  0x0216  |  00534  |   002   |   022
106  |  0x0001  |  00001  |   000   |   001
107  |  0x0213  |  00531  |   002   |   019
108  |  0x0000  |  00000  |   000   |   000
109  |  0x0000  |  00000  |   000   |   000
110  |  0x0000  |  00000  |   000   |   000
111  |  0x0000  |  00000  |   000   |   000
112  |  0x0000  |  00000  |   000   |   000
113  |  0x0104  |  00260  |   001   |   004
114  |  0x0000  |  00000  |   000   |   000
..snip..
120  |  0x07CA  |  01994  |   007   |   202  // VBusP  ??
121  |  0x0000  |  00000  |   000   |   000
122  |  0x0000  |  00000  |   000   |   000
123  |  0x36E0  |  14048  |   054   |   224  // no generator; numbers odd
124  |  0x0200  |  00512  |   002   |   000
125  |  0x7CC1  |  31937  |   124   |   193
126  |  0x0014  |  00020  |   000   |   020
127  |  0x04AF  |  01199  |   004   |   175
128  |  0x04BA  |  01210  |   004   |   186
129  |  0x0010  |  00016  |   000   |   016  // Peps_L1N=16w
130  |  0x0015  |  00021  |   000   |   021  // Peps_L2N=21w
131  |  0x0010  |  00016  |   000   |   016  // Seps_L1N=16VA
132  |  0x0018  |  00024  |   000   |   024  // Seps_L2N=24VA
133  |  0x0002  |  00002  |   000   |   002  // EepsL1N_day=0.2kWh
134  |  0x000B  |  00011  |   000   |   011  // EepsL2N_day=1.1kWh
135  |  0x0010  |  00016  |   000   |   016
136  |  0x0000  |  00000  |   000   |   000
137  |  0x006C  |  00108  |   000   |   108

Note to self: use the changes in commit #846d4476f30dc742b20252bd459f641a57dbdcc4 to add a new protocol for monitor-inverters


How to increase torque saturation threshold on ETH robots

Hi,
I would like to increase the threshold of torque saturation of iCubHeidelberg01. Where exactly should this be done?
There is a "TorqueMax" in the configuration xml files under the mechanicals folder, is this the right parameter to change?
Thanks!

@randaz81

I tried to increase the TorqueMax and restarted the robot but it seems that nothing changed.

I checked the source code (https://github.com/robotology/icub-main/blame/f10921a6889ff19ead17e123672ad6f37892565a/src/libraries/icubmod/embObjMotionControl/embObjMotionControl.cpp#L1383) and apparently (as far I can see) TorqueMax is the right parameter. Perhaps @barbalberto knows more.

@hu-yue may you try to do the same test with a lower saturation limit?

The TorqueMax related to the reading of values, but is not related to the maximum torque the motor can produce.
Can you post the output of the robotinterface to see the exact error message?

Ok, I tried with the following limits:

50, the saturation warning was again on 24. In this case, the warning appeared several times before the joint went to hw fault.
24 (default that was in the file), saturation on 24. In this case, the warning appeared and the joint went immediately on hw fault.
20, saturation on 20. As the first case, also in this case the warning appeared several times before hw fault.

The exact warning we get is:
embObjMotionControl::updateMeasure() torque measure saturated to +20.0000 on joint 1, count: 1198

The errors following this are:
from BOARD 6, src LOCAL, adr 0, time 284s 770m 577u: (code 0x0200000c, par16 0x0001 par64 0x0000000100020000) -> MC: generic motor error (see 64 bit mask parameter) + INFO = NO MORE

Unable to set the control mode of board 6 joint 1 in HW_FAULT

The experiment is the one described in my previous comment, the joint that goes on hw fault is left hip roll.

The reported error is a I2T limit fault, i.e. the motor is absorbing too much current - it is a thermal protection.

Is this a new feature? It never happened before

So, they are two different problems:

the saturation cannot be increased above  24, but it can be decreased. This is being investigated;
the joint runs into HF because of the - incomprehensible -  error @marcoaccame @ale-git

from BOARD 6, src LOCAL, adr 0, time 284s 770m 577u: (code 0x0200000c, par16 0x0001 par64 0x0000000100020000) -> MC: generic motor error (see 64 bit mask parameter) + INFO = NO MORE

As for the first, the warning message is
embObjMotionControl::updateMeasure() torque measure saturated to +20.0000 on joint 1, count: 1198

but the joint 1 may be that of any part, e.g. that of the ankle. @hu-yue, may you increase the limit of all the joints' leg? Also, @barbalberto has just added the info on the part, so if you can update  icub-main before testing again it would be great :)

No, it is a protection that has always been implemented in the motor board... have you ever tried the same task with the other leg? Maybe some hardware problem in the motor has arised.

In light of the above,  @hu-yue, can you open another issue on  icub-support , e.g.  Weird hardware fault ?

I never tried with the other leg. I cannot exclude the possibility of motor problems, lately the robot has been used much more than before.
@DanielePucci I will open another issue for the hw fault.

The correct way to change the torque measure saturation threashold is to modify the value
TorqueMax in the config file under
robotname/hardware/mechanicals/part*.xml

Are we sure that the parameter TorqueMax should be under mechanicals? It is not really clear to me why a torque is considered as a mechanical part.

I would say that the maximum torque is related to the overall mechanical structure of the joint group. This includes the motor but also the motor shaft, the bearings and other optional components such as the tendons. If TorqueMax refers only to motors than it should go in the motorSpecs folder.

cc @marcoaccame
What about the EMS number representation?


Periodic task run (cron)

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
I'd like to be able to configure periodic execs for a given template + set of input.
Describe the solution you'd like
A clear and concise description of what you want to happen.
Periodic execs definition:

every X minute/hour/day
or everyday at 3pm
or every 3rd of each month at 2pm
or ...
with template: create-new-thing-XXX
with inputs:
foo: yyy
baz: xxxx
bar: zzzz

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

A Cron job like experience can already be achieved with a task (http request to the http://localhost:8081/task) endpoint within the template to schedule the next execution. The parameters of the current execution can be passed through to the next schedule via go template syntax in the body of the request, e.g.
scheduleNextJobExecution:
    description: Schedule next job execution
    action:
      type: http
      configuration:
        url: http://localhost:8081/task
        method: POST
        body: '{"delay": {{ .input.delay }}, "input": {{ toJson .input }}, "template_name": "template-name" }'
    conditions:
    - type: skip
      if:
      - value: '{{ .input.enable_reschedule }}'
        operator: EQ
        expected: false
      then:
        this: DONE
      message: No rescheduling

The timer functionality e.g. hourly, can be achieved with a delay of "1h".


This isn't an issue per se, just an observation I would like clarification on.
If I use  then the height of the row is set to the minimum required to show the content.  If size is set to 0 then there is additional padding.  Using -1 is very useful but is it safe to use?
The same behaviour occurs when using
Thanks,
Railton.

This has to be in the docs :)


Preflight Checklist

[X] I agree to follow the Code of Conduct that this project adheres to.
[X] I have searched the issue tracker for an issue that matches the one I want to file, without success.

Problem Description
现在项目归属用户之间无法迁移，如果要迁移则必须重新安装agent，有点麻烦。
Proposed Solution
希望可以在后台在不更改agent的情况下增加一键项目归属迁移的功能，例如通过超级管理员账号将A账户的项目直接迁到B账户的项目中。
Alternatives Considered
No response
Additional Information
No response

The open source version is focused on detection and has a lower priority for management-related functionality


No responding action (printing, ...Etc)

Hi,
i'm using the lib version 3.0a9.dev26+g84a97e5-py3.6.egg. And i have the same kind of issue using a PL2303 USB to Serial port Adapter.
In my case even if the is_online() methoid return correctly True, when i use another method like text to send a string. Nothing happens and no error is return.
Do you have any clue to solve my issue ?
I'm connection using this command :
from escpos import *
p = printer.Usb(0x067b,0x2303,None,0,0x83,0x02)
p.text("anefoanefan")

If you want to be complete sure, that you are actually sending something, you could connect a serial adapter to your serial adapter and listen to it with a terminal program.
Otherwise make sure that your printer is actually capable of understanding escpos and on some printers you have to send a newline before anything happens.
Does any of the older versions work for you? (Just to make sure that this is not a regression in the library)

hi i found a solution to interact with the device with this library by asking more information to the provider of the device. thanks for your answer.
In that case with PL2303 adapter (USB to Serial). we need to use Serial class instead of Usb and connect use the ttyUSB0 and it works.


Expose ProgressLocation.Dialog as part of the extension host API

Pull request for #81400

 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.:x: kcaze sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.

Should this be in the '.proposed' file?

@jrieken thoughts?

I actually agree with the comment from https://github.com/microsoft/vscode/issues/81400#issuecomment-535593631 that there should be no reason that an extension has to block the UI to show progress.


Plex-Home again broken

Plex-Home is again broken.. it worked a while, but now i tested it again with the following error:

401 Client Error: Unauthorized for url: http://localhost:32400/library/sections/?X-Plex-Token=QL4hXXXXXa9H4wxXXXRxnf&"

This is flexget repo not Plex?

Closing as it seems invalid, open it again if you don't agree

?!?
Flexget can't connect to plex anymore (again), when Plex-Home is activated. Why should Plex work on your implementation? :D Your Plugin is broken again.. nothing more, nothing less.

The plugin page clearly shows it's not supported on plex home. If you want the support then please open a PR. I don't think that plugin is heavily used.

I'm fairly certain this is security change in the behavior of Plex 1.1.3.  Previously, Plex required authentication for all access to the server when using Plex Home.
However with the recent 1.1.3 update, this is now the default behavior for all Plex servers.  It appears that this can be mitigated by adding <IP_ADDRESS>/<IP_ADDRESS> to the list of IPs allowed without auth in the Plex server settings.  However, this has been unsuccessful in fixing the issue for me.

If you fixed it yourself please consider submitting a PR for it

Just to clarify, fixing it simply involved updating my Flexget config.  Nothing needed to be changed in Flexget itself.  I just posted to provide info for others who may be having the same problem.
This issue should be closed.

hm.. thats strange. i always had "username" and "password" in my config .. and i already tried to allow <IP_ADDRESS> in Plex. But anyway, i switched my whole config to trakt and don't need plex anymore..^^

When I try curl http://<IP_ADDRESS>:32400/library/sections the Plex log file indicates that the whitelist is being ignored for some reason.

I believe that means that the whitelist is being ignored for a request from the private IP address block <IP_ADDRESS>/8, not that it's being ignored entirely. (Though the comment in the support article is...odd.)
Anyway, I just tested now with Plex v1.4.1 and Plex Home and putting user/pass in the config resolves the issue. I agree, this issue should be closed.


Older RubyGems and Ruby 2.0.0

It started as an experiment based on @pcarranza's findings and #32, but I wanted to see if older RubyGems support and Ruby 2.0.0 support was reasonable to do. If we accept this, I think we should update #31 to include Ruby 2.0.0.

:+1:
I wonder if it makes sense to just use a tempfile all along, this is just for the push case, so it is quite an isolated use case already.


Dropdown not working witn Reactstrap v8 and Bootstrap v4

What is happening?

I followed the documentation here https://deploy-preview-2356--reactstrap.netlify.app/components/dropdowns/
and i cannot make it to work. I need to work on v8 because I am working on an old project and upgrading to v9 is not in our choices as it will be time consuming and will affect lots of features in the project
The problem is the menu is not appearing, theres no error in the console or whatever

What should be happening?
Should work just like in the documentation
Error message in console
None
Code
Example code is here
https://stackblitz.com/edit/react-16-test-c7uiil?file=index.js

You've to use this.setState to set the state. this.setState({ dropdownIsOpen: !this.state.dropdownIsOpen}) inside the toggle function. React does not rerender if [setState](this.setState({ dropdownIsOpen: !this.state.dropdownIsOpen})) is not used.
Change toggle function to this:
toggle() {
    this.setState({ dropdownIsOpen: !this.state.dropdownIsOpen });
    console.log(this.state);
 }


Changing static user feed to dynamic

Changing code to from using a static (hard coded) value of user_feed which essentially uses the user actor to allow the model binding to use whatever is set in the model under activityActorMethodName(). This will allow anyone using a feed other than user to have automatic activities created/deleted with those actions.
I tested this locally and it works as intended. Both regular user feeds and any added feeds will now auto create and delete activities.
Fixes https://github.com/GetStream/stream-laravel/issues/84

Thank you for the PR! I see your point but this approach will break the library (the user feed group is a configuration parameter, with the new code this will change the feed group used and break most apps). My recommendation is to write a custom manager and change this logic there (see feed_manager_class config entry)


Badge Request: crates.io total downloads of an author

📋 Description
This badge shows the total downloads of all the crates that an author publishs.

🔗 Data
https://crates.io/api/v1/users/{user_id}/stats
It is a public API.
Example: https://crates.io/api/v1/users/3618/stats
{"total_downloads":6096699151}

🎤 Motivation
Showing that this crate author is trustworthy because of high total downloads.

Sounds reasonable, especially since there's already an API for it. I wouldn't personally conflate download numbers as inherently implying trust, but certainly seems like a badge we can incorporate if someone is willing to work on it.


Update and fix the dependencies in the development env

As mentioned in #7, I am trying to update and fix the dependencies of the development environment for testing cases. Expecting this can help speed up the processing of setting up Conda when running tests.

So far, my conclusion is similar to MaciejSkrabski in PR #7.
I only had success with specified Conda channels that indeed speeds up the testing process. I also tried to specify both channels and versions of dependencies but failed. Even only appointing the minimum versions did not pass this test run, all python 3.7 cases failed when setting up Conda, but 3.9 cases were all fine. Dependency version parsing seems can be affected by different versions of python.
I'm not going to merge this PR, but rather take it as a playground for testing.

I'm closing this PR due to the problem has been solved in the latest release v0.0.10. Please feel free to reopen it if anyone meets the same issue again.


Potentially have Resolver.resolve return a ModuleType

Was talking to @bartlomieju today so this is a quick summary of the discussion. For https://github.com/denoland/deno/issues/12648 we'll need a way to identify if .js/MediaType::JavaScript files are CJS or MJS. This can be determined a number of ways in node (ex. a package.json having say "type": "module") which is information that's known by the node compat resolvers in the CLI. Perhaps it would be useful to introduce a ModuleType enum that has members ModuleType::Cjs & ModuleType::Mjs and the Resolver.resolve method could return that value which would then be stored in the graph.

I would prefer something just like a field named kind (type is always a pain in Rust, and actually a bit "wrong" label) and a value like:
enum ModuleKind {
  Amd,
  CommonJs,
  Esm,
  Script,
  SystemJs,
  Umd,
}

While I don't believe swc currently supports AMD/SystemJs/UMD, tsc does, and we should accomodate everything that we likely would be able to understand.  That doesn't mean we wouldn't eventually able to do dependency analysis on AMD and SystemJS though.  We could easily contribute that dependency analysis up stream though.
The biggest question I have is how this would be used.  I assume the use case is to interrogate the graph when loading a module to determine how it should be loaded?

I was just in the code on another purpose... we would need to consider how the above would related to this, and whether we would merge all of this into a single tagged enum, or restructure it in some way so that EsModule (the existing "code" struct):
#[derive(Debug, Clone, Serialize)]
#[serde(untagged)]
pub enum Module {
  Es(Box<EsModule>),
  Synthetic(Box<SyntheticModule>),
}

All the above would be effectively the same struct as EsModule but just with a tag.  Need to think about it a bit more.

The biggest question I have is how this would be used. I assume the use case is to interrogate the graph when loading a module to determine how it should be loaded?

@bartlomieju and I discussed. It is used in the situation where when loading the module into a runtime, it needs to be interrogated, and for example if an ESM module is loading a CJS module, it needs to go through a process to "convert" the CJS module to an ESM module on the fly.

This should be named ModuleKind instead of ModuleType as the latter is already used in deno_core.

I've started working on this... I am going to collapse everything into a single Module struct with a ModuleKind.


Git pre-commit hook enforces an old Marathon version

After committing an update to the universe, I noticed that the current Marathon version was automatically set to 0.13.0 instead of the correct 0.15.2.
The issue seems to be this call to sorted, which sorts on string rather than int values.

version-1.x branch is deprecated. This issue doesn't affect version-2.x or version-3.x


Update black to non pre-release version

Motivation and Context
Upgrade black to 22.1.0 consistently with https://github.com/kedro-org/kedro/issues/1327.
How has this been tested?

I have run black on the entire repo. Notice that some files return an error because of the jinja tags which are not valid python.
I also manually create project from each starter and run black and one single file is sometimes modified: the setup.py because the length of line with the entry point depends on the length of the project, which we don't know in advance. There are not other modifcation.
As for the original repo, I did NOT change black version in test_requirements.txt. Should I?

Checklist

[X] Opened this PR as a 'Draft Pull Request' if it is work-in-progress
[ ] Assigned myself to the PR -> I don't have the right to do it
[ ] Added tests to cover my changes -> should I create a test to check if the template is "black valid"? What should I do for the lines which are splitted depending on the length of the project name?

Thanks very much for doing this @Galileo-Galilei! And especially for your diligent testing.
In response to your points:

yes please to updating test_requirements.txt - I don't think it will have any practical impact but will just help keep things consistent
I've assigned you to the PR. That's weird you weren't able to - I guess we'll need to check the repo permissions
no need to create a test to check that files are correctly formatted because we actually already have one which automatically does exactly what you did manually: https://github.com/kedro-org/kedro-starters/blob/main/features/lint.feature. The issue with line breaks depending on the length of cookiecutter variables isn't a problem (hopefully) because when we do kedro new for each starter we use a config file to provide values for the cookiecutter variables: https://github.com/kedro-org/kedro-starters/blob/main/features/steps/run_steps.py#L9

The problem here is that for some reason your PR hasn't triggered any of our CI checks. You should be seeing something like this:

I think @MerelTheisenQB might know what the solution is here to get the checks to execute on this PR.
Also N.B. @lorenabalan I advised that this PR should go into your 0.18.0 branch since it relies on the recently bumped click version requirement, which is only in develop. Hope that's right.


Handle wb connection error

Purpose
Adding error handling for local development
Changes
When calling File.touch, if waterbutler is not running, catch the ConnectionError and return None so that waterbutler does not always need to be running in order to view projects on the OSF.

Pass finished. My one concern is noted above.