Dagster asset etl

PR Checklist
Before requesting a review of your pull request, please make sure you've done the
following:

[ ] Merge the most recent version of dev (or the appropriate upstream branch) into
your branch and resolved any merge conflicts. You may need to do this several
times over the course of a PR as dev changes frequently.
[ ] Verify that all of the CI checks on your PR are passing. See
Running Tests with Tox
for details on how to run the full test suite locally if you need to debug a
particular failure.
[ ] Ensure that the docstrings for any new modules, classes, functions, or methods are
descriptive enough for developers and users to understand your code.
[ ] If you expanded data coverage or changed the outputs, ensure that the full
data validation tests
pass locally on a fresh DB.
[ ] If you've added new functions or classes, ensure that they have at least basic
unit tests.
[ ] If you've added new analyses, make sure they include defensive sanity checks that
will catch unexpected data issues.
[ ] Update the
release notes
to reflect your changes. Make sure to reference the PR and any related issues.
[ ] Do your own review of the PR. Add comments highlighting areas where you have
questions you'd like reviewers to answer, known issues, solutions you're
unsatisfied with, or other things that deserve special attention from the
reviewer.

Wow @bendnorman super cool! This will be a huge improvement in all of our lives. I had fun playing around with the UI and everything worked pretty well for me. I left a few comments in response to your comments. Most of your TODOs felt pretty on point with the feedback I'd have for you just from my initial poking around. In particular, I think allowing for loading subsets of the glue tables (and some of the other multi assets). It doesn't take very long to create all the glue tables but I do think it would be nice to load subsets. Alternatively, separating out into different assets would also make the DAG more readable in the UI and makes more sense with the actual dependencies.

start using database migrations with something like alembic

I think that moving towards database migrations seems like a nice thing to have. Maybe doesn't need to happen right alongside the Dagster refactor, but generally having schema changes more explicitly version controlled would probably be really nice for any PUDL users.

Ok! The full ETL has been converted to dagster.
Setup

Recreate your pudl env to install dagster
I recommend opening up your .pudl.yml and updating the pudl_out value to a temporary directory so playing around on this branch doesn't mess with your existing data in your pudl-work directory. (P.S. the location of pudl_in and pudl_out can be configured using dagster, but I figured changing .pudl.yml is more familiar for now.)
To start dagit, dagster's UI, run

dagit -m pudl.etl -m pudl.ferc_to_sqlite

Dagit is the main method of interacting with dagster and running the ETL.

To confirm dagit is running, visit http://localhost:3000/. If you click the hamburger button in the upper left you'll see two folders pudl.etl and pudl.ferc_to_sqlite. These two portions of our ETL are separate because they use different dagster concepts. pudl.etl uses assets, which are a declarative approach to data processing. This allows you to link data tables together instead of linking code the generates the tables. pudl.ferc_to_sqlite uses dagster's imperative concept called ops because the FERC tables aren't known until the data has been extracted from the dbf and xbrl files see #1975.
Click on the ferc_to_sqlite_fast job. This job creates the raw ferc databases for the most recent years of data. To run the job click "Launchpad" then "Launch Run". Once the job is complete, check your pudl_out directory to make sure the data was created.
Once the raw FERC databases are created, click on the hamburger button again and click on etl_fast job. You can zoom in on the DAG to explore all of the data dependencies in PUDL. To create the pudl database, click "Materialize All".
Once the database is created, you can check there are no foreign key issues by running:

pytest test/validation/database_test.py

Foreign key constraints are checked after the data has been loaded into the database because tables are processed in separate processes so we can't guarantee they are written in an order that would satisfy foreign key relationships.
Discussion topics

Clobbering the database isn't necessary when you want to recreate a table because the contents of the table are deleted before the new data is loaded to the database. However, you'll need to manually delete the database when you make a metadata change because the db metadata is created when the sqlite file is created. I think we have two options 1) just make it clear in documentation that you need to delete the sqlite file when you change the metadata or 2) start using database migrations with something like alembic. Database migrations allow you to version control database schemas and apply changed incrementally.
For this iteration, I tried to keep the package structure mostly the same so the PR diff doesn't get crazy. I could imagine organizing the package differently in the future so it's clearer how all of the assets and modules relate to one another.

Next steps

#1874
#1872
#1873

Ok! The full ETL has been converted to dagster.
Setup

Recreate your pudl env to install dagster
Set the PUDL_CACHE env var to your /pudl-work/data directory. Create a new directory for ETL outputs and set its path to PUDL_OUTPUT env var.
To start dagit, dagster's UI, run

dagit -m pudl.etl -m pudl.ferc_to_sqlite

Dagit is the main method of interacting with dagster and running the ETL.
4. To confirm dagit is running, visit http://localhost:3000/. If you click the hamburger button in the upper left you'll see two folders pudl.etl and pudl.ferc_to_sqlite. These two portions of our ETL are separate because they use different dagster concepts. pudl.etl uses assets, which are a declarative approach to data processing. This allows you to link data tables together instead of linking code the generates the tables. pudl.ferc_to_sqlite uses dagster's imperative concept called ops because the FERC tables aren't known until the data has been extracted from the dbf and xbrl files see #1975.
5. Click on the ferc_to_sqlite_fast job. This job creates the raw ferc databases for the most recent years of data. To run the job click "Launchpad" then "Launch Run". Once the job is complete, check your PUDL_OUTPUT directory to make sure the data was created.
6. Once the raw FERC databases are created, click on the hamburger button again and click on etl_fast job. You can zoom in on the DAG to explore all of the data dependencies in PUDL. To create the pudl database, click "Materialize All".
7. Once the database is created, you can check there are no foreign key issues by running:
pytest test/validate/database_test.py

Foreign key constraints are checked after the data has been loaded into the database because tables are processed in separate processes so we can't guarantee they are written in an order that would satisfy foreign key relationships.
Discussion topics

Clobbering the database isn't necessary when you want to recreate a table because the contents of the table are deleted before the new data is loaded to the database. However, you'll need to manually delete the database when you make a metadata change because the db metadata is created when the sqlite file is created. I think we have two options 1) just make it clear in documentation that you need to delete the sqlite file when you change the metadata or 2) start using database migrations with something like alembic. Database migrations allow you to version control database schemas and apply changed incrementally.
For this iteration, I tried to keep the package structure mostly the same so the PR diff doesn't get crazy. I could imagine organizing the package differently in the future so it's clearer how all of the assets and modules relate to one another.
What should we do with pudl_settings? @zaneselvans suggested setting the input and output locations using env vars and adopting a flat file structure for the outputs. I'm worried replacing the pudl_settings object with env vars might cause issues for folks who depend on PUDL. The PudlTabl class just needs a SQLAlchemy engine. We'll also have to update our example notebooks. How could this new method of specifying location inputs and outputs break things?

Next steps

#1874
#1872
#1873

I've run into a couple problems setting this up locally so far, documenting for posterity:

Installing grpcio with pip just always sucks, ha: after recreating the environment I got

ImportError: dlopen(/Users/dazhong-catalyst/mambaforge/envs/pudl-dev/lib/python3.10/site-packages/grpc/_cython/cygrpc.cpython-310-darwin.so, 0x
0002): symbol not found in flat namespace '_CFRelease'

I used pip list | grep grpcio to find that we had installed 1.47.2. That's not available in conda-forge yet so I ran mamba install grpcio=1.47.1 to fix that.

