Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Managing two iBoost+ #9

Open
srchild opened this issue Nov 24, 2023 · 13 comments
Open

Managing two iBoost+ #9

srchild opened this issue Nov 24, 2023 · 13 comments

Comments

@srchild
Copy link

srchild commented Nov 24, 2023

I have two iBoost+. Each one is connected to a different phase of my 3-phase power supply and each one is connected to different immersions in different tanks, i.e. they operate completely independently. However they are sited adjacent to each other, both mounted on the same wall.

With this project, which does not seem to feature pairing, will I be able to target each iBoost+ independently, or will it be a matter of luck/chance whichever iBoost+ the ESP board connects to?

Perhaps I will be lucky and my two iBoost+ are both detuned but in opposite directions and I'll be able to make two ESP-Home-iBoost kits and target one at the precise frequency of each iBoost+??!

Perhaps I can relocate the iBoost+ so that they are a bit more widely separated than they are now, and mount the ESP-Home-iBoost directly on the case of each iBoost+ so that each ESP might talk to the iBoost+ on which it is mounted.

Any other thoughts?

Thanks

@JNSwanson
Copy link
Owner

Hi, The easy way would be to have 2 sets of hardware and hard code the addresses for each one. To do this run the normal configuration and look at the packets in the monitor. After the "Got Packet", the next 2 values are the address. You should be seeing 2 different addresses. Make a note of the 2 addresses, then modify the iBoost.h files on each of the 2 receivers as follows:
If the address received is Got Packet,45,7F,..... then change line 270 from address[0] = packet[0]; to address[0] =0x45; and line 271 from address[1] = packet[1]; to address[1] = 0x7F; Recompile the project and the address will be fixed.
I'm sure it would be possible to get both workiing on the same hardware, but it would take more coding to achieve this.
Hope this helps.

@srchild
Copy link
Author

srchild commented Nov 27, 2023

Good, that sounds doable, thanks. Will that fix it for sending (e.g. to request a boost) as well as for receiving?

I'd already thought that making two sets of hardware would be the way to go, if only because careful positioning of them in relation to the iBoost+s might enable selection of the target iBoost+. The parts for two devices are already ordered from Aliexpress :)

@JNSwanson
Copy link
Owner

Yes it will fix it for the boost.

@srchild
Copy link
Author

srchild commented Nov 27, 2023

Excellent! Thank you

@srchild
Copy link
Author

srchild commented Jan 17, 2024

OK, I have built this and have it working and it connects to one of my two iBoost - excellent :)

Now to ensure it connects to the same iBoost each time. You said above "run the normal configuration and look at the packets in the monitor. After the "Got Packet", the next 2 values are the address."

I'm new to ESPhome but I've had a look around and I can't see any 'monitor' option where I can look for packet data. Have I overlooked it or are you meaning to monitor some other way?

Thanks

PS I have an RTL-SDR - can I use that with some software (which?) to investigate this?

@JNSwanson
Copy link
Owner

When you build and upload from the command line, you should see the monitor output after the upload has finished.

@srchild
Copy link
Author

srchild commented Jan 17, 2024

Thanks for that. Running on the esphome container command line

esphome run iBoost.yaml
or
esphome -v run iBoost.yaml

I'm seeing no packet information. It goes from installing firmware to connecting to wifi then receiving iBoost data.

Looking it iBoost.h I see some places where packets should be printed but perhaps I'm not hitting those parts of the code.

Screenshot 2024-01-17 232954cropped

Screenshot 2024-01-17 233013cropped

@srchild
Copy link
Author

srchild commented Jan 18, 2024

Ah, iBoost.h lines 240/241

// Receive part. if GDO0 is connected with D1 you can use it to detect incoming packets
//if (digitalRead(D1)) {

Is this why I am not seeing any packets displayed?

Do I need to connect GDO0 and D1 and enable this code?

@JNSwanson
Copy link
Owner

No it will just poll for the data. If it doesn't receive anything, it is usually down to the xtal on the receiver being off frequency. You should still see the radio ok message though.

@srchild
Copy link
Author

srchild commented Jan 20, 2024

It is receiving data and it is appearing in HomeAssistant so all is good from that point of view. Curiously it is receiving data from only one IBoost+ and that it the one that I am most interested in controlling (connected to the immersion in my OSO tank). So that is fortuitous but probably unreliable - if I send a boost command that might be the one time it connects to the other iBoost+!

iboosttoday

I've realised that no Serial.print or Serial/println commands are working at all, even extras that I have added for debugging purposes.

I am using an Amica NodeMCU.

PXL_20240104_164822093 MP

I have been googling and tried out a few things such as setting Serial.begin(9600); but no better (also tried 115200).

In iBoost.yaml I have tried setting board: to either nodemcu or nodemcuv2.

Perhaps my board has some compatibility issues, needs different initialisation, or is faulty. Are there any known good ESP8266 you could advise I buy in place of this?

Thanks

@JNSwanson
Copy link
Owner

Have you tried uploading via the usb rather than over the air?

@srchild
Copy link
Author

srchild commented Jan 21, 2024

Got it!

I spent some time tinkering yesterday and trying to work out what was going on. (Remember I'm a newbie to this :)

I was leaning towards the idea that what I was seeing on the console was not what was being sent to USB, but could not work out how to access that. I failed in uploading over USB because that option was not offered, only OTA.

Following your nudge this morning I looked again and found that commenting out the wifi information from iBoost.yaml forced uploading to occur over USB. So now I am seeing

Got packet,75,f5,22,00,00 (etc)

I'll hardcode that address (then re-enable wifi) and it should be all done.

Thanks for your work on this.

@srchild
Copy link
Author

srchild commented Jan 25, 2024

So, I now have two iBoost+ with two "Buddy" controllers, all working nicely. Thank you JNSwanson :)

I had to a do a little more than just update lines 270/271 to set the address of each iBoost+

Of course I had to change the sensor names in at least one of the installations to avoid a clash. In yaml I simply added a suffix of OSO to the names of the sensors for my OSO tank and TS to the names of my sensors for my Thermal Store tank.

I also had to update line 250. Lines 270/271 set the transmit address but have no effect on the receive address, so I was receiving data from both iBoost+ into both boards and both sets of sensors! I just extended the condition to include my hard-coded addresses.

if (pkt_size > 0 && radio.crcok()) { // We have a valid packet with some data

became

if ((pkt_size > 0) && (radio.crcok()) && (packet[0] == 0x75) && (packet[1] == 0xf5) ) { // We have a valid packet with some data

or

if ((pkt_size > 0) && (radio.crcok()) && (packet[0] == 0xb4) && (packet[1] == 0xf0) ) { // We have a valid packet with some data

I also found that tuning the crystal made a big difference to signal strength and was easy to do - just bracketing the starting frequency and recompiling a couple of times to check the result.

Finally, for a laugh, for those of you wondering about how to make an enclosure, here is my minimalist solution:

PXL_20240125_181723360

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants