Robo-Tank v6.7 is Ready

Rob F

Administrator
Staff member
Hello, I'm happy to say I have an update for the web app, sorry it's been so long. Quite a bit has been done and I'm feeling pretty good about it's future.

Thanks to everyone who has tested the app and given feedback, it's all been very helpful. Any more you have would be appreciated. The next post will go over the update and fresh install process.

Here's what's been done.

* Database connection pool - This is big. Due to the threads there was an issue with MySQL database connections which rarely occurred but when it did it would crash the program. It would only happen when saving custom rules or during startup when the DS18B20 sensors loaded up. With custom rules it still updated the database and the program would restart in 3 seconds due to the Pi service running so it wasn't causing huge issues but obviously a problem. I made some changes in v6.6 which helped but that's it. Finally I got it solved using a MySQL connection pool, it was happening due to a variable being shared across the threads. I could see it happen as I run the program in the SSH terminal, when it would start it would sometimes crash after loading the DS18B20 sensors. About 6 months ago I made this change and it hasn't happened since, I'm 100% confident it's fixed and feel great about it.

* Emails - These are now sent on a separate thread and don't interfere with the program in any way. Previously they would pause the main loop briefly which wasn't ideal, now everything runs uninterrupted, it's real time 100% of the time.

* Charts - I'm happy to say all the chart data is now coming from the database, previously it was CSV files. I had the foresight on this, from day 1 the data was being saved to the database so you shouldn't notice a difference but there is. This is great because now queries can be created to pull data from multiple sources and placed on the same chart. Possibly the next release you'll be able to make custom charts. Below is the chart for the DHT22, it shows temp and humidity and the next one is the dosing pump. You can see in that chart with the mouse hovering it dosed 7.14ml and took 4.29 seconds. The seconds in the chart is measured for each dose, not calculated. It's very accurate and shows how fast the system runs, each dose within 100th of a second.

dashboard.PNG


* DS18B20 Temperature Sensors - A fair bit was done with these, finally there's a settings page.

temp1.PNG


You can edit the name, set how many days show up in the charts keeping data usage down (data remains in database) and you can enable a "Malfunction" email alert. Because the system knows when a temp sensor isn't communicating you can have it send you an alert if it stops working, unplugging it will also set off the alert. You can also delete all the charting data, sorry the heater and chiller buttons do nothing yet.

temp2.PNG


You can also calibrate the sensors using an ice bath.

temp3.PNG


It's automated, just start it and wait.

temp4.PNG


I revisited the dosing pumps and updated the scheduling system, now it's a different system then other scheduling. I think I'm going this route for other schedule types, this way it can be customized for equipment types.

dosing1.PNG


When you click the "View Details" button you get a list of the schedules, you can see some of them are group schedules. Now group schedules are stored as one schedule in the system saving lots of memory. The schedules within a group are dynamically calculated each time a schedule runs. This took a lot of effort as schedules can end after midnight but I think everything is good. Be sure to monitor things and check the log for the first while.

In the summary below it shows the total amount being dosed for the group.

dosing2.PNG


You can click on any schedule and it will expand with all the details. For now the "Next Schedule" is just a date and time but I will be changing this to say things like today, tomorrow, in 4 days, etc...

dosing3.PNG


Here's the screen to create the schedule. By default it for a single schedule, if you click the "Recurring Schedule" option you can the next image.

dosing4.PNG


Now with "Recurring Schedule" ticked you get a field for the "Last Dose" and a "Run Schedule All Day" option. It can calculate the group based on either dose amount or number of doses in time frame. It'll only allow you to set one of them.

dosing5.PNG


If the math doesn't add up it'll automatically adjust the total dose amount and explain why it did this, here's an example.

dosing11.PNG


You can also access the log for each dosing pump, this just filters the main log which I will be improving soon.

dosing9.PNG


There is now flow meter support, you can connect flow meters like the link below directly to a sensor port. For now you can only change the calibration factor value but at some point there will be a calibration process. You can use the flow rate in custom rules and there's a chart for flow rate. When you add a flow meter it appears on the dashboard with the other sensors, you can see one in the dashboard image above. It displays flow rate, total flow and min/max flow rate.

Amazon.com Flow Meter


flowmeters.PNG


There was a few things done with the custom rules, DHT22 was added, you can use either temperature or humidity for the rule or both if you wish. Flow meter flow rate was also added. If you don't have flow meters or water sensors as an example, the titles won't be in the drop down.

rules1.PNG