When trying to run dagit I got the following ImportError (later replicated just by running from dagster import Definitions:

ImportError: cannot import name 'Definitions' from 'dagster' (/Users/dazhong-catalyst/mambaforge/envs/pudl-dev/lib/python3.10/site-packages/dag
ster/__init__.py)

It looks like this class isn't defined in dagster==1.0.17 at all:
> pwd                                                                            (pudl-dev)
/Users/dazhong-catalyst/mambaforge/envs/pudl-dev/lib/python3.10/site-packages/dagster
> cat version.py                                                                 (pudl-dev)
__version__ = "1.0.17"
> ag ' Definitions'                                                              (pudl-dev)
_core/definitions/load_assets_from_modules.py
61:                        error_str = f"Asset key {key} is defined multiple times. Definitions found in modules: {modules_str}. "

I fixed that by just mamba install dagster=1.1.13 dagit=1.1.13 but I'm surprised it doesn't work with the version in environment.yml.

Ah sorry @jdangerx setup.py has the wrong version of dagster. I just bumped it to the correct version. @zschira and @cmgosnell you'll need to recreate your environments.

Thanks for all of the feedback y'all! Here are some answers to you questions @cmgosnell

will we be able to see the dagit fun stuff for runs we kick off automatically?
Are you referring to the runs kicked off in the nightly builds and CI? For this first iteration, I was planning on just running the ETL using our CLI commands so we wouldn't be able to see the dagit fun stuff. In the future though we could host an instance of dagit in the ~cloud~ for our nightly builds to use or we could pay dagster to host it for us if the price is right.

were you playing around with the different versions of how to run things (assets, multi-assets, or ops or whatever) or were those different modes needed in different applications? I can definitely see how some of them would be necessary. I mostly ask bc it would be nice to know when to use certain modes versus others. The simpler the better (ie. default to assets, then use x when y or z when a but it might not be that straightforward)

Good question. I started experimenting using ops and nested graphs. This paradigm felt like more of a complex wrapper around our existing code. If we linked all of our ETL steps together as ops it still wouldn't be clear how our data tables relate to one another. We'd have to comb through our ETL code to understand how a data table moves through PUDL. With assets, we can specify how the data assets relate to one another instead of how each ETL step relates. This makes it easier to comprehend data relationships and persist data. Dagster has a nice talk on the benefits of assets.
Generally, we should default to using assets. multi_assets are helpful when you have code that produces multiple assets. For example, the harvesting process is a single function that produces multiple data assets.

was there an intention around pulling a few of the datasets into the etl module while leaving the biggies over in their nested subpackages?
I did this to try to minimize structural changes in the PR. I think in the future we should restructure pudl so it's easier to add new datasets. For example we could structure everything by datasource:

.
└── pudl/
    ├── __init__.py
    ├── io_managers
    ├── resources
    ├── metadata
    └── etl/
        ├── __init__.py
        ├── eia/
        │   ├── eia860/
        │   │   ├── extract.py
        │   │   └── transform.py
        │   ├── eia923/
        │   │   ├── extract.py
        │   │   └── transform.py
        │   ├── new_eia_source
        │   └── ...
        ├── ferc/
        │   ├── form1/
        │   │   ├── extract.py
        │   │   └── transform.py
        │   ├── form2
        │   ├── eqr
        │   └── ...
        └── epa/
            └── cems

pudl.etl.__init__.py would import all of the assets in the directory. This way to add a new datasource you can just create a new directory in pudl/etl/ that contains python files with assets. I'm going to create an issue or discussion to flesh this out.

what does compute_kind do? why do you need to tell it "Python". isn't that a duh.
compute_kind adds a cute little label in dagit that represents how the asset was created. Obviously, all of our assets right now are in python. However, this will be helpful documentation for output tables once we convert some of them to SQL views:

We can also use these if we start to use additional tools like spark, dbt or airbyte.

@jdangerx great idea about comparing the databases on dev and this branch.
As for how to structure the work. I don't think this PR should be merged in until everything in the #1570 epic is complete. We can create PRs off of this branch for the test and documentation updates.


continuing pre-training

Hi, I would like to continue your pre-training.
Is there a readme that describes how to load in your pre-trained Long-CLIP model checkpoint?  Looking for a checkpoint from "ViT-L/14@336px".
Thanks!

Hi, you may refer to this code
from model import longclip
import torch
from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = longclip.load("./checkpoints/longclip-B.pt", device=device)
text = longclip.tokenize(["A man is crossing the street with a red car parked nearby.", "A man is driving a car in an urban scene."]).to(device)
image = preprocess(Image.open("./img/demo.png")).unsqueeze(0).to(device)
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
logits_per_image = image_features @ text_features.T
probs = logits_per_image.softmax(dim=-1).cpu().numpy()

print("Label probs:", probs)

Sorry, i meant training, not zero-shot inference

Got it. Than you may change the 'load_from_clip' function in train/train.py into 'longclip.load', and rewrite the dataset loader.


Regression testing for security defaults

Security changes are very difficult to track.  We've discussed deployment rework #5472 , as part of that, maybe

we need a security-util.sh script, which does all the security tasks
this script should be used in hack/local-up-cluster.sh, and
hack/local-up-cluster.sh should run in the CI

This way if security options change/regress, they are always caught.  Likewise, we will know that a single node example cluster always spins up and works no matter what config changes happen in the code base.  Since hack/local-up is so fast, it wont be super hard to add this.  I always just do sudo pkill -e kube* ; sudo pkill -e etcd* ; sudo hack/local-up-cluster.sh, it takes about 20 seconds or less.

cc @timothysc @rrati @eparis feel free to close this issue if its subsumed elsewhere.  IMO its a subtask of #5472


Ignore image copies over a certain file size

I've read #134 and it's great to be able to turn off images.
However, would it be possible to be more selective based on the size of the image?
My work flow is this:

Use Sketch to design websites
Drag in client-supplied high-quality photographs (10+ MB jpgs)
Cut and paste these into different parts of the design within Sketch.
When I do this a few times, Maccy slows down to the extent that it takes minutes to open

I'd like it to ignore images of a certain size, but still remember other images (such as bits of the UI I am designing)
Thanks. Great app overall.

I think it would be better if Maccy just handles big images correctly. I've tried copying 15MB image and Maccy took a couple of seconds to open if I immediately press the hotkey. However, if I open few seconds later - it opens without any slowdown. Then I can pin/search items the usual way.
It seems fine copying 1 huge image. Can you be more specific about the steps you do when the issue happens? How many images do you copy? What are their sizes? How soon do you open Maccy?

Closing since no reply for more than a month. Feel free to re-open and provide more info.


[windows 7] Flutter Analyzer failed to start when Flutter folder is on Network folder, FileSystemException Cannot open file

Steps to Reproduce

Download latest Flutter release
Extract it in Network folder (folder on NAS (Network Attached Storage))
Add to path
Run flutter analyze

I'm using latest dev Flutter with VS Code on Windows 7 SP1 64-bit
Logs

Logs

flutter analyze - LOG file
Dart Code extension: 3.20.1
Flutter extension: 3.20.0 (activated)

App: Visual Studio Code
Version: 1.52.1
Platform: win

Workspace type: Flutter
Analyzer type: DAS
Multi-root?: false

Dart SDK:
    Loc: Z:\CODE\flutter\bin\cache\dart-sdk
    Ver: 2.13.0-116.0.dev
Flutter SDK:
    Loc: Z:\CODE\flutter
    Ver: 2.1.0-12.1.pre

HTTP_PROXY: undefined
NO_PROXY: undefined
[18:27:41] [Analyzer] [Info] ==> {"id":"5","method":"edit.getFixes","params":{"file":"Z:\\CODE\\harmonoid\\lib\\main.dart","offset":569},"clientRequestTime":1617035261292}
[18:27:41] [Analyzer] [Info] ==> {"id":"6","method":"edit.getAssists","params":{"file":"Z:\\CODE\\harmonoid\\lib\\main.dart","length":0,"offset":569},"clientRequestTime":1617035261292}
[18:27:41] [Analyzer] [Info] ==> {"id":"7","method":"edit.getAvailableRefactorings","params":{"file":"Z:\\CODE\\harmonoid\\lib\\main.dart","length":0,"offset":569},"clientRequestTime":1617035261292}
[18:27:41] [Analyzer] [Info] <== [exception: FileSystemException(path=C:\Program Files\Microsoft VS Code\UNC\<IP_ADDRESS>\SERVER\CODE\flutter\bin\cache\dart-sdk\lib\_internal\sdk_library_metadata\lib\libraries.dart; message=Cannot open file)][stackTrace: #0      _PhysicalFile.readAsStringSync (package:analyzer/file_system/physical_file_system.dart:184:7)
[18:27:41] [Analyzer] [Info] <== #1      FolderBasedDartSdk.initialLibraryMap (package:analyzer/src/dart/sdk/sdk.dart:473:41)
[18:27:41] [Analyzer] [Info] <== #2      new FolderBasedDartSdk (package:analyzer/src/dart/sdk/sdk.dart:371:18)
[18:27:41] [Analyzer] [Info] <== #3      Driver._createDefaultSdk (package:analysis_server/src/server/driver.dart:497:12)
[18:27:41] [Analyzer] [Info] <== #4      Driver.start (package:analysis_server/src/server/driver.dart:234:22)
[18:27:41] [Analyzer] [Info] <== #5      main (file:///C:/b/s/w/ir/cache/builder/src/third_party/dart/pkg/analysis_server/bin/server.dart:10:11)
[18:27:41] [Analyzer] [Info] <== #6      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:281:32)
[18:27:41] [Analyzer] [Info] <== #7      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
[18:27:41] [Analyzer] [Info] <== ]
[18:27:41] [Analyzer] [Info] <== [exception: FileSystemException(path=C:\Program Files\Microsoft VS Code\UNC\<IP_ADDRESS>\SERVER\CODE\flutter\bin\cache\dart-sdk\lib\_internal\libraries.dart; message=Cannot open file)][stackTrace: #0      _PhysicalFile.readAsStringSync (package:analyzer/file_system/physical_file_system.dart:184:7)
[18:27:41] [Analyzer] [Info] <== #1      FolderBasedDartSdk.initialLibraryMap (package:analyzer/src/dart/sdk/sdk.dart:473:41)
[18:27:41] [Analyzer] [Info] <== #2      new FolderBasedDartSdk (package:analyzer/src/dart/sdk/sdk.dart:371:18)
[18:27:41] [Analyzer] [Info] <== #3      Driver._createDefaultSdk (package:analysis_server/src/server/driver.dart:497:12)
[18:27:41] [Analyzer] [Info] <== #4      Driver.start (package:analysis_server/src/server/driver.dart:234:22)
[18:27:41] [Analyzer] [Info] <== #5      main (file:///C:/b/s/w/ir/cache/builder/src/third_party/dart/pkg/analysis_server/bin/server.dart:10:11)
[18:27:41] [Analyzer] [Info] <== #6      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:281:32)
[18:27:41] [Analyzer] [Info] <== #7      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
[18:27:41] [Analyzer] [Info] <== ]
[18:27:41] [Analyzer] [Error] Unhandled excepti
[18:27:41] [Analyzer] [Error] on:
FileSystemException(path=C:\Program Files\Microsoft VS Code\UNC\<IP_ADDRESS>\SERVER\CODE\flutter\bin\cache\dart-sdk\version; message=Cannot open file)
#0      _PhysicalFile.readAsStringSync (package:analyzer/file_system/physical
[18:27:41] [Analyzer] [Error] _file_system.dart:184:7)
#1      FolderBasedDartSdk.languageVersion (package:analyzer/s
[18:27:41] [Analyzer] [Error] rc/dart/sdk/sdk.dart:395:12)
#2      Driver.start (package:analysis_server/src/server/driver.dart:262:18)
#3      main (file:///C:/b/s/w/i
[18:27:41] [Analyzer] [Error] r/cache/builder/src/third_party/dart/pkg/analysis_server/bin/server.dart:10:11)
#4      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-p
[18:27:41] [Analyzer] [Error] atch/isolate_patch.dart:281:32)
#5      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
[18:27:41] [Analyzer] [Info] Process terminated! 255, null

flutter doctor -v
[√] Flutter (Channel dev, 2.1.0-12.1.pre, on Microsoft Windows [Version 6.1.7601], locale sl-SI)
    • Flutter version 2.1.0-12.1.pre at Z:\CODE\flutter
    • Framework revision 8264cb3e8a (3 weeks ago), 2021-03-10 12:37:57 -0800
    • Engine revision 711ab3fda0
    • Dart version 2.13.0 (build 2.13.0-116.0.dev)

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at C:\Users\DOMA\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[X] Visual Studio - develop for Windows
    X Visual Studio not installed; this is necessary for Windows development.
      Download at https://visualstudio.microsoft.com/downloads/.
      Please install the "Desktop development with C++" workload, including all of its default components

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] VS Code, 64-bit edition (version 1.52.1)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 3.20.0

[√] Connected device (2 available)
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 6.1.7601]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 89.0.4389.90

! Doctor found issues in 1 category.

Thank you for filing this issue. However, unfortunately the Flutter CLI tool does not support being run from a NAS. I would recommend installing the Flutter SDK on your host device.

Ok, thank you so much for your time


DASHBOARD_DESIGN.md

Pull Request Overview
📝 Summary
Created design and user flow in Figma, ensuring all screens and interactions are well-defined and visually cohesive. The objective is to provide a clear guide for stakeholders and developers.
🔗 Related Issues

Closes #22.

🔄 Changes Made
Please provide a general description of your changes. Include any relevant background information or context that may help reviewers understand the purpose of this PR.
🖼 Current Output
Give evidence like screenshots of what your job looks like.
🧪 Testing
If applicable, describe the tests performed. Provide screenshots, test outputs, or any resources that can help reviewers understand how the changes were tested.
💬 Comments
Any additional context, questions, or considerations for the reviewers.

@MPSxDev , please review

Don! @MPSxDev , please review.


onRowsSelect :unable to get correct size on deselecting last row

onRowsSelect is getting called when we deselect the rows but when an only single row is selected and when we deselect last available row, then expected is to get an empty array as any row is not selected but currentRowsSelected is having a single object in while a callback

Expected Behavior

onRowsSelect should send an empty array of currentRowsSelected when none on the rows are selected.
Current Behavior

onRowsSelect is returning last selected array in currentRowsSelected when none on the rows are selected.
Your Environment

Tech
Version

Material-UI
^1.3.0

MUI-datatables
^2.0.0-beta.58

React
^16.3.1"

browser
Chrome

OS
macOS Mojave

