text:
How to use IP-Adapter + ControlNet

Code
python3 main.py  --prompt "handsome guy in the city"  --ip_repo_id XLabs-AI/flux-ip-adapter --ip_name flux-ip-adapter.safetensors --device cuda --use_ip  --img_prompt assets/example_images/statue.png --control_type canny --repo_id XLabs-AI/flux-controlnet-canny-v3 --name flux-canny-controlnet-v3.safetensors --use_controlnet --image assets/example_images/canny_example2.png
Sample

IP-Adapter image
Controlnet image
Result

Hi, thank you for using our adapters!
Currently it works bad as you see (IP-adapter mix with LoRA and ControlNet). We are exploring this issue how can we fix it.

authors: Anghellia jaebbb

repo: XLabs-AI/x-flux


text:
MeshInfo - compiler error on Unity 2019.3

XRTK - Mixed Reality Toolkit Bug Report
Describe the bug
The type or namespace name 'MeshInfo' could not be found
The offending line is:
https://github.com/XRTK/Lumin/blob/dbd3a908bf250af59b7d4d275457ccc09e309251/XRTK.Lumin/Packages/com.xrtk.lumin/Runtime/Providers/SpatialAwarenessSystem/SpatialObservers/LuminSpatialMeshObserver.cs#L152
To Reproduce
Create project with 2019.3.
Compile
See above error
Your Setup

Unity Version 2019.3.9f0
XRTK Version 0.2.0
Additional context
I think MeshInfo got removed in 2019.2.  However, I'm also pretty sure that the function throwing the error in XRTK is unused: the lines pointing at it have been commented out.

Thanks! I'll try to give this a look see. For now I believe the XRTK is pinned at 2019.1.14f1 but will try to update to the latest 2019.4 TLS as soon as possible. https://github.com/XRTK/XRTK-Core/issues/673

Yeah, I saw that.  I'll be updating to 2019.4 as soon as I have the current batch of (non-XRTK) errors resolved.  I'll fork lumin for now and fix this there.
Would you like a PR with any changes coming back your way?

That'd be awesome of ya 😎
Really the whole meshing system needs an update I think to be the native implementation. I think commenting it out would just disable the spatial awareness system, as it wouldn't be generating any meshes.

source: gharchive/issue

authors: FrozenKiwi StephenHodgson

repo: XRTK/Lumin

license: MIT

license_type: permissive

license_source: github-api


text:
Added preview package capabilities

Overview
Modernized the package with core dependency and azure pipelines
Changes

added preview core package dep
added azure pipelines yaml

/azp run

/azp run

source: gharchive/pull-request

repo: XRTK/SDK


text:
test issue

bi gissue

ok

sdf

authors: XUXICHEN totalbackone

license: mit

license_source: bigquery


text:
Add rodrigofranco.com

HELLO WORLD
https://rodrigofranco.com/
Webring icon is in on the bottom right of every page.

Nice website, I'm wondering, do you have any on-site projects? It seems like all the projects are documented offsite

Thanks. Most pages are for what I would call projects -- how I configure my vintage machines (x220), how do I manage my digital music library, vinyls, etc.
I would say the website is a simple wiki / ideas repository more than anything.

Moved some stuff around and now I have just 3 external links.

I'm going to hold off merging this until there's more projects documented on the website itself, it's on track to getting there, but right now it feels incomplete. I hope you make another PR when the website is further down the line :)

@neauoire  I imported content from many of my other sites/sources and organized the homepage to make it clear. Sorry about being a pain, but I really think my site deserves to be part of the webring — I feel like I found my tribe there :)
Can I get reconsidered?  🙇

authors: caffo neauoire

repo: XXIIVV/webring


text:
Failed to run a caffemodel obtaining AbsVal_layer

I have successfully built dynamic library of mace using tools/build_standalone.sh by adding new  code assigning with absval operator including mace/ops/absval.cpp+mace/ops/absval.h+mace/kernels/absval.h+mace/kernels/opencl/absval.cpp+mace/kernels/opencl/cl/absval.cl.
I also modified mace/python/tools/caffe_converter.py and mace/python/tools/shape_inference.py and mace/python/tools/base_converter.py to support the new absval operator, and successfully run python tools/convert.py convert --config=/path/of/my/yaml to generate library.
However, when I tried to run python tools/convert.py run --config=/path/of/my/yaml to test,
it shown  error info like below
F registry.h:45 Key not registered: AbsVal0T_DT_FLOAT
Aborted
ERROR: [Mace Run] Mace run failed.
How could solved it?

