Mobile Client

Leverage our expertise and provide your clients with a mobile application to give them the best user experience when using our SCADA cloud.

Remote Control

Monitor and Control all your site from one location. Once your devices are connected to the cloud, they are all simply a click away. All this from the comfort of your home.

User Configuration

Our platform enables your end users to define there own alarm conditions, contact lists, and notification sequences. Notifications can be delivered via email, sms text messages, or voice phone calls.


Resellers have secure access to remote gateway devices. This allows for gateway software updates and some configuration changes without visiting remote sites.



Our platform can be used to remotely monitor or control anything given the right adapters.   Testing of our platform began with water, wastewater, and radio transmitter sites.   The system has been delivering mission critical notifications and providing remote control to these customers for over four years.   Grain storage, chemical storage, wells, and generators have been identified as other markets for our platform. Feedback from end users of our system:

..water system user…

I had been running our wells for over 10 years, but I didn’t really have a complete understanding of my system until I saw the trend charts showing the how the whole thing works.)

..lift station user…

I’ve saved over 5 times the cost of the system by knowing when my lift station pumps were becoming less efficient.   Seeing the average current draw increase tells me exactly when I need to pull my pumps for servicing, and having the notifications to my cell phone gives me peace of mind that I will know when something goes wrong in plenty of time to fix it.   EPA should require these monitors on every lift station!  -


To conserve bandwidth and only deliver the most relevant data to the end-user we worked with one reseller to create the following plug-in for our SCADA Gateway. The full Python source for this plug-in is available right here. Contact our support department for help in developing a plugin for your specific application.

from pluginBase import baseModule

class AverageCurrentModule(baseModule):

    # this module is setup to get the average current for a pump.   In the setup it was written for,
    # there is one CT monitoring all current, and two pumps setup to alternate.   The pumps are monitored
    # on status inputs 1 and 2, and the current transformer is hooked to analog 3.

    def __init__(self):
        self.last_data_pack = "0,0,0"
        self.data_pack = self.last_data_pack = "Lift Station Avg Amps"

        self.current_txfrmr = 1                 # analog input current tranformer is connected to
        self.pump_status  = (1,2)               # list of inputs that indicate the pump is on
        self.current_list = []                  # an empty list to hold the current readings

        self.record_mode        = False                 # flag to indicate if we are recording

    def update(self,in_data_pack,force,devicemgr,device_list):

        self.data_pack = in_data_pack
        pump_on_flag = False                            # clear pump on flag
        for status in self.pump_status:         # check each pump status
            if self.getStatus(status) == 1:     # if any pump status is on
                pump_on_flag = True                     # set the pump_on_flag flag on.

        if pump_on_flag:                                # if any pump is on
            #print "pump on recording"
            self.record_mode = True                     # set record mode flag to true
            self.current_list.append(self.getAnalog(self.current_txfrmr))       # record the current reading to ram

        if not pump_on_flag and self.record_mode:               # if all the pumps have gone  off and record mode is set
            print "pump off reporting"
            print "recordings", self.current_list
            self.record_mode = False                    # clear record mode
            if len(self.current_list) > 10:                     # make sure we recorded at least 10 readings
                avg = sum(self.current_list[4:-4])/len(self.current_list[4:-4])  # average the readings starting with the forth reading and leave out the last 4
                avg = 0                          # not enough readings set the avg to zero
            self.current_list = []                              # clear the recorded readings
            self.updateAnalog(self.current_txfrmr, avg) ## put the average into the datapack in place of current transformer value

            return (self.data_pack,True)            ## send the new modified datapack as a forced server update

        self.updateAnalog(self.current_txfrmr, 0) ## force face to zero normally
        return (self.data_pack, force)          # force the datapack


Supervisory Control And Data Acquisition is what the acronym stands for, but what does that mean? The data acquisition part is simply acquiring data. Most SCADA systems are acquiring data from some type of sensors. Sensors vary from industry to industry, but can generally be broken into two categories:

  • Analog Sensors – these are sensors that have values vary. At a high level analog sensors could show values like weight, height, tank level, pump RPM, current draw, phase frequency, flow rate, and many others. At a lower level these sensors would output signals such as 4-20ma, 0-5v, 0-10v, 0-24v, or pulses for counting.
  • Status Sensors – these are simply on / off, true / false sensors that are tied to some type of switch. Higher level status indicators could have the on/off, true/false states mapped to labels such as “Running”/”Stopped” for a pump motor, or “Open”/”Closed” for a door. The lower level of status indicators may map a status from an analog value specifying a threshold at which the status shows True. So if the analog is above the threshold value, the status is true. More efficient systems typically use bitmaps to represent multiple status values in a single value.

The Supervisory Control definition seems to vary from SCADA provider to SCADA provider, some aren’t actually supervisory in my opinion. This aspect of SCADA for some providers works at a site level, and in their opinion by turning a pump on or off in response to a tank level or other event qualify as Supervisory Control. I tend to think of Supervisory aspect in terms of monitoring. Supervisory to me indicates that the system is constantly monitored.

So in addition to receiving all the data when the system is connected and operating properly, I also want to ensure that I get notified if the system is no longer communicating. This is really a mission critical aspect of SCADA to me. Even in monitoring something as simple as a sewer lift station, typical alerts for pumps running too long from a stuck float, or a high level alerts are always important. What if the power goes out to the lift station or the pump controller and SCADA take a lightening hit. A true supervisory system will let you know in a reasonable amount of time that the system is offline in addition to all the typical alerts. The reasonable amount of time really depends on the application, but it should be configurable to fit the application.

Now for the Control aspect, I like to think that a SCADA system is going to give me a Supervisory view of the system, and control of the system. Control really varies widely with the different industries, and could be anything from adjusting the speed of a huge motor via a VFD, turning a pump on or off, telling a pump control system to fill a tank, or making a chemical feeder spit out more chemicals.

Hopefully all this helps you understand what SCADA is all about, and if you understand scads, you also understand DAQ Data Acquisition, DAC – Data Acquisition and Control, Remote Monitoring, and Remote Control. SCADA is simply the acronym typically used the Utility Industries – Water, Gas, Oil, Electric, and Wastewater.

We’ve successfully tested our Cellular SCADA Gateway with the Banner Engineering’s DX-80 gateway. The wide range of Banner products and wireless connectivity options coupled with our gateway, and SCADA Cloud gives system integrators unsurpassed flexibility when designing SCADA solutions.

Our team was confronted with the task of controlling two service pumps from one of our gateways with a twist.   These service pump are pumping from a standpipe, and they are faster than the well filling the tank.   So if the tank gets too low, we give the service pumps a break while the well catches up.   Plugins are written in python, and are pretty easy to read:

class PumpControlModule(baseModule):

    def __init__(self):
        self.last_data_pack = "0,0,0"
        self.data_pack = self.last_data_pack = "Pump Control"

        self.low_standpipe_delay_active = False
        self.analog_control = 2 # pressure transducer (looking at scalled value)
        self.call_for_water_on_level = 70.5 # pump on level
        self.call_for_water_off_level = 99.5 # pump off level
        self.standpipe_low_status = 4 # status input numer 4

    def clear_standpipe_delay(self):
        self.low_standpipe_delay_active = False

    def check_for_low_standpipe(self):
        low_standpipe_bit = self.getStatus(self.standpipe_low_status)
        if self.low_standpipe_delay_active == 0 and low_standpipe_bit == 1:
            print "low standpipe detected"
            self.low_standpipe_delay_active = True

Contact us for the rest of this plug-in code for your SCADA Gateway.