Getting these details in allRowsSelected  as a workaround. Thanks and Cheers!


<EMAIL_ADDRESS>Just broken

Hi hi, it's me again.
Maybe it's just broken in next-urql.
Default Client: No client has been specified using urql's Provider.This means that urql will befalling back to defaults including making requests to `/graphql`.
If that's not what you want, please create a client and add a Provider.

Reproduction https://codesandbox.io/s/romantic-fast-8sise?file=/pages/index.js

Could you try removing your node_modules and reinstall? This is most  likely due to your package manager deduplicating incorrectly.

I had tried rm -rf node_modules and reinstall.
And used yarn-deduplicate but both still broken.
After yarn add next-urql  again to force urql  to the same 1.10.1 version the problem has been resolved.

Sometimes this can be a little fiddly. We've determined that next-urql doesn't have a peer dependency on urql and instead a direct one which is probably making this worse. We'll have to clean that up on the next major bump of next-urql

I am running into the same issue, however none of the proposed solutions solve it for me 😞 Anything else I can try?

Check you are not using 'Provider' from react-redux.

For anybody using a workspace/monorepo and still running into this issue:
Make sure that the createClient() method is imported from the same urql dependency as any useQuery or useMutation hook.
In my case, I was using a yarn workspace and its Plug'n'Play feature. urql was installed in two of the workspace packages.
The setup looked something like this:
Package 1
package.json
{
    // ...
    "dependencies": {
        // ...
        "urql": "^2.1.3",
    }
}

index.ts
import { useQuery } from 'urql';
// ...
export const useSomeData = () => useQuery(SOME_DATA_QUERY);

Package 2
package.json
{
    // ...
    "dependencies": {
        // ...
        "urql": "^2.1.3",
        "next-urql": "^3.3.2",
        "package1": "workspace:*"
    }
}

pages/_app.tsx
import { withUrqlClient } from 'next-urql';
import { useSomeData } from 'package1/data';

const App= () => {
    const data = useSomeData();
    // ...
};

export default withUrqlClient(/*...*/)(App);

withUrqlClient(), under the hood, used the createClient() method of the urql dependency installed in package2.
useSomeData(), on the other hand, used the useQuery() hook of the urql dependency installed in package1.
Therefore, the underlying Context.Provider and Context.Consumer didn't belong to the same Context, resulting in the error message.
Fixed it by removing urql and next-urql from package2, installing next-urql in package1 and re-exporting withUrqlClient.

@jshxr Actually, to avoid duplicates we simply recommend deduplicating dependencies, specifically that's important for @urql/core. This can often be done by running npx yarn-deduplicate which updates the yarn.lock file and then running yarn again ✌

