BruControl: Brewery control & automation software

Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum

Help Support Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
Sorry for the bit off topic post, but for those of you who use pH analyzers like the Rosemount 1056, what do you set the temp correction in the analyzer to? If there is no temp correction set, what mash pH at mash temps would be the equivalent room temp pH of 5.4? I've always only measured at room temp. I'm in the middle of my first brew with the Rosemount and it is incredibly convenient.
 
I have been working on the interface on my workspaces and I have an interface graphics question.

Is there a way to make one element (global in this case) have a transparent background so you can see the other element (another global) behind it? I've tried a bunch of things but I always get the normal dark background of the one on top blocking the one on the bottom.

In the picture below, I was trying to make an LED indicator sitting on top of a picture. No luck though. I tried making the background image a transparent dummy image (.png format), tried setting the name background to transparent, both with no luck.

I feel like I'm just missing something, since I see some pretty sexy interface from others that I'm pretty sure do what I'm trying to do.

Screen Shot 2020-01-19 at 3.13.31 PM.png
 
Last edited:
You don’t set a background.

I don't have anything set for that global LED element. Below is the screen shot of the background dialog box, nothing set.

The background image shows through, but not other elements. It looks like you are doing this on the various bits of telemetry for your BK/HLT/MT, I just can't figure out how.

Screen Shot 2020-01-19 at 7.09.15 PM.png
 
Oh. Do you mean see though to another element? You can’t. You can set the z orders and do visible/hidden.
 
Ok, that is what I was trying to do. Basically make a device have a picture (like, a digital output that drives a relay) and then have other globals placed on top of it that showed various telemetry or whatever.

I guess it mostly is just me trying to have a way to avoid needing to redraw the background and have the imagery movable/dynamic.

Thanks.
 
Last edited:
It looks like the work I did over the break between Christmas and New Year's paid off. A couple of Saturdays ago (1/11), I finally finished all of my water-only testing and script debugging, so I ran a live brew. I built the starter Friday night and finally started heating strike water at about 2pm on Saturday. I ran the script for the entire brew. A couple of notes:
  • The Auber temp sensors were rock solid and on the money. Totally worth replacing the CCS I started with.
  • I found and fixed a couple more syntax errors in the script
  • I jotted down a half-dozen or so things I wanted to do differently in the script. I added them that night, after cleanup.

The biggest thing I noticed was how much time I recovered because I didn't have to run around cross-checking temps and adjusting stuff the whole way through. For the first time, I was able to putter around the house doing other stuff because there is a reminder alarm built in at the end of some of the wait period steps. When the alarm sounded, i knew it was time for me to tend to the brew. I also felt confident that I wasn't going to forget something stupid (like forgetting to rig the sparge ring), which has been an all too familiar occurrence.

Overall, I'm damn glad I took the time to finally get the script developed. This brew was my first taste of the actual automation that I've been looking forward to.
 
I have been working on the interface on my workspaces and I have an interface graphics question.

Is there a way to make one element (global in this case) have a transparent background so you can see the other element (another global) behind it? I've tried a bunch of things but I always get the normal dark background of the one on top blocking the one on the bottom.

In the picture below, I was trying to make an LED indicator sitting on top of a picture. No luck though. I tried making the background image a transparent dummy image (.png format), tried setting the name background to transparent, both with no luck.

I feel like I'm just missing something, since I see some pretty sexy interface from others that I'm pretty sure do what I'm trying to do.

View attachment 662785

I tried and had no success, but if you have your vessel on a background of the workspace, you can overlay a button or digital out etc. It took some time to get the background of the workspace correct but I can overlay things.

My Blue Pump and Little Mac Control (Digital Outs) are "on top" of the background. All the pumps are globals and have a matching blue background to the on on the workspace so they are not transparent. In addition, the little mac Controller name has a white back color.

( I moved them on top of vessesls to demonstrate.) Die Beerery was the catalyst for this approach and would know a ton more than me.


workspace1.png


This is the workspace with only the back ground image (1850 x1000 on my resolution)

workspare b1 only.png
 
Last edited:
I've got the basic setup right, I'm just working to make it more slick/stream lined. It feels a little clunky at the moment.

This is my main brewery page, it's ok but I would like to be able to compact somethings, but overlapping make it look crappy if the box from one "shadows" the other thing.
Screen Shot 2020-01-20 at 5.44.13 PM.png
 
Quick question. What is the currently preferred method for dealing with moving a license over to a new PC? I am in the process of moving to a more powerful computer to run BC and the upcoming DB and perhaps web back-end (not sure when this new stuff will be released). That said, the mini PC I have been using (Apollo Lake N3450 CPU) is just too much of a dog for me. Sure, I'm spoiled and I admittedly am intolerant of any "laggy UI" and the like. In any event, What is the procedure to get a license reactivated and is there a way to have the license active on two computers at the same time (for a limited time) to allow for a more robust transition such that if something is amiss, the old unit can still work for a short bit?
 