You need to register your new op.
@yejw5 ， could you complement docs (https://github.com/XiaoMi/mace/issues/145) for 'Adding new ops' session?

@peyer

Firstly, use .cc extension instead of .cpp for your source files.
And than register the new op in mace/ops/ops_register.cc. I will update the relevant docs later.

Please refer to doc https://mace.readthedocs.io/en/latest/development/adding_a_new_op.html

@liyinhgqw I am so sorry about not clearly making sense of adding new op that leading to not add corresponding code in mace/ops/ops_register.cc. I have modified. Thanks a lot!

@liyinhgqw I copied opencl kernel of addn operator to my absval operator, and changed add mode to abs mode. However, when I tried to use absval op in GPU device, the return value of  runtime->command_queue().enqueueNDRangeKernel( ) of TuningOrRun2DKernel() became CL_INVALID_KERNEL.
what about your advice?

authors: liyinhgqw peyer yejw5

repo: XiaoMi/mace


text:
fp16 train.py version

Great work, but when i try to use fp16 to train the model, it appears ValueError: Attempting to unscale FP16 gradients bug, could u help me to solve the bug.

Great work, but when i try to use fp16 to train the model, it appears ValueError: Attempting to unscale FP16 gradients bug, could u help me to solve the bug.

Sorry, It's really hard to help you to solve this problem. You know, This error may happen in various ways and in some lines of your code.

Did you train using fp16? I only modified the input data part, which shouldn't cause that bug.

Did you train using fp16? I only modified the input data part, which shouldn't cause that bug.

Oh, I get your means. The training code hasn't been adapted for fp16 training. I thought you had adapted the code by yourself. Besides,  I have no spare time to update it. Maybe you can do it yourself.

Okay, thank you for your reply.

authors: Xiaojiu-z ZhuangLii

repo: Xiaojiu-z/Stable-Makeup


text:
AIRToAIE Lowering for Channels to ObjectFifos (L1 to L1)

This PR adds a new test-pattern to AIRToAIE.cpp called "lower-air-channels".  For now, the lowering is done for data movement from L1 to L1.
The pattern should be called after applying test patterns "to-aie-mlir" and "specialize-affine-if" first. As "to-aie-mlir" seems to delete air.channel operations, they must be manually added back in before applying the channel lowering pattern.

Added a test in mlir/test/Conversion/AIRToAIE/

As "to-aie-mlir" seems to delete air.channel operations, they must be manually added back in before applying the channel lowering pattern.

Please check if https://github.com/Xilinx/mlir-air/pull/159 helps with this.

authors: AndraBisca fifield

repo: Xilinx/mlir-air


text:
Can't change BOS token or EOS token for GPT Neo

In order to better control the start and stop of generated text, I have added BOS tokens and EOS tokens for GPT2xl.  This works well and the generated text stops at an appropriate length and starts how a normal sentence would.  However, I want to do this process on GPT Neo, and this does not work.  I have discovered that for some reason arguments that normally set BOS and EOS are not working when GPT Neo is ran, even if I change the tokenizer from AutoTokenizer to GPT2Tokenizer.  Below is some code that shows what I mean.
    tokenizer = GPT2Tokenizer.from_pretrained(
    model_args.model_name_or_path, bos_token='<|beginingtext|>',eos_token='<|endingtext|>', pad_token='<|pad|>',**tokenizer_kwargs)
    print(tokenizer.eos_token)
    print(tokenizer.bos_token)
    quit()

As I said, when I run this with GPT2xl, the tokens are appropriately changed.  When I run this with GPT Neo, both the BOS and EOS tokens are <|endoftext|>

After looking into this further, this may be a bug outside of this project.  I am going to make an issue on the hugging face repo.  I could be wrong though.

Not 100% sure about this, but according to https://github.com/finetuneanon/gpt-neo_finetune_2.7B#dataset-preparation there is no BOS token in GPT Neo.

Thanks.  Maybe its not a bug then.  Without a BOS token and EOS token, I can still accomplish my goals, just takes a different, not as elegant method.
Thanks!


text:
[Enhancement] Dynamic-created webhook

Checks

[X] I confirm that I have searched for existing issues / pull requests before reporting to avoid duplicate reporting.
[X] I confirm that I noted that if I don't follow the instructions, the issue may be closed directly.

Description
Back in @ErdbeerbaerLP's DiscordIntegration, the webhook used to relay messages from the Minecraft server players to Discord was created automatically by the bot in runtime, instead of need to be created by the server owner and then fed its url to the config. I wonder if a similar mechanic could be implemented on MCDiscordChat, allowing for quick channel switching (just changing the channel ID on config).

String webhookUrl -> boolean useWebhook
Require renewal of application (bot) permission (=537054224), which adds "Manage Webhooks".

Please fix your pull request as soon as possible. Thanks

You can discard that PR tbh, i think my translation have too much "creative liberties" compared to the english text.

Ok

repo: Xujiayao/MCDiscordChat


text:
🛑 YATeam Web is down

In 6cd1361, YATeam Web (https://www.yateam.cc) was down:

HTTP code: 0
Response time: 0 ms

Resolved: YATeam Web is back up in edd5329 after 40 minutes.

repo: YAT-Publish/status


text:
请在query和form表单上支持参数类型

版本号
~ 1.7.0
什么问题
~ swagger导入，query域的入参丢失参数类型
请在query和form表单上支持参数类型
如何复现此问题
~
什么浏览器
~ chrom
什么系统（Linux, Windows, macOS）

+1，希望query和form支持参数类型

+1，希望query和form支持参数类型

authors: ansinlee dwdcth zhijieqing

repo: YMFE/yapi


text:
本地部署打开特别慢

版本号
~ 最新版
什么问题
~ 阿里云的服务器，只部署了yapi，每次访问都特别慢，最近几次打开需要10几秒，进去之后就很快了
如何复现此问题
~ www.zhuweidong.com:3000
什么浏览器
~ 谷歌
什么系统（Linux, Windows, macOS）
macOS

打扰了。。。可能是我DNS解析的问题


text:
Bug: function yourls_get_locate() not check file exists

Code of Conduct

[X] I agree to follow this project's Code of Conduct.

Submission validity

[X] This is not a personal support request, that should be posted on discussions community.
[X] I checked current issues and this request isn't a duplicate of an existing issue, opened or closed.

Self troubleshooting

[X] I've read the documentation and made sure to follow it.
[X] I've read the troubleshooting first steps and frequent issues guides.

Version
1.9.2
Description
https://github.com/YOURLS/YOURLS/blob/f7fbeacf8bba2d7459262ffdc9c2ff8dfb35f3ef/includes/functions-l10n.php#L37-L50
The function yourls_get_locate() does not check for the existence of a language file.
Expectation
I would like to add checks, here is an example of a check file, since I don't know how you write it I can only offer the solution I wrote myself
That is, if the file does not exist, or if the file fails to load, return en_US.
As for the problem of different browsers, my solution is to add aliases within the JSON with the plugin to add symlink, to solve the method that can read the
But I would like you to add readlink() to read which language file is being used.
function checkLanguageFile($languageCode) {
    $filename = $languageCode . '.mo';

    if (file_exists($filename)) {
        return $languageCode;
    } else {
        return 'en_US';
    }
}

If the returned content is en_US, then the following command returns the text of $1 directly, without reading the plugin's language library
yourls__( 'Language Code', 'i18n_manager' );

Reproduction steps
No response
Context
Don't ask me why I know this, because I was writing the I18N Manager plugin and found this problem

I wonder if this could be a good candidate to use the yourls_include_file_sandbox() function.  See https://github.com/YOURLS/YOURLS/blob/f7fbeacf8bba2d7459262ffdc9c2ff8dfb35f3ef/includes/functions.php#L1313

I tried to modify that function, you guys can test it (I wrote it directly in issue because I'm afraid of getting REJECTED if I submit it directly)
<?php

function yourls_get_locale() {

    global $yourls_locale;

    function is_mo_file_valid($filePath) {
        $isValid = file_exists($filePath) && is_readable($filePath) && (!is_link($filePath) || is_readable(readlink($filePath)));
        if ($isValid) {
            if (filesize($filePath) === 0) {
                $isValid = false; // 文件为空
            }
            // Add additional checks for .mo file content, if needed
            // For example, you might check if the file contains the expected information for a .mo file
            // This may involve more specific validation based on the structure of .mo files
            // ...
        }
        return $isValid;
    }

    if ( ! isset( $yourls_locale ) ) {
        // YOURLS_LANG is defined in config.
        if ( defined( 'YOURLS_LANG' ) ) {
            $langFilePath = '<yourls-path>/user/languages/' . YOURLS_LANG . '.mo';
            if ( is_mo_file_valid($langFilePath) ) {
                $yourls_locale = is_link( $langFilePath ) ? pathinfo( $langFilePath )[ 'filename' ] : YOURLS_LANG;
            }
        }
    }

    if ( ! $yourls_locale ) {
        $yourls_locale = 'en_US';
    }

    return yourls_apply_filter( 'get_locale', $yourls_locale );

}

?>

@ozh What are you saying? So, did you reject my pull request?

Simply put, if you guys don't address or provide guidance on how to address the issue of being able to change the global language just through a plugin, people will continue to come back and ask, it's a pain in the ass, and my advice is that adapting directly into it is the best thing to do

I wish I could say that the global application can be done by the plugin alone, but you guys didn't even give the plugin a way to apply the language globally.
It makes me feel helpless and makes me wonder if said open source is simply putting out the source code and not editing it for the guys

I wish I could say that the global application can be done by the plugin alone, but you guys didn't even give the plugin a way to apply the language globally.
It makes me feel helpless and makes me wonder if said open source is simply putting out the source code and not editing it for the big guys

repo: YOURLS/YOURLS


text:
Update leaflet.markercluster dependency

Hey !
Could you update to leaflet.markercluster@1.0.4, it fixes a breaking bug when you remove a cluster during its animation. cf https://github.com/Leaflet/Leaflet.markercluster/issues/758
Thanks 👌

@LoicUV ok, I'll do it during that day...

@LoicUV
Updated: [release] 1.1.2: Update readme and dependency (#14)

authors: LoicUV YUzhva

repo: YUzhva/react-leaflet-markercluster


text:
[BUG] add a scroll bar for easy navigation

Description
add a scroll bar for easy navigation of player instructions
Screenshots

Any additional information?
No response
What browser are you seeing the problem on?
No response
Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[X] I'm a GSSoC'24-Extd contributor
[X] I'm a Hacktoberfest'24 contributor
[X] I am willing to work on this issue (optional)

@YadavAkhileshh please assign this issue to me

repo: YadavAkhileshh/Alien-Invasion-Defense


text:
Hi How can we make this menu come to left handside.

Hi great job with this menu component but how do we make it come in left handside of the android device and one more question can we inflate view badger to the menu item if and when we have the notification let me know . Honestly great job Thank you

Hi, thank you for your kindness.
If you are interested in this feature you can create a pull request. We react to the pull requests ASAP.

authors: alexzaitsev ashokslsk


text:
Buildings energy demand, 3_EI_Products_UsePhase_resbuildings_t

In about lines 2394-2398,
In the new update, historical cohorts'energy intensity is multiplied by RECC_System.ParameterDict['3_SHA_EnergyCarrierSplit_Buildings']. However, this multiplication occurred already in line 1577.
As consequence, hisotric energy intensity is set to 0:

I commented those lines and replaced with a new version of the computations without the EnergyCarrierSplit.
Results seem correct, but it should be checked if computations work as intended.

Same for nrb, but I have not fixed it yet.

It definitely needs to look like in the Figure below, which it did before in RECC v2.4. I will double-check the entire energy calculation for historic and future age-cohorts.

Fixed during latest RECC model update for res. and non-res buldings.

authors: CarrerF stefanpauliuk

repo: YaleCIE/RECC-ODYM


text:
Update scala-library to 2.12.18

About this PR
📦 Updates org.scala-lang:scala-library from 2.12.17 to 2.12.18
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.scala-lang", artifactId = "scala-library" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "org.scala-lang", artifactId = "scala-library" }
}]

labels: library-update, early-semver-patch, semver-spec-patch, commit-count:1

Superseded by #120.

repo: YannMoisan/sbopt


text:
Error installing package

When importing a package with github, I get two errors

I import the package through the package manager as it usually does, then I get two errors:

1. Library\PackageCache\dev.yarnspinner.unity@720b6c94da\Runtime\LineProviders\UnityLocalisedLineProvider.cs(330,105): error CS0117: 'UnityLocalisedLineProvider' does not contain a definition for 'stringsTable'
2. Library\PackageCache\dev.yarnspinner.unity@720b6c94da\Runtime\LineProviders\UnityLocalisedLineProvider.cs(331,103): error CS0117: 'UnityLocalisedLineProvider' does not contain a definition for 'assetTable'

Please tell us about your environment:

Yarn Spinner Version: latest
Unity Version: 2022.2.12f1, 2022.1.13f1, 2021.3.22f1

This was fixed with the 2.3.1 release. I am closing this issue for now but if the error reappears please open another.

authors: McJones mlbustin

repo: YarnSpinnerTool/YarnSpinner-Unity


text:
add startup scripts

Pull Request Title
Issue Reference:
closes #241
Description:

[ ] Created a startup script for client; Run npm run start:client for running the front-end on entering the hiring-portal directory
[ ] Created a startup script for server: Run npm run start:server for running the back-end on entering the hiring-portal directory. You don't have to go to backend folder to run it anymore.
[ ] Reflected the changes in Readme

Screenshots:

Type of change:

[ ] Bug fix
[x] New feature
[ ] Breaking change
[ ] Enhancement

Checklist:

[x] I have tested my changes and verified that they work
[x] My code follows the style guidelines of this project
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[x] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes

Additional Information:

Hey @Yashgabani845 could you accept this?

Hey @Yashgabani845 could you accept this before Hacktoberfest is done with?


text:
为什么修改了g:Lf_WindowPostion好像并没有起什么作用

我想要让leaderf的窗口显示在右边，但是当我修改了g:Lf_WindowsPostion = 'right'之后发现好像并么有起作用。

不能复现。

哦，刚才好像有个单词输入错误了，导致没有改变，改正了就可以了，不好意思哈

authors: GoodlPlus Yggdroot

repo: Yggdroot/LeaderF


text:
support special character?

Can it support
Leaderf file --input 'a b<Left>'

<Left> will make cursor move left
this is an enhancement. thanks!

This is difficult to implement.

authors: Freed-Wu Yggdroot


text:
[Feature] OpenAI的ChatCompletion API支持自定义seed参数设置

为了提高交流效率，我们设立了官方 QQ 群和 QQ 频道，如果你在使用或者搭建过程中遇到了任何问题，请先第一时间加群或者频道咨询解决，除非是可以稳定复现的 Bug 或者较为有创意的功能建议，否则请不要随意往 Issue 区发送低质无意义帖子。

点击加入官方群聊

这个功能与现有的问题有关吗？
无关
你想要什么功能或者有什么建议？
一致性得评估不同版本prompt的优劣
有没有可以参考的同类竞品？
无
其他信息
参考资料：https://cookbook.openai.com/examples/deterministic_outputs_with_the_seed_parameter

已收到您的信息，目前我不在线，无法给您回复！

#3180

also seed / system_fingerprint its still confusing for LLM Api which is already best & stable

看起来对于大多数用户来说，这个参数都没有实际用处，这个参数适用于基于 api 二次开发功能的场景。

repo: Yidadaa/ChatGPT-Next-Web


text:
Protocol Decoding & Discussion

I've been working extensively on reverse engineering the IQ2020 firmware from a hex file found online, and have identified the RS485 address (0x1F) of their internet gateway and some of the functions. Followed you on Twitter, and happy to collaborate.
Commands from address 0x1F to IQ2020 at 0x01 have 2 bytes to identify the command, and optional additional bytes. I've identified the following so far.
Get Versions
0x01 0x00
[18:50:41][I][iq2020.component:097]: sendCmd_ 1F -> 01 Length:02 Operation:40 Data:01:00 Checksum:63
[18:50:41][I][iq2020.component:349]: readline_ Full Packet 01 -> 1F Length:17 Operation:80 RESP Data:01:00:57:52:34:2E:30:34:64:65:31:63:45:30:30:32:44:4B:34:2E:30:30:06 DataS:..WR4.04de1cE002DK4.00. Checksum:Valid 4D=4D

Get/Set Timestamps
0x02 0x4C Seconds ...
if Seconds >60, don't set, just return values
[18:50:41][I][iq2020.component:097]: sendCmd_ 1F -> 01 Length:03 Operation:40 Data:02:4C:FF Checksum:B0
[18:50:41][I][iq2020.component:349]: readline_ Full Packet 01 -> 1F Length:0A Operation:80 RESP Data:02:4C:37:12:11:0B:08:D1:07:01 DataS:.L7....... Checksum:Valid C1=C1 SinceLast:0.3s

Get lots of data
0x02 0x55
[18:50:41][I][iq2020.component:097]: sendCmd_ 1F -> 01 Length:02 Operation:40 Data:02:55 Checksum:B9
[18:50:41][I][iq2020.component:349]: readline_ Full Packet 01 -> 1F Length:75 Operation:80 RESP Data:02:55:00:08:40:04:00:00:06:04:00:0A:06:20:72:13:00:20:1C:20:1C:20:1C:84:03:60:54:00:00:00:00:31:30:32:46:10:66:09:00:C0:1C:06:00:61:A5:D9:02:1D:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:21:A3:06:00:02:00:2C:A4:D9:02:00:00:00:00:00:00:00:00:31:30:30:46:31:30:32:46:78:00:07:01:07:01:00:00:00:00:00:00:00:00:00:00:00:00:3A:00:00:00:00:00 DataS:.U..@........ r.. . . ...`T....102F.f......a............

Oh nice. Thanks. I spent a lot of the last 48 hours on this and made a lot of progress. You can see all of my protocol decoding work here. I got lights, temperature, jet pumps and more decoded and working.
I also made progress on the ESP32 integration and got lights and temperature working really well. I how have my Home Assistant automatically change the temperature based on electricity rates and recording the temperature graph.

I still have a few more days to go before it's something others can use. I have to work a bit more to get both Celsius and Fahrenheit modes working well. More importantly, the Spa Connection Kit polls for the data every minute and so, I just listen to that traffic, no need to add more traffic to the RS485 bus if I don't need to. I am coding it so the ESP32 will detect if a Spa Connection Kit device is already present and will not poll, but if it's not present it will do the polling itself.
Are you a Home Assistant user? I would go buy a M5Stack+RS485+Wires right away (it takes a while to deliver and it's cheap). If your not using Home Assistant, let me know what setup your looking to integrate with.
Also, if you have a music module on your Spa, let me know. I would absolutely love to get a traffic capture of the audio device. I would to impersonate it so I can control Home Assistant audio from the spa display,

@wolfson292 - Just tried your commands and yes, they do work. Just added them to the protocol document.

FYI for everyone, more progress this morning. I got a lot more features supported and exposed to Home Assistant.

0x02, 0x55 and 0x02, 0x56 have the same handler, but 0x56 includes additional fields. Everything up to the length of 0x55 is the same in 0x56 response.
To tell if the device is in C or F mode, you can check byte 15, bit 6, of the response (1 = C, 0 = F).

@wolfson292 What are C and F modes?

Excellent work, ordered the hardware and looking forward to try it out.
I am from Belgium and have a Hotspring Envoy 2017 with an ace saltwater system

Thanks @npinguin. Hopefully you can help me test and give me feedback.
Today I am working on getting jets that have multiple speeds working nicely in Home Assistant. I also need to add data polling for this ESP-Home component to work for people that don't have the SPA connection kit, but I should get the done in the next few days.

Great work! Following closely with much interest! Just the thing I have been looking to implement for a while now. Parts are on order & hopefully arriving soon.

Thanks @fricker-ben. Nice to hear this. Certainly motivating me to code. I can't wait to hear your feedback.

Thanks to the information provided by @wolfson292. I added the version string as a sensor.

I may have found the water heater wattage value. 3866W in the picture below. I am polling this every minute anyway and so, a good value for HA graphs.

Ok. I added the polling support long with a bunch more things and updated all the documentation. I think this is pretty much a v1.0 at this point, it's probably something most geeks/nerds can use.

Ok, one more feature. The integration will now show when the hot tub is heating in the climate user interface.

@wolfson292 What are C and F modes?
Oh... Celsius or Fahrenheit probably. I can see that when I read the temperature. However, good to know.

I was originally determining this like you were seeing if the temp string ended with F, but having the status bit seemed cleaner.
The third temperature is the heater outlet temperature. You'll see it spike when the heater turns on.
Your identification of these functions has allowed me to significantly improve my disassembly of the controller firmware, identifying many more global variables in the code for various statuses. Unsure on the legality of publicly sharing the current disassembly, but it's based off a version WR4.04 and DK4.00 hex file of the firmware for the controller and wireless display that was available on a public website. I was previously doing a MiTM setup on the RS422 interface with the wireless display, but this RS485 interface is far simpler and doesn't impact the ability to use the display itself.
Plan to upload my version of an IQ2020 component shortly to GitHub. Started on it before I found yours.

Hi @wolfson292. To be clear, I do not want to ever see or be exposed to 3rd party code and please don't post any details about other code or binary from any sources here or on any forum. API's and interfaces are ok. I do appreciate the enthusiasm and that your even capable of doing this, that is absolutely insane! But yes, please keep it legal and respect other's work.
In any case, yes, thanks for the information on exhaust temp. I will add the outlet temperature to my component right away and the C/F bit to the documentation.

I just added the heater outlet temperature to the integration. One more thing to graph!

Hi @wolfson292. To be clear, I do not want to ever see or be exposed to 3rd party code and please don't post any details about other code or binary from any sources here or on any forum. API's and interfaces are ok. I do appreciate the enthusiasm and that you are even capable of doing this, that is absolutely insane! But yes, please keep it legal and respect other's work.
In any case, yes, thanks for the information on exhaust temp. I will add the outlet temperature to my component right away and the C/F bit to the documentation.

Completely understand having worked on many commercial reverse engineering projects.
Identified a few more of the data fields from the 0x02, 0x55/0x56 command.
Data[35-38] Heater Total Runtime Seconds
Data[39-42] Jets 1 Total Runtime Seconds
Data[55-58] Jets 2 Total Runtime Seconds
Data[59-61] Jets 3 Total Runtime Seconds
Data[67-70] Lights Total Runtime Seconds
Data[73-76] Lifetime Runtime Seconds
Data[43-46] Lifetime Runtime Seconds (6 minutes higher than previous value, 1.5yrs, for my own Spa)
Data[47-50] Unknown Counter, 30 on my own Spa
Data[63-66] Unknown Seconds Timer, 0 on my own Spa
Data[63-66] Unknown Seconds Timer, 0 on my own Spa
Data[77-80] Unknown Seconds Timer Related to Jets 1, 0 on my own Spa
Data[81-84] Unknown Seconds Timer Related to Jets 2, 0 on my own Spa

Wow @wolfson292 that is amazing data! I will add these runtime sensors in the next few hours. I also am reassured you know this business.
By the way, if you ever find a command to control light brightness and colors, that would be a fun one. I could add the brightness control on the existing light. I can read the lights brightness (0 to 5) using 0x0256 but can't control it.
Any other tricks we can do we the spa would be great!!

I just added your counters to the C# DataViewer app. I index starting from the start of the packet.
int HeaterTotalRuntime = getIntFromByteArray(data, 40);
int Jets1TotalRuntime = getIntFromByteArray(data, 44);
int LifetimeRuntimeSeconds1 = getIntFromByteArray(data, 48);
int UnknownCounter1 = getIntFromByteArray(data, 52);
int Jets2TotalRuntime = getIntFromByteArray(data, 60);
int Jets3TotalRuntime = getIntFromByteArray(data, 64);
int UnknownCounter2 = getIntFromByteArray(data, 68);
int LightsTotalRuntime = getIntFromByteArray(data, 72);
int LifetimeRuntimeSeconds2 = getIntFromByteArray(data, 78);
int UnknownCounter3 = getIntFromByteArray(data, 82);
int UnknownCounter4 = getIntFromByteArray(data, 86);

These are my own values, very similar to yours.

Done. Total runtime sensors are now included. I just added the ones we know what they indicate.

I am starting to graph temperature with my electricity time-of-use rules since last night. I had a bad data point added during development, but in general, I like this.

@wolfson292. I just added the protocol decoding to get/set the current time. This time is also at the end of the 0x0256 response.
Get Current Time
--> 01 1F 40 024C
<-- 1F 01 80 024C3431011400D40701
                 SSMMHHDDMMYYYY
Encoded as:
SS:MM:HH Seconds (0 to 59), Minutes (0 to 59), Hours (0 to 24).
DD:MM:YYYY Days (1 to 31), Month (0 to 11), Year (2 byte Big-Endian).

Set Current Time
--> 01 1F 40 024C2C2B140405E807
<-- 1F 01 80 024C2C2B140405E80701

Same encoding as Get Current Time.

Just for kicks, I added a new "Set Current Time" to the Data Viewer to set the spa time to your computer's clock.

Would it be possible to transform the timers in seconds in  yyy/mm/dd hh:mm:ss in home assistant?

@npinguin I will look into that.

@npinguin I just added a new document with Home Assistant Sensor Templates. This allows you to change the seconds into any format you like. I provide a full example to show the following:

Hope that helps.

More data on my hot tub power usages over 2 days. Temperature is automatically adjusted. Where I live the prices are approximately:

Off-peak = 8c / KWh
Mid-peak = 14c / KWh
On-peak = 43c / KWh

So this makes a huge difference if I can heat only during off-peak. It's also good for the grid and the environment.

I just fixed the problem with controlling jets that have a low/high settings. Works great now.

Just installed it, so far so good. Filling up the tub to see if the pumps work etc.
just noticed that power on counter is not visible for me. Tried a new install but did not see the sensor

Good catch @npinguin . I just updated the configuration yaml file on the main page to add the power_on_counter value in the sensor section. That should work now.

Let let us know how it goes.

I received a private email from someone trying to use the RS485MAX module. They can send commands but not receive any. I think the module looks like this:

I just updated the code to support flow_control_pin in the iq2020 section of the configuration yaml.
iq2020:
   uart_id: SpaConnection
   flow_control_pin: GPIO0
   port: 1234

If you use this specific board, I think you need to set flow_control_pin to the DE GPIO pin. However, I will need confirmation that it work, I don't have this setup.

Filled up the tub and all is working perfectly!
Absolutely great work, very happy with this.
how did you get the software version from the spa?

Thanks @npinguin for reporting back. If you can, please let me know what your software version and spa model is. I will keep a running list of tested versions and models. Also, do you happen to have any of the extra modules? Music/ACE/Freshwater?
For the version, I used the following command given by @wolfson292 above.
--> 01 1F 40 0100
<-- 1F 01 80 01005752342E30346465316345303032444B342E303006

Thanks @npinguin for reporting back. If you can, please let me know what your software version and spa model are. I will keep a running list of tested versions and models. Also, do you happen to have any of the extra modules? Music/ACE/Freshwater?
For the version, I used the following command given by @wolfson292 above.
--> 01 1F 40 0100
<-- 1F 01 80 01005752342E30346465316345303032444B342E303006

It is a Hotspring Envoy 2017 with an ace system.
Regarding the command to get the software version, how can I execute it and display it in home assistant? Is it possible to add it as a sensor ?

Thanks. Yes, I have it as a sensor called 'version' already. Are you not seeing it?

No don’t see it, is also not listed in the yaml?

I just added it at the end of the yaml on the main page. Add it and let me know if it works.

Top, just added it and confirms that my firmware is old i guess

Wow. That is super impressive.

anyone experience with firmware upgrades of the tub and what it could bring ? If it ain't broken do not upgrade is the typical recommendation. But i like keeping things up to date

@npinguin  - Yes, getting the firmware change log for different versions would be great. I wonder if dealers have that.

@wolfson292 - I sent all 64k possible commands to the IQ2020 from 0x1F looked for responses. I made the following table and if you have any guesses as to what some of the unknown commands are, please let me know. Thanks!
0100 - Get version string
0109 - Change temperature
0241 - Unknown (02413C001E0000)
024C - Unknown (024C1B0C110300E80701)
0255 - Get status short
0256 - Get status long
0B02 - Jets 1 & Lights on/off - (0B028F)
0B03 - Jets 2 on/off - (0B038E)
0B04 - Jets 3? on/off - (0B0400)
0B07 - Jets 4? on/off - (0B0700)
0B1C - Summer Timer
0B1D - Spa Lock
0B1E - Temperature Lock
0B1F - Clean Cycle
0B20 - Unknown (0B2001)
0B27 - Unknown (0B278C)
1702 - Lights on/off
1705 - Read lights status
1900 - Unknown (190015)
1901 - Unknown Periodic Polling (190100190000000B0004010000)
1D07 - Unknown Periodic Polling (1D07FFFF)
1E02 - Freshwater Salt System - Set Power / Start Test
1E03 - Get FreshWater Salt Module Data

Just published YouTube videos on this integration:

I just put in more updates. When changing settings, the ESP32 will auto-retry a command 3 times at 1/5 second interval. This is needed since there is a tiny chance that two commands would collide on the bus or there is an error and the IQ2020 controller did not get the command.
Also, I added a new sensor with the salt system power level (0 is off and 10 is max power). Only useful if you have this system. I could also remotely change the setting, I am not sure what Home Assistant control I could use for it.
Lastly, if anyone has this document... that would be super useful.

Finally home after a week away. All plugged in & working nicely on my Hot Spring Sovereign!
Is there a way to set & view the current temperature in 0.5°C increments?

@fricker-ben - Yes, Fahrenheit is set in 1.0F increments and Celsius in 0.5C increments. I have tested Fahrenheit a lot more than Celsius. You need to change some _f_ to _c_ in the ESPHome device config. In the view below, hit +/- and it should change by 0.5. If it does not, let me know, I will work to fix.

I have changed the f to c, but when pushing the plus/minus button it's going in 1°C increments. Also the temp display only shows to 0 decimal places.
The heater outlet temp displays to 0.1°C resolution.

Ok. I will do some testing and fixing on this later today. This is an essential feature of this integration.

@fricker-ben I see the problem, working on it.

I have been testing the new version with the salt water, unfortunately it is not reusing the ace system interfaces which I was hoping it would. Would be great to have the ace system integrated, let me know what you need

@fricker-ben I see the problem, working on it.

Thank you for your very quick response!

@npinguin ACE uses completely different commands. I don't have a ACE system, however, I will open a new issue for you, just like I did for #4. If you feel up to it, you can send me traffic captures and I will add support for it. I will finish up with @fricker-ben  and get that done.

@fricker-ben I just put in a fix for Celsius for the client control. I just updated the main page. In the climate section of the ESP home configuration, add the line celsius: true like this.
climate:
  - platform: iq2020
    name: Temperature
    celsius: true

Since I just did the change in GitHub, you can force the ESP Home add-in to check for updates by adding refresh: 30s to the external_components section like this:
external_components:
  - source: github://ylianst/esp-iq2020
    refresh: 30s

Put in the two lines, update your ESP32 device over WIFI and it should start working. It's not just the .5 step, the min/max temperatures in Celsius are also a bit different and needed fixing.

Also, can I have your hot tub model, version string and what is any extra modules you have? ACE/Freshwater/Music? I am trying to keep track of what is working and what is not. Let me know if this fix works for you. Thanks!

@npinguin - Seems you like having access to a lot of sensors. I added instructions to add the WIFI signal strength sensors. Maybe you are interested in this.

@Ylianst - Thank you, the temperature set point now acts as expected.
It's a 2015 Hot Spring Sovereign, no extra modules.
Version: 1.08.D0172E002HL1.02

@npinguin - Seems you like having access to a lot of sensors. I added instructions to add the WIFI signal strength sensors. Maybe you are interested in this.

Thanks :-)
wifi signal is indeed poor waiting for my outdoor Unifi access point to improve the signal ;-)

Excellent. Thank you @fricker-ben. That was a really important fix and thank you for that version string, your the oldest version of the firmware I know about that it still works! This is excellent news. I was concerned that older firmwares would not work or need changes, but it seems not. Nice!!
@npinguin - I just added #6 for you. Let me know if you have any questions. I hope my instructions are clear and it should be simple.

@Ylianst - All seems to be working very well, although my life time runtime is displaying as approx 29.22 years (921453056 seconds), which I think it a little off! All other runtimes seem reasonable for the age of the Hot Tub.

@fricker-ben That is interesting. I will take note of this. The lifetime encoding is very basic with not much room for error, basically, the value is directly obtained from the hot tub. If you even want to investigate this further, you can send me a packet capture like #4 to see what is going on, but not something that is crucial.

@Ylianst - Certainly not crucial! I will dig out a windows laptop at some point & do a packet capture for you. Always interesting to see what's going on, especially on the different (much older in my case) firmware versions.

You would be the first one to provide a v1 firmware package capture... interesting to see what change have been made since.

I just installed the OEM Hot Springs connected spa kit on a 2023 HS Flair and am able to log into its hub and it does let me download several python scripts and driver files for accessing the hot tub serial interface.  Would that be helpful?
Looking at the logs, here are all the settings and sensors it seems to expose:
('compatibility_byte', 0),
('control_box_error_zc_signal', False),
('control_box_error_flow_signal_open', True),
('control_box_error_flow_error', False),
('control_box_error_probe_error', False),
('control_box_error_config_error', False),
('sys_state_temp_lock', True),
('sys_state_spa_lock', False),
('sys_state_jet_1_high', False),
('sys_state_jet_2_high', False),
('sys_state_clean', False),
('sys_state_summer_time_mode', False),
('sys_state_water_care', True),
('sys_state_navigator_sync', False),
('sys_state_jet_1_low', False),
('sys_state_jet_2_low', False),
('sys_state_circ', True),
('sys_state_blower', False),
('sys_state_jet_3_high', False),
('sys_state_heater', 0),
('peripheral_status_adv_lite', False),
('peripheral_status_sp_audio', False),
('peripheral_status_i_cast', False),
('peripheral_status_free_pad', False),
('peripheral_status_cd_player', False),
('peripheral_status_rheodyne', False),
('peripheral_status_sp_audio_2', False),
('peripheral_status_mp3', False),
('peripheral_status_video', False),
('peripheral_status_chlorine', True),
('peripheral_status_networking', True),
('peripheral_status_frog', False),
('peripheral_status_water_feature', False),
('peripheral_status_mz_light', False),
('peripheral_status_hpc', False),
('peripheral_status_two_way_audio', False),
('peripheral_status_ace_gen_3', False),
('peripheral_status_wireless_audio', False),
('lls_set_bits', 10),
('model_type', 8),
('output_configuration_multi_zone_exterior', False),
('output_configuration_2_pump_system', True),
('output_configuration_multi_zone_themes', False),
('output_configuration_3_pump_system', False),
('output_configuration_blower', False),
('output_configuration_heater_service_mode', True),
('output_configuration_blower_service_mode', False),
('output_configuration_three_pump_concurrency', False),
('pump_configuration', 241),
('feature_configuration_pump_1_speed', False),
('feature_configuration_pump_2_speed', True),
('feature_configuration_24_hour_operation', False),
('feature_configuration_display_blanking', True),
('feature_configuration_extended_auxillary_key', False),
('feature_configuration_degree_celcius', False),
('feature_configuration_temp_dsp_set', False),
('mz_light_configuration_zone_1', False),
('mz_light_configuration_zone_2', True),
('mz_light_configuration_zone_3', True),
('mz_light_configuration_zone_4', False),
('pump1_timeout', 7200),
('pump2_timeout', 7200),
('pump3_timeout', 7200),
('blower_timeout', 900),
('light_timeout', 21600),
('pump1_speed', 0),
('pump2_speed', 0),
('pump3_speed', 0),
('blower_speed', 0),
('high_limit_temperature', '101F'),
('heater_operation_seconds', 1770297),
('pump1_operation_seconds', 588704),
('time_in_service', 18416413),
('lost_line_counter', 9),
('stm_state', 0),
('spa_lock_state', 0),
('temp_lock_state', 1),
('clean_lock_state', 0),
('pump2_operation_seconds', 149370),
('pump3_operation_seconds', 0),
('blower_operation_seconds', 0),
('light_operation_seconds', 4366929),
('spa_state', 3),
('spa_light_state', 0),
('circ_pump_operation_seconds', 18416308),
('jet_1_low_operation_seconds', 232900),
('jet_2_low_operation_seconds', 0),
('ctrl_head_set_temperature', '100F'),
('ctrl_head_water_temperature', '101F'),
('voltage_l1', 122),
('voltage_heater', 251),
('voltage_l2', 251),
('voltage_jet3', 0),
('current_l1', 0),
('current_heater', 0),
('current_l2', 0),
('current_jet3', 0),
('power_l1', 0),
('power_heater', 62),
('power_l2', 18),
('power_jet3', 0),
('daily_clean_cycle', 1),
('filter_time_1', 60),
('filter_time_2', 30),
('hawk_status_econ', False),
('hawk_status_circ', False),
('pcb_temperature', 97),
('peripheral_current', 101),
('rtc_seconds', 49),
('rtc_minutes', 18),
('rtc_hours', 4),
('rtc_date', 17),
('rtc_month', 6),
('rtc_year', 2001),
('rtc_status', 1),
('lls_ready_flash', False),
('lls_power_and_ready_flash', False),
('lls_power_flash', False),
('lls_power_and_ready_on', True),
('lls_power_on', False),
('lls_power_and_ready_alter', False),
('lls_power_and_ready_ace_err', False),
('sys_state_light_intensity', 0),
('hawk_status_filter', 0)

'mz_POL_light_intensity': 0,
'mz_POL_color_state': 1,
'mz_Exterior_light_intensity': 0,
'mz_Accent_loop_speed': 0,
'mz_24_hour_light_status': 1,
'mz_Accent_wheel_status': 0,
'mz_Main_loop_speed': 0,
'mz_Main_wheel_status': 0,
'mz_Main_light_intensity': 0,
'mz_Accent_light_intensity': 0,
'mz_model': 0,
'mz_Exterior_color_state': 1,
'mz_system_status': 0,
'mz_Exterior_loop_speed': 0,
'mz_version': 0,
'mz_POL_wheel_status': 0,
'mz_Accent_color_state': 1,
'mz_POL_loop_speed': 0,
'mz_Main_color_state': 1,
'mz_Exterior_wheel_status': 0

'audio_radio_signal_strength': 0,
'audio_play_pause_status': 0,
'audio_power': 0,
'audio_wireless_channel': 1,
'audio_source_selection': 4,
'audio_balance': 0,
'audio_treble': 0,
'audio_bass': 0,
'audio_bluetooth_pairing': 0,
'audio_subwoofer_volume': 11,
'audio_volume': 25

@Ylianst Oh nice, I was seriously considering your diy approach but wasn't quite ready to commit to that as I primarily use Hubitat and haven't tinkered with home assistant too much.  But good to know I could use both, may still try that!
To log in to the hub, just find its IP address, and then login in a browser with the username "python" and password written on the bottom of the hub.  Once in, there is a file browser and you can download the python scripts used to connect the hub to the xbee spa dongle as well as to Watkins servers.  The Watkins stuff isn't even compiled and shows their api key in the code... so I bet you could even get your script to connect to their app if you really wanted.  The event and python logs are also pretty descriptive, which is where I got that channel listing in my earlier message.  The logging is set to debug by default and the cpu load can be pretty high on that thing, disabling debug logging might actually increase performance.
The reason I looked into the hub in the first place is that my connected spa kit was misconfigured by hot springs from the box and wouldn't connect...  They had set the autorun python script command as "dia.py and dia.yml" rather than "dia.py dia.yml" so it was looking for a config file called "and", failing, not installing the xbee driver, and rebooting the hub.  Pretty dumb... but I fixed that and it started loading the correct configuration and working correctly.

@rabidfurball Thanks for all that valuable information. Wow, this is so much more interesting than I ever expected. Since you are not using Home Assistant, one idea I was thinking of is at some point hosting a tiny web site on the ESP32 itself with the data and control. The ESP32 is very limited so, I would probably put CSS and JavaScript files on GitHub in this repo so ESP32 would not need to serve them. In any case, I will take a look at the hub, absolutely fascinating.

@rabidfurball Wow. I logged in to the hub and indeed, saw the logs being written just as you described. I was able to improve my protocol decoding a lot based on this new information. I could capture my on decoding vs the decoding in the log for the exact same packet and compare, it's wonderful. I will be adding a bunch more diagnostics sensors in the next few days.

I just added a bunch of new sensors to the integration. New run times, voltage, currents, power, temperature. The one thing I wonder is there is a "heater" voltage/current/power that is around 70 watts all the time for me. This is clearly not the main heater, but the official decoder does call it a "heater". I am not sure what that is. Is there a second small heater in the hot tub? Or is this a mislabeled sensor? In any case, many more values to look at. If you Jet 1 does not have a low setting, your Jet 1 low lifetime will be zero.
sensor:
    circulation_pump_total_runtime:
      name: Circulation Pump Runtime
    jet1_low_total_runtime:
      name: Jets 1 Low Runtime
    jet2_low_total_runtime:
      name: Jets 2 Low Runtime
    power_l1:
      name: Pump Power
    power_heater:
      name: Small Heater Power
    power_l2:
      name: Heater Power
    voltage_l1:
      name: Voltage L1
    voltage_heater:
      name: Voltage Heater
    voltage_l2:
      name: Voltage L2
    current_l1:
      name: Current L1
    current_heater:
      name: Current Heater
    current_l2:
      name: Current L2
    pcb_temperature:
      name: Controller Temperature

works nicely, just do not understand the flag for celcius. I get the pcb temperature in farenheit and the other temps remain as they are

Internally the PCB temperature is given in Farenheit, however, I have to look into this because I should try to give the temperature in the same units as the others, even if I have to convert it.

Ok. Just made the PCB sensor a _f_ or _c_ type of sensor, so you can configure it.
sensor:
    pcb_f_temperature:
      name: Controller Temperature

Top, unfortunately with the latest update of esphome, the configuration does not work/compole anymore

The latest ESP Home add-in has a breaking change. If you are getting an error around the ota area, you need the add the line - platform: esphome in that section.
Old:
ota:
  password: "xxxxxxxxxxxxxx"

New:
ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxx"

Keep the password as-is, just add the platform and move the password line two spaces right. Let me know if that helps.

top working perfectly

Ok... I did it. I got the ESP32 to emulate the Music module and route buttons back to Home Assistant. I just got this working hours ago and I am sure I will evolve this a lot more. Instructions here, feedback appreciated.

Works perfectly, just had to switch power off and on

Thanks @npinguin. I just updated the instructions to mention that you need to reset the remote, there is a demonstration video here. That could help and does not require a full spa reset.

I just put in a major update for the audio module emulation. I lot more sensors now. The "audio_volume" sensor is now removed and the integration needs the following sections:
select:
number:
text:

Updated audio instructions here.

Just added one more sensor that track the logo lights (green and blue) in front of the hot tub. You can see information on this new sensor at the top of the extras page.

My hot tub lights button flips through three stages, high med and low brightness and can also change colors. Any idea how to control this?

@joshs85 If your talking about the green/blue logo, I can't control that, I can only tell you what it's showing currently. If you are talking about the lights within the hot tub that can be controlled by the remote, I can turn them on/off (which should work) and I can tell you exactly which light is what color and brightness, but I can't control it (yet). It's possible there is a command to control lights colors and brightness, but have not found this yet.

@joshs85 If your talking about the green/blue logo, I can't control that, I can only tell you what it's showing currently. If you are talking about the lights within the hot tub that can be controlled by the remote, I can turn them on/off (which should work) and I can tell you exactly which light is what color and brightness, but I can't control it (yet). It's possible there is a command to control lights colors and brightness, but have not found this yet.

Its the lights inside of the hot tub.  The switch in HA turns them on and off just fine.  There's a setting on the control panel for brightness within settings (also the light button on the control panel cycles through the brightness low, med, high + off).. Then you can also set the color in the settings.

Great work on this by the way.. I had hooked up an atom lite + the rs485 base several months ago and finally had time to start reversing this.. but i did one last search for it and you had already done it.. so I deployed it and it works really well.

@joshs85 Ha yes, for the inside lights, I can see the exact status of them. I have not created any sensors for them yet, but I could. For example, you could make it so that other lights around your house match the color of the lights in your hot tub. I can't control them, but I could add these sensors so you can see the values if you like. Feel free to open a new issue requesting these if needed.
Ha thanks. Once I found the RS485 pins and did confirm that it worked and got the basic packet format and checksum, but did go ahead and buy the spa connection kit so I could get this project moving forward. I don't plan on ever using the connection kit, but it was well worth it for the benefit of the community. ESP-Home is amazing, i used it for my Rheem water heater and that got me started. There are still unknowns on the protocol. I don't have a real packet capture of the music module and I wish I did, I had to make up some stuff and in scanning for all commands, I did find a few I still don't know what they do. However, the basics are working really well.

@joshs85 Ha yes, for the inside lights, I can see the exact status of them. I have not created any sensors for them yet, but I could. For example, you could make it so that other lights around your house match the color of the lights in your hot tub. I can't control them, but I could add these sensors so you can see the values if you like. Feel free to open a new issue requesting these if needed.
Ha thanks. Once I found the RS485 pins and did confirm that it worked and got the basic packet format and checksum, but did go ahead and buy the spa connection kit so I could get this project moving forward. I don't plan on ever using the connection kit, but it was well worth it for the benefit of the community. ESP-Home is amazing, i used it for my Rheem water heater and that got me started. There are still unknowns on the protocol. I don't have a real packet capture of the music module and I wish I did, I had to make up some stuff and in scanning for all commands, I did find a few I still don't know what they do. However, the basics are working really well.

Yeah, if you could add the sensors that'd be cool.  Which Rheem water heater do you have?  I have a newer Rheem heat pump water heater with EcoNet.. I would love to dump their cloud service and move over to an esp32.  Do you happen to have a link to that project?
For a sniffer, you can just use the uart port on an atom with the rs485 base.  If you set dummy device you can have it log all packets in both directions to the logs easily.. This is what I had setup on the same hardware hooked up to my hot tub before I deployed your code to it.
esphome:
  name: hot-tub-controller
  friendly_name: Hot Tub Controller

esp32:
  board: esp32dev
  framework:
    type: arduino

# You need a UART to talk to the RS485 bus
uart:
  id: my_uart
  baud_rate: 38400
  rx_pin: GPIO22
  tx_pin: GPIO19
  debug:
    direction: BOTH
    dummy_receiver: True
    after:
      delimiter: "\n"
    sequence:
      - lambda: UARTDebug::log_hex(direction, bytes, ',');

select:
  - id: change_baud_rate
    name: Baud rate
    platform: template
    options:
      - "2400"
      - "9600"
      - "38400"
      - "57600"
      - "115200"
      - "256000"
      - "512000"
      - "921600"
    initial_option: "115200"
    optimistic: true
    restore_value: True
    internal: false
    entity_category: config
    icon: mdi:swap-horizontal
    set_action:
      - lambda: |-
          id(my_uart).flush();
          uint32_t new_baud_rate = stoi(x);
          ESP_LOGD("change_baud_rate", "Changing baud rate from %i to %i",id(my_uart).get_baud_rate(), new_baud_rate);
          if (id(my_uart).get_baud_rate() != new_baud_rate) {
            id(my_uart).set_baud_rate(new_baud_rate);
            id(my_uart).load_settings();
          }

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ! secret api_encryption_key

ota:
  - platform: esphome
    id: ota_password
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Hot-Tub-Controller"
    password: !secret fallback_wifi_pw

captive_portal:

button:
  - platform: uart
    name: "UART Bytes Output"
    data: [0x58,0x4d,0x53,0x00,0x03,0x6b,0x00,0x10,0x01,0x76]

Ha. Funny you ask about the Rheem Heat Pump water heater, that is exactly what I have and I made a video about it, the project is EspHome-EcoNet and yes, it works so well, I don't use the cloud app anymore. I am a huge fan of that project and they use my video on their main page.
For the RS485 sniffer, yes, that is exactly how I got started with dummy_receiver: True, however I quickly needed something more powerful. You may have noticed that this integration as a built-in RS485-to-TCP relay and I built a C# app to decode the traffic. Take a look for the first post of #6 to see how it works. The C# app allowed me to send/receive data and conduct all sorts of experiments like trying all possible commands (64k of them), etc.

Do you know if this takes over control of the hot tub completely when its hooked up and running?  I don't think my cleaning cycle has come on automatically since I hooked it up.  it used to come on all the time by itself.

This integration does not take control and the cleaning cycle will happen as usual. I will note that is you have "Summer Timer" turned on, my understanding is that the cleaning system stop not happen, but not sure. In any case, you should see the 'cleaning cycle' turn on in the logs each time it happens.

@joshs85 I added the light intensity and color sensors, take a look at the extras here for information on adding them. Let me know if it works for you.

@joshs85 I added the light intensity and color sensors, take a look at the extras here for information on adding them. Let me know if it works for you.

hmm.. it works.. but when my lights are on the color cycle setting, I see 7 for the color instead of 8.   The intensity seems to work.  Here's what I added to the config
    lights_underwater_intensity:
      name: Underwater Light Intensity
    lights_underwater_color:
      name: Underwater Light Color

@joshs85 Can you speed up the polling rate like this:
iq2020-dev:
   uart_id: SpaConnection
   polling_rate: 10                          <----

Then, cycle thru all the colors and see what values to read for each of them? I will do the same later today and see if I the table I created is not right. I think these are my values... but will check again.
1 = Violet
2 = Blue
3 = Cyan
4 = Green
5 = White
6 = Yellow
7 = Red
8 = Color Cycle

@joshs85 Can you speed up the polling rate like this:
iq2020-dev:
   uart_id: SpaConnection
   polling_rate: 10                          <----

Then, cycle thru all the colors and see what values to read for each of them? I will do the same later today and see if I the table I created is not right. I think these are my values... but will check again.
1 = Violet
2 = Blue
3 = Cyan
4 = Green
5 = White
6 = Yellow
7 = Red
8 = Color Cycle

I already have my polling time set to 5s.  These are my results below.  There's a separate setting for color loop 1-3 which doesn't affect the color that's set as far as I can tell.

7 = Violet
1 = Blue
2 = Cyan
3 = Green
4 = White
5 = Yellow
6 = Red

@joshs85 Color loops? Here is my color screen on my remote. Can you port what yours looks like?

Arg. This is very different indeed. If you install the DataViewer all and look at the lights status packet, you may have different values. If you decode your own usage, I could add ESP-Home sensors where needed and/or update the documentation to match your model.
<-- 01 1F 40 1705
<-- 1F 01 80 17050005020202000000000000000005010101010000
                 FFAABBCCDD                WWXXYYZZOO

FF = Flags (0x01 = Lights Timer On)
AA = Underwater light intensity (0x05 = High ... 0x01 = Low, 0x00 = Off)
BB = Bartop light intensity
CC = Pillow light intensity
DD = Exterior light intensity
WW = Underwater light color     (0x01 = Violet, 0x02 = Blue, 0x03 = Cyan, 0x04 = Green, 0x05 = White, 0x06 = Yellow, 0x07 = Red, 0x07 = Color Cycle)
XX = Bartop light color
YY = Pillow light color
ZZ = Exterior light color
OO = 00 for lights are off, 01 for lights are on.

Eh... the windows client seems to crash as soon as I connect and get a single data packet.

If I connect really fast and then disconnect it seems to work
Lights on.  Color loop 0
--> 01 1F 40 1705
<-- 1F 01 80 17050003000000000000000000000003010101010000
Lights on Color Loop 1
--> 01 1F 40 1705
<-- 1F 01 80 17050003000000010000000100000003010101010000
Lights on Color Loop 2
--> 01 1F 40 1705
<-- 1F 01 80 17050003000000010000000200000003010101010000
Lights on Color Loop 3
--> 01 1F 40 1705
<-- 1F 01 80 17050003000000010000000300000003010101010000

@joshs85 Arg! Thanks for letting me know. I bet I try to parse a packet and crash doing it. I will add more exception handling to fix this. I will need to add a new sensor for your color loop.
<-- 1F 01 80 17050005020202000000000000000005010101010000
<-- 1F 01 80 17050003000000010000000300000003010101010000
                 FFAABBCCDD        LL      WWXXYYZZOO

FF = Flags (0x01 = Lights Timer On)
AA = Underwater light intensity (0x05 = High ... 0x01 = Low, 0x00 = Off)
BB = Bartop light intensity
CC = Pillow light intensity
DD = Exterior light intensity
LL = Color Loop (NEW)
WW = Underwater light color     (0x01 = Violet, 0x02 = Blue, 0x03 = Cyan, 0x04 = Green, 0x05 = White, 0x06 = Yellow, 0x07 = Red, 0x07 = Color Cycle)
XX = Bartop light color
YY = Pillow light color
ZZ = Exterior light color
OO = 00 for lights are off, 01 for lights are on.

FYI. This integration is now in the ESP-Home devices list.

FYI. This integration is now in the ESP-Home devices list.

Yeah, I saw your pull request.  Nice!

I used your other integration to hook up my hot water heater this morning.  Works great!

FYI, The hot tub I have is the HotSpring HotSpot SX.. if it matters.

@joshs85 Oh yes, ESP-home Econet is amazing, just like my hottub, I use it to dynamically change temperature levels to avoid using electricity at high prices and maximize use at cheap prices.
I added your hot tub to the tested list here. What is your version string? What ESP32 do you use? Also, if there is anything you want to add to the tested page, let me know.

@joshs85 Oh yes, ESP-home Econet is amazing, just like my hottub, I use it to dynamically change temperature levels to avoid using electricity at high prices and maximize use at cheap prices. My graphs for both integrations below.
I added your hot tub to the tested list here. What is your version string? What ESP32 do you use? Also, if there is anything you want to add to the tested page, let me know.

Version string is: 112T b5e1A002 v3.0
Using the m5stack atom lite
https://shop.m5stack.com/products/atom-lite-esp32-development-kit
With the atomic rs485 base
https://shop.m5stack.com/products/atomic-rs485-base

@joshs85 I got two updated for you. First, a new sensor in the latest integration update that should match your loop value. Let me know if this works.
sensor:
    lights_main_loop_speed:
      name: Lights Main Loop Speed

Also, I updated the DataViewer to display decoding errors instead of crashing. If you run it again, send over the error you see and I will fix correctly.

Awesome.  I was able to pull in the extra sensor and its working correctly.   I'll check out the windows app later.  for what its worth it wasn't even giving me an error code before but just exiting.

<-- 1F 01 80 02560000000000000404000A0A2040160E201C201C201C840360540000000020393646DA1B9B00E0C60802BF4AD2146200000000000000000000000000000000000000AF4F8B00030000000000CEB0F101000000003130324631303146E700E700E700000000000000000000000000000000000000003C001E00006C00000000000000DC0701
System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime.
at System.DateTime.DateToTicks(Int32 year, Int32 month, Int32 day)
at System.DateTime..ctor(Int32 year, Int32 month, Int32 day, Int32 hour, Int32 minute, Int32 second)
at DataViewer.MainForm.processData(Byte[] data, Int32 len)

@joshs85 Oh! Makes sense. I will add code to handle this case.

@joshs85 Oh! Makes sense. I will add code to handle this case.

Can you post this as a new github project with an esp home component for the tcp listener?  I'd love to use this CS app to reverse my PoolSync (to control my pool pump, heater, and salt cell)   and may compile it for .net on osx if possible.

For the RS485 to TCP in ESP-Home, take a look at esphome-stream-server. It's super easy to get yourself just the RS485 relay. For the C# app, it's located in this GitHub repo here. I have not cleaned up the code, it's a bit ugly. I don't think I need to put it in a separate repo, the entire source code is there. Let me know if that helps.

@joshs85 For the RS485 to TCP in ESP-Home, take a look at esphome-stream-server. It's super easy to get yourself just the RS485 relay. For the C# app, it's located in this GitHub repo here. I have not cleaned up the code, it's a bit ugly. I don't think I need to put it in a separate repo, the entire source code is there. Let me know if that helps.

Ok, cool.. that works for me.

@joshs85 I just updated DataViewer with your fix. Thanks for reporting this and the exact error.

Just wanted to confirm that this is working great with a 2022 Caldera Niagara(Utopia Series). Reports power and everything..

@dvanderb Thanks for confirming. Can you also provide your version string? It's something like "WR2.02ad1bE002DK2.02". I will add it to the tested list.

@dvanderb Thanks for confirming. Can you also provide your version string? It's something like "WR2.02ad1bE002DK2.02". I will add it to the tested list.

EU2.039018E0020.00.0

Thanks @dvanderb for the contribution, you are the first one with a Caldera. I just updated the tested list.

I am getting close to having every possible feature for this integration I can think of. I just added one more, the ACE Module Emulation feature. It allows you to see this screen on your spa remote:

You can then use added Home Assistant sensors in your automatons to do anything you like.
I did have to change the audio_buttons sensor to buttons. So, if you get an error, just remote audio_ and that will fix it.
sensor:
  - platform: iq2020
    buttons:
      name: Buttons

I did that since both the audio emulation and ACE emulation use the buttons sensor.

I see the new ace emulation with boost. Did you also manage to get boost working/decoded for tubs with ace?
One feature I am really missing is the color setting. That would really help for doorbell scenarios

@npinguin I just managed to get ACE boost decoded and probably working, but I can't truly test it because I don't have a real ACE module. I updated the documentation and the 3 ACE sensors are below. The salt_power did not change, still 0 to 10. salt_content did change, it's not a value from 0 to 7 where 3 or 4 are ideal. This is the yellow/green/red indicator on the remote. Lastly, salt_system_boost is the new one and should indicate if you are in boost mode or not and allow you to change you boost setting from Home Assistant. If anyone can confirm this works. Note that if you change the boost setting, you need to go back to the main page and return to ACE on the remote to see the updated state.
number:
  - platform: iq2020
    id: salt_power
    name: Salt Power
    datapoint: 5

sensor:
    salt_content:
      name: Salt Content

switch:
  - platform: iq2020
    name: Salt Boost
    id: salt_system_boost
    datapoint: 8

I'm having some issues turning the lights on and off now for some reason.. When I turn them on, they turn on physically but the switch in HA goes back to turned off almost instantly.  Any idea what could cause that?

FYI. I just figured out how to change light brightness and colors! I am still paying around with this.
--> 01 1F 40 17020102
                 NNAA
NN = Light Number 0x00 to 0x03 for individual lights, 0x04 for all lights.
AA = Action
  02 = Lower Brightness (0 to 5)
  03 = Increase Brightness (0 to 5)
  04 = Previous color (1 to 7 and cycles back)
  05 = Next color (1 to 7 and cycles back)
  06 = Previous Color Loop ?
  07 = Next Color Loop ?

Full control over the light colors, intensity and cycle speed has been added to the integration. You can look at the top of the extras section for details on how to add this. Note that I only tested this on my hot tub and that I may need to fix things for other hot tub models. So please let me know if it does not work right.

Once nice extra is that I can now control the cycle speed of the lights, something I can't do from the remote.

Full control over the light colors, intensity and cycle speed has been added to the integration. You can look at the top of the extras section for details on how to add this. Note that I only tested this on my hot tub and that I may need to fix things for other hot tub models. So please let me know if it does not work right.

Very cool.. my Caldera only has one controllable RGB light(it simply affects all lights in the tub).. so do we think that would just be data point 1?

Working on a Hot Springs Limelight Flash 2018 here.  Version is 1.14D6ce5E002.  Light control colors are off by one (violet=blue, etc.) and wheel doesn't cycle, although the control panel flashes the light icon like it does when cycling normally.  No audio or salt systems to test.

@dvanderb Yes, that's correct. Only use select with data point 1. That would be ok for you. Let me know what your exact model and version number is, I will add it to the tested page with that note.
@jbwalkup920 Thanks for reporting this. It does seem like there is a lot of variations on what colors are set to what number for different tubs. If you send back your exact color order yaml, I will add it to the tested page. I will also work on cycling at some point to get that working, but I may need some data capture from various tubs.

Just tested the lights on my Hot Spring Sovereign. The lights are off by one colour & the descriptions are also off (Exterior control pillows, bar top control water fall etc)
This is the current working YAML with everything correct:
select:
  - platform: iq2020
    name: Color Underwater
    id: lights1_color
    datapoint: 1
    options:
      - Blue
      - Cyan
      - Green
      - White
      - Yellow
      - Red
      - Magenta
      - Cycle
  - platform: iq2020
    name: Color Waterfall
    id: lights2_color
    datapoint: 2
    options:
      - Blue
      - Cyan
      - Green
      - White
      - Yellow
      - Red
      - Magenta
      - Cycle
  - platform: iq2020
    name: Color Bar Top
    id: lights3_color
    datapoint: 3
    options:
      - Blue
      - Cyan
      - Green
      - White
      - Yellow
      - Red
      - Magenta
      - Cycle
  - platform: iq2020
    name: Color Pillow
    id: lights4_color
    datapoint: 4
    options:
      - Blue
      - Cyan
      - Green
      - White
      - Yellow
      - Red
      - Magenta
      - Cycle
  - platform: iq2020
    name: Color Cycle Speed
    id: lights_cycle_speed
    datapoint: 5

number:
  - platform: iq2020
    id: lights1_intensity
    name: Intensity Underwater
    datapoint: 7
    maximum: 5
  - platform: iq2020
    id: lights2_intensity
    name: Intensity Waterfall
    datapoint: 8
    maximum: 5
  - platform: iq2020
    id: lights3_intensity
    name: Intensity Bar Top
    datapoint: 9
    maximum: 5
  - platform: iq2020
    id: lights4_intensity
    name: Intensity Pillow
    datapoint: 10
    maximum: 5

Also, not sure what 'Small heater power' actually is, but mine sits at an average of 115W, except for then the pump is on 'high' then its approx 50W. The 115W reading cannot be correct, as I have power monitoring on the supply to the Hot Tub & it reads around 85W when just the small filter pump is running (the rating of the pump), so unsure what that data point is.
Also on my Hot Spring Sovereign, heater power & pump power both work correctly, but heater current shows on L2 & pump current on L1, 'Current heater' never reads above 0

@fricker-ben That is interesting. I will take note of this. The lifetime encoding is very basic with not much room for error, basically, the value is directly obtained from the hot tub. If you even want to investigate this further, you can send me a packet capture like #4 to see what is going on, but not something that is crucial.

The response to an 'Ask Status 0x256' command:
1F 01 80 02560008000400000404000A0900405600201C201C201C840360540000000033352E30A17AB7065752A3004C9F31374000000000000000000000000000000000000000B3FB830003003B652A37AFCC35000000000033352E3033352E30F200F200F200000000000000000000000000760000000000003C001E0000664500240F0613FFD00701

@fricker-ben Thanks for the reports. I just added your light yaml to the tested page, but now I am thinking I am going to create a new page just for controlling lights as this is going to be a crazy topic.
For the power/voltage/amps sensors... that too seems to vary between tubs and it's a still a mystery to me. The files I have seen show the following sensors in command 0x0256 in this order:
voltage_l1
voltage_heater
voltage_l2
voltage_jet3
current_l1
current_heater
current_l2
current_jet3
power_l1
power_heater
power_l2
power_jet3

But for me, l2 is clearly the main heater and I have not idea what "heater" is, so, I called it "small heater" as a stand it until it's figured out. For your 0x0256 command, in DataViewer, the last 0x0256 command is always decoded in the "State" tab. In my case, it looks like this:

If you can figure out what the values map to in your hot tub, that would be wonderful.

This is mine currently, I still can't work out what the 'Small heater power' value could be, is it definitely a power figure, or could it be something else? Possibly heater flow/pressure?
Hex:
1F01868002560008000400000404000A0900405600201C201C201C840360540000000033352E30A17AB7065752A3003DED31374000000000000000000000000000000000000000B3FB830003002CB32A37AFCC35000000000033352E3033352E30F000F000F000000000000000000000000000790000000000003C001E00006544000D2D110206E80701DA1C
0008     - Unknown
00       - Flags
04       - Flags
00000404000A090040 - Unknown
5600     - Flags, 0x4000 is Celsius
201C201C201C - Unknown
84036054 - Unknown
00000000 - Unknown
33352E30 - Exaust Temperature string, "35.0"
A17AB706 - Heater total runtime in seconds, 112687777
5752A300 - Jets 1 total runtime in seconds, 10703447
3DED3137 - Lifetime in seconds, 926018877
40000000 - Power on / Boot counter
00000000 - Flags
00000000 - Jet 2 runtime
00000000 - Jet 3 runtime
00000000 - Blower runtime
B3FB8300 - Lights runtime
0300     - SPA state & Light state
2CB32A37 - Circulation pump Lifetime
AFCC3500 - Jets 1 low operation Lifetime
00000000 - Jets 2 low operation Lifetime
33352E30 - Target Temperature String, "35.0"
33352E30 - Current Temperature String, "35.0"
F000     - Voltage L1
F000     - Voltage Heater
F000     - Voltage L2
0000     - Voltage Jet3
0000     - Current L1
0000     - Current Heater
0000     - Current L2 (Heater)
0000     - Current Jet3
0000     - Power L1
7900     - Power Heater
0000     - Power L2 (Heater)
0000     - Power Jet3
003C001E00006544 - Unknown
000D2D11 - Time hh:mm:ss, 17:45:13
0206E807 - Date, 2-7-2024
01       - Clock Status

So, I just tested out the ability to change the lights for the underwater lights.  If I set cycle speed to Pause, it does nothing (it was normal previously). If I change to fast it works.. as soon as I change the color from whatever it was, the lights stop cycling.  The cycle speed stays on normal.. I can't get the lights to change back to cycling even if I set the color to Cycle or change the speed.  Also, the colors don't match the UI

The light colors seems to be very different depending on the model, so, changing the options to the right value is going to be needed. For cycling, I coded the integration to work for my hot tub, but to debug get the DataViewer working and use "Ask Lights Status" in the "Commands" menu to ask for the current status.

The light status starts with 1F 01 80 1705... like here:
 <-- 1F 01 80 17050000000000000000000000000001010101000000

The lights status seems to decode like this:
<-- 1F 01 80 17050003000000010000000300000003010101010000
                 FFAABBCCDD        LLMMNNOOWWXXYYZZOO

FF = Flags (0x01 = Lights Timer On)
AA = Underwater light intensity (0x05 = High ... 0x01 = Low, 0x00 = Off)
BB = Bartop light intensity
CC = Pillow light intensity
DD = Exterior light intensity
LL = Underwater light cycle speed - Main loop speed
MM = Bartop light cycle speed
NN = Pillow light cycle speed
OO = Exterior light cycle speed
WW = Underwater light color     (0x01 = Violet, 0x02 = Blue, 0x03 = Cyan, 0x04 = Green, 0x05 = White, 0x06 = Yellow, 0x07 = Red, 0x08 = Color Cycle)
XX = Bartop light color
YY = Pillow light color
ZZ = Exterior light color
OO = 00 for lights are off, 01 for lights are on.

However, if you can get the possible valid states for your tub tub, I will fix the integration.

My tub only has underwater lights.  Here's the decode.
Version: 010031313254202062356531413030322076332E30200A
Blue.  Paused:
17050003000000000000000000000001010101010000
Cyan Paused:
17050003000000000000000000000002010101010000
Green Paused:
17050003000000000000000000000003010101010000
White Paused:
17050003000000000000000000000004010101010000
Yellow Paused:
17050003000000000000000000000005010101010000
Red Paused:
17050003000000000000000000000006010101010000
Violet Paused:
17050003000000000000000000000007010101010000
Cycle Speed 1:
17050003000000010000000100000005010101010000
Cycle Speed 2:
17050003000000010000000200000005010101010000
Cycle Speed 3:
17050003000000010000000300000005010101010000
Intensity 1 Paused:
17050001000000000000000000000001010101010000
Intensity 2 Paused:
17050002000000000000000000000001010101010000
Intensity 3 Paused:
17050003000000000000000000000001010101010000
These are the light color values that seemed to work earlier:
1 = Blue
2 = Cyan
3 = Green
4 = White
5 = Yellow
6 = Red
7 = Violet

There's also an LCD intensity setting with values 1-3.  Not sure where that value lives.  It doesn't seem to affect the light status.

@joshs85 Wow! Thank you. Yes, based on your data, I have a good idea on how to fix the integration. I will put in a fix in the next few days. Question: It looks like you can enabling cycling for any color? In your data, you changed the cycling speed while having yellow selected... but I imagine any color could be selected?
Or when cycling, is the "05" at this location always present?
17050003000000010000000100000005010101010000
                                                 ^^

@joshs85 Wow! Thank you. Yes, based on your data, I have a good idea on how to fix the integration. I will put in a fix in the next few days. Question: It looks like you can enabling cycling for any color? In your data, you changed the cycling speed while having yellow selected... but I imagine any color could be selected?
Or when cycling, is the "05" at this location the only possible value?
17050003000000010000000100000005010101010000
                              ^^

No, any color will work it seems.
This is me setting it to loop 2 when it was red
17050003000000010000000200000006010101010000

@joshs85 - Excellent. Got it. Thanks. I need to redesign my controls a bit because it's possible to cycle while adjusting the colors in your case... so having a "cycle" color is not going to work. I think I need to have a "Off" on the cycle selector instead and have a cycle selector for each light group.

Can you just make it so that if the color is changed while a cycle is running the cycle setting also gets set to 0?

@joshs85 - Ok, I got a new version of the integration ready.
select:
  - platform: iq2020-dev
    name: Audio Source
    id: audio_source
    datapoint: 0
  - platform: iq2020-dev
    name: Color Underwater
    id: lights1_color
    datapoint: 1
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Bartop
    id: lights2_color
    datapoint: 2
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Pillow
    id: lights3_color
    datapoint: 3
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Exterior
    id: lights4_color
    datapoint: 4
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Cycle Speed
    id: lights_cycle_speed
    datapoint: 5
    options:
      - "Off"
      - "Slow"
      - "Normal"
      - "Fast"

@joshs85 - Ok, I got a new version of the integration ready. The key difference now is that if you do not specify the 8th color and only put 7 colors in the options, the code will assume that you can system on any color and change the Color Cycle Speed selector to make it do that. If you specify the 8th color, the integration will assume that you can only cycle when the 8th color is selected. Give that a try, remove the 8th color from all options and let me know if it works.
select:
  - platform: iq2020-dev
    name: Audio Source
    id: audio_source
    datapoint: 0
  - platform: iq2020-dev
    name: Color Underwater
    id: lights1_color
    datapoint: 1
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Bartop
    id: lights2_color
    datapoint: 2
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Pillow
    id: lights3_color
    datapoint: 3
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Exterior
    id: lights4_color
    datapoint: 4
    options:
      - "Violet"
      - "Blue"
      - "Cyan"
      - "Green"
      - "White"
      - "Yellow"
      - "Red"
#     - "Cycle"
  - platform: iq2020-dev
    name: Color Cycle Speed
    id: lights_cycle_speed
    datapoint: 5
    options:
      - "Off"
      - "Slow"
      - "Normal"
      - "Fast"

My light intensity only goes up to 3.  Is there a way to set a max?

Closing this since it's long and things have gotten pretty stable. Please open a new issue with any new data, suggestions or bug reports.


text:
Waiting view UI for all 3 user prospectives (host/player/audience)

Finished the UI as laid out on the figma board for all 3 user prospectives. This completes backlog item RHYM-38 in UI/UX. Added socket endpoint for allowing players to change their color and pfp. Added 8 profile pictures that can be selected. Hooked up view components to views/audience.

![image](https://user-images.githubusercontent.com/76519301/200870201-9e5f8dc7-6ce0-4b1e-a133-3c4d239ac4d8.png)
![image](https://user-images.githubusercontent.com/76519301/200870224-81839be6-01d5-44e1-b14d-e0ae274c99b0.png)

these are images taken in game so that it is easier to compare them to what is on the figma storyboard. Figma Storyboard

repo: Yonava/RhymeTime


text:
ABC9 `cell->parameters.empty()' failed in passes/techmap/abc9_ops.cc:460

Steps to reproduce the issue
Using testcase.il, run synth_ecp5 -abc9 -dff.
Expected behavior
Synthesis completes successfully.
Actual behavior
2.45.6. Executing ABC9_OPS pass (helper functions for ABC9).
ERROR: Assert `cell->parameters.empty()' failed in passes/techmap/abc9_ops.cc:460.

I'll also paste this, which seems relevant:
2.45.4. Executing ABC9_OPS pass (helper functions for ABC9).
Warning: Whitebox '$paramod$7bb25b92394f21507f99ccfd37aa82194be10574\TRELLIS_FF' with (* abc9_flop *) contains a $dff cell with non-zero initial state -- this is not supported for ABC9 sequential synthesis. Treating as a blackbox.

cc @eddiehung

Just to check, I tried 687f381b (before #2695) and the bug still reproduces there, so it's not a regression caused by that PR.

repo: YosysHQ/yosys

license: isc


text:
Add co-simulation in sim pass

support FST as output for sim pass
"n" parameter now explicitly use clock cycles
new parameter "r" to use FST as input for co-simulation
"sim", "sim-cmp", "sim-gate" and "sim-gold" to select co-simulation mode
"start","stop" or "at" parameter to specify time (default unit is ns, can use anything from zs to s)
"scope" to specify top scope in input sim file

This seems to be using zlib even with ENABLE_ZLIB=0 and broke emcc build.

@yuyichao Thanks for reporting this, FST files library is using zlib directly, so in making this respect ENABLE_ZLIB will make this option not available in emcc build, which is probably fine for most users.

It is actually possible to build with the -s USE_ZLIB=1 emcc flag. However, ENABLE_ZLIB (and the emcc flags) aren't included by default which is the problem.
If I read the code correctly, isn't zlib just one of the output options? Shouldn't other formats still work even if zlib is disabled?

Yes, zlib is one of the output/input options but problem is that external API used  is not made with ZLIB as optional, so I  have to see about effort of making it optional.

I see. Yeah, enabling/disabling the whole feature depending on enable_zlib should be fine for now. The user can still manually enable it and supply the right flag to pull zlib to build.

authors: mmicko yuyichao


text:
COCO training missing annotation files?

Hi,
congratulations on the nice paper and repository! I am trying to reproduce the results on COCO with @hjraad, but I've ran into two problems:
Problem 1) Seems I don't have 2 annotations files. I've tried to run train_coco.sh when got this error on two missing files:
FileNotFoundError: [Errno 2] No such file or directory:
 /FewShotDetection/data/coco/annotations/instances_valminusminival2014.json'
FileNotFoundError: [Errno 2] No such file or directory: '/FewShotDetection/data/coco/annotations/instances_minival2014.json'

I've downloaded COCO following the README.md under data, I obtained these files from the annotations:
instances_train2014.json
captions_train2014.json
instances_val2014.json
captions_val2014.json
person_keypoints_train2014.json
instances_shots2014.json
person_keypoints_val2014.json

How should I get the missing files? Do I miss anything? Thanks in advance
Problem 2) I tried to run finetune_coco.sh as well with the provided base checkpoint, but it also got some problems with loading the data. Somehow it only loads 2 images wheres it should do 10 shot for multiple classes, which I guess should be more. Please see below:
Namespace(TFA=False, batch_size=4, checkepoch=20, checkpoint=21985, checkpoint_interval=10000, checksession=200, class_agnostic=False, cuda=True, dataset='coco', disp_interval=100, fix_encoder=False, log_dir='checkpoint', lr=0.001, lr_decay_gamma=0.1, lr_decay_step=4, max_epochs=30, meta_loss=True, meta_train=True, meta_type=0, net='metarcnn', num_workers=8, optimizer='sgd', phase=2, resume=True, save_dir='save_models/COCO', session=1, shots=10, start_epoch=1, use_tfboard=True)
[...]
Loaded dataset coco_2014_shots for training
[...]
before filtering, there are 2 images...
after filtering, there are 2 images...
Any clues on this? @YoungXIAO13
Thanks!

Hi @atiszabo ,
For Problem 1), thanks for spotting this issue, I've updated the README with the instruction and file links for downloading these two json files.
For Problem 2), I suggest to check the json files you've downloaded, or delete the https://github.com/YoungXIAO13/FewShotDetection#coco file and re-run the code to re-generated this file, this should give you at least hundreds of images in the case of 10-shot.

@YoungXIAO13 : thanks for being responsive and for maintaining your repo!

authors: YoungXIAO13 atiszabo hjraad


text:
🛑 UPC is down

In 1e11fbf, UPC (https://www.upc.edu.cn/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: UPC is back up in f806645 after 8 minutes.

repo: Yourrrrlove/upptime


text:
adding py.typed to enable mypy, if used as library

This package is well typed, in order to use it as a library it should be marked as typed as explained here: https://mypy.readthedocs.io/en/stable/installed_packages.html#creating-pep-561-compatible-packages
This PR adds a py.typed file and includes it inside pyproject.toml so anyone including this package as a library/dependency can use mypy for type-checking.

Thanks! Though looking at the provided link, shouldn't the py.typed file be located in the fido2 directory rather than the root?

yes, you are right, the final py.typed file did not end up where it should. Made the necessary changes and tested like that (with the repository being the current work directory):
# set up virtual env
$ python -m venv /tmp/my-test-venv
# install python-fido2 into virtual env
$ /tmp/my-test-venv/bin/python -m pip install .
# check if py.typed is at the right spot
$ stat /tmp/my-test-venv/lib/python-3.*/site-packages/fido2/py.typed

You shouldn't need the change to pyproject.toml, the file should get included anyway.

Indeed, updated!

Thanks! Merged!

authors: dainnilsson daringer


text:
Improvements to Arbitrary Hotkeys repository

I've improved the arbitrary-hotkeys.js file with a well-detailed header and made a little bit of changes. I've written a completely new README for the repository, based on this, this and this READMEs, also based on this cool guidelines.
I saw on the Internet many websites that gathers lots of jQuery plugins, and many of them accepts new requests of jQuery plugins hosted on GitHub. We could do this! Increase the popularity (stars) of the repository!
Warning
The GIF image shown in README is located in a folder inside Wiki repository, so if you merge this Pull Request, the image probably won't be shown (broken link)!
To avoid this, merge commits between repositories using this tutorial.
There are two ways to merge commits between Wiki repositories shown in the tutorial. The second one it's easier and it seems it will work:
git clone https://github.com/Yuri-M-Dias/arbitrary-hotkeys.wiki.git
cd arbitrary-hotkeys.wiki.git
git pull https://github.com/gustavosotnas/arbitrary-hotkeys.wiki.git master
git push origin master
If won't work, try the first method on the tutorial. :+1:

Nice. Seems pretty organized like this, you really made a nice job. The initial way that i thought about it was quite clunky, but this one seems to work. LGTM!

authors: Yuri-M-Dias gustavosotnas

repo: Yuri-M-Dias/arbitrary-hotkeys


text:
fix example for browsing github.com

The layout of GitHub is changed. Update the scraping example code.

Playwright 1.35 works, 1.36 and 1.37 are broken.

The failed spec would be caused by https://github.com/microsoft/playwright/issues/26636

repo: YusukeIwaki/capybara-playwright-driver


text:
I would like to add Linked List, Stack and Queue implementation in Python

Please assign me this task @YuweAEC

Sure @twinkle485

added pls check it

repo: YuweAEC/hacktoberfest-playground


text:
when to open source codes ?

what a wonderful jobs! when you plan to open the source codes?

Thanks for your attention.
It will be released in the next few weeks.

The code has been released.

The code has been released.

thank u

authors: Z-Zheng maozan nicehuster

repo: Z-Zheng/ChangeStar


text:
Kafka images are missing Java after rebase to latest commit

Fails to start because there is no Java.
Luckily tag 3 is not reused, so, it is easy to illustrate it.
Old image podman run
podman run -it --rm --entrypoint /bin/sh ghcr.io/zcube/bitnami-compat/kafka:3 -c "java -version"
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment Temurin-11.0.13+8 (build 11.0.13+8)
OpenJDK 64-Bit Server VM Temurin-11.0.13+8 (build 11.0.13+8, mixed mode)

New image podman run
podman run -it --rm --entrypoint /bin/sh ghcr.io/zcube/bitnami-compat/kafka:3.2 -c "java -version"
/bin/sh: 1: java: not found

Bump was requested in scope of #17

 sudo docker run --rm -ti  ghcr.io/zcube/bitnami-compat/kafka:3.2.0-debian-10-r0 java --version
kafka 17:21:21.88
kafka 17:21:21.89 Welcome to the Bitnami kafka container
kafka 17:21:21.90 Subscribe to project updates by watching https://github.com/bitnami/bitnami-docker-kafka
kafka 17:21:21.91 Submit issues and feature requests at https://github.com/bitnami/bitnami-docker-kafka/issues
kafka 17:21:21.91

openjdk 11.0.13 2021-10-19
OpenJDK Runtime Environment Temurin-11.0.13+8 (build 11.0.13+8)
OpenJDK 64-Bit Server VM Temurin-11.0.13+8 (build 11.0.13+8, mixed mode)

@arixmkii fixed.

authors: ZCube arixmkii

repo: ZCube/bitnami-compat


text:
ZFIN-9370: Upgrade jackson annotations.

See this for more info: https://stackoverflow.com/a/76638838

Looks good. I assume the newer library is already in the repository.

Yes, that's correct

repo: ZFIN/zfin


text:
Discussion: annotation / auto-conversion / post-processing GraphQL responses into domain types?

This is more of a question and discussion rather than a bug.
Let's say I have a custom type in my model like this:
open System

type ProductID =
  | Apple of Guid
  | Banana of Guid
  | Cherry of Guid
  with
    member this.ToString () =
      match this with
      | Apple g -> sprintf "apple/%A" g
      | Banana g -> sprintf "apple/%A" g
      | Cherry g -> sprintf "apple/%A" g

module ProductID =

  let tryParse (x : string) : ProductID option =
    // match x.Split([| '/')
    // etc ...

All good idiomatic F#.
Now, in my GraphQL endpoint, the product ID is encoded as GraphQL ID, which is just a string.
So for a query like this:
query {
  products {
    id
    price
    # ...
  }
}

GraphQL might return this:
{
  "products": [
    {
      "id": "apple/157be5aa-d3c8-4894-befb-a739251a57bb",
      "price": 60
    },
    {
      "id": "banana/11751f22-7908-44c0-bb3b-59d9eddd0457",
      "price": 70
    }
  ]
}

Snowflaqe will (correctly) generate F# code that is something like this:
type Product =
  {
    id : string
    price : int
    // ...
  }

type Query =
  {
     products : Product list
  }

I want to consume this response in a Fable app, but now I have a choice to make. The generated Snowflaqe code has product.id as a string, but ideally I would have a ProductID.
Right now, the options I can see are:

Use the "stringy" ID, but miss out on features of the F# type system. This gives similar safety to JS code, so perhaps not much is lost.
Parse the ID on the fly when I need to match on it, like this id |> ProductID.tryParse |> Option.get. This might fail at run-time, but only in predictable places.
Write another type for Query that has everything properly parsed and do the parsing immediately after the fetch step:

asyncResult {
  let client = GraphQL.GraphqlClient "/graphql"
  let! resultUntyped = client.Query.products ()
  let! resultTyped = parseResult resultUntyped

  return resultTyped
}

This give ultimate safety, but it's lots of extra code.
The ProductID is just an example of this problem, but there are many other cases where it appears. I am currently using the "parse on-the-fly" approach in my own code.
Perhaps there should be some way of configuring Snowflaqe to integrate the parsing in the fetch process? Or maybe I am missing a simple pattern for solving this? I'm not sure what this would look like, so I thought it would be best to start a discussion here.
It might also be interesting to leverage Thoth.Json decoders here, since I usually already have those for other purposes.

Hello @njlr, this is a very good question:

Perhaps there should be some way of configuring Snowflaqe to integrate the parsing in the fetch process?

Currently there isn't any way because we rely on Fable.SimpleJson to automatically and exactly parsing the JSON into the generated types without needing any configuration. In fact, SimpleJson understand GraphQL types and how they should be mapped (for example a GraphQL interface or union maps to a discriminated union of record type for each case).
Now SimpleJson doesn't have a way to override its way of parsing. I believe it is possible but it can be very complicated. Besides changing the automatic parsing behaviour, there needs to be also a way to tell Snowflaqe how to read use the custom converters which complicate the situation even more. Another complication is also making the fsharp target follow these custom generators (Snowflaqe not only generates clients for Fable but also for .NET/F# consumers).
As for Thoth.Json, it is possible to use it and instead generate F# encoders and decoders for each and every generated GraphQL type but this too has downsides:

It will generate a huge amount of code because Snowflaqe normally generated lots of small types which means it makes the bundle size bigger
It requires a lot of work to get it right.

I think the "on-the-fly" method of your code is the way to go because you can assume the data coming from the GraphQL client is always well-typed and the data always comes through as exact as it can be. If you customize the parsing, you lose this assumption.

authors: Zaid-Ajaj njlr

repo: Zaid-Ajaj/Snowflaqe


text:
[ Focus Stealing ] HashTWM handling windows stealing focus

It seems applications may steal focus for various reasons, leaving HashTWM almost unusable for any reasonable length of time.
With Windows 7, the various tweaks/fixes to prevent windows from stealing focus have been removed and/or unchangeable.
I've noticed this happening a lot with KiTTY (PuTTY) as well as with Outlook 2010, as example applications.
Some applications have fine-grained controls in handling how pop-ups and window focus affect the user.  Unfortunately, it appears HashTWM is fleshing out the bugs with the various applications' settings or there is a bug within HashTWM.
Would a command line argument to ignore any and all applications from stealing focus be something reasonable to implement?  I'd prefer to only focus on the window I've highlighted with mod+j or mod+k.
Thank you.

This should be fixed as of the most recent commit (assuming it is the same issue as https://github.com/ZaneA/HashTWM/issues/30), have pushed a new binary here https://github.com/ZaneA/HashTWM/blob/master/hashtwm.exe (although I suspect you would have well moved on by now :D)

Unbelievable!
Almost exactly 10 years!
Yes, my workflow is different these days but what a fond blast from the past!
Congratulations on fixing this! 🥳

authors: ZaneA sirjaren

repo: ZaneA/HashTWM