@kitten Running yarn dedupe(yarn-deduplicate only works with yarn 1) was one of the first things I tried after reading JoviDeCroocks answer, however the error didn't resolve.
My .yarn/cache also only features one urql (urql-npm-2.1.3.zip) and one @urql/core(@urql-core-npm-2.4.1.zip).
Maybe this has something to do with how PnP works? (I don't know how it works 😆)

@jshxr I know this is an old closed topic, but just in case you haven't managed to figure out the mysteries of PnP here's a little bit of help troubleshooting PnP problems.
There are a couple of yarn CLI tools we can use to investigate how our dependencies are defined:

yarn why <package-name>

This will show you why a package has been installed. For example, which of your workspaces has it as a dependency.
Sometimes this is enough to figure out if there are multiple instances of a package by checking the hashes at the end of the output.

yarn info <package-name>

This will show you package information including things like the package's dependencies but importantly the number of instances in your code-base.
We can also investigate the peer dependencies of each instance using the --virtuals flag.
We can also use the -A/--all flag to check this from the top level of our monorepo.

-> yarn info urql -A --virtuals
├─ urql@npm:2.2.3
│  ├─ Instances: 2
│  ├─ Version: 2.2.3
│  │
│  └─ Dependencies
│     ├─ @urql/core@npm:^2.6.1 → npm:2.6.1
│     └─ wonka@npm:^4.0.14 → npm:4.0.15
│
├─ urql@npm:2.2.3 [5abd3]
│  ├─ Version: 2.2.3
│  │
│  └─ Peer dependencies
│     ├─ @types/graphql@* → ✘
│     ├─ @types/react@* → npm:17.0.4
│     ├─<EMAIL_ADDRESS>|| ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 → ✘
│     └─ react@>= 16.8.0 → npm:17.0.2
│
└─ urql@npm:2.2.3 [5c718]
   ├─ Version: 2.2.3
   │
   └─ Peer dependencies
      ├─ @types/graphql@* → npm:14.5.0
      ├─ @types/react@* → npm:17.0.4
      ├─<EMAIL_ADDRESS>|| ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 → npm:15.8.0
      └─ react@>= 16.8.0 → npm:17.0.2

Here we can see the urql package has @urql/core and wonka as dependencies, but also @types/graphql, @types/react, graphql and react as peer dependencies. In order for an instance to be the same, it's peer dependencies must also be satisfied.
So, in this output, we need to add @types/graphql and graphql to the peer dependencies of whichever workspace corresponds to the hash [5abd3] (the crosses at the end of the line indicate this).
What should you have done in your example?
Instead of removing next-urql and urql from package2, we should instead add urql to the peer dependencies of package 1 and also ensure both packages have all of next-urql and urql's peer dependencies satisfied by using yarn info urql -A --virtuals; preferably all with the same versioning.
What if I can't control the dependencies?
If you're not the package maintainer, you can enforce dependencies using the .yarnrc.yml file. Here's yarn's docs on that.
Yarn should really have a "how to troubleshoot" dependencies section because none of this is obvious...


Try out using napari GUI hook implementations

Hi @sebi06 this looks amazing! I wonder if you're interested in trying out using our newly released GUI hook implementations  napari_experimental_provide_function_widget or napari_experimental_provide_dock_widget, just in 0.4.3 from last week.
These would allow you to leverage more of the napari plugin interface and might make it easier to use this tool alongside other napari tools, see more on plugins here.

Hi @sofroniewn ,
Good idea. It will be mainly (as always) a question time since my actual responsibility is to extend our AI software. But from the docs this looks good.

Hi @sofroniewn ,
Good idea. It will be mainly (as always) a question time since my actual responsibility is to extend our AI software. But from the docs this looks good.


src/telegram: Add request options in getFileStream

[x] All tests pass
[x] I have run npm run doc

Description
Download file reuqest unable to use agent options

LGTM


Fixed minor issue caused by SpatialPadd and performance improvement

Signed-off-by: dongyang0122<EMAIL_ADDRESS>

Hi @mingxin-zheng ,
Please also update the zip file and default download link in the MONAI source code.
Thanks.


Small fixes in session, h2quic

populateServerConfig() doesn't honor the keepalive setting of the caller
h2quic seems to pass as TCP connection instead of TLS to the http2 stack in the non-quic case

Codecov Report

Merging #832 into master will decrease coverage by 0.03%.
The diff coverage is 25%.

@@            Coverage Diff             @@
##           master     #832      +/-   ##
==========================================
- Coverage   90.98%   90.96%   -0.03%
==========================================
  Files          87       87
  Lines        6056     6059       +3
==========================================
+ Hits         5510     5511       +1
- Misses        347      349       +2
  Partials      199      199

Impacted Files
Coverage Δ

h2quic/server.go
61.5% <0%> (-0.62%)
:arrow_down:

server.go
91.58% <100%> (+0.04%)
:arrow_up:

Continue to review full report at Codecov.

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

LGTM, but we need you to sign the CLA before merging. Let me know if you have any questions.

On Sep 22, 2017, at 3:40 AM, Lucas Clemente<EMAIL_ADDRESS>wrote:
LGTM, but we need you to sign the CLA before merging. Let me know if you have any questions.

I signed it actually, but it turns out that the email address of my google account is different (e.g: langton@benoist.name).
If this is problematic, my employer has a corporate CLA that might be able to use. Just let me know.
—
Julien Benoist

the address should match now, I just updated it.

If the second function you mentioned happens to be the one that checks whether the defaults are correctly used when options are not set, there isn't one for keepalive since type default suffices.

@jbenoist: Don't worry about the merge conflict. I'll take care of that.

Closing in favor of #842.


AVRO-1658: Java: Add reflection annotation @AvroDoc.

@AvroMeta can be used for other keys, but doc is passed into the field's
constructor.

Thanks for the patch. LGTM.

Looks good to me, after resolving the merge conflicts (new test were added to TestReflect), all unit tests passed.

any chances the PR will be updated and merged?

Rebased and retested.

Thanks a lot for rebasing. I confirm it compiles and tests pass.
+1
Will push it tomorrow if there are no objections.

Are there any chanced to merge this Pull Request?
Thank you  in advance.

Sorry, I've thought you've noticed Doug's question in the JIRA just after my last comment here. Could you please reflect his comments first?

I guess this question should be addressed to @aeroevan

It's fine but I would not like to commit these changes and close the JIRA until all the questions are answered as they might affect this PR as well.

sorry for bothering but are there any chances for this PR to be merged?

In Jira https://issues.apache.org/jira/browse/AVRO-1658?focusedCommentId=16130729&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16130729
he wants to have unit tests for class level avro doc tests and as I see in the changes he covers them
See https://github.com/apache/avro/pull/189/files#diff-f12fe0e1e72a3f7235da43f8c631bafcR1110 for the test
and
https://github.com/apache/avro/pull/189/files#diff-f12fe0e1e72a3f7235da43f8c631bafcR1126 where it is checked.
Is still something missing?


Generate one feed for all users?

Right now there's one feed per user, and the entries look like:
<user> <year> <month> <id>, which is redundant.
So maybe we should have entries looking like <year> <month> <id>, or have one feed for all users

Meh. I'm only re-publishing tweets for just one account, so I guess it's ok


[feature] Ability to specify additional configuration for task dependencies

I've used Nx extensively for a very long time, so I'm excited to see what Moon has to offer, but unfortunately, the customization is lacking.
https://nx.dev/reference/project-configuration#dependson
Is your feature request related to a problem? Please describe.
I have the following task configuration:
fileGroups:
  build:
    - 'build/**/*.js'

tasks:
  deploy:
    command: 'bos components deploy'
    inputs:
      - '@globs(sources)'
    deps:
      - build

  build:
    command: 'rollup -c $workspaceRoot/components/rollup.config.mjs'
    inputs:
      - '@globs(sources)'
    outputs:
      - 'build'

  load:
    command: 'sleep 1 && bos-loader marcus-sa.near --path $projectRoot/build'
    local: true
    inputs:
      - '@globs(build)'

  dev:
    command: noop
    local: true
    deps:
      - build
      - load

When the load task is run, I'd like to pass a --watch flag to the build task dependency.

Describe the solution you'd like
A configuration option to pass additional configuration to the task dependencies.
Example API:
tasks:
  dev:
    command: noop
    deps:
      - task: build
        env: {}
        args:
          - '--watch'

      - load

I tried to make a separate task called build-watch and use that for load, but that wasn't possible because two commands cannot have the same outputs.

@marcus-sa This requests is on the roadmap, but in the meantime, you could do something like this:
  build:
    command: 'rollup -c $workspaceRoot/components/rollup.config.mjs'
    inputs:
      - '@globs(sources)'
    outputs:
      - 'build'

  build-watch:
    extends: build
    args: --watch

  dev:
    command: noop
    local: true
    deps:
      - build-watch
      - load

@marcus-sa This requests is on the roadmap, but in the meantime, you could do something like this:
  build:
    command: 'rollup -c $workspaceRoot/components/rollup.config.mjs'
    inputs:
      - '@globs(sources)'
    outputs:
      - 'build'

  build-watch:
    extends: build
    args: --watch

  dev:
    command: noop
    local: true
    deps:
      - build-watch
      - load

× Tasks X:build, X:build-watch have configured the same output components/X/build. Overlapping outputs is not supported as it can cause non-deterministic results.

Ah yeah, you can do something like this, but at this point you may as well duplicate the task.
  build-watch:
    extends: build
    args: --watch
    outputs: []
    options:
      mergeOutputs: replace

@marcus-sa Have a question for you, maybe you know with your Nx experience and how they solved it.
The reason this hasn't been implemented yet, is because I'm unsure how to solve it within the dependency graph + task runner. Say we have 2 separate tasks that depend on the same build task, but pass different args. In this case, build --esm and build --cjs.
In the task runner, the chance both of these build tasks running at the same time is possible, resulting in a collision, or separate processes reading/writing the same files, which is also problematic. There needs to be some kind of guard rail that avoids this, or some guarantee they don't run at the same time.

I have the same issue, I am using Vite to build production files.
vite build --mode staging

and
vite build --mode production

If I use moon, it should be:
  build-staging:
    command: 'vite'
    type: 'build'
    args:
      - 'build'
      - '--mode'
      - 'staging'
    options:
      mergeOutputs: replace
    inputs:
      - 'src/**/*'
      - '!src/**/*.cy.*'
      - 'index.html'
      - 'package.json'
      - 'public/**/*'
      - 'vite.config.ts'
    outputs:
      - 'dist/**/*'
  build-production:
    command: 'vite'
    type: 'build'
    args:
      - 'build'
      - '--mode'
      - 'production'
    options:
      mergeOutputs: replace

But for now it show me the error
Tasks project:build-production, project:build-staging have configured the same output dist/**/*. Overlapping outputs is not supported as it can cause non-deterministic results.

@hckhanh Technically the error is correct, because staging and production builds produce different outputs. Without this error/check in place, the incremental cache layer would be incorrect, as it would be hydrated with an improper file contents, depending on the order in which things are executed.
The correct way to approach this is to probably have staging write to dist-staging/ and production to dist/.
With that being said, you can turn off the check for now: https://moonrepo.dev/docs/config/workspace#taskoutputboundaries This will probably be enforced in the future though.

Thank you @milesj

Both of these features are now possible in 1.19.


Validation for CommandJobSchema fails for valid YAML passed to az ml job create

Describe the bug
Command Name
az ml job create Extension Name: ml. Version: 2.0.1a5.
Errors:
Validation for CommandJobSchema failed:

 {
  "compute": {
    "_schema": [
      "Invalid input type."
    ]
  }
}

 If the job type is incorrect, change the 'type' property.

To Reproduce:

YAML file:

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: test
environment: azureml:my_env:1
compute: azureml:my_compute

az ml job create -f file_above.yml --resource-group {} --workspace-name {} --query name

Expected Behavior
Validation for CommandJobSchema should not fail. String 'azureml:my_compute' is a valid input according to https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
Environment Summary
Windows-10-10.0.19041-SP0
Python 3.8.9
Installer: MSI

azure-cli 2.31.0

Extensions:
ml 2.0.1a5

Additional Context

The problem disappears if the YAML file is changed to:
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: test
environment: azureml:my_env:1
compute:
target: azureml:my_compute

Route to service team

Hi @thomasoliveira, the schema you linked is only valid with the latest release of the ml extension (2.0.3). There have been a few breaking changes since 2.0.1a5, so please update your ml extension to the latest version. You can do this by running
az extension remove -n ml
az extension add -n ml

@thomasoliveira Could you please let us know if you have tried the action plan suggested in the above comment and check if you are still facing this issue ? Awaiting your reply.


[EventRequest] Codeunit 1255 "Match Bank Payments" - OnBeforeDocumentMatching()

Hello,
We want to add matching by Recepient Reference to standard matching code (CU 1255 "Match Bank Payments") with as little changes as possible. To achieve this, we need new event in mentioned codeunit, and an ability to skip the rest of document matching if match was found:
    local procedure FindMatchingEntry(TempLedgerEntryMatchingBuffer: Record "Ledger Entry Matching Buffer" temporary; var BankAccReconciliationLine: Record "Bank Acc. Reconciliation Line"; AccountType: Option; var BankPmtApplRule: Record "Bank Pmt. Appl. Rule")
    var
        Score: Integer;
        RemainingAmount: Decimal;
        // NEW VARIABLES >>>
        DocumentMatchingHandled: Boolean;
        // NEW VARIABLES <<<
    begin
        if CanEntriesMatch(
             BankAccReconciliationLine, TempLedgerEntryMatchingBuffer."Remaining Amount", TempLedgerEntryMatchingBuffer."Posting Date")
        then begin
            if AccountType = TempBankStatementMatchingBuffer."Account Type"::Customer then
                DirectDebitCollectionMatching(BankPmtApplRule, BankAccReconciliationLine, TempLedgerEntryMatchingBuffer);

            RelatedPartyMatching(BankPmtApplRule, TempLedgerEntryMatchingBuffer, BankAccReconciliationLine, AccountType);

            // NEW CODE >>>
            OnBeforeDocumentMatching(BankPmtApplRule, BankAccReconciliationLine, TempLedgerEntryMatchingBuffer, DocumentMatchingHandled);
            if not DocumentMatchingHandled then
            // NEW CODE <<<
                if AccountType <> TempBankStatementMatchingBuffer."Account Type"::"Bank Account" then
                    DocumentMatching(BankPmtApplRule, BankAccReconciliationLine,
                      TempLedgerEntryMatchingBuffer."Document No.", TempLedgerEntryMatchingBuffer."External Document No.")
                else
                    DocumentMatchingForBankLedgerEntry(BankPmtApplRule, BankAccReconciliationLine, TempLedgerEntryMatchingBuffer);

            RemainingAmount := TempLedgerEntryMatchingBuffer.GetApplicableRemainingAmount(BankAccReconciliationLine, UsePaymentDiscounts);
            AmountInclToleranceMatching(
              BankPmtApplRule, BankAccReconciliationLine, AccountType, RemainingAmount);

            Score := TempBankPmtApplRule.GetBestMatchScore(BankPmtApplRule);

            if Score >= MinimumMatchScore then
                TempBankStatementMatchingBuffer.AddMatchCandidate(
                  BankAccReconciliationLine."Statement Line No.", TempLedgerEntryMatchingBuffer."Entry No.",
                  Score, AccountType,
                  TempLedgerEntryMatchingBuffer."Account No.");

            if BankPmtApplRule."Doc. No./Ext. Doc. No. Matched" = BankPmtApplRule."Doc. No./Ext. Doc. No. Matched"::Yes then begin
                TempBankStatementMatchingBuffer.InsertOrUpdateOneToManyRule(
                  TempLedgerEntryMatchingBuffer,
                  BankAccReconciliationLine."Statement Line No.",
                  BankPmtApplRule."Related Party Matched", AccountType,
                  RemainingAmount);

                TempBankStmtMultipleMatchLine.InsertLine(
                  TempLedgerEntryMatchingBuffer,
                  BankAccReconciliationLine."Statement Line No.", AccountType);
            end;
        end;
    end;

And new event would look something like this:
    [IntegrationEvent(false, false)]
    local procedure OnBeforeDocumentMatching(var BankPmtApplRule: Record "Bank Pmt. Appl. Rule"; BankAccReconciliationLine: Record "Bank Acc. Reconciliation Line"; TempLedgerEntryMatchingBuffer: Record "Ledger Entry Matching Buffer" temporary; var DocumentMatchingHandled: Boolean)
    begin
    end;

Best regards,
Matjaz

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.


Supporting control flow in TensorFlow Lite

This is a tracking ticket for supporting generalized control flow in TensorFlow Lite. See also the RFC.
At this moment, if you see missing ops like "Switch", "Merge", "Enter", "Exit", "NextIteration" when converting a TensorFlow model to TensorFlow Lite, it means the graph contains control flows, and there's no way to convert it.
We're working hard to enable this feature. Updates will be posted here.

@miaout17
When we can expect control flow in TensorFlow Lite?

@miaout17 there were several commits recently like this one https://github.com/tensorflow/tensorflow/commit/eedf79ed3782dddd1c4787c72fc9804a20252245 but no updates were posted in this thread. Can you update us on when all these features will be available and in which tensorflow version (only 2.0 I assume)?

I met the same problem. It shows that "switch and merge" operations which in batchnormalization(bn) are not supported. However, I change the is_training from tf.bool to tf.Variable. This process are OK and the tflite model are produced sucessfully.
I do not know the reason, but it runs well in my programe.

@jdduke Any updates on when the other control flow items will be available? Specifically Merge.

Any updates?

I had the same problem. Look forward to the update!

I met the same problem

I had the same issue.
2019-11-27 09:27:26.184856: F .\tensorflow/lite/toco/toco_tooling.h:38] Check failed: s.ok() Found StridedSlice as non-selected output from Switch, but only Merge supported. Control flow ops like Switch and Merge are not generally supported. We are working on fixing this, please see the Github issue at https://github.com/tensorflow/tensorflow/issues/28485.
Fatal Python error: Aborted

I had the same issue when I tried to convert SSDlite mobileNet to tflite.
Any updates?

I met the same problem

F ./tensorflow/lite/toco/toco_tooling.h:38] Check failed: s.ok() Found StridedSlice as non-selected output from Switch, but only Merge supported. Control flow ops like Switch and Merge are not generally supported. We are working on fixing this, please see the Github issue at https://github.com/tensorflow/tensorflow/issues/28485.
is it ok now?

I met the same problem. Look forward to the update.

I used my converted tflite model for inference with the following code.
interpreter.allocate_tensors()
Then I got an error as follows.
RuntimeError: Encountered unresolved custom op: Enter.Node number 8 (Enter) failed to prepare
Is it occured for unsupported control flow?
If so, which layers does the Enter control flow come from?

I used my converted tflite model for inference with the following code.
interpreter.allocate_tensors()
Then I got an error as follows.
RuntimeError: Encountered unresolved custom op: Enter.Node number 8 (Enter) failed to prepare
Is it occured for unsupported control flow?
If so, which layers does the Enter control flow come from?

Which model are you trying to convert? The Enter is a control flow v1 op, which tflite new converter doesn't support. Can you build the model with TF 2 so that it contains V2 style control flow?