Last edited:
I've got the basic setup right, I'm just working to make it more slick/stream lined. It feels a little clunky at the moment.

This is my main brewery page, it's ok but I would like to be able to compact somethings, but overlapping make it look crappy if the box from one "shadows" the other thing.
View attachment 662966

You guys impress me! My Workspaces suck compared to yours!
 
Could you give use a list of the new features coming up and estimate release date:

Sorta Like:


1. DisplayText An property of any Element. Allows the End User to change the Display Name that is displayed in the Name Slot of an Element. This does not change the Name Property of the Element so there are no issues regarding Scripts. All of the attributes (Font, Alignment, Visibility etc.) of the Name Slot are still effective. If the DisplayText field is left Blank, the DisplayText defaults to the Name.

The script property is: "Any Element" DisplayText = "My Displayed Name"

BTW< I am guessing and this may NOT be how the new property works!

2. Fixed xyz so that .....
 
Is there a way to make a current on the fly backup other than using Window Explorer? When I am happy with some changes, I would want to make an interim backup. I just had another fatal exception and lost some changes I made to one script. The Script was what caused the error (I suspect I hit a series of keys by accident with a CTRL instead of shift that caused it, the Screen Error said "95" is not a valid value for "Log Position". I am not too worried about the error and I could not copy the script because it would not allow me to. I deleted the offending script and replaced it from the automatic backup. If I have some script I am writing and happy with it, I want to save a backup very quickly.
 
Not sure how you would do a backup without using Windows explorer, I guess you could write a windows batch or powershell script but it would still require you to interact with it to execute it... it would entail just copying the default.brucfg file to another location.
 
Speaking of Ctrl+s, I have implemented the notepad++ BruControl script language formatting that was posted earlier in this thread. However, I also set up notepad++ to recognize the file extension ".bcs" (BruControl Script) so it will automatically use the BruControl language formatting when I open it. Might be good to start using something other than ".txt" by default.
 
The config files back up on a daily bases. However, you should back up your whole BruControl folder on occasion, either to the cloud or remote network storage. This can be automated by lots of backup applications or scripts. Even Windows has a native backup tool.
Could you give use a list of the new features coming up and estimate release date:

Sorta Like:


1. DisplayText An property of any Element. Allows the End User to change the Display Name that is displayed in the Name Slot of an Element. This does not change the Name Property of the Element so there are no issues regarding Scripts. All of the attributes (Font, Alignment, Visibility etc.) of the Name Slot are still effective. If the DisplayText field is left Blank, the DisplayText defaults to the Name.

The script property is: "Any Element" DisplayText = "My Displayed Name"

BTW< I am guessing and this may NOT be how the new property works!

2. Fixed xyz so that .....

Sorry, that's extra work and creates a situation where we'll be obligated. We don't want to let anyone down if we don't include something we promised because it is holding up the release.

That said, I think we will get the next update out this week!
 
crtl+a to highlight the entire script
ctrl+c to copy it to the clipboard
Open a text editor
ctrl+v to paste the text
save the file.
I have copied my scripts to text files and that has saved me a few times already. What I was hoping for was a quick instant backup as I am writing the Script. I am "fat fingered" and even closed this while I was writing it.

I have gone to copying the script I am working on to a temporary one and then coping back to the real script. It has happened to me about 10 times so far and it is a PITA as I have to redo the work. No big deal as it should not be an issue after I get all my Scripts done.
 
Speaking of Ctrl+s, I have implemented the notepad++ BruControl script language formatting that was posted earlier in this thread. However, I also set up notepad++ to recognize the file extension ".bcs" (BruControl Script) so it will automatically use the BruControl language formatting when I open it. Might be good to start using something other than ".txt" by default.
How did you get that to do that. I use Notepad ++ for Java Script all the time
 
Regular Backups are part of any good plan and I do put backups on the Cloud. I also copy to a thumb drive every month, even if there are no changes. The auto backup that BruControl does has saved my bacon more than once! I have started to also make a quick backup of my config by simply copying and pasting in Windows Explorer. I do that also after I have written a fair amount of scripts as I am doing them.
 
That said, I think we will get the next update out this week!

Yeahhhh..... you guys should just go ahead and release it now.
I have copied my scripts to text files and that has saved me a few times already. What I was hoping for was a quick instant backup as I am writing the Script. I am "fat fingered" and even closed this while I was writing it.

I have gone to copying the script I am working on to a temporary one and then coping back to the real script. It has happened to me about 10 times so far and it is a PITA as I have to redo the work. No big deal as it should not be an issue after I get all my Scripts done.

Hit ctrl+s, then type type a name (could just use "s" to make it super fast), hit enter. Saved. From then on, just hit ctrl+s to save it to that file.
 
Last edited:
Just for giggles, here is a graph of an RTD amp measuring a 100 ohm resistor for a day via an ESP32. It should read around 32, but the resistor may not be exact.

What is interesting is it got relatively cold last night... probably about a 20 degree swing. Then the room was warmed up at around 9:00 am... you can see this in the graph. I guess metal film resistors vary with temp.

upload_2020-1-22_21-16-45.png
 
How did you get that to do that. I use Notepad ++ for Java Script all the time

start by doing what @VacationLand outlines in this post to enable the BruControl scripting format as a language in notepad++. Thanks to @VacationLand for creating the UDL.

https://www.homebrewtalk.com/forum/...tomation-software.624198/page-53#post-8550398

bru_script.jpg


Then go to Language -> User Defined Language -> Define your language...

Select BruControl from the "User Language" drop down. After that set the extension to .bcs, or whatever you want to use.

extension.PNG
 
Just for giggles, here is a graph of an RTD amp measuring a 100 ohm resistor for a day via an ESP32. It should read around 32, but the resistor may not be exact.

What is interesting is it got relatively cold last night... probably about a 20 degree swing. Then the room was warmed up at around 9:00 am... you can see this in the graph. I guess metal film resistors vary with temp.

View attachment 663229
All resistors will vary with temperature. The ppm/C or just ppm rating on a resistor corresponds to its variance across temperature. You will need to look that up to see if it's in spec. The temperature coefficient section in the site below has more to say about this.

http://www.learnabout-electronics.org/Resistors/resistors_10.php
 
Last edited:
So my question is regarding subroutines vs scripts for repeating code segments.

I have a script that run continuously during brew day with a delay to skew the processing down. It checks that status of Button elements and activates a short alarm (beeps for feedback of a pressed button). This I call my Button alarm.

My main brewing script starts another script when certain conditions are met. The script toggles my Alarm element on/off. I call it my Brew Alarm.

I realize that I could use subroutines for these. I wonder what are the pros and cons of subroutines vs separate scripts? Is one option better practice for computations in the computer/interface? Are they both different ways to cut the same cake?
 
I honestly wouldn't sweat it. Neither are going to stress the interpreter or your computer. The processing is likely same or similar. That said, subroutines are considered better practice, since you are re-using the same code, and one change updates everything that uses it.

But again... focus your efforts on more pressing matters would be my advice!
 
I honestly wouldn't sweat it. Neither are going to stress the interpreter or your computer. The processing is likely same or similar. That said, subroutines are considered better practice, since you are re-using the same code, and one change updates everything that uses it.

But again... focus your efforts on more pressing matters would be my advice!

Thanks!
 
I think of scripts vs subroutines along the lines of parallel threads vs serial operations (not literal other threads, just as a way to think of it).

If I have an operation that I want to run but not interfere with the timing of the other stuff I use a script. If it is something that is going to be quick or it should grab control and hold it, I use a subroutine.

So, each of my brewing steps (heat strike water, run step mash steps, etc) is a script but the things that occur inside each of those scripts (adjust flow rates, ramp temps, etc) is done with a subroutine inside the script.

I also have some housekeeping stuff that needs to run all the time, checking buttons and interface stuff. Since that can't be interrupted by other stuff, it is its own script which contains subroutines for each of the housekeeping tasks it has to do.
 
I think of scripts vs subroutines along the lines of parallel threads vs serial operations (not literal other threads, just as a way to think of it).

If I have an operation that I want to run but not interfere with the timing of the other stuff I use a script. If it is something that is going to be quick or it should grab control and hold it, I use a subroutine.

So, each of my brewing steps (heat strike water, run step mash steps, etc) is a script but the things that occur inside each of those scripts (adjust flow rates, ramp temps, etc) is done with a subroutine inside the script.

I also have some housekeeping stuff that needs to run all the time, checking buttons and interface stuff. Since that can't be interrupted by other stuff, it is its own script which contains subroutines for each of the housekeeping tasks it has to do.

I also have a script called "ScrAutoSwitch" that checks status of several things that is a continuous loop. I do divide and conquer with individual scripts such as ScrMash" and "ScrBrew" that controls other scripts at the proper time once the wort is in the Brew Kettle. These include ", "ScrBitterHops, "ScrFlavorHops, and "ScrAromaHops. There are other ones as well. Anything that is exactly repeated in a single script is in a subroutine, but if needed in a different script, it has its own script. A good case for this is my "ScrAlarm" thas cleans up after any alarm. Since Alarms as initiated in several different scripts, a subroutine would need to be repeated in all the scripts that have an alarm.

Rules:

1. Code repeated in same script: sub- routine in same script
2. Code repeated but needed in other Scripts: Own Script
 
Looking forward to the release!

Were signing lease soon on the commercial brewery.. I'm looking to use my old panel to power the brewery until my BC panel is complete..I have a 240v 30A based on Kal clone. A 3pos switch allows for either 240v to kettle, off or HLT. My idea is to use these outputs as the control circuit for the commercial brewery contactors which will be located separately in a high voltage panel. This seems like the most simple idea rather than drilling a low voltage control circuit. Does this sound like a decent idea- if so, would 240v coil or 110v make more sense? I could just omit a 110v leg on a jumper cord to the high voltage control panel.
 
Back
Top