You can see a new option for the custom rules, this is something I've gone back and forth on and it finally hit me, just have an option. This only appears if you add a switching delay to any piece of equipment. There's two types of delays, you can set a stability delay for the sensor so the custom rule doesn't trigger unexpectedly and there's a switching delay you can add to each piece of equipment allowing you to add steps. The problem with this delay was what should happen if the sensor resets, should the rule abort or should it run until all the actions complete. When I say sensor resets I mean, if the custom rule was triggered when a sensor wasn't touching water, then it touched water again before the custom rule finished what should happen. I think some scenarios you want it to finish others you don't. Hopefully it doesn't cause to much confusion. Let me know what you think.

rules2.PNG


In the preview it now states "Custom rule will run until completed!".

rules3.PNG


Here's the settings menu, a few more buttons. Sorry the heaters aren't setup yet, I was going to do but it's time to release update.

menu.PNG


There's a new setting on the System Settings page in the first box. This is "Auto Logout". Previously it was pretty random when you would be logged out, maybe a day maybe 2 days. Quite a few people were annoyed by it along with myself so I think that's solved. When the app is installed the php.ini session timeout is changed to 1 year. In the app you set how many hours you want to stay logged in and when that expires a function will run and kill the session.

settings.PNG


That's about it for pictures, here's a summary of all the changes. You can find this in the "Version Log" seen in the image above.

Fixes
  • Apache - Fixed various errors showing up in Apache2 error log
  • Charts - Chart data was loading when hidden
  • Charts - Could not hide pH charts
  • Configure Ports - Port was not taken out of manual mode when function was changed, this could prevent it from switching
  • Custom Rules - If custom rule had a delay before switching equipment it was possible the custom rule resets before actions are taken
  • Dosing Pumps - If reservoir was disabled level remaining would go below 0 milliliters
  • Dosing Pumps - Sometimes stirrers would not work, fixed array location errors
  • DS18B20 - If a DS18B20 sensor loses communication, the system tracks it and prevents temperature-based custom rules from false triggering
  • User Contributed - DS18B20 - If the DS18B20 sensor ID did not contain a letter you could not create a custom rule with it
  • Schedules - A schedule could not be edited after adding dose amount to scheduling system
  • Schedules - Rounded dosing pump milliliters to 1000ths on schedule list
  • Startup - If a pca9685 was not detected the program would not start
  • Startup Wizard - Fixed controller version selection during first time run wizard
  • System - Removed MySQL database global variable for connections and replaced with connection pool
Additions
  • Charts - Added DHT22 chart, it displays temperature and humidity
  • Charts - Added dosing pump chart, it displays milliliters dosed and number of seconds it ran
  • Custom Rules - Added option to abort or complete custom rule if sensor resets
  • Dashboard - Added shortcuts on dashboard sensors, click any sensor to go directly to settings
  • DHT22 - DHT22 temperature and humidity sensor has been added back
  • DS18B20 - Added an optional malfunction alert if DS18B20 temp sensor is unplugged or stops working
  • DS18B20 - Added ice bath calibration process
  • DS18B20 - Added screen to edit DS18B20 temperature sensor details and set options
  • Email - Added button on settings page to send a test email
  • Flowmeters - Added flow meter support
  • I2C Bus - Added email alert and system reboot if pca9685 verification failed and timed out
  • System - Introduced a setting on the System Settings page to configure the auto logout timer, in hours
Updates
  • Charts - Data is now read from database instead of CSV files
  • Charts - Temperature and pH charts are now updated every 8 minutes instead of 5 minutes
  • Charts - You can now set the maximum number of days that is loaded in the chart, all data remains in database
  • Database - Updated all queries to use PDO to access, added prepared statements for security and added error proofing
  • DHT22 - Removed DHT22 from DS18B20 system, now using the pinsAvailable table as they connect to Pi GPIOs
  • Email - Emails are now sent using a dedicated thread, the main program and critical operations continue running without interruption
  • Updates - Improved update system and added configurable update URL
 
Last edited:
Updating Robo-Tank

Unfortunately when I released v6.6 I changed the web address to download the update, well today that URL doesn't work so you can't simply go to the "System Settings" page and click update, first you need to do a pre-update using the SSH terminal window. Here are the commands you need to run, this will install wiringPi library (sadly for now I had to use for DHT22) and replace a file with the correct update URL. I've since added this URL to the database so it can be changed easier if need be.

Run the following 6 commands.

sudo wget -O /var/www/html/updates/wiringpi-latest.deb https://www.robo-tank.ca/app/updates/wiringpi-latest.deb