I used my converted tflite model for inference with the following code.
interpreter.allocate_tensors()
Then I got an error as follows.
RuntimeError: Encountered unresolved custom op: Enter.Node number 8 (Enter) failed to prepare
Is it occured for unsupported control flow?
If so, which layers does the Enter control flow come from?

Which model are you trying to convert? The Enter is a control flow v1 op, which tflite new converter doesn't support. Can you build the model with TF 2 so that it contains V2 style control flow?

@haozha111 I am trying to convert EfficientDet in https://github.com/xuannianz/EfficientDet, which is based on  fizyr/keras-retinanet in https://github.com/fizyr/keras-retinanet. Does TF 2 support enter, exit, switch and merge?
Thanks.

I used my converted tflite model for inference with the following code.
interpreter.allocate_tensors()
Then I got an error as follows.
RuntimeError: Encountered unresolved custom op: Enter.Node number 8 (Enter) failed to prepare
Is it occured for unsupported control flow?
If so, which layers does the Enter control flow come from?

Which model are you trying to convert? The Enter is a control flow v1 op, which tflite new converter doesn't support. Can you build the model with TF 2 so that it contains V2 style control flow?

@haozha111 I am trying to convert EfficientDet in https://github.com/xuannianz/EfficientDet, which is based on fizyr/keras-retinanet in https://github.com/fizyr/keras-retinanet. Does TF 2 support enter, exit, switch and merge?
Thanks.

Which version of Tensorflow did you use to build & export this model? If using TF 2, I don't see why the exported graph will contain Enter/Exit/Switch/Merge.

any update?

I met the same problem. I am using a batch normalization layer (tf.layer.batch_normalization).
2020-01-22 15:33:09.575787: F ./tensorflow/lite/toco/toco_tooling.h:38] Check failed: s.ok() Found Mul as non-selected output from Switch, but only Merge supported. Control flow ops like Switch and Merge are not generally supported. We are working on fixing this, please see the Github issue at #28485.
You need the new MLIR converter to convert models with control flow. Please update your tensorflow version to the latest and then use the new converter(converter.experimental_new_converter = True).
#28485 (comment)

Hi!
I am using tf 1.15 to train the nnet.
To use the new MLIR converter it is necessary to have a pb file. In tf 1.15 load the model from checkpoint and save in "saved_model.pb". [I don't know how to do in tf2.1, some idea¿?]
Then in tf 2.1 I use the following:
converter = tf.lite.TFLiteConverter.from_saved_model(save_path)
converter.experimental_new_converter = True
tflite_model = converter.convert()
And the result is:
ValueError: Importing a SavedModel with tf.saved_model.load requires a 'tags=' argument if there is more than one MetaGraph. Got 'tags=None', but there are 0 MetaGraphs in the SavedModel with tag sets []. Pass a 'tags=' argument to load this SavedModel.
And if I check the tags with saved_model_cli._show_tag_sets(model_path):
The results is:
The given SavedModel contains the following tag-sets:

Another case, If I froze the model, with tensorflow.python.tools import freeze_graph in tf2.1, and save in "saved_model.pb".
And convert with the same previous code I get:
ValueError: This converter can only convert a single ConcreteFunction. Converting multiple functions is under development.

That's a bit surprising. How did you export your saved model? Could you use the saved_model_cli --show tool to dump an info about your saved model? I think by default there should be a serving graph inside it.

I met the same problem. I am using a batch normalization layer (tf.layer.batch_normalization).
2020-01-22 15:33:09.575787: F ./tensorflow/lite/toco/toco_tooling.h:38] Check failed: s.ok() Found Mul as non-selected output from Switch, but only Merge supported. Control flow ops like Switch and Merge are not generally supported. We are working on fixing this, please see the Github issue at #28485.
You need the new MLIR converter to convert models with control flow. Please update your tensorflow version to the latest and then use the new converter(converter.experimental_new_converter = True).
#28485 (comment)

Hi!
I am using tf 1.15 to train the nnet.
To use the new MLIR converter it is necessary to have a pb file. In tf 1.15 load the model from checkpoint and save in "saved_model.pb". [I don't know how to do in tf2.1, some idea¿?]
Then in tf 2.1 I use the following:
converter = tf.lite.TFLiteConverter.from_saved_model(save_path)
converter.experimental_new_converter = True
tflite_model = converter.convert()
And the result is:
ValueError: Importing a SavedModel with tf.saved_model.load requires a 'tags=' argument if there is more than one MetaGraph. Got 'tags=None', but there are 0 MetaGraphs in the SavedModel with tag sets []. Pass a 'tags=' argument to load this SavedModel.
And if I check the tags with saved_model_cli._show_tag_sets(model_path):
The results is:
The given SavedModel contains the following tag-sets:

Another case, If I froze the model, with tensorflow.python.tools import freeze_graph in tf2.1, and save in "saved_model.pb".
And convert with the same previous code I get:
ValueError: This converter can only convert a single ConcreteFunction. Converting multiple functions is under development.

That's a bit surprising. How did you export your saved model? Could you use the saved_model_cli --show tool to dump an info about your saved model? I think by default there should be a serving graph inside it.

Hi Haoliang!
I follow your steps and other recomendations in the forums. But now I get an strange error:
error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')
error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')
error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type `('tensor<?x?x?x?xf32>')

The code that I use is:
First, to pass from CheckPoint to SavedModel:
import os
import tensorflow as tf

trained_checkPoint_prefix="model-32000"
trained_checkPoint_dir="nnet/"

loaded_graph = tf.Graph()
tf.compat.v1.enable_resource_variables()
with tf.Session(graph=loaded_graph) as sess:
    loader = tf.train.import_meta_graph(trained_checkPoint_dir+trained_checkPoint_prefix+'.meta')
    loader.restore(sess,trained_checkPoint_dir+trained_checkPoint_prefix)

    # Export Checkpoint to SavedModel
    builder = tf.saved_model.builder.SavedModelBuilder(trained_checkPoint_dir+'/v01')

    features = loaded_graph.get_tensor_by_name("features:0")
    is_training = loaded_graph.get_tensor_by_name("is_training:0")

    output = loaded_graph.get_tensor_by_name("tower_0/tdnn/batch_normalization_5/batchnorm/add_1 :0")

    builder.add_meta_graph_and_variables(sess, ["tag"], signature_def_map= {
    "model": tf.saved_model.signature_def_utils.predict_signature_def(
        inputs= {"features": features, "is_training":is_training},
        outputs= {"finalnode": output})
    })

    builder.save()

Second Step, Convert to Tensorflow Lite in 2.1 (or tf-nightly):
import os
import tensorflow as tf

trained_checkPoint_dir="nnet/"
freezeModel = trained_checkPoint_dir + "v01"

# Load the SavedModel.
saved_model_obj = tf.saved_model.load(export_dir=freezeModel,tags='tag')

# Load the specific concrete function from the SavedModel.
concrete_func = saved_model_obj.signatures['model']
print(concrete_func.inputs[0])

# Set the shape of the input in the concrete function.
if concrete_func.inputs[0].name=='features:0':
    concrete_func.inputs[0].set_shape([1,1000,23])
else:
    concrete_func.inputs[1].set_shape([1,1000,23])

# Convert the model to a TFLite model.
converter =  tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
converter.experimental_new_converter = True
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
                                   tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()

The error that I get is:

ConverterError                            Traceback (most recent call last)
<ipython-input-14-0f34bb0a99ac> in <module>
      4 converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
      5                                        tf.lite.OpsSet.SELECT_TF_OPS]
----> 6 tflite_model = converter.convert()

~/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/tensorflow_core/lite/python/lite.py in convert(self)
    462         input_tensors=input_tensors,
    463         output_tensors=output_tensors,
--> 464         **converter_kwargs)
    465
    466     if self._is_calibration_quantize():

~/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/tensorflow_core/lite/python/convert.py in toco_convert_impl(input_data, input_tensors, output_tensors, enable_mlir_converter, *args, **kwargs)
    455       input_data.SerializeToString(),
    456       debug_info_str=debug_info_str,
--> 457       enable_mlir_converter=enable_mlir_converter)
    458   return data
    459

~/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/tensorflow_core/lite/python/convert.py in toco_convert_protos(model_flags_str, toco_flags_str, input_data_str, debug_info_str, enable_mlir_converter)
    201       stdout = _try_convert_to_unicode(stdout)
    202       stderr = _try_convert_to_unicode(stderr)
--> 203       raise ConverterError("See console for info.\n%s\n%s\n" % (stdout, stderr))
    204   finally:
    205     # Must manually cleanup files.

ConverterError: See console for info.
2020-02-05 13:22:17.349230: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer.so.6'; dlerror: libnvinfer.so.6: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.0/lib64
2020-02-05 13:22:17.349295: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer_plugin.so.6'; dlerror: libnvinfer_plugin.so.6: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-10.0/lib64
2020-02-05 13:22:17.349304: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
2020-02-05 13:22:17.812215: W tensorflow/compiler/mlir/lite/python/graphdef_to_tfl_flatbuffer.cc:89] Ignored output_format.
2020-02-05 13:22:17.812244: W tensorflow/compiler/mlir/lite/python/graphdef_to_tfl_flatbuffer.cc:95] Ignored drop_control_dependency.
2020-02-05 13:22:17.870309: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-02-05 13:22:17.896653: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency:<PHONE_NUMBER> Hz
2020-02-05 13:22:17.897563: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7efcc41ffdc0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-02-05 13:22:17.897600: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-02-05 13:22:17.902733: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-02-05 13:22:17.922362: E tensorflow/stream_executor/cuda/cuda_driver.cc:351] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2020-02-05 13:22:17.922431: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (invest-rtx2080): /proc/driver/nvidia/version does not exist
error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')
error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')
error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')
Traceback (most recent call last):
  File "/home/investigacion/anaconda3/envs/py36tf2.1/bin/toco_from_protos", line 8, in <module>
    sys.exit(main())
  File "/home/investigacion/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/tensorflow_core/lite/toco/python/toco_from_protos.py", line 93, in main
    app.run(main=execute, argv=[sys.argv[0]] + unparsed)
  File "/home/investigacion/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/tensorflow_core/python/platform/app.py", line 40, in run
    _run(main=main, argv=argv, flags_parser=_parse_flags_tolerate_undef)
  File "/home/investigacion/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/absl/app.py", line 299, in run
    _run_main(main, args)
  File "/home/investigacion/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/absl/app.py", line 250, in _run_main
    sys.exit(main(argv))
  File "/home/investigacion/anaconda3/envs/py36tf2.1/lib/python3.6/site-packages/tensorflow_core/lite/toco/python/toco_from_protos.py", line 56, in execute
enable_mlir_converter)
Exception: <unknown>:0: error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')
<unknown>:0: error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')
<unknown>:0: error: type of return operand 0 ('tensor<*xf32>') doesn't match function result type ('tensor<?x?x?x?xf32>')

In this link I save the checkpoint if you want check it or repruduce the error.
Also I write in starckoverflow about this error in the next link

Hi
I tried to convert my model in TF 1.15 into .tflite using the following:
converter = tf.lite.TFLiteConverter.from_frozen_graph(model_pb_path, input_arrays, output_arrays,input_shapes)
converter.experimental_new_converter = True
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]

However, I encountered the following error:
TensorFlow Lite currently doesn't support control flow ops: Merge, Switch. We are working on supporting control flow ops, please see github issue at https://github.com/tensorflow/tensorflow/issues/28485. Some of the operators in the model are not supported by the standard TensorFlow Lite runtime and are not recognized by TensorFlow. If you have a custom implementation for them you can disable this error with --allow_custom_ops, or by setting allow_custom_ops=True when calling tf.lite.TFLiteConverter(). Here is a list of builtin operators you are using: ADD, ARG_MAX, CAST, CONCATENATION, CONV_2D, DIV, EQUAL, EXP, EXPAND_DIMS, FULLY_CONNECTED, GATHER, GATHER_ND, GREATER, GREATER_EQUAL, LESS, LOG, LOGICAL_AND, LOGISTIC, MAXIMUM, MAX_POOL_2D, MINIMUM, MUL, PACK, PAD, PADV2, RANGE, REDUCE_MAX, RESHAPE, RESIZE_NEAREST_NEIGHBOR, ROUND, SHAPE, SOFTMAX, SPARSE_TO_DENSE, SPLIT, SQRT, SQUEEZE, STRIDED_SLICE, SUB, SUM, TOPK_V2, TRANSPOSE_CONV, UNIQUE, WHERE. Here is a list of operators for which you will need custom implementations: DenseToDenseSetOperation.

I'm not calling any DenseToDenseSetOperation explicitly. Is this part of the backend engine that is used to convert the tf functions into .tflite?

TensorListStack

It seems that you are falling back to the old converter and not using the new one. It may due to that the tensorflow package you installed is a bit outdated. Could you share your model file with me so I can take a look? Thanks. (Or either, you can upgrade your tensorflow environment to the latest stable release, and then try it out)

@haozha111
I have update my tf to 2.1. However, I still encountered the same error:

https://github.com/tensorflow/tensorflow/issues/37003#issue-569633708

RuntimeError: Encountered unresolved custom op: TensorListFromTensor.Node number 892 (TensorListFromTensor) failed to prepare.
According` to your comment:

https://github.com/tensorflow/tensorflow/issues/28485#issuecomment-574453673
Maybe I need the new MLIR-based TF Lite converter. How to get this new MLIR-based TF Lite converter?
My project is here.

https://drive.google.com/open?id=15i6d9yJ-OAcPROiGEs-RWmG-v6KyQauK
You can train one model with train_test.ipynb and convert it with convert_model_test.ipynb.
Thanks a lot!

when would control flow ops: Merge, Switch be supported

Any Luck?

I had the same problem. Looking forward to your update!

I had the same problem. Looking forward to your update!

In my case I removed tf.bool variable and upgrade TF from 1.12.0 to 1.14.0 both tflite_convert and load model works!

With new converter now the default. TFLite should support Control Flow V2 ops.
Please if you have a model with control flow ops, enable control flow v2.
to enable Control flow v2:
tf.enable_control_flow_v2()
If you have problems, please file an issue with reproduce steps.
Thanks

tf.enable_control_flow_v2()

I am trying to convert a Tensorflow model to TFLite as follows
tf.enable_control_flow_v2()
converter = tf.lite.TFLiteConverter.from_frozen_graph('model.pb', #TensorFlow freezegraph .pb model file
                                                      input_arrays=['input'], # name of input arrays as defined in torch.onnx.export function before.
                                                      output_arrays=['output']  # name of output arrays defined in torch.onnx.export function before.
                                                      )
tf_lite_model = converter.convert()

but I still get the same error
2020-09-03 11:48:14.360640: F ./tensorflow/lite/toco/toco_tooling.h:38] Check failed: s.ok() Found ResizeBilinear as non-selected output from Switch, but only Merge supported. Control flow ops like Switch and Merge are not generally supported. We are working on fixing this, please see the Github issue at https://github.com/tensorflow/tensorflow/issues/28485. Fatal Python error: Aborted
Using Tensorflow 1.15

@e2r-htz You need to add this line "tf.enable_control_flow_v2()" not during converting but while creating/freezing your model.


my credentials.json list

gives my list of factory logins and passwords that I could find on the Internet, including wifi spy cameras supporting RTSP using android lookcampro and hdsmartIPC applications
{
"usernames": [
"",
"666666",
"888888",
"Admin",
"admin",
"admin1",
"administrator",
"Administrator",
"aiphone",
"Dinion",
"guest",
"root",
"service",
"supervisor",
"ubnt",
"user"
],
"passwords": [
"",
"0000",
"000000",
"1111",
"111111",
"1111111",
"11111111",
"1234",
"12341234",
"12345",
"123456",
"1234567",
"12345678",
"123456789",
"1234567890",
"4321",
"6666",
"666666",
"6fJjMKYx",
"8888",
"888888",
"9999",
"999999",
"999988",
"99999999",
"ADMIN",
"Admin",
"hi3518",
"jvbzd",
"JVC",
"Karnet",
"Meins",
"admin",
"administrator",
"aiphone",
"camera",
"fliradmin",
"GRwvcj8j",
"guest",
"hikadmin",
"hikvision",
"ikwd",
"jvc",
"kj3TqCWv",
"klv123",
"meinsm",
"none",
"novus",
"pass",
"password",
"password123",
"reolink",
"root",
"service",
"supervisor",
"system",
"tlJwpbo6",
"toor",
"tp-link",
"ubnt",
"user",
"wbox123",
"xc3511",
"xmhdipc",
"Y5eIMz3C"
]
}

Hi @Robin6464. Are you sure that all of those credentials are default credentials, set by the camera constructors?
Some of those password seem custom to me.
Thanks

which specific passwords?

Network Surveillance DVR - admin/xc3511
HiSilicon - root/xmhdipc or klv123 or xc3511 or 123456 or jvbzd or hi3518
tlJwpbo6 - not mine, it is in your source
kj3TqCWv - not mine, it is in your source
6fJjMKYx - not mine, it is in your source

Sounds good to me then, thanks! Are you willing to open a PR for it or do you want for someone else to do it? I'll be happy to accept your PR if you write one to add those into the default dictionary :)

In a few cases these passwords for me were confirmed when I used programs that also support cameras: RouterScan 2.60beta by Stas'M and routersploit. As for your question about PR, have someone else do it :)

wyslalem ci maila pare dni temu na konto podane w twoim profilu w sprawie pewnego przypadku zlego dzialania cameradar

Your email got caught in the spam filter, sorry about that. I'll answer it shortly.


Handle connection error

Hi everyone. how do i handle connection errors? I need to process an error that the server is turned off now and I can’t connect, and the error is that a connection failure.

You'll need to handle disconnection errors from the Starscream callback or use the reachability APIs (the old ones or the new ones in the Network framework) to check if the server is available for connections.


Clarification

Whether or not this line is needed depends on how much hand-holding we want this problem to have.

Inclined to agree (you could even go further!) — especially given that this is aimed at being beginner-friendly, and functions aren't introduced until five challenges later. (Coming from an intermediate-ish primarily Python background, JS function notation is still super non-intuitive to me!)
One of the most common speedbumps I've seen in beginner-friendly teaching materials is not realizing when a concept's being introduced. I'd argue that things can be used before they're understand (LPTHW is a great example of this), but it's a noticeable break in the pace here.


Not working with Toyotomi AC