sudo dpkg -i /var/www/html/updates/wiringpi-latest.deb

sudo wget -O /var/www/html/cpp/update.h https://www.robo-tank.ca/app/updates/update.h

sudo systemctl stop robotank.service

g++ -o /var/www/html/cpp/robotank /var/www/html/cpp/robotank.cpp `mysql_config --cflags --libs` -lpthread -lquickmail -lcurl

sudo systemctl start robotank.service

Now go back to the web app, go to the "System Settings" page, click the "Check for Update" button and it should say v6.7 is ready.

Click the button and go through the steps. I made some changes so it takes longer to update now as it compiles the program and there's a few reboots. It takes about 5 good minutes and starts to feel like it will never finish but it will, give it time. The popup telling you to wait might disappear after a few minutes and it will feel like it maybe failed but wait another 30 seconds to minute as it's rebooting and another popup will appear saying the update was complete. When you get that it'll then go to the login page, now you can press the CTRL + SHIFT + R a few times to clear the cache. Log in and go back to system settings page to make sure it say 6.7.

NOTE: At this time you can only use the 32-bit version of Raspberry Pi operating system and it needs to be the “Legacy 32-bit” Bullseye version shown below.

Screen Shot 07-03-24 at 05.07 PM.PNG

Fresh installation.

If you are doing a fresh installation here's a link to the install manual which goes over everything. I completely rewrote the install script as some of you know there was a lot of install issues, I'm feeling good about it now, must have done 100 installs by now and never fails. For now I have all the install packages printing to the SSH terminal so if it does fail you'll be able to see where it happened. Let's see what happens. Please let me know.

 
Last edited:
Good stuff : ) Just a couple or things so far:

After using SSH terminal to set up the new update url and then trying the update to 6.7 button, I got an error page when it tried to reboot (image attached)... I tried rebooting a couple of times and wasn't able to get past it. I gave up and instead, did a fresh install with no issues...

And, in the when trying to increase the reservoir capacity brings up the "Are you sure you want to refill..." message after every click of the up arrow. It will take awhile to set this for my 18,000ml and two 3500ml reservoirs : ( UPDATE: In frustration I figured out that its much quicker to use the down arrow instead!
 

Attachments

  • Screenshot 2024-06-24 135213.png
    Screenshot 2024-06-24 135213.png
    59.9 KB · Views: 3
Last edited:
Ah, I know what happened there but not sure why it happened. The database wasn't updated. Glad the fresh installed worked.

Sorry, I forgot to do something about that popup, what you can do is press and hold the up button, it will start to increase quicker and the popup won't appear until you release the button. Still a pain but doable. I'll get that fixed.
 
Last edited:
So just tonight a bug showed up with the dose schedules, I missed a variable that was too small so the number rounded and messed everything up when it hit 27 days * 86400000. The variable was an int rather than a long long. Anyone who installed lets say yesterday or today run these commands, it's very important you do this. It will download the corrected file and compile the program. No reboot required. If it's June 25 you don't need to do this.

sudo wget -O /var/www/html/cpp/schedulesDosing.h https://www.robo-tank.ca/app/updates/schedulesDosing.h

sudo systemctl stop robotank.service

g++ -o /var/www/html/cpp/robotank /var/www/html/cpp/robotank.cpp `mysql_config --cflags --libs` -lpthread -lquickmail -lcurl

sudo systemctl start robotank.service
 
Last edited:
Good stuff : ) Just a couple or things so far:

After using SSH terminal to set up the new update url and then trying the update to 6.7 button, I got an error page when it tried to reboot (image attached)... I tried rebooting a couple of times and wasn't able to get past it. I gave up and instead, did a fresh install with no issues...

And, in the when trying to increase the reservoir capacity brings up the "Are you sure you want to refill..." message after every click of the up arrow. It will take awhile to set this for my 18,000ml and two 3500ml reservoirs : ( UPDATE: In frustration I figured out that its much quicker to use the down arrow instead!
I checked and the max reservoir size was 10,000 just due to my thinking, never imagined a reservoir 18,000ml. I just changed it to max 50,000. Here's the commands to update.

sudo wget -O /var/www/html/cpp/dosing.h https://www.robo-tank.ca/app/updates/dosing.h

sudo wget -O /var/www/html/js/settingsDosing.js https://www.robo-tank.ca/app/updates/settingsDosing.js

sudo systemctl stop robotank.service

g++ -o /var/www/html/cpp/robotank /var/www/html/cpp/robotank.cpp `mysql_config --cflags --libs` -lpthread -lquickmail -lcurl

sudo systemctl start robotank.service


After you do this press CTRL + SHIFT + R a few times in the browser to reload the cache.
 
Last edited:
I checked and the max reservoir size was 10,000 just due to my thinking, never imagined a reservoir 18,000ml. I just changed it to max 50,000. Here's the commands to update.

sudo wget -O /var/www/html/cpp/dosing.h https://www.robo-tank.ca/app/updates/dosing.h

sudo wget -O /var/www/html/js/settingsDosing.js https://www.robo-tank.ca/app/updates/settingsDosing.js

sudo systemctl stop robotank.service

g++ -o /var/www/html/cpp/robotank /var/www/html/cpp/robotank.cpp `mysql_config --cflags --libs` -lpthread -lquickmail -lcurl

sudo systemctl start robotank.service


After you do this press CTRL + SHIFT + R a few times in the browser to reload the cache.
18,000ml is my kalkwasser reservoir. It's made from a 5 gallon bucket : )
 
18,000ml is my kalkwasser reservoir. It's made from a 5 gallon bucket : )
Nice, should be good to go.

Notice the setting for the dose pump, "minimum delay between doses". This should always be set as it's a fail safe. For example if for some reason the dosing pump kept triggering due to a bug in the code that would prevent it from actually dosing until it expires.
 
I found that if you try to save this dosing configuration (see pic) with only 1 dose, it locks up and you're not able to edit or delete the configuration after that..! (I had to delete it from the database...)
 

Attachments

  • Screenshot 2024-06-27 095232.png
    Screenshot 2024-06-27 095232.png
    251.9 KB · Views: 6
I found that if you try to save this dosing configuration (see pic) with only 1 dose, it locks up and you're not able to edit or delete the configuration after that..! (I had to delete it from the database...)
Thanks for pointing that out, it definitely crashes it. I never tried it with 1 dose as that doesn't make sense, it needs to be a minimum of 2. In your example if I put 20 ml as the dose amount it also crashes it as that's only 1 dose. I'll make sure to add some checks so that can't happen.
 
I cannot update mine from 6.6 to 6.7

After running the steps and restarting services it shows check for updates but does nothing when I click on the button.

tea@TEAREEF:~ $ sudo wget -O /var/www/html/updates/wiringpi-latest.deb https://www.robo-tank.ca/app/updates/wiringpi-latest.deb
--2024-06-30 22:23:39-- https://www.robo-tank.ca/app/updates/wiringpi-latest.deb
Resolving www.robo-tank.ca (www.robo-tank.ca)... 74.208.236.57, 2607:f1c0:100f:f000::276
Connecting to www.robo-tank.ca (www.robo-tank.ca)|74.208.236.57|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 52260 (51K) [application/x-debian-package]
Saving to: ‘/var/www/html/updates/wiringpi-latest.deb’

/var/www/html/updat 100%[===================>] 51.04K --.-KB/s in 0.1s

2024-06-30 22:23:39 (450 KB/s) - ‘/var/www/html/updates/wiringpi-latest.deb’ saved [52260/52260]

tea@TEAREEF:~ $ sudo dpkg -i /var/www/html/updates/wiringpi-latest.deb
(Reading database ... 52222 files and directories currently installed.)
Preparing to unpack .../updates/wiringpi-latest.deb ...
Unpacking wiringpi (2.52) over (2.52) ...
/sbin/ldconfig: /lib/libquickmail.so.0 is not a symbolic link

/sbin/ldconfig: /lib/libquickmaillight.so.0 is not a symbolic link

Setting up wiringpi (2.52) ...
/sbin/ldconfig: /lib/libquickmail.so.0 is not a symbolic link

/sbin/ldconfig: /lib/libquickmaillight.so.0 is not a symbolic link

Processing triggers for man-db (2.9.4-2) ...
tea@TEAREEF:~ $ sudo wget -O /var/www/html/cpp/update.h https://www.robo-tank.ca/app/updates/update.h
--2024-06-30 22:23:54-- https://www.robo-tank.ca/app/updates/update.h
Resolving www.robo-tank.ca (www.robo-tank.ca)... 74.208.236.57, 2607:f1c0:100f:f000::276
Connecting to www.robo-tank.ca (www.robo-tank.ca)|74.208.236.57|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53883 (53K) [text/x-chdr]
Saving to: ‘/var/www/html/cpp/update.h’

/var/www/html/cpp/u 100%[===================>] 52.62K --.-KB/s in 0.1s

2024-06-30 22:23:55 (448 KB/s) - ‘/var/www/html/cpp/update.h’ saved [53883/53883]

tea@TEAREEF:~ $ sudo systemctl stop robotank.service
tea@TEAREEF:~ $ g++ -o /var/www/html/cpp/robotank /var/www/html/cpp/robotank.cpp `mysql_config --cflags --libs` -lpthread -lquickmail -lcurl
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::startupDosing()’:
/var/www/html/cpp/dosing.h:173:31: error: void value not ignored as it ought to be
173 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:218:10: error: ‘pinModeOS’ was not declared in this scope; did you mean ‘pinMode’?
218 | pinModeOS(dosePin[totalDosers],OUTPUT);
| ^~~~~~~~~
| pinMode
/var/www/html/cpp/dosing.h:251:10: error: ‘pinModeOS’ was not declared in this scope; did you mean ‘pinMode’?
251 | pinModeOS(stirrerPin[totalStirrers],OUTPUT);
| ^~~~~~~~~
| pinMode
/var/www/html/cpp/dosing.h:257:26: error: too many arguments to function ‘void mysql_disconnect()’
257 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h:262:40: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
262 | if (doseDriverID[a] == 2) {digitalWriteOS(dosePin[a],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:267:43: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
267 | if (stirrerDriverID[a] == 2) {digitalWriteOS(stirrerPin[a],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::startStirrer(short int, short int, float)’:
/var/www/html/cpp/dosing.h:426:62: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
426 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:442:9: error: ‘sendEmailAsync’ was not declared in this scope
442 | sendEmailAsync("Dosing pump reservoir for " + doseName[arrayLoc] + " is getting low.", "Message from Robo-Tank Aquarium Controller");
| ^~~~~~~~~~~~~~
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopStirrer(short int)’:
/var/www/html/cpp/dosing.h:458:46: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
458 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::startDosing(short int)’:
/var/www/html/cpp/dosing.h:476:35: error: void value not ignored as it ought to be
476 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:479:30: error: too many arguments to function ‘void mysql_disconnect()’
479 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h:482:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
482 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopDosing(short int)’:
/var/www/html/cpp/dosing.h:499:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
499 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:513:31: error: void value not ignored as it ought to be
513 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:528:26: error: too many arguments to function ‘void mysql_disconnect()’
528 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::refillReservoir(short int)’:
/var/www/html/cpp/dosing.h:591:31: error: void value not ignored as it ought to be
591 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:594:26: error: too many arguments to function ‘void mysql_disconnect()’
594 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveDisableRes(short int, short int)’:
/var/www/html/cpp/dosing.h:608:31: error: void value not ignored as it ought to be
608 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:611:26: error: too many arguments to function ‘void mysql_disconnect()’
611 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveResAlertML(short int, short int)’:
/var/www/html/cpp/dosing.h:625:31: error: void value not ignored as it ought to be
625 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:628:26: error: too many arguments to function ‘void mysql_disconnect()’
628 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::moveDoseSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:647:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
647 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopDoseSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:660:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
660 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:665:31: error: void value not ignored as it ought to be
665 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:668:26: error: too many arguments to function ‘void mysql_disconnect()’
668 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::moveStirrerSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:691:46: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
691 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopStirrerSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:709:46: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
709 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:714:31: error: void value not ignored as it ought to be
714 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:717:26: error: too many arguments to function ‘void mysql_disconnect()’
717 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveReservoirSize(short int, short int)’:
/var/www/html/cpp/dosing.h:732:31: error: void value not ignored as it ought to be
732 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:735:26: error: too many arguments to function ‘void mysql_disconnect()’
735 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::savePumpRate(short int, short int)’:
/var/www/html/cpp/dosing.h:750:31: error: void value not ignored as it ought to be
750 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:753:26: error: too many arguments to function ‘void mysql_disconnect()’
753 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveStirrer(short int, short int)’:
/var/www/html/cpp/dosing.h:767:31: error: void value not ignored as it ought to be
767 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:770:26: error: too many arguments to function ‘void mysql_disconnect()’
770 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h:774:35: error: void value not ignored as it ought to be
774 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:777:30: error: too many arguments to function ‘void mysql_disconnect()’
777 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveCalibrationAmount(short int, short int)’:
/var/www/html/cpp/dosing.h:793:31: error: void value not ignored as it ought to be
793 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:796:26: error: too many arguments to function ‘void mysql_disconnect()’
796 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveDoseInterval(short int, short int)’:
/var/www/html/cpp/dosing.h:811:31: error: void value not ignored as it ought to be
811 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:814:26: error: too many arguments to function ‘void mysql_disconnect()’
814 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveResEmail(short int, short int)’:
/var/www/html/cpp/dosing.h:841:31: error: void value not ignored as it ought to be
841 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:844:26: error: too many arguments to function ‘void mysql_disconnect()’
844 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveResAlert(short int, short int)’:
/var/www/html/cpp/dosing.h:857:31: error: void value not ignored as it ought to be
857 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:860:26: error: too many arguments to function ‘void mysql_disconnect()’
860 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveStirrerRuntime(short int, short int)’:
/var/www/html/cpp/dosing.h:873:31: error: void value not ignored as it ought to be
873 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:876:26: error: too many arguments to function ‘void mysql_disconnect()’
876 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveSettlingRuntime(short int, short int)’:
/var/www/html/cpp/dosing.h:890:31: error: void value not ignored as it ought to be
890 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:893:26: error: too many arguments to function ‘void mysql_disconnect()’
893 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveStirrerPort(short int, short int)’:
/var/www/html/cpp/dosing.h:907:31: error: void value not ignored as it ought to be
907 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:910:26: error: too many arguments to function ‘void mysql_disconnect()’
910 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
tea@TEAREEF:~ $ sudo systemctl start robotank.service
tea@TEAREEF:~ $
 
I cannot update mine from 6.6 to 6.7

After running the steps and restarting services it shows check for updates but does nothing when I click on the button.

tea@TEAREEF:~ $ sudo wget -O /var/www/html/updates/wiringpi-latest.deb https://www.robo-tank.ca/app/updates/wiringpi-latest.deb
--2024-06-30 22:23:39-- https://www.robo-tank.ca/app/updates/wiringpi-latest.deb
Resolving www.robo-tank.ca (www.robo-tank.ca)... 74.208.236.57, 2607:f1c0:100f:f000::276
Connecting to www.robo-tank.ca (www.robo-tank.ca)|74.208.236.57|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 52260 (51K) [application/x-debian-package]
Saving to: ‘/var/www/html/updates/wiringpi-latest.deb’

/var/www/html/updat 100%[===================>] 51.04K --.-KB/s in 0.1s

2024-06-30 22:23:39 (450 KB/s) - ‘/var/www/html/updates/wiringpi-latest.deb’ saved [52260/52260]

tea@TEAREEF:~ $ sudo dpkg -i /var/www/html/updates/wiringpi-latest.deb
(Reading database ... 52222 files and directories currently installed.)
Preparing to unpack .../updates/wiringpi-latest.deb ...
Unpacking wiringpi (2.52) over (2.52) ...
/sbin/ldconfig: /lib/libquickmail.so.0 is not a symbolic link

/sbin/ldconfig: /lib/libquickmaillight.so.0 is not a symbolic link

Setting up wiringpi (2.52) ...
/sbin/ldconfig: /lib/libquickmail.so.0 is not a symbolic link

/sbin/ldconfig: /lib/libquickmaillight.so.0 is not a symbolic link

Processing triggers for man-db (2.9.4-2) ...
tea@TEAREEF:~ $ sudo wget -O /var/www/html/cpp/update.h https://www.robo-tank.ca/app/updates/update.h
--2024-06-30 22:23:54-- https://www.robo-tank.ca/app/updates/update.h
Resolving www.robo-tank.ca (www.robo-tank.ca)... 74.208.236.57, 2607:f1c0:100f:f000::276
Connecting to www.robo-tank.ca (www.robo-tank.ca)|74.208.236.57|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53883 (53K) [text/x-chdr]
Saving to: ‘/var/www/html/cpp/update.h’

/var/www/html/cpp/u 100%[===================>] 52.62K --.-KB/s in 0.1s

2024-06-30 22:23:55 (448 KB/s) - ‘/var/www/html/cpp/update.h’ saved [53883/53883]

tea@TEAREEF:~ $ sudo systemctl stop robotank.service
tea@TEAREEF:~ $ g++ -o /var/www/html/cpp/robotank /var/www/html/cpp/robotank.cpp `mysql_config --cflags --libs` -lpthread -lquickmail -lcurl
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::startupDosing()’:
/var/www/html/cpp/dosing.h:173:31: error: void value not ignored as it ought to be
173 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:218:10: error: ‘pinModeOS’ was not declared in this scope; did you mean ‘pinMode’?
218 | pinModeOS(dosePin[totalDosers],OUTPUT);
| ^~~~~~~~~
| pinMode
/var/www/html/cpp/dosing.h:251:10: error: ‘pinModeOS’ was not declared in this scope; did you mean ‘pinMode’?
251 | pinModeOS(stirrerPin[totalStirrers],OUTPUT);
| ^~~~~~~~~
| pinMode
/var/www/html/cpp/dosing.h:257:26: error: too many arguments to function ‘void mysql_disconnect()’
257 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h:262:40: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
262 | if (doseDriverID[a] == 2) {digitalWriteOS(dosePin[a],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:267:43: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
267 | if (stirrerDriverID[a] == 2) {digitalWriteOS(stirrerPin[a],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::startStirrer(short int, short int, float)’:
/var/www/html/cpp/dosing.h:426:62: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
426 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:442:9: error: ‘sendEmailAsync’ was not declared in this scope
442 | sendEmailAsync("Dosing pump reservoir for " + doseName[arrayLoc] + " is getting low.", "Message from Robo-Tank Aquarium Controller");
| ^~~~~~~~~~~~~~
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopStirrer(short int)’:
/var/www/html/cpp/dosing.h:458:46: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
458 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::startDosing(short int)’:
/var/www/html/cpp/dosing.h:476:35: error: void value not ignored as it ought to be
476 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:479:30: error: too many arguments to function ‘void mysql_disconnect()’
479 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h:482:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
482 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopDosing(short int)’:
/var/www/html/cpp/dosing.h:499:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
499 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:513:31: error: void value not ignored as it ought to be
513 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:528:26: error: too many arguments to function ‘void mysql_disconnect()’
528 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::refillReservoir(short int)’:
/var/www/html/cpp/dosing.h:591:31: error: void value not ignored as it ought to be
591 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:594:26: error: too many arguments to function ‘void mysql_disconnect()’
594 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveDisableRes(short int, short int)’:
/var/www/html/cpp/dosing.h:608:31: error: void value not ignored as it ought to be
608 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:611:26: error: too many arguments to function ‘void mysql_disconnect()’
611 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveResAlertML(short int, short int)’:
/var/www/html/cpp/dosing.h:625:31: error: void value not ignored as it ought to be
625 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:628:26: error: too many arguments to function ‘void mysql_disconnect()’
628 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::moveDoseSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:647:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
647 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopDoseSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:660:39: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
660 | if (doseDriverID[arrayLoc] == 2) {digitalWriteOS(dosePin[arrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:665:31: error: void value not ignored as it ought to be
665 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:668:26: error: too many arguments to function ‘void mysql_disconnect()’
668 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::moveStirrerSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:691:46: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
691 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],1);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h: In member function ‘void dosing::stopStirrerSpeedSlider(short int, short int)’:
/var/www/html/cpp/dosing.h:709:46: error: ‘digitalWriteOS’ was not declared in this scope; did you mean ‘digitalWrite’?
709 | if (stirrerDriverID[stirArrayLoc] == 2) {digitalWriteOS(stirrerPin[stirArrayLoc],0);} // driver is Raspberry Pi
| ^~~~~~~~~~~~~~
| digitalWrite
/var/www/html/cpp/dosing.h:714:31: error: void value not ignored as it ought to be
714 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:717:26: error: too many arguments to function ‘void mysql_disconnect()’
717 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveReservoirSize(short int, short int)’:
/var/www/html/cpp/dosing.h:732:31: error: void value not ignored as it ought to be
732 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:735:26: error: too many arguments to function ‘void mysql_disconnect()’
735 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::savePumpRate(short int, short int)’:
/var/www/html/cpp/dosing.h:750:31: error: void value not ignored as it ought to be
750 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:753:26: error: too many arguments to function ‘void mysql_disconnect()’
753 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveStirrer(short int, short int)’:
/var/www/html/cpp/dosing.h:767:31: error: void value not ignored as it ought to be
767 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:770:26: error: too many arguments to function ‘void mysql_disconnect()’
770 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h:774:35: error: void value not ignored as it ought to be
774 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:777:30: error: too many arguments to function ‘void mysql_disconnect()’
777 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveCalibrationAmount(short int, short int)’:
/var/www/html/cpp/dosing.h:793:31: error: void value not ignored as it ought to be
793 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:796:26: error: too many arguments to function ‘void mysql_disconnect()’
796 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveDoseInterval(short int, short int)’:
/var/www/html/cpp/dosing.h:811:31: error: void value not ignored as it ought to be
811 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:814:26: error: too many arguments to function ‘void mysql_disconnect()’
814 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveResEmail(short int, short int)’:
/var/www/html/cpp/dosing.h:841:31: error: void value not ignored as it ought to be
841 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:844:26: error: too many arguments to function ‘void mysql_disconnect()’
844 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveResAlert(short int, short int)’:
/var/www/html/cpp/dosing.h:857:31: error: void value not ignored as it ought to be
857 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:860:26: error: too many arguments to function ‘void mysql_disconnect()’
860 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveStirrerRuntime(short int, short int)’:
/var/www/html/cpp/dosing.h:873:31: error: void value not ignored as it ought to be
873 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:876:26: error: too many arguments to function ‘void mysql_disconnect()’
876 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveSettlingRuntime(short int, short int)’:
/var/www/html/cpp/dosing.h:890:31: error: void value not ignored as it ought to be
890 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:893:26: error: too many arguments to function ‘void mysql_disconnect()’
893 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
In file included from /var/www/html/cpp/robotank.cpp:115:
/var/www/html/cpp/dosing.h: In member function ‘void dosing::saveStirrerPort(short int, short int)’:
/var/www/html/cpp/dosing.h:907:31: error: void value not ignored as it ought to be
907 | MYSQL* conn = connectMysql();
| ~~~~~~~~~~~~^~
/var/www/html/cpp/dosing.h:910:26: error: too many arguments to function ‘void mysql_disconnect()’
910 | mysql_disconnect(conn);
| ^
In file included from /var/www/html/cpp/robotank.cpp:99:
/var/www/html/cpp/mysql.cpp:40:6: note: declared here
40 | void mysql_disconnect (void)
| ^~~~~~~~~~~~~~~~
tea@TEAREEF:~ $ sudo systemctl start robotank.service
tea@TEAREEF:~ $
Hi @Tea did you run the update through the app or just the "pre-update" commands like you posted?

Everything went good until you tried to compile, all these errors are things that are in 6.7 so somehow your files got copied over. The pre-update commands install wiringPi which went well and download the update.h file that went well but all the other files on the Pi are v6.7 files so it won't compile. I don't know how those could have got there but maybe you did run the update and I misunderstand?
 
Hi @Tea did you run the update through the app or just the "pre-update" commands like you posted?

Everything went good until you tried to compile, all these errors are things that are in 6.7 so somehow your files got copied over. The pre-update commands install wiringPi which went well and download the update.h file that went well but all the other files on the Pi are v6.7 files so it won't compile. I don't know how those could have got there but maybe you did run the update and I misunderstand?
I ran the pre update commands and when I went to the app and chose check for updates nothing happens.
 
I ran the pre update commands and when I went to the app and chose check for updates nothing happens.
Yeah that's because it won't compile due to the files. Did I send you files when you initially installed? I think that must be the reason you have some 6.7 files on your Pi. If this is the case unfortunately you would have to do a fresh install or if you use FTP you could upload 6.6 files but it's a little complicated.
 
Hey Rob,

For the flow sensor, which position do we place the jumpers on the sensor board?

Thanks,

Dilshan
Hi Dilshan, you use the green connector so set the jumper to enable it and you shouldn't need a jumper on the PU / PD header.
 
Yeah that's because it won't compile due to the files. Did I send you files when you initially installed? I think that must be the reason you have some 6.7 files on your Pi. If this is the case unfortunately you would have to do a fresh install or if you use FTP you could upload 6.6 files but it's a little complicated.
Yea I had some original install issues and I believe you assisted.

I actually have a second complete build as a backup and to test the 0-10 light control. (If you remember I had flicking issues and you suggested to load reef PI and I opted to buy a complete second controller for future projects.)

I can try a fresh install on the blank pi. Is there a way to pull the database from my 6.6 robo tank and restore it to the new build?
 
Yea I had some original install issues and I believe you assisted.

I actually have a second complete build as a backup and to test the 0-10 light control. (If you remember I had flicking issues and you suggested to load reef PI and I opted to buy a complete second controller for future projects.)

I can try a fresh install on the blank pi. Is there a way to pull the database from my 6.6 robo tank and restore it to the new build?
Ok that makes sense, that's why it won't compile. So yeah sadly you'll have to start over. Just running the install script again should fix it, you shouldn't need to reinstall the OS.

Coping the database over would be a bunch of work as it's half updated so need to figure out what tables/columns need to be added. I have since added buttons to backup and restore the database and an auto backup feature. I still need to setup a method to downgrade, it shouldn't be hard just need to get it done, it will be part of 6.8.

Sorry, I forgot that was you for the flickering light, did reef-pi fix that?
 
Back
Top