Describe Your Problem:
I have installed the plugin through Homebridge UI and entered the Mac address of my Toyotomi A/C, but the plugin does not seem to "talk" to the A/C.
My A/C unit has wifi and is controlled through the Ewpe Smart app.
Logs:
[05/11/2024, 22:39:28] [Homebridge UI] Homebridge log truncated by ilias.
[05/11/2024, 22:39:31] [GREE Air Conditioner] Broadcast '{"t":"scan"}' <IP_ADDRESS>:7000
[05/11/2024, 22:39:31] [GREE Air Conditioner] handleMessage -> {"t":"pack","i":1,"uid":0,"cid":"","tcid":"","pack":"LP24Ek0OaYogxs3iQLjL4PbSM9V07U8GBMw5utmV5qRles6v4xqRXPNcduCE97KK8mkVsn0iN/2xV4f3+2PwiM9tn1GbVG5G5VGBeQc5Sg1fcXkMzJbGj+ESgba57A6z76c6nyr0h/GRxZaPcNiHRCPz2vbMhSNJGBQlHgTcauOPlJmKuBOYOUM81Puv0HfkxBEW3Y1RAHG4Us5KEDstpA1AXR9IsVDWBspeCCbdOsqBHV3JTN/hW6UWDYaKUON0n0bsO2w1e33GhoYubCMOP5dsI0icdvFpH/SBgxCBvx9bB0R3PrIWmcUp+lgonFSW9DVnFDlXHbyQd7n22B8MaB3UkAiWZTeFBh2DI983MyY="}
[05/11/2024, 22:39:31] [GREE Air Conditioner] handleMessage -> Encryption version: 1
[05/11/2024, 22:39:31] [GREE Air Conditioner] handleMessage - Package -> {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330"}
[05/11/2024, 22:39:31] [GREE Air Conditioner] registerDevice - deviceInfo: {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330","address":"<IP_ADDRESS>","port":7000,"encryptionVersion":1}
[05/11/2024, 22:39:31] [GREE Air Conditioner] registerDevice - already initalized: Toyotomi d47c08da-665e-44fd-a107-ff9e845763b2 c0393704fbef
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get HeatingThresholdTemperature -> 25
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get CoolingThresholdTemperature -> 25
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get TemperatureDisplayUnits -> CELSIUS
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get Heater Cooler CurrentTemperature -> 25
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get RotationSpeed -> 2 (auto)
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get SwingMode -> DISABLED
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get TargetHeaterCoolerState -> AUTO
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get CurrentHeaterCoolerState -> INACTIVE
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get Active -> INACTIVE
[05/11/2024, 22:39:51] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get Temperature Sensor CurrentTemperature -> 25
[05/11/2024, 22:39:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set Active -> ACTIVE
[05/11/2024, 22:39:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] power -> on, mode -> auto
[05/11/2024, 22:39:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Send commands -> {"Pow":1,"Mod":0}
[05/11/2024, 22:39:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"t":"cmd","opt":["Pow","Mod"],"p":[1,0]}
[05/11/2024, 22:39:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[05/11/2024, 22:39:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"B7VT5Il58OS+xPAMIKRVVGFIx9Yu4g8yxy1DKFFawhpWWX/LsfmSQmuLz4ErdWKA","i":1,"cid":"app"}
[05/11/2024, 22:39:59] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set Active -> INACTIVE
[05/11/2024, 22:40:08] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set Active -> ACTIVE
[05/11/2024, 22:40:08] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] power -> on, mode -> auto
[05/11/2024, 22:40:08] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Send commands -> {"Pow":1,"Mod":0}
[05/11/2024, 22:40:08] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"t":"cmd","opt":["Pow","Mod"],"p":[1,0]}
[05/11/2024, 22:40:08] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[05/11/2024, 22:40:08] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"B7VT5Il58OS+xPAMIKRVVGFIx9Yu4g8yxy1DKFFawhpWWX/LsfmSQmuLz4ErdWKA","i":1,"cid":"app"}
[05/11/2024, 22:40:31] [GREE Air Conditioner] Broadcast '{"t":"scan"}' <IP_ADDRESS>:7000
[05/11/2024, 22:40:31] [GREE Air Conditioner] handleMessage -> {"t":"pack","i":1,"uid":0,"cid":"","tcid":"","pack":"LP24Ek0OaYogxs3iQLjL4PbSM9V07U8GBMw5utmV5qRles6v4xqRXPNcduCE97KK8mkVsn0iN/2xV4f3+2PwiM9tn1GbVG5G5VGBeQc5Sg1fcXkMzJbGj+ESgba57A6z76c6nyr0h/GRxZaPcNiHRCPz2vbMhSNJGBQlHgTcauOPlJmKuBOYOUM81Puv0HfkxBEW3Y1RAHG4Us5KEDstpA1AXR9IsVDWBspeCCbdOsqBHV3JTN/hW6UWDYaKUON0n0bsO2w1e33GhoYubCMOP5dsI0icdvFpH/SBgxCBvx9bB0R3PrIWmcUp+lgonFSW9DVnFDlXHbyQd7n22B8MaB3UkAiWZTeFBh2DI983MyY="}
[05/11/2024, 22:40:31] [GREE Air Conditioner] handleMessage -> Encryption version: 1
[05/11/2024, 22:40:31] [GREE Air Conditioner] handleMessage - Package -> {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330"}
[05/11/2024, 22:40:31] [GREE Air Conditioner] registerDevice - deviceInfo: {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330","address":"<IP_ADDRESS>","port":7000,"encryptionVersion":1}
[05/11/2024, 22:40:31] [GREE Air Conditioner] registerDevice - already initalized: Toyotomi d47c08da-665e-44fd-a107-ff9e845763b2 c0393704fbef
[05/11/2024, 22:40:33] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set Active -> INACTIVE
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set TargetHeaterCoolerState -> COOL
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] mode -> cool, xFan -> on
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Send commands -> {"Mod":1,"Blo":1}
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"t":"cmd","opt":["Mod","Blo"],"p":[1,1]}
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"B7VT5Il58OS+xPAMIKRVVD6jBwW2xubPToYD0fADISKr/TEnLccdXJwOa4fsCbz9","i":1,"cid":"app"}
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set Active -> ACTIVE
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] power -> on, mode -> auto
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Send commands -> {"Pow":1,"Mod":0}
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"t":"cmd","opt":["Pow","Mod"],"p":[1,0]}
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[05/11/2024, 22:40:54] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"B7VT5Il58OS+xPAMIKRVVGFIx9Yu4g8yxy1DKFFawhpWWX/LsfmSQmuLz4ErdWKA","i":1,"cid":"app"}
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set TargetHeaterCoolerState -> HEAT
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] mode -> heat
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Send commands -> {"Mod":4}
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"t":"cmd","opt":["Mod"],"p":[4]}
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"B7VT5Il58OS+xPAMIKRVVAm2TOrMNzSXjuUyzplGWvjpyhNX6ZNWv5dfVP60FBpD","i":1,"cid":"app"}
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set Active -> ACTIVE
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] power -> on, mode -> cool, xFan -> on
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Send commands -> {"Pow":1,"Mod":1,"Blo":1}
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"t":"cmd","opt":["Pow","Mod","Blo"],"p":[1,1,1]}
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[05/11/2024, 22:40:55] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"B7VT5Il58OS+xPAMIKRVVC0am/TSgi+XU93F7boXd6gbIPecPqEkoxFqIs64Wkic6coTV+mTVr+XX1T+tBQaQw==","i":1,"cid":"app"}

Plugin Config:
{
    "bridge": {
        "name": "Homebridge XXX",
        "username": "XXX",
        "port": 51614,
        "pin": "XXX-XX-XXX",
        "advertiser": "avahi"
    },
    "accessories": [],
    "platforms": [
        {
            "name": "Config",
            "port": 8581,
            "platform": "config"
        },
        {
            "name": "Gree AC",
            "language": "en",
            "port": 7000,
            "scanAddress": "<IP_ADDRESS>",
            "scanCount": 10,
            "scanTimeout": 3000,
            "logStatus": true,
            "defaultValue": {
                "statusUpdateInterval": 3,
                "hasFanMode": true,
                "hasDryMode": true,
                "defaultSpeed": 3,
                "defaultVerticalSwing": 0,
                "defaultHorizontalSwing": 0
            },
            "devices": [
                {
                    "disabled": false,
                    "mac": "c0393704fbef",
                    "name": "Toyotomi",
                    "statusUpdateInterval": 1,
                    "hasFanMode": true,
                    "hasDryMode": true,
                    "sensorOffset": 40,
                    "defaultSpeed": 1,
                    "switches": "power"
                }
            ],
            "platform": "GreeAirConditioner"
        },
        {
            "name": "GREE Air Conditioner",
            "scanInterval": 60,
            "devices": [
                {
                    "mac": "c0393704fbef",
                    "name": "Toyotomi",
                    "speedSteps": 5,
                    "statusUpdateInterval": 10,
                    "sensorOffset": 0,
                    "minimumTargetTemperature": 16,
                    "maximumTargetTemperature": 30,
                    "xFanEnabled": true,
                    "temperatureSensor": "child",
                    "overrideDefaultVerticalSwing": 0,
                    "defaultVerticalSwing": 0,
                    "encryptionVersion": 0
                }
            ],
            "platform": "GREEAirConditioner"
        }
    ],
    "disabledPlugins": [
        "homebridge-gree-air-conditioner"
    ]
}

Environment:

Plugin Version: 2.1.2
Homebridge Version: 1.8.5
Node.js Version: 20.12.2
NPM Version: 10.5.0
Operating System: Debian GNU/Linux Bookworm (12)

It seems that you have installed and configured two different plugins for the same AC unit. Please remove the conflicting plugin. Try to restart homebridge and if it does not work send me a new debug log which contains also all startup information. (Attached log is missing messages after homebridge/plugin startup.)

Hi,
The other plugin was disabled, however I went ahead and uninstalled it.
Here are the logs after restarting homebridge (in the end, I tried sending a command through homekit, however the A/C did not respond).
Logs:
[06/11/2024, 19:37:51] [GREE Air Conditioner] Initializing GREEAirConditioner platform...
[06/11/2024, 19:37:51] [GREE Air Conditioner] Checking network interfaces
[06/11/2024, 19:37:51] [GREE Air Conditioner] Interface: 'wlan0' Address: <IP_ADDRESS> Netmask: <IP_ADDRESS> Broadcast: <IP_ADDRESS>
[06/11/2024, 19:37:51] [GREE Air Conditioner] Homebridge host addresses:  { '<IP_ADDRESS>': '<IP_ADDRESS>' }
[06/11/2024, 19:37:51] [GREE Air Conditioner] Finished initializing platform
[06/11/2024, 19:37:51] [GREE Air Conditioner] Loading accessory from cache: Toyotomi {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330","address":"<IP_ADDRESS>","port":7000,"encryptionVersion":1}
[06/11/2024, 19:37:51] [GREE Air Conditioner] Executed didFinishLaunching callback
[06/11/2024, 19:37:51] Publishing bridge accessory (name: Homebridge 1C82, publishInfo: {
  username: '0E:66:E7:21:1C:82',
  port: 51614,
  pincode: '***-**-***',
  category: 2,
  bind: undefined,
  mdns: undefined,
  addIdentifyingMaterial: true,
  advertiser: 'avahi'
}).
Setup Payload:
X-HM://0024B2454NOJ4
Enter this code with your HomeKit app on your iOS device to pair with Homebridge:

    ┌────────────┐
    │ 506-01-080 │
    └────────────┘

[06/11/2024, 19:37:52] [GREE Air Conditioner] GREEAirConditioner (homebridge-gree-ac) v2.1.2 is running on UDP port 34937
[06/11/2024, 19:37:52] Homebridge v1.8.5 (HAP v0.12.3) (Homebridge 1C82) is running on port 51614.
[06/11/2024, 19:37:52]

NOTICE TO USERS AND PLUGIN DEVELOPERS
> Homebridge 2.0 is on the way and brings some breaking changes to existing plugins.
> Please visit the following link to learn more about the changes and how to prepare:
> https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0

[06/11/2024, 19:38:52] [GREE Air Conditioner] Broadcast '{"t":"scan"}' <IP_ADDRESS>:7000
[06/11/2024, 19:38:52] [GREE Air Conditioner] handleMessage -> {"t":"pack","i":1,"uid":0,"cid":"","tcid":"","pack":"LP24Ek0OaYogxs3iQLjL4PbSM9V07U8GBMw5utmV5qRles6v4xqRXPNcduCE97KK8mkVsn0iN/2xV4f3+2PwiM9tn1GbVG5G5VGBeQc5Sg1fcXkMzJbGj+ESgba57A6z76c6nyr0h/GRxZaPcNiHRCPz2vbMhSNJGBQlHgTcauOPlJmKuBOYOUM81Puv0HfkxBEW3Y1RAHG4Us5KEDstpA1AXR9IsVDWBspeCCbdOsqBHV3JTN/hW6UWDYaKUON0n0bsO2w1e33GhoYubCMOP5dsI0icdvFpH/SBgxCBvx9bB0R3PrIWmcUp+lgonFSW9DVnFDlXHbyQd7n22B8MaB3UkAiWZTeFBh2DI983MyY="}
[06/11/2024, 19:38:52] [GREE Air Conditioner] handleMessage -> Encryption version: 1
[06/11/2024, 19:38:52] [GREE Air Conditioner] handleMessage - Package -> {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330"}
[06/11/2024, 19:38:52] [GREE Air Conditioner] registerDevice - deviceInfo: {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330","address":"<IP_ADDRESS>","port":7000,"encryptionVersion":1}
[06/11/2024, 19:38:52] [GREE Air Conditioner] registerDevice - HeaterCooler initialized: Toyotomi c0393704fbef d47c08da-665e-44fd-a107-ff9e845763b2
[06/11/2024, 19:38:52] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] deviceConfig -> {"mac":"c0393704fbef","name":"Toyotomi","speedSteps":5,"statusUpdateInterval":10,"sensorOffset":0,"minimumTargetTemperature":16,"maximumTargetTemperature":30,"xFanEnabled":true,"temperatureSensor":"child","overrideDefaultVerticalSwing":0,"defaultVerticalSwing":0,"encryptionVersion":0}
[06/11/2024, 19:38:52] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Add Temperature Sensor child service
[06/11/2024, 19:38:52] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Device handler is listening on UDP port 43666
[06/11/2024, 19:38:52] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Bind to device -> c0393704fbef
[06/11/2024, 19:38:52] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"mac":"c0393704fbef","t":"bind","uid":0}
[06/11/2024, 19:38:52] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[06/11/2024, 19:38:52] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"GkGEP7B4wolAjHIWnuS9xZQEBpwal8DoeZNV63fO5Eij9mrs/0p7GUTdWxmNaBUt","i":1,"cid":"app"}
[06/11/2024, 19:39:52] [GREE Air Conditioner] Broadcast '{"t":"scan"}' <IP_ADDRESS>:7000
[06/11/2024, 19:39:52] [GREE Air Conditioner] handleMessage -> {"t":"pack","i":1,"uid":0,"cid":"","tcid":"","pack":"LP24Ek0OaYogxs3iQLjL4PbSM9V07U8GBMw5utmV5qRles6v4xqRXPNcduCE97KK8mkVsn0iN/2xV4f3+2PwiM9tn1GbVG5G5VGBeQc5Sg1fcXkMzJbGj+ESgba57A6z76c6nyr0h/GRxZaPcNiHRCPz2vbMhSNJGBQlHgTcauOPlJmKuBOYOUM81Puv0HfkxBEW3Y1RAHG4Us5KEDstpA1AXR9IsVDWBspeCCbdOsqBHV3JTN/hW6UWDYaKUON0n0bsO2w1e33GhoYubCMOP5dsI0icdvFpH/SBgxCBvx9bB0R3PrIWmcUp+lgonFSW9DVnFDlXHbyQd7n22B8MaB3UkAiWZTeFBh2DI983MyY="}
[06/11/2024, 19:39:52] [GREE Air Conditioner] handleMessage -> Encryption version: 1
[06/11/2024, 19:39:52] [GREE Air Conditioner] handleMessage - Package -> {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330"}
[06/11/2024, 19:39:52] [GREE Air Conditioner] registerDevice - deviceInfo: {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330","address":"<IP_ADDRESS>","port":7000,"encryptionVersion":1}
[06/11/2024, 19:39:52] [GREE Air Conditioner] registerDevice - already initalized: Toyotomi d47c08da-665e-44fd-a107-ff9e845763b2 c0393704fbef
[06/11/2024, 19:40:06] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get Active -> INACTIVE
[06/11/2024, 19:40:06] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get TargetHeaterCoolerState -> AUTO
[06/11/2024, 19:40:06] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get HeatingThresholdTemperature -> 25
[06/11/2024, 19:40:06] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get CoolingThresholdTemperature -> 25
[06/11/2024, 19:40:06] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get CurrentHeaterCoolerState -> INACTIVE
[06/11/2024, 19:40:06] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get Heater Cooler CurrentTemperature -> 25
[06/11/2024, 19:40:06] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get Temperature Sensor CurrentTemperature -> 25
[06/11/2024, 19:40:07] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get SwingMode -> DISABLED
[06/11/2024, 19:40:07] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get RotationSpeed -> 2 (auto)
[06/11/2024, 19:40:07] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Get TemperatureDisplayUnits -> CELSIUS
[06/11/2024, 19:40:32] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Set Active -> ACTIVE
[06/11/2024, 19:40:32] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] power -> on, mode -> auto
[06/11/2024, 19:40:32] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] Send commands -> {"Pow":1,"Mod":0}
[06/11/2024, 19:40:32] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage - Package -> {"t":"cmd","opt":["Pow","Mod"],"p":[1,0]}
[06/11/2024, 19:40:32] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage -> Encryption version: 1
[06/11/2024, 19:40:32] [GREE Air Conditioner] [Toyotomi -- <IP_ADDRESS>:7000] sendMessage {"tcid":"c0393704fbef","uid":0,"t":"pack","pack":"B7VT5Il58OS+xPAMIKRVVGFIx9Yu4g8yxy1DKFFawhpWWX/LsfmSQmuLz4ErdWKA","i":1,"cid":"app"}
[06/11/2024, 19:40:52] [GREE Air Conditioner] Broadcast '{"t":"scan"}' <IP_ADDRESS>:7000
[06/11/2024, 19:40:52] [GREE Air Conditioner] handleMessage -> {"t":"pack","i":1,"uid":0,"cid":"","tcid":"","pack":"LP24Ek0OaYogxs3iQLjL4PbSM9V07U8GBMw5utmV5qRles6v4xqRXPNcduCE97KK8mkVsn0iN/2xV4f3+2PwiM9tn1GbVG5G5VGBeQc5Sg1fcXkMzJbGj+ESgba57A6z76c6nyr0h/GRxZaPcNiHRCPz2vbMhSNJGBQlHgTcauOPlJmKuBOYOUM81Puv0HfkxBEW3Y1RAHG4Us5KEDstpA1AXR9IsVDWBspeCCbdOsqBHV3JTN/hW6UWDYaKUON0n0bsO2w1e33GhoYubCMOP5dsI0icdvFpH/SBgxCBvx9bB0R3PrIWmcUp+lgonFSW9DVnFDlXHbyQd7n22B8MaB3UkAiWZTeFBh2DI983MyY="}
[06/11/2024, 19:40:52] [GREE Air Conditioner] handleMessage -> Encryption version: 1
[06/11/2024, 19:40:52] [GREE Air Conditioner] handleMessage - Package -> {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330"}
[06/11/2024, 19:40:52] [GREE Air Conditioner] registerDevice - deviceInfo: {"t":"dev","cid":"","bc":"00000000000000000000000000000000","brand":"gree","catalog":"gree","mac":"c0393704fbef","mid":"10001","model":"gree","name":"","lock":0,"series":"gree","vender":"1","ver":"V3.2.M","hid":"362001068254+U-4MWB65VRV2.09.bin","ModelType":"33546330","address":"<IP_ADDRESS>","port":7000,"encryptionVersion":1}
[06/11/2024, 19:40:52] [GREE Air Conditioner] registerDevice - already initalized: Toyotomi d47c08da-665e-44fd-a107-ff9e845763b2 c0393704fbef

Thanks.

Thank you!
The log tells me that currently the following happens:
GREE AC plugin is using UDP port 34937 for general network communication. Initially the plugin sends a broadcast message to query all devices on the network. Your AC unit responds to this query to port 34937 and the plugin can read the unit's parameters. This is OK. The plugin knows at this moment the device's IP address, the encryption version, and some other parameters.
As a second step the plugin tries to bind to the AC unit. The plugin assigns UDP port 43666 for dedicated unicast communication. It sends a bind request to the AC device and waits for response listening on port 43666. Unfortunately the AC device does not reply to the bind request. This is a problem.
The missing response does not generate an error because it is not possible to decide why is the response missing. But if the AC device is not bound to the plugin then it is not possible to control the AC device from the plugin.
The AC device is registered in Home App at the first step, when the plugin has received the device parameters. But the second step is not complete so the plugin can not communicate with the device.
Possible reasons:

Sometimes the AC device is malfunctioning. Usually a reboot solves this problem. Try to remove AC power from the device, wait a minute and turn on power again. After that restart homebridge and if we have luck your device will bind to the plugin.
Maybe a firewall blocks communication on UDP port 43666 (dedicated unicast communication) but not on UDP port 34937 (broadcast communication). Check your firewall settings if any and try to set the ports manually. In version 2.1.3 you can set both ports manually. If ports are auto assigned then they can change on each homebridge restart (this is not firewall friendly).
In worst case the missing response means that your AC device is not compatible with this plugin. In this case your AC device does not understand the official bind request and it won't communicate with this plugin. Unfortunately there is no solution for that problem.

I hope that the first case above will solve your problem.
An additional note to your config: "sensorOffset": 0 may be wrong. Normally value 40 is the correct parameter. Do not change it from the default 40 until you see that temperature values are incorrect.

Hi @ilikourou
I have published a new version of the plugin: v2.1.4
Please install this version and test if it solves your problem.
Don't forget to set "sensorOffset" to 40 in your config!

Hello,
I upgraded to the last version and the A/C is now working.
Thanks a lot!
One last thing left to deal with is the max allowed temperature (which in plugin is set to 30 but in Home App only goes up to 25).
I read about the limitation, however I am not sure what "active cooling/ heating" means. I've tried closing and opening up again Home app multiple times, but max value is still 25.
Update: I tried restarting the iPad and now the max value is correctly set to 30. So, if closing and opening the Home App does not work by itself, try restarting the device.

Hi,
thank you for your feedback!
Yes, closing the home app means you have to remove it from device (iPhone / iPad / mac) memory. It's possible by restarting the device or by quitting the app. On iPhone you can quit this way:

From the Home Screen, swipe up from the bottom of the screen and pause in the middle of the screen.
Swipe right or left to find the app that you want to close.
Swipe up on the app's preview to close the app.


Add link button pattern

This is a pattern we use in the admin app to link off to the view of a service in the buyer app.
It would be good to have it shared, so that it could be used the same way in the supplier app.

I have some reservations about the button-like appearance and the positioning makes it feel a bit disconnected from the context of the service. But, happy for it to go live for consistency between the two apps, we can fix both at some point.
In summary... LGTM :+1: 😔


Update soroban-rpc docs

Add new fields
Move optionality explanations to the end
Make the documention of every field consistent
Remove multiple results from the example (since multiop transactions are not supported)

Preview is available here:http://soroban-docs-pr551.previews.kube001.services.stellar-ops.com/


公众号消息无法更新

First, make sure your issue is strictly related to the Electronic WeChat project. If it's a question or feature request, you can remove the template below.
Description
v1.2.0
公众号消息无法更新
Specifications

Version of Electron (run $ electron --version): v0.0.0
Version of Node.js (run $ node --version): v0.0.0
OS: <OS>
Architecture <ARCH>
Stack trace from the error message (if any)

<Stack trace here>

微信 WebApp by design 就是这样的。


Add a news channel + finance summarization model

Use https://huggingface.co/human-centered-summarization/financial-summarization-pegasus or something similar to summarize the financial news and keep everyone updated.

Find source for important news headlines that relate to stocks / crypto
Scrape their headlines
Post headlines + sentiment

Could add a news channel for stocks & crypto + sentiment model and replace news channel in crypto channel.
Also should add a news-overview channel with the sentiment and maybe related tickers

There should be a website that covers crypto / stocks / financial news and that is scrapeable

We now use NLTK's VADER for headline analyses for /sentiment

https://cryptopanic.com/ for crypto news


Add data model docs

With recently joining the project, I've been learning about how things work. In my experience, having more documentation (as long as it's reasonably up to date!) is better than less, so I've written up some of my notes. Would these be useful for other contributors to the project?

I was thinking about suggesting this myself - I think it's a great idea. I agree that the main concern I had was whether the team has the capacity to keep documentation up-to-date. I was hoping to hear from some folks who have been around Code for Boston longer to learn more about their experience with documentation in that context. Personally, I definitely find documentation like this useful when getting up to speed on a project.

This is great. Thanks Mike.