Patent Publication Number: US-11046205-B1

Title: Electric vehicle charge determination

Description:
INCORPORATION BY REFERENCE TO ANY PRIORITY APPLICATIONS 
     This application claims benefit of U.S. Provisional Patent Application Ser. No. 63/054,726 entitled “ELECTRIC VEHICLE CHARGE DETERMINATION” filed Jul. 21, 2020, which is hereby incorporated by reference in its entirety. 
     Any and all applications for which a foreign or domestic priority claim is identified in the Application Data Sheet as filed with the present application are hereby incorporated by reference under 37 CFR 1.57. 
    
    
     TECHNICAL FIELD 
     Embodiments of the present disclosure relate to vehicle gateway devices, sensors, systems, and methods that allow for efficient monitoring, management, data acquisition, and data processing for vehicles and/or fleets. Embodiments of the present disclosure further relate to devices, systems, and methods that provide interactive graphical user interfaces for vehicle and/or fleet monitoring and management. 
     BACKGROUND 
     The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section. 
     Most modern vehicles have a vehicle bus. A vehicle bus is an internal communications network that connects components, such as a car&#39;s electronic controllers, within a vehicle. Example protocols that a vehicle bus can use include, but are not limited to, Controller Area Network (CAN), Local Interconnect Network (LIN), OBD-II or OBD2, and/or J1939. The vehicle bus can have an interface that enables an external device to access the vehicle&#39;s electronic controllers. In particular, the external device can access vehicle diagnostics, such as fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. The vehicle diagnostic data can be voluminous. Moreover, the vehicle diagnostic data can be retrieved substantially in real-time and at a high frequency, such as every millisecond. Additional devices that can collect data from a vehicle include cameras and sensors, such as dashboard cameras and temperature monitors. 
     SUMMARY 
     The systems, methods, and devices described herein each have several aspects, no single one of which is solely responsible for its desirable attributes. Without limiting the scope of this disclosure, several non-limiting features will now be described briefly. 
     Commercial vehicle fleets use large amounts of fuel and energy. Due to the complexity and diversity of the activities of vehicles in a commercial fleet, it can be very difficult to determine why and how the fuel and energy are used, let alone how to increase the efficiency with which the fuel and energy are used. Additionally, the data related to the activities of vehicles in a commercial fleet can be voluminous. Therefore, just collecting the data related to those activities can be very technically difficult. 
     Advantageously, various embodiments of the present disclosure may overcome various disadvantages of prior systems and methods. A vehicle gateway device can be attached to each vehicle in the fleet. The vehicle gateway gathers data related to operation of the vehicle, in addition to location data and other data related to the vehicle. The vehicle gateway device gathers vehicle metric data from the vehicle (e.g., every millisecond). The gathered metric data can be bucketed and aggregated over time, and periodically (e.g., every 5 minutes) the bucketed data, along with location data and other data related to the vehicle, can be transmitted to a management server. 
     The management server can receive the data from the vehicle gateway devices for many vehicles and over extended periods of time. The management server can aggregate and analyze the received data in various ways. For example, data may be analyzed per vehicle, per vehicle characteristic, per driver, per driver characteristic, per fleet, per cohort, or the like. The data may be used to determine vehicle fuel/energy efficiencies, correlations among vehicle metrics and fuel/energy efficiencies, a fuel/energy efficiency score, safety measurements, correlations among vehicle metrics and safety measurements, a safety score, among others. Additionally, comparisons, trends, correlations, recommendations, route optimizations, and the like may be determined. Further, reports, alerts, and various interactive graphical user interfaces may be generated. 
     According to various embodiments of the present disclosure, a vehicle gateway device can receive, over a period of time, raw vehicle data via a vehicle interface with a vehicle. An example period of time could be one, two, or five minutes. Example vehicle interfaces can include, but are not limited to, J1939 or OBD2. The vehicle gateway device can determine vehicle metrics from the raw vehicle data. Example vehicle metrics can include or be related to fuel level, engine RPM, traveling speed, traveling distance, traveling time, accelerator use/position, brake use, cruise control use, coasting, idling, etc. The vehicle gateway device can determine corresponding vehicle metric buckets for each of the vehicle metrics. In the case of an engine RPM metric, example buckets can include a 0-800 RPM bucket, an 800-1700 RPM bucket, and a greater than 1700 RPM bucket. In the case of a cruise control metric, example buckets can include a cruise-control “on” bucket and a cruise-control “off” bucket. Additional example vehicle metric buckets are described in further detail below. The vehicle gateway device can aggregate, over the period of time, the vehicle metrics into the corresponding vehicle metric buckets to generate aggregated bucketed vehicle metric data. In the engine RPM metric example with a time period of five minutes, the vehicle gateway device can aggregate one minute and thirty seconds in the 0-800 RPM bucket and the remaining time in the 800-1700 RPM bucket. In response to determining that an aggregation time threshold is met, the vehicle gateway device can transmit, to a receiving server system, the aggregated bucketed vehicle metric data. 
     According to various embodiments of the present disclosure, a system can include a vehicle gateway device and a computing device. The vehicle gateway device can be configured to gather and transmit vehicle metric data associated with a first vehicle. The computing device can be configured to receive vehicle metric data from vehicle gateway devices associated with respective vehicles. The computing device can determine, from the vehicle metric data, fuel/energy usage of the plurality of vehicles over various periods of time. The computing device can determine correlations among one or more other vehicle metrics and the fuel/energy usage of the plurality of vehicles over the various periods of time. The computing device can determine weightings of the one or more other vehicle metrics based at least in part on the determined correlations. The computing device can receive, from the vehicle gateway device, the vehicle metric data associated with the first vehicle. The computing device can determine, based on the determined weightings and the vehicle metric data, a fuel/energy efficiency score associated with the first vehicle. The computing device can cause the fuel/energy efficiency score to be provided in an alert, report, or interactive graphical user interface. 
     According to various embodiments of the present disclosure, a system can include a vehicle gateway device and a computing device. The vehicle gateway device can be configured to gather and transmit vehicle metric data associated with a first vehicle. The computing device can be configured to receive vehicle metric data from vehicle gateway devices associated with respective vehicles. The computing device can determine, from driver history data, safety of the vehicles over various periods of time. The computing device can determine correlations among one or more vehicle metrics from the vehicle metric data and the safety of the plurality of vehicles over the various periods of time. The computing device can determine weightings of the one or more other vehicle metrics based at least in part on the determined correlations. The computing device can receive, from the vehicle gateway device, the vehicle metric data associated with the first vehicle. The computing device can determine, based on the determined weightings and the vehicle metric data, a safety score associated with the first vehicle. The computing device can cause the safety score to be provided in an alert, report, or interactive graphical user interface. 
     According to various embodiments of the present disclosure, a system can include a vehicle gateway device and a computing device. The vehicle gateway device can be configured to gather and transmit vehicle metric data associated with a vehicle. The computing device can be configured to receive the vehicle metric data from the vehicle gateway device. The computing device can receive, from the vehicle gateway device, first vehicle metric data associated with the vehicle. The computing device can receive, such as by accessing, a plurality of vehicle metric data for the vehicle. The plurality of vehicle metric data can be for one or more periods of time that are different than the period of time for the first vehicle metric data. The computing device can generate aggregated vehicle metric data from the plurality of vehicle metric data and the first vehicle metric data based on some filtering criteria. Example filtering criteria can include one or more specific period of times and/or one or more specific vehicle metrics. The computing device can determine, from the aggregated vehicle metric data, a plurality of fuel/energy efficiency indicators. Example fuel/energy efficiency indicators can indicate, but are not limited to indicating, cruise control use, use of coasting, a particular type of use of the accelerator pedal, idling, anticipation, and/or particular RPM range(s), which can be represented as a percentage or some other indicator. The computing device can determine, based on weightings and the plurality of fuel/energy efficiency indicators, a fuel/energy efficiency score associated with the vehicle. The computing device can cause the fuel/energy efficiency score to be provided in an alert, report, or interactive graphical user interface. 
     According to various embodiments of the present disclosure, a system can include a vehicle gateway device and a computing device. The vehicle gateway device can be configured to gather and transmit vehicle metric data associated with a vehicle. The computing device can be configured to receive the vehicle metric data from the vehicle gateway device. The computing device can receive, from the vehicle gateway device, first vehicle metric data associated with the vehicle. The computing device can receive, such as by accessing, a plurality of vehicle metric data for the vehicle. The plurality of vehicle metric data can be for one or more periods of time that are different than the period of time for the first vehicle metric data. The computing device can generate aggregated vehicle metric data from the plurality of vehicle metric data and the first vehicle metric data based on some filtering criteria. Example filtering criteria can include one or more specific period of times and/or one or more specific vehicle metrics. The computing device can determine, from the aggregated vehicle metric data, a plurality of safety indicators. Example safety indicators can indicate, but are not limited to indicating, cruise control use, a particular type of use of the accelerator pedal, vehicle speed, and/or anticipation, which can be represented as a percentage or some other indicator. The computing device can determine, based on weightings and the plurality of fuel/energy efficiency indicators, a fuel/energy efficiency score associated with the vehicle. The computing device can cause the fuel/energy efficiency score to be provided in an alert, report, or interactive graphical user interface. 
     In various embodiments, the vehicle gateway device can decode or translate the raw vehicle data based at least in part on rules specifically related to the vehicle. The vehicle gateway device can store the vehicle metrics. 
     In various embodiments, the vehicle gateway device can determine, over the period of time, location data. Further in response to determining that the aggregation time threshold is met, the vehicle gateway device can transmit, to the receiving server system, the location data. 
     In various embodiments, the vehicle gateway device can receive, over the period of time, additional data from one or more sensor devices. Further in response to determining that the aggregation time threshold is met, the vehicle gateway device can transmit, to the receiving server system, the additional data. 
     In various embodiments, the vehicle metrics can be associated with at least one of: cruise control, coasting, accelerator pedal, idling, battery state, anticipation, engine rotations per minute, motor rotations per minute, or motor power. The vehicle metric buckets associated with cruise control can include at least: cruise control on, and cruise control off. The vehicle metric buckets associated with coasting can include at least: coasting true, and coasting false. The vehicle metric bucket of coasting true can be determined when each of the following is true: engine torque is zero, vehicle speed is greater than zero, brake pedal is not engaged, and accelerator pedal is not engaged. The vehicle metric buckets associated with the accelerator pedal can include at least: accelerator pedal engagement over 95 percent, and accelerator pedal engagement less than or equal to 95 percent. The vehicle metric bucket of accelerator pedal engagement over 95 percent can be determined based on at least one of: engine torque, or engine load. The vehicle metric buckets associated with idling can include at least: idle true, and idle false. The vehicle metric buckets associated with anticipation can include at least: any brake event, and quick brake event. The vehicle metric bucket of quick brake event can be determined when the accelerator pedal is disengaged and the brake pedal is subsequently engaged in approximately less than one second. The vehicle metric buckets associated with engine rotations per minute (RPM) can include at least one of: an RPM band of approximately 800-1700 RPM, or an RPM band starting from a low of approximately 700-900 RPM to a high of approximately 1600-1800 RPM. The vehicle metrics can include at least accelerator pedal engagements over 95 percent and quick brake events. Quick brake events can be determined when the accelerator pedal is disengaged and the brake pedal is subsequently engaged in approximately less than one second. 
     In various embodiments, the determined weightings are further customizable by a user. The vehicles can be related to the first vehicle by at least one of: a vehicle characteristic, a driver, a driver characteristic, a fleet, or a cohort. 
     According to various embodiments of the present disclosure, a system can include a computing device. The system can further include a vehicle gateway device. The computing device and/or the vehicle gateway device can include a computer readable storage medium having program instructions embodied therewith; and one or more processors configured to execute the program instructions to cause the computing device to perform any of the aspects described above and/or below. 
     The vehicle gateway device can be configured to transmit charge records associated with a battery from a vehicle. The computing device can be configured to receive charge records for the battery, where each record from the plurality of charge records can include: (i) a start state of charge, (ii) an end state of charge, and (iii) an amount of energy charged. The computing device can determine a customized charge estimate function for the battery based at least in part on the start state of charge, the end state of charge, and the amount of energy charged for the plurality of charge records for the battery. The computing device can receive an approximate start time for a current charge of the battery, a last state of charge for the battery, and a current time. While the vehicle gateway device is unable to transmit vehicle battery data associated with the current charge of the battery, computing device can calculate an estimated charge time from at least the approximate start time and the current time; estimate a current state of charge based at least in part on: the last state of charge, the estimated charge time, and the customized charge estimate function for the battery; and cause presentation of the current state of charge in a graphical user interface. 
     The vehicle gateway device can be configured to transmit historical vehicle battery data associated with a battery from a vehicle. The computing device can be configured to receive the historical vehicle battery data. The computing device can determine, from the historical vehicle battery data, (i) data indicative of an amount of energy charged relative to a capacity of the battery and (ii) an amount of energy charged relative to a period of time. The computing device can determine a customized charge estimate function for the battery based at least in part on (i) the data indicative of the amount of energy charged relative to the capacity of the battery and (ii) the amount of energy charged relative to the period of time. The computing device can receive an approximate start time for a current charge of the battery, a last state of charge for the battery, and a current time. While the vehicle gateway device is unable to transmit vehicle battery data associated with the current charge of the battery, computing device can calculate an estimated charge time from at least the approximate start time and the current time; estimate a current state of charge based at least in part on: the last state of charge, the estimated charge time, and the customized charge estimate function for the battery; and cause presentation of the current state of charge in a graphical user interface. 
     According to various embodiments of the present disclosure, a method can include receiving, from a vehicle gateway device, historical vehicle battery data associated with a battery from a vehicle. The method can further include determining, from the historical vehicle battery data, (i) data indicative of an amount of energy charged relative to a capacity of the battery and (ii) an amount of energy charged relative to a period of time. The method can further include determining a customized charge estimate function for the battery based at least in part on (i) the data indicative of the amount of energy charged relative to the capacity of the battery and (ii) the amount of energy charged relative to the period of time. The method can further include receiving an approximate start time for a current charge of the battery; receiving a last state of charge for the battery; and receiving a current time. While the vehicle gateway device is unable to transmit vehicle battery data associated with the current charge of the battery, the method can further include: calculating an estimated charge time from at least the approximate start time and the current time; estimating a current state of charge based at least in part on: the last state of charge, the estimated charge time, and the customized charge estimate function for the battery; and causing presentation of the current state of charge in a graphical user interface. 
     In various embodiments, the vehicle gateway device can be further configured to receive, via a vehicle interface, historical vehicle battery data from a battery management system of the vehicle. The vehicle gateway device can be further configured to determine, from the historical vehicle battery data, at least some of the charge records. 
     In various embodiments, the computing device can be further configured to determine a graph from the last state of charge, the approximate start time, the current time, and the customized charge estimate function for the battery. The computing device can be further configured to cause presentation of a visualization of the graph in the graphical user interface. 
     In various embodiments, the computing device can be further configured to apply a charge alert condition to the current state of charge. In response to determining that the charge alert condition is satisfied, the computing device can be further configured to transmit a charge alert indicating that the charge alert condition is satisfied. 
     In various embodiments, determining that the charge alert condition is satisfied can further include: identifying that the current state of charge is above a predefined charge level threshold. 
     In various embodiments, large amounts of data may be automatically and dynamically gathered and analyzed in response to user inputs and configurations, and the analyzed data may be efficiently presented to users. Thus, in some embodiments, the systems, devices, configuration capabilities, graphical user interfaces, and the like described herein are more efficient as compared to previous systems, etc. 
     According to various embodiments of the present disclosure, a method can detect vehicle battery charging. The method can include receiving, from an electronic controller of an electric vehicle, a plurality of vehicle bus messages via a vehicle interface with the electric vehicle, wherein prior to transmitting the plurality of vehicle bus messages the electronic controller is in an off state, and wherein connecting the electric vehicle to a power source causes the electronic controller to change to an on state and transmit the plurality of vehicle bus messages. The method can further include identifying, from the plurality of vehicle bus messages, a first vehicle bus message, wherein identifying the first vehicle bus message further comprises: determining that a type of the first vehicle bus message matches a first vehicle bus message type, wherein the first vehicle bus message type indicates a potential initiation of charging of a battery of the electric vehicle. The method can further include executing a diagnostic service configured to receive, via the vehicle interface, first diagnostic data regarding the electric vehicle. The method can further include confirming a charging state of the battery from the first diagnostic data. The method can further include transmitting, to a management server, an indication of the charging state of the battery. 
     In various embodiments, determining that the type of the first vehicle bus message matches the first vehicle bus message type can further include identifying that the first vehicle bus message comprises a first communication bus address. 
     In various embodiments, the method can further include determining, from the first diagnostic data, a state of charge value for the battery; and transmitting, to the management server, the state of charge value. 
     In various embodiments, the method can further include, until a charging cancellation event is identified, determining, from the diagnostic data, a current state of charge value for the battery; and logging the current state of charge value. The method can further include receiving second diagnostic data regarding the electric vehicle; and identifying, from the second diagnostic data, the charging cancellation event. Identifying the charging cancellation event can further include determining, from the second diagnostic data, that a charge value for the battery is less than a threshold charge value. Identifying the charging cancellation event can further include receiving a plurality of charge values for the battery over time; and determining that a threshold quantity of the plurality of charge values are each less than a threshold charge value. Identifying the charging cancellation event can further include calculating that an elapsed time satisfies a threshold period of time; and determining that, during the elapsed time that satisfies the threshold period of time, a charging or battery associated message has not been received. 
     According to various embodiments of the present disclosure, a vehicle gateway device can be configured to detect vehicle battery charging. The vehicle gateway device can include a computer readable storage medium having program instructions embodied therewith; and one or more processors. The one or more processors can be configured to execute the program instructions to cause the vehicle gateway device to: receive a plurality of vehicle bus messages via a vehicle interface with an electric vehicle; identify, from the plurality of vehicle bus messages, a first vehicle bus message, wherein identifying the first vehicle bus message further comprises: determining that a type of the first vehicle bus message matches a first vehicle bus message type, wherein the first vehicle bus message type indicates a potential initiation of charging of a battery of the electric vehicle; execute a diagnostic service configured to receive, via the vehicle interface, first diagnostic data regarding the electric vehicle; confirm a charging state of the battery from the first diagnostic data; and transmit, to a management server, an indication of the charging state of the battery. 
     In various embodiments, the one or more processors can be configured to execute further program instructions to cause the vehicle gateway device to: until a charging cancellation event is identified, determine, from the first diagnostic data, a current state of charge value for the battery; and log the current state of charge value; and transmit, to the management server, the current state of charge value for the battery. 
     In various embodiments, the one or more processors can be configured to execute further program instructions to cause the vehicle gateway device to: receive second diagnostic data regarding the electric vehicle; identify, from the second diagnostic data, a charging cancellation event; and transmit, to the management server, a charging cancellation indication. Identifying the charging cancellation event can further include determining, from the second diagnostic data, that a charge value for the battery is less than a threshold charge value. Identifying the charging cancellation event can further include receiving a plurality of charge values for the battery over time; and determining that a threshold quantity of the plurality of charge values are each less than a threshold charge value. Identifying the charging cancellation event can further include calculating that an elapsed time satisfies a threshold period of time; and determining that, during the elapsed time that satisfies the threshold period of time, a charging or battery associated message has not been received. 
     According to various embodiments of the present disclosure, a system can be configured to detect vehicle battery charging. The system can include a vehicle gateway device comprising a first computer readable storage medium and one or more first processors, the vehicle gateway device configured to: receive a plurality of vehicle bus messages via a vehicle interface with an electric vehicle; identify, from the plurality of vehicle bus messages, a first vehicle bus message, wherein identifying the first vehicle bus message further comprises: determining that a type of the first vehicle bus message matches a first vehicle bus message type, wherein the first vehicle bus message type indicates a potential initiation of charging of a battery of the electric vehicle; execute a diagnostic service configured to receive, via the vehicle interface, diagnostic data regarding the electric vehicle; and confirm a charging state of the battery from the diagnostic data. The system can further include a computing device comprising a second computer readable storage medium and one or more second processors, the computing device configured to: receive, from the vehicle gateway device, an indication of the charging state of the battery. 
     In various embodiments, the computing device can be further configured to: present, in a graphical user interface, a visual representation of the indication of the charging state of the battery. 
     In various embodiments, the vehicle gateway device can be further configured to determine, from the diagnostic data, a state of charge value for the battery. The computing device can be further configured to: receive, from the vehicle gateway device, the state of charge value for the battery; and present, in a graphical user interface, one or more visual representations for (i) the indication of the charging state of the battery and (ii) the state of charge value for the battery. 
     Further, as described herein, according to various embodiments systems and or devices may be configured and/or designed to generate graphical user interface data useable for rendering the various interactive graphical user interfaces described. The graphical user interface data may be used by various devices, systems, and/or software programs (for example, a browser program), to render the interactive graphical user interfaces. The interactive graphical user interfaces may be displayed on, for example, electronic displays. A management server can provide an analysis graphical user interface that allows a user to review the vehicle metrics, vehicle and/or driver scores (such as fuel/energy efficiency scores and/or safety scores), and/or summary data in substantially real-time. As new vehicle metrics are received, the graphical user interface can dynamically update, such as by recalculating vehicle scores and/or driver scores. 
     Additionally, it has been noted that design of computer user interfaces “that are useable and easily learned by humans is a non-trivial problem for software developers.” (Dillon, A. (2003) User Interface Design. MacMillan Encyclopedia of Cognitive Science, Vol. 4, London: MacMillan, 453-458.) The present disclosure describes various embodiments of interactive and dynamic graphical user interfaces that are the result of significant development. This non-trivial development has resulted in the graphical user interfaces described herein which may provide significant cognitive and ergonomic efficiencies and advantages over previous systems. The interactive and dynamic graphical user interfaces include improved human-computer interactions that may provide reduced mental workloads, improved decision-making, improved capabilities, reduced work stress, and/or the like, for a user. For example, user interaction with the interactive graphical user interface via the inputs described herein may provide an optimized display of, and interaction with, vehicle gateway devices, and may enable a user to more quickly and accurately access, navigate, assess, and digest analyses, vehicle metric data, and/or the like, than previous systems. 
     Further, the interactive and dynamic graphical user interfaces described herein are enabled by innovations in efficient interactions between the user interfaces and underlying systems and components. For example, disclosed herein are improved methods of receiving user inputs (including methods of interacting with, and selecting, received data), translation and delivery of those inputs to various system components (e.g., vehicle gateway devices or management server(s)), automatic and dynamic execution of complex processes in response to the input delivery (e.g., execution of processes to calculate vehicle and/or driver scores), automatic interaction among various components and processes of the system, and automatic and dynamic updating of the user interfaces (to, for example, display the vehicle metrics, vehicle scores, and/or driver scores). The interactions and presentation of data via the interactive graphical user interfaces described herein may accordingly provide cognitive and ergonomic efficiencies and advantages over previous systems. 
     Various embodiments of the present disclosure provide improvements to various technologies and technological fields, and practical applications of various technological features and advancements. Some existing systems are limited in various ways, and various embodiments of the present disclosure provide significant improvements over such systems, and practical applications of such improvements. For example, existing diagnostic systems can generate voluminous amounts of data. Transmitting the generated data over a network in substantially real-time can be impractical. Rather, as described herein, the techniques and solutions of the present disclosure can overcome the issue(s) by aggregating data at the vehicle level and transmitting the aggregated data substantially in real-time. Transmitting aggregated data from the vehicle gateway device to the management server can improve computer and/or network performance. 
     As another example, some existing systems are unable to report a state of charge of a vehicle&#39;s battery while the battery is charging because some vehicle&#39;s electronic controller(s) and/or computer may be in an off state while charging. Thus, in some existing systems, a user of a fleet management system may view the state of a battery charge and see that state jump from an initial charge level to a final charge level as the vehicle&#39;s electronic controller(s) and/or computer changes to an on state. An improved system can address this technical limitation by determining an estimated charge level of a battery based on historical battery data for the particular battery/vehicle. Thus, the system can present an estimated charge level of a vehicle to an administrator even while a vehicle&#39;s battery is charging and the vehicle&#39;s electronic controller(s) and/or computer is in an off state. 
     As yet another example, some existing systems use a diagnostic service to read diagnostic information from a vehicle. Execution of the diagnostic service can draw a substantial amount of power from the vehicle. In the context of combustion vehicles, the diagnostic service can be executed when the vehicle is running so that the diagnostic service does not drain the battery of the vehicle. Thus, some existing systems use accelerometer movement and/or a detected voltage spike (since this indicates that the engine was cranked) as indicators to start the diagnostic service. Some electric vehicles typically charge in a turned off state and it is possible that an electric vehicle has not driven in some time. Arbitrarily starting and running the diagnostic service for an electric vehicle for long periods of time to check to see if the electric vehicle is charging drains and can kill the battery. Improved systems and methods can detect electric vehicle charging by selectively starting the diagnostic service at opportune times, such as when the electrical vehicle is initially plugged in. When the electrical vehicle is turned off, there may not be any messages being sent on the communication bus since most vehicle electronic controllers are disabled to conserve power. But, when someone plugs in a charger, there can be a surge of bus traffic for a short period of time. The improved systems and methods can parse through this passive burst of bus traffic and look for a particular communication bus address. The presence of this address can be used as an indicator for an opportune time to start the diagnostic service to confirm whether the electric vehicle is charging or not. 
     Additionally, various embodiments of the present disclosure are inextricably tied to, and provide practical applications of, computer technology. In particular, various embodiments rely on detection of user inputs via graphical user interfaces, calculation of updates to displayed electronic data based on user inputs, automatic processing of received data, and presentation of updates to displayed data and analyses via interactive graphical user interfaces. Such features and others are intimately tied to, and enabled by, computer, vehicle diagnostic, and vehicle gateway technology, and would not exist except for computer, vehicle diagnostic, and vehicle gateway technology. For example, the vehicle reporting and management functionality and interactions with displayed data described below in reference to various embodiments cannot reasonably be performed by humans alone, without the computer and vehicle gateway technology upon which they are implemented. Further, the implementation of the various embodiments of the present disclosure via computer technology enables many of the advantages described herein, including more efficient interaction with, and presentation and analysis of, various types of electronic data, including fleet management data, and the like. 
     Further, by virtue of electronic communication with vehicle diagnostic systems and devices, various embodiments of the present disclosure are inextricably tied to, and provide practical applications of, computer vehicle technology. For example, the vehicle gateway devices described herein connect to vehicles via protocol(s), such as Controller Area Network (CAN), Local Interconnect Network (LIN), OBD-II or OBD2, and/or J1939. Moreover, the data collected is inherently tied to vehicles, such as, as fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. Various embodiments rely on interpreting and processing the raw vehicle data. Accordingly, some of the solutions and techniques described herein are intimately tied to, and enabled by, computer, vehicle diagnostic, and vehicle gateway technology, and would not exist except for computer, vehicle diagnostic, and vehicle gateway technology. 
     Various combinations of the above and below recited features, embodiments, and aspects are also disclosed and contemplated by the present disclosure. 
     Additional embodiments of the disclosure are described below in reference to the appended claims, which may serve as an additional summary of the disclosure. 
     In various embodiments, systems and/or computer systems are disclosed that comprise a computer readable storage medium having program instructions embodied therewith, and one or more processors configured to execute the program instructions to cause the one or more processors to perform operations comprising one or more aspects of the above—and/or below—described embodiments (including one or more aspects of the appended claims). 
     In various embodiments, computer-implemented methods are disclosed in which, by one or more processors executing program instructions, one or more aspects of the above- and/or below-described embodiments (including one or more aspects of the appended claims) are implemented and/or performed. 
     In various embodiments, computer program products comprising a computer readable storage medium are disclosed, wherein the computer readable storage medium has program instructions embodied therewith, the program instructions executable by one or more processors to cause the one or more processors to perform operations comprising one or more aspects of the above- and/or below-described embodiments (including one or more aspects of the appended claims). 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The following drawings and the associated descriptions are provided to illustrate embodiments of the present disclosure and do not limit the scope of the claims. Aspects and many of the attendant advantages of this disclosure will become more readily appreciated as the same become better understood by reference to the following detailed description, when taken in conjunction with the accompanying drawings, wherein: 
         FIG. 1  illustrates a block diagram of an example operating environment in which one or more aspects of the present disclosure may operate, according to various embodiments of the present disclosure. 
         FIG. 2  illustrates a block diagram including an example implementation of a management device, according to various embodiments of the present disclosure. 
         FIG. 3  illustrates a block diagram of an example vehicle gateway device, according to various embodiments of the present disclosure. 
         FIGS. 4A-4B  are flowcharts illustrating example methods and functionality related to efficient data aggregation on a vehicle gateway device, according to various embodiments of the present disclosure. 
         FIGS. 5A-5B  are flowcharts illustrating example methods and functionality related to processing vehicle-related data and using the processed data, according to various embodiments of the present disclosure. 
         FIG. 6  illustrates an example interactive graphical user interface for searching/presenting vehicles and/or associated vehicle metadata, according to various embodiments of the present disclosure. 
         FIG. 7A  illustrates an example interactive graphical user interface for presenting vehicle metadata, according to various embodiments of the present disclosure. 
         FIGS. 7B-7C  illustrate example visualizations of battery charge metrics, according to various embodiments of the present disclosure. 
         FIG. 7D  illustrates another example interactive graphical user interface for presenting vehicle metadata, according to various embodiments of the present disclosure. 
         FIGS. 8A-8B  illustrate example interactive graphical user interfaces for analyzing driver efficiency, according to various embodiments of the present disclosure. 
         FIG. 9  illustrates an example interactive graphical user interface for analyzing vehicle fuel/energy usage, according to various embodiments of the present disclosure. 
         FIGS. 10A-10B  illustrate example interactive graphical user interfaces for analyzing vehicle charging, according to various embodiments of the present disclosure. 
         FIG. 11  illustrates another example interactive graphical user interface for analyzing vehicle fuel/energy usage, according to various embodiments of the present disclosure. 
         FIGS. 12 and 13  illustrate example interactive graphical user interfaces for analyzing route efficiency and/or fuel/energy usage, according to various embodiments of the present disclosure. 
         FIG. 14  is a flowchart illustrating example methods and functionality for vehicle battery charge estimation, according to various embodiments of the present disclosure. 
         FIG. 15  is a flowchart illustrating example methods and functionality for vehicle charge determination, according to various embodiments of the present disclosure. 
     
    
    
     DETAILED DESCRIPTION 
     Although certain preferred embodiments and examples are disclosed below, inventive subject matter extends beyond the specifically disclosed embodiments to other alternative embodiments and/or uses and to modifications and equivalents thereof. Thus, the scope of the claims appended hereto is not limited by any of the particular embodiments described below. For example, in any method or process disclosed herein, the acts or operations of the method or process may be performed in any suitable sequence and are not necessarily limited to any particular disclosed sequence. Various operations may be described as multiple discrete operations in turn, in a manner that may be helpful in understanding certain embodiments; however, the order of description should not be construed to imply that these operations are order dependent. Additionally, the structures, systems, and/or devices described herein may be embodied as integrated components or as separate components. For purposes of comparing various embodiments, certain aspects and advantages of these embodiments are described. Not necessarily all such aspects or advantages are achieved by any particular embodiment. Thus, for example, various embodiments may be carried out in a manner that achieves or optimizes one advantage or group of advantages as taught herein without necessarily achieving other aspects or advantages as may also be taught or suggested herein. 
     I. Overview 
     As mentioned above, according to various embodiments of the present disclosure, an improved system can efficiently receive vehicle metric data and analysis of the vehicle metric data can be used for fleet management. A vehicle gateway device that is connected to a vehicle can receive metric data for the vehicle. Generally, the vehicle gateway device can gather data related to operation of the vehicle, location data, and/or other data related to the vehicle. The system can receive data from multiple vehicles in a fleet via respective gateway devices. The vehicle gateway device can gather vehicle metric data at a high frequency, such as every millisecond. Accordingly, the vehicle gateway device can gather a relatively large amount of data. In some embodiments, instead of transmitting a relatively large amount of vehicle metric data at a relatively fine-level of granularity, the vehicle gateway device can aggregate and bucket the vehicle metric data over a period of time (such as, every five minutes). The vehicle gateway device can transmit the aggregated and/or bucketed data to a management server, which can be faster and/or can use less network bandwidth than transmitting vehicle metric data at the relatively fine-level of granularity. 
     The data received from the vehicle can be used for fleet management purposes. In particular, the management server can receive data from respective vehicle gateway devices for many vehicles and over extended periods of time. As described herein, the management server can aggregate and process the received data in various ways. For example, the management server can process the data per vehicle, per vehicle characteristic, per driver, per driver characteristic, per fleet, per cohort, and/or based on some other common characteristic. The management server can use the data to determine vehicle fuel/energy efficiencies, correlations among vehicle metrics and fuel/energy efficiency, a fuel/energy efficiency score, safety measurements, correlations among vehicle metrics and safety measurements, and/or a safety score. Additionally or alternatively, the management server can determine comparisons, trends, correlations, recommendations, route optimizations, and/or otherwise use the data for fleet management purposes. Further, the management server can generate reports, alerts, and various interactive graphical user interfaces from the data. 
     In some electric and plug-in hybrid electric vehicles, it may be common, recommended, and/or required to charge the vehicle&#39;s battery while the vehicle is off. A vehicle may not transmit and/or broadcast battery and/or charge information while the vehicle&#39;s battery is charging. Thus, some management systems may be unable to report or display the current charge status of a vehicle while the vehicle&#39;s battery is charging. As used herein, the term “electric vehicle” can include a “plug-in hybrid electric vehicle.” 
     As mentioned above, according to various embodiments of the present disclosure, an improved system can determine an estimated charge level of a battery based on historical battery data. In some embodiments, the charge level of a vehicle&#39;s battery can be estimated based on historical battery data for that particular vehicle. A vehicle gateway device and/or a server can determine charge record(s) for a vehicle. The improved system can estimate a current charge level based on the historical charge record(s), which can include information regarding past start and end charge levels and a respective amount of energy charged per unit of time for particular past charges. In particular, the improved system can estimate a current charge level based on the previous charge level of the battery and start time for a current charge. Thus, a user of a fleet management system can view an estimated current charge status of a vehicle battery even while the vehicle and/or the vehicle gateway device is unable to transmit current battery and/or charge status information. 
     As mentioned above, in some existing systems, a diagnostic service is used to read diagnostic information from a vehicle. The diagnostic service can execute on a vehicle gateway device. Running of the diagnostic service can draw a substantial amount of power from the vehicle. In the context of combustion vehicles, it is typically advisable to run the diagnostic service when the vehicle is running so that the diagnostic service does not drain the battery of the vehicle. Accordingly, some existing systems use engine activity indicators (such as accelerometer movement and/or a detected voltage spike) to start the diagnostic service. An electric vehicle (EV) can charge in a turned off state and it is possible that the electric vehicle has not driven in some time. Starting and running the diagnostic service for an electric vehicle to check to see if the electric vehicle is charging drains and can kill the battery. Thus, the existing methods for executing the diagnostic service can be problematic for EV charging because none of those methods would indicate an opportune time to start the diagnostic service to read diagnostic information. However, it would still be beneficial to be able to determine when an electric vehicle is, for example, plugged in for charging without excessively draining the battery. 
     Improved systems and methods can detect EV charging by selectively starting the diagnostic service at opportune times, such as when the electrical vehicle is initially plugged in. An analysis of bus traffic for some particular vehicles during particular events (e.g. door opened, charger plugged/unplugged) lead to the discovery that certain events result in repeatable and predictable traffic on the communication bus. For example, when the electrical vehicle is turned off and one reads the bus traffic, there may not be any messages being sent on the communication bus since most electronic controllers are disabled to conserve power. An example electronic controller can include engine control units (ECUs), such as a controller for an electric motor. But, when someone plugs in a charger and/or charging commences, there can be a surge of bus traffic for a short period of time. The improved systems and methods can parse through this passive burst of bus traffic and look for a particular communication bus address. The presence of this address—which may or may not correspond to the address of the battery control module depending on the embodiment—can be used as an indicator for an opportune time to start the diagnostic service to confirm whether the electric vehicle is charging or not and/or to monitor the state of charge of the vehicle battery while charging. 
     In various embodiments, the vehicle gateway devices may be configured to automatically connect to a remote management server (e.g., a “cloud”-based management server), and may offload received, aggregated, and/or analysis data to the remote management server via wired or wireless communications. A remote management server can also be referred to herein as a “management server.” A remote management server can also be referred to as a “remote server.” The vehicle gateway devices may further communicate with the management server to provide substantially real-time information from the vehicle gateway device. In various embodiments, the management server may aggregate received data and/or analysis data from one or more vehicle gateway devices, and provide statuses, alerts, analyses, etc., including via interactive graphical user interfaces that may be accessed via user computing devices. 
     Various aspects of the present disclosure may individually and/or collectively provide various technical advantages as described herein, and may overcome various disadvantages of prior systems and methods. As described herein, embodiments of the present disclosure may include vehicle gateway devices. The vehicle gateway devices may automatically establish communication with a remote management server and may transmit vehicle data to the remote management server. Such received data may be useable by the management server for providing further analyses, insights, alerts, etc. to users via interactive graphical user interfaces. However, some existing systems that locally connect to and monitor a vehicle can generate voluminous amounts of data (such as generating data every millisecond), which can be impractical to transmit over a network to the management server in substantially real-time. Instead, in some embodiments, the vehicle gateway device can aggregate data at the vehicle level and transmit the aggregated data substantially in real-time. The aggregated data can be smaller in size that the raw vehicle data. Accordingly, the aggregated data can be transmitted to the management server faster than the raw vehicle data and by using less bandwidth. 
     Unlike some existing systems, the management server can use historical vehicle data from the vehicle gateway device to determine an expected vehicle state when an actual vehicle state may be technically impossible to determine for the vehicle. For example, some existing vehicle systems are unable to report a state of charge of a vehicle&#39;s battery while the battery is charging because some vehicle&#39;s electronic controller(s) and/or computer may be in an off state while charging. The management server can receive historical vehicle data for one or more vehicle batteries, such as the data from the vehicle where the battery is currently being charged. The management server can overcome the technical limitation(s) of some existing vehicle systems by determining an estimated charge level of a battery based on the historical battery data for one or more batteries and/or vehicles. 
     Embodiments of the disclosure will now be described with reference to the accompanying figures, wherein like numerals refer to like elements throughout. The terminology used in the description presented herein is not intended to be interpreted in any limited or restrictive manner, simply because it is being utilized in conjunction with a detailed description of certain specific embodiments of the disclosure. Furthermore, embodiments of the disclosure may include several novel features, no single one of which is solely responsible for its desirable attributes or which is essential to practicing the embodiments of the disclosure herein described. 
     II. Terms 
     In order to facilitate an understanding of the systems and methods discussed herein, a number of terms are defined below. The terms defined below, as well as other terms used herein, should be construed broadly to include the provided definitions, the ordinary and customary meaning of the terms, and/or any other implied meaning for the respective terms. Thus, the definitions below do not limit the meaning of these terms, but only provide example definitions. 
     User Input (also referred to as “Input”): Any interaction, data, indication, etc., received by a system/device from a user, a representative of a user, an entity associated with a user, and/or any other entity. Inputs may include any interactions that are intended to be received and/or stored by the system/device; to cause the system/device to access and/or store data items; to cause the system to analyze, integrate, and/or otherwise use data items; to cause the system to update to data that is displayed; to cause the system to update a way that data is displayed; and/or the like. Non-limiting examples of user inputs include keyboard inputs, mouse inputs, digital pen inputs, voice inputs, finger touch inputs (e.g., via touch sensitive display), gesture inputs (e.g., hand movements, finger movements, arm movements, movements of any other appendage, and/or body movements), and/or the like. Additionally, user inputs to the system may include inputs via tools and/or other objects manipulated by the user. For example, the user may move an object, such as a tool, stylus, or wand, to provide inputs. Further, user inputs may include motion, position, rotation, angle, alignment, orientation, configuration (e.g., fist, hand flat, one finger extended, etc.), and/or the like. For example, user inputs may comprise a position, orientation, and/or motion of a hand or other appendage, a body, a 3D mouse, and/or the like. 
     Data Store: Any computer readable storage medium and/or device (or collection of data storage mediums and/or devices). Examples of data stores include, but are not limited to, optical disks (e.g., CD-ROM, DVD-ROM, etc.), magnetic disks (e.g., hard disks, floppy disks, etc.), memory circuits (e.g., solid state drives, random-access memory (RAM), etc.), and/or the like. Another example of a data store is a hosted storage environment that includes a collection of physical data storage devices that may be remotely accessible and may be rapidly provisioned as needed (commonly referred to as “cloud” storage). 
     Database: Any data structure (and/or combinations of multiple data structures) for storing and/or organizing data, including, but not limited to, relational databases (e.g., Oracle databases, PostgreSQL databases, etc.), non-relational databases (e.g., NoSQL databases, etc.), in-memory databases, spreadsheets, comma separated values (CSV) files, eXtendible markup language (XML) files, TeXT (TXT) files, flat files, spreadsheet files, and/or any other widely used or proprietary format for data storage. Databases are typically stored in one or more data stores. Accordingly, each database referred to herein (e.g., in the description herein and/or the figures of the present application) is to be understood as being stored in one or more data stores. Additionally, although the present disclosure may show or describe data as being stored in combined or separate databases, in various embodiments such data may be combined and/or separated in any appropriate way into one or more databases, one or more tables of one or more databases, etc. As used herein, a data source may refer to a table in a relational database, for example. 
     Vehicle Metric Data: Any data that can describe an aspect of a vehicle or something related to a vehicle. Example vehicle metric data can be related to cruise control use, coasting, accelerator pedal use, idling, battery state, anticipation, motor rotations per minute, motor power, fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. of the vehicle. Vehicle metric data does not necessarily have to be represented as a numerical value. For example, example vehicle metric data related to cruise control can indicate whether cruise control is either in an on or off state. Individual vehicle metrics can be associated with respective timestamps. As another example, a vehicle metric can be for coasting. The determination of whether the vehicle metric for coasting is either true or false can be based on a combination of vehicle parameters, such as engine torque, vehicle speed, brake pedal engagement, and/or accelerator pedal engagement. In some embodiments, some categories of vehicle metric data can come from diagnostic data that directly comes from the vehicle bus. Additional or alternatively, some vehicle metric data can be a composite of multiple vehicle parameters and/or be derived from another vehicle metric, such as, for example, coasting that can be derived from multiple parameters or accelerator pedal engagement that can be derived from engine torque and/or load, as described herein. 
     III. Example Operating Environment 
       FIG. 1  illustrates a block diagram of an example operating environment  100  in which one or more aspects of the present disclosure may operate, according to various embodiments of the present disclosure. The operating environment  100  may include one or more user devices  120 , a management server  140 , one or more vehicles  110 , one or more vehicle gateway devices  150 , and one or more additional devices  180 . The various devices may communicate with one another via a communications network  130 , as illustrated. 
     In general, the vehicle gateway device  150  comprises a housing including processor(s), memory, input/output ports, etc. that may be connected to components of a vehicle. For example, the vehicle gateway device  150  can interface with a vehicle bus of the vehicle  110 . In particular, the vehicle gateway device  150  can connect to the vehicle bus of the vehicle  110  over an interface, such as, but not limited to, OBD-II or J1939. The vehicle gateway device  150  can receive and/or process data received via the interfaces of the vehicle gateway device  150 . The vehicle gateway device  150  can include or be configured to be an electronic logging device (ELD). Accordingly, the vehicle gateway device  150  can record data regarding the operation of the vehicle  110 , as well as driver activity including driver hours of service and record of duty status. Configurations of the vehicle gateway device  150  may include various analysis algorithms, program instructions, scripts, etc., as described herein. Additional details regarding the vehicle gateway device  150  are described in further detail herein, such as with respect to  FIG. 3 . 
     The vehicle gateway device  150  can store the received and/or processed data in a memory of the vehicle gateway device  150  (e.g., a computer readable storage medium). The vehicle gateway device  150  can communicate with the management server  140  over the network  130 . In particular, the vehicle gateway device  150  can transmit the received and/or processed data to the management server  140 . As another example, the vehicle gateway device  150  can transmit an alert to the management server  140 . The management server  140  may thereby receive data from multiple vehicle gateway devices  150 , and may aggregate and perform further analyses on the received data from vehicle gateway devices  150 . In some embodiments, the vehicle gateway device  150  can receive updates from the management server  140 . 
     In some embodiments, the features and services provided by the management server  140  may be implemented as web services consumable via the network  130 . The management server  140  can be provided by one or more virtual machines implemented in a hosted computing environment. The hosted computing environment can include one or more rapidly provisioned and released computing resources. The computing resources can include computing, networking and/or storage devices. 
     The additional device(s)  180  may include various devices for monitoring a vehicle and/or vehicle-related activity. The additional device(s)  180  can be optional and some configurations of the environment  100  do not include any additional device(s)  180 . Example additional device(s)  180  can include, but are not limited to, cameras (such as network-connected dash cams) and/or sensors. Example sensors can include, but are not limited to, wireless sensors to monitor reefers and cargo and wireless temperature sensors. Another additional device  180  can include a device that identifies a particular driver. For example, a driver can wear a keychain that automatically is wirelessly communicates with the vehicle gateway device  150  such that the driver can be automatically identified and the driver does not need to sign in to an application. 
     Various example user devices  120  are shown in  FIG. 1 , including a desktop computer, laptop, and a smartphone, each provided by way of illustration. In general, the user devices  120  can be any computing device such as a desktop, laptop or tablet computer, personal computer, tablet computer, wearable computer, server, personal digital assistant (PDA), hybrid PDA/mobile phone, mobile phone, smartphone, set top box, voice command device, digital media player, and the like. A user device  120  may execute an application (e.g., a browser, a stand-alone application, etc.) that allows a user to access interactive user interfaces, view analyses or aggregated data, and/or the like as described herein. In various embodiments, users may interact with various components of the example operating environment  100  (e.g., the management server  140 ) via the user device(s)  120 . Such interactions may typically be accomplished via interactive graphical user interfaces; however, alternatively such interactions may be accomplished via command line and/or other means. 
     The network  130  may include any wired network, wireless network, or combination thereof. For example, the network  130  may be a personal area network, local area network, wide area network, over-the-air broadcast network (e.g., for radio or television), cable network, satellite network, cellular telephone network, or combination thereof. As a further example, the network  130  may be a publicly accessible network of linked networks, possibly operated by various distinct parties, such as the Internet. In some embodiments, the network  130  may be a private or semi-private network, such as a corporate or university intranet. The network  130  may include one or more wireless networks, such as a Global System for Mobile Communications (GSM) network, a Code Division Multiple Access (CDMA) network, a Long Term Evolution (LTE) network, or any other type of wireless network. The network  130  can use protocols and components for communicating via the Internet or any of the other aforementioned types of networks. For example, the protocols used by the network  130  may include Hypertext Transfer Protocol (HTTP), HTTP Secure (HTTPS), Message Queue Telemetry Transport (MQTT), Constrained Application Protocol (CoAP), and the like. Protocols and components for communicating via the Internet or any of the other aforementioned types of communication networks are well known to those skilled in the art and, thus, are not described in more detail herein. 
     In various embodiments, communications among the various components of the example operating environment  100  may be accomplished via any suitable means. For example, the vehicle gateway devices  150  may communicate the additional device(s)  180 , the management server  140 , and/or the user device(s)  120  via any combination of the network  130  or any other wired or wireless communications means or method (e.g., Bluetooth, WiFi, infrared, cellular, etc.). 
     Further details and examples regarding the implementations, operation, and functionality, including various interactive graphical user interfaces, of the various components of the example operating environment  100  are described herein in reference to various figures. 
     IV. Example Management Device/Server 
       FIG. 2  illustrates a block diagram including an example implementation of a management device  230 , according to various embodiments of the present disclosure. In the example implementation, the management device  230  includes the management server  140 . The management server  140  can be a Web or cloud server and/or a cluster of servers, running on one or more sets of server hardware. In some embodiments, the management server  140  works for both single and multi-tenant installations, meaning that multiple organizations with different administrators may have, e.g., multiple gateway devices and additional devices managed by the same management server. 
     According to various embodiments, the management server  140  may be implemented on the management device  230  (or multiple devices similar to the management device  230 ), which includes server hardware  205 . The server hardware  205  can include one or more communication interfaces  260 , one or more processors  262 , and one or more computer readable storage mediums  210 , each of which may be in communication with one another. The computer readable storage medium  210  can includes a data processing module  251 , user interface module  252 , network manager module  253 , gateways/devices database  254 , vehicle-related database  255 , analysis-related database  256 , and organizations/drivers/vehicles database  258 . In various implementations, the various databases of the management device  230  may be combined or separated/partitioned as appropriate to implement the functionality described herein, and to maintain security and separation of data, e.g., for different organizations. In various implementations, the various databases may or may not be stored separately from the management device  230 . 
     In various implementations one or more buses, interconnects, wires/cables, etc. may be used to interconnect the various components of the server hardware  205 . In various implementations one or more interfaces, APIs, communication layers, buses, interconnects, wires/cables, etc. may be used to interconnect the various components of the management device  230 . 
     In operation, the one or more communication interfaces  260 , one or more processors  262 , and one or more computer readable storage mediums  210  communicate with one another to, e.g., execute by the processor(s)  262  computer program instructions (e.g., as provided by the user interface module  252 ); receive, access, and transmit data (e.g., to/from the databases and via the communication interface(s)  260 ); and/or the like. In general, the server hardware  205  enables the functionality of the management server  140  as described herein. Further implementation details are described below. 
     In operation, the communication interface(s)  260  may provide wired and/or wireless communications with other devices and networks, as described herein. In various embodiments, communications among the various components of the example operating environment  100  may be accomplished via any suitable means. For example, the management server  140  and/or management device  230  may communicate with the vehicle gateway device  150 , the additional device(s)  180 , and/or the user device(s)  120  via any combination of the network  130  or any other communications means or method (e.g., Bluetooth, WiFi, infrared, cellular, etc.). Accordingly, the communications interface(s)  260  may include one or more of wired and wireless transceivers, such as a Joint Test Action Group (JTAG) transceiver, a Bluetooth or Bluetooth Low Energy (LE) transceiver, an IEEE 802.11 transceiver, an Ethernet transceiver, a USB transceiver, a Thunderbolt transceiver, an infrared transceiver, a wireless cellular telephony transceiver (e.g., 2G, 3G, 4G, 5G), or the like. 
     In operation, the data processing module  251  can process and analyze data (e.g., data received from the various devices, including the gateway devices and/or additional devices) as described herein. The data processing/analysis may usefully provide insights and information that may be provided via various interactive graphical user interfaces, as described herein. 
     In operation, the user interface module  252  may provide the various interactive graphical user interface functionality described herein. This may include, for example, generating user interface data useable for rendering the various interactive user interfaces described. The user interface data may be used by various computer systems, devices, and/or software programs (for example, a browser program of a user device  120 ), to render the interactive user interfaces. The interactive user interfaces may be displayed on, for example, electronic displays (including, for example, touch-enabled displays). For example, the user interface module  252  may provide various network accessible interactive graphical user interfaces, e.g., to allow the administrators of the various organizations and devices to create and log into an account associated with an organization to which a set of devices belong (e.g., gateway devices and additional devices), and manage, and access data associated with, those devices as described herein. As another example, the user interface module  252  may provide various network accessible interactive graphical user interfaces, e.g., to allow the analysts of the various organizations and devices to conduct operations analysis and/or operations configurations, as described herein. 
     In operation, the network manager module  253  may provide communication with and configuration and management of the various devices associated with each organization. This may include, for example, receiving and managing information related to the various devices (e.g., gateway devices and additional devices) at the time of manufacture, associating devices with particular organizations when they are purchased/claimed and implemented by the organizations (e.g., the claiming may be performed at least in part by populating the gateways/devices database  254  and the organizations/drivers/vehicles database  258  with appropriate information when the devices are associated with an organization), receiving data from the various devices (e.g., and storing the data in the gateways/devices database  254  or other appropriate database), sending data to various devices, and/or the like. 
     In operation, the gateways/devices database  254  can store information regarding the vehicle gateway devices  150  and/or the additional devices  180 , and various relationships and associations among these devices. For example, the gateways/devices database  254  can store identifiers associated with these devices. 
     In operation, the analysis-related database  256  can store data (such as raw data, aggregated data, and/or analysis data) received from the vehicle gateway devices  150  and/or the additional devices  180 . The analysis-related database  256  can further store processed data that is generated by the management server  140  for analysis purposes. The analysis data can include vehicle fuel/energy efficiencies, correlations among vehicle metrics and fuel/energy efficiencies, fuel/energy efficiency scores, safety measurements, correlations among vehicle metrics and safety measurements, safety scores, comparisons, trends, correlations, recommendations, and/or route optimizations. 
     In operation, the organizations/drivers/vehicles database  258  can store information regarding the organizations to which the vehicle gateway devices  150  and/or additional devices  180  belong. The organizations/drivers/vehicles database  258  can store data regarding the drivers and/or vehicles associated with the organization. 
     In various embodiments, the management server  140 , as implemented by the management device  230 , may include various other modules, components, engines, etc. to provide the functionality as described herein. It will be appreciated that additional components, not shown, may also be part of the management server  140  and/or the management device  230 , and, in certain embodiments, fewer components than that shown in  FIG. 2  may also be used in the management server  140  and/or the management device  230 . For example, the management server  140  may include a security module used to manage cryptographic keys, certificates, and/or other data associated with establishing secure communication with various other devices. For example, the devices database  254  may include an identifier of each device (e.g., a serial number), a secret to be used to establish a secure communication with the devices of the same organization, and/or a mechanism to authenticate the devices&#39; identity (e.g., the public key of a private public key pair, the private key of which was embedded or stored in the device during the manufacturing, etc.). 
     While various embodiments do not implement virtualization, alternative embodiments may use different forms of virtualization—represented by a virtualization layer  220  in the management device  230 . In these embodiments, the management server  140  and the hardware that executes it form a virtual management server, which is a software instance of the modules and/or databases stored on the computer readable storage medium  210 . 
     For example, in an implementation the management device  230  (or one or more aspects of the management device  230 , e.g., the management server  140 ) may comprise, or be implemented in, a “virtual computing environment.” As used herein, the terms “virtual computing environment”, “virtualization”, “virtual machine”, and/or the like should be construed broadly to include, for example, computer readable program instructions executed by one or more processors (e.g., as described below) to implement one or more aspects of the modules and/or functionality described herein. In some implementations the virtual computing environment may comprise one or more virtual machines, virtualization layers, containers, and/or other types of emulations of computing systems or environments. In some implementations the virtual computing environment may comprise a hosted computing environment that includes a collection of physical computing resources that may be remotely accessible and may be rapidly provisioned as needed (commonly referred to as “cloud” computing environment). 
     Implementing one or more aspects of the management device  230  as a virtual computing environment may advantageously enable executing different aspects or modules of the system on different computing devices or processors, which may increase the scalability of the system. Implementing one or more aspects of the management device  230  as a virtual computing environment may further advantageously enable sandboxing various aspects, data, or modules of the system from one another, which may increase security of the system by preventing, e.g., malicious intrusion into the system from spreading. Implementing one or more aspects of the management device  230  as a virtual computing environment may further advantageously enable parallel execution of various aspects or modules of the system, which may increase the scalability of the system. Implementing one or more aspects of the management device  230  as a virtual computing environment may further advantageously enable rapid provisioning (or de-provisioning) of computing resources to the system, which may increase scalability of the system by, e.g., expanding computing resources available to the system or duplicating operation of the system on multiple computing resources. For example, the system may be used by thousands, hundreds of thousands, or even millions of users simultaneously, and many megabytes, gigabytes, or terabytes (or more) of data may be transferred or processed by the system, and scalability of the system may enable such operation in an efficient and/or uninterrupted manner. 
     V. Example Vehicle Gateway Device 
       FIG. 3  illustrates a block diagram of an example vehicle gateway device  150 , according to various embodiments of the present disclosure. The vehicle gateway device  150  can include one or more processors  322 , one or more communication interfaces  324 , one or more vehicle interfaces  326 , location device(s)  350 , and one or more computer readable storage mediums  330 , each of which may be in communicles  324 , one or more processors  322 , and one or more computer readable storage mediums  330  communicate with one another to, e.g., execute by the processor(s)  322  computer program instructions (e.g., as provided by the data processing module(s)  338 ); receive, access, and transmit data (e.g., via the communication interface(s)  324 ); and/or the like. Example processor(s)  322  can include various types of processors, such as, but not limited to, general purposes processors, e.g., a microprocessor, and/or special purposes processors, e.g., Graphics Processing Units (“GPUs”), Application Specific Integrated Circuits (“ASICs”), Field-Programmable Gate Arrays (“FPGAs”). Further implementation details are described below. 
     The communication interface(s)  324  can enable wired and/or wireless communications with other devices and networks, as described herein. For example, the vehicle gateway device  150  can communicate with the additional device(s)  180 , the management server  140 , and/or the user device(s)  120  via any combination of the network  130  or any other communications means or method (e.g., Bluetooth, WiFi, infrared, cellular, etc.). Accordingly, the communications interface(s)  324  may include one or more of wired and wireless transceivers, such as a Joint Test Action Group (JTAG) transceiver, a Bluetooth or Bluetooth Low Energy (LE) transceiver, an IEEE 802.11 transceiver, an Ethernet transceiver, a USB transceiver, a Thunderbolt transceiver, an infrared transceiver, a wireless cellular telephony transceiver (e.g., 2G, 3G, 4G, 5G), or the like. The communications interface(s)  324  may further include, for example, serial inputs/outputs, digital inputs/output, analog inputs/outputs, and the like. As noted herein, the communications interface(s)  324  may further include one or more application programming interfaces (APIs). 
     The vehicle interface  326  can communicate with a vehicle bus. As described herein, the vehicle bus is an internal communications network that connects components, such as a car&#39;s electronic controllers, within a vehicle. Example protocols that the vehicle interface  326  can communicate with can include, but are not limited to, Controller Area Network (CAN), Local Interconnect Network (LIN), OBD-II or OBD2, and/or J1939. Accordingly, the vehicle interface  326  can allow access to the vehicle&#39;s electronic controllers. The vehicle gateway device  150 , via the vehicle interface  326 , can access vehicle diagnostics, such as fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. In some embodiments, the vehicle gateway device  150 , via the vehicle interface  326 , can receive messages from the vehicle bus from the car&#39;s electronic controllers related to vehicle data, such as fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. Additionally or alternatively, the vehicle gateway device  150 , via the vehicle interface  326 , can query the car&#39;s electronic controllers to receive vehicle data, such as fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. 
     The location determination module  340  can use the location device(s)  350 . Example location device(s)  350  can include a global positioning system (GPS) device or a global navigation satellite system (GLONASS) device. Data received from the location device(s)  350  can be stored as location data  336  in the computer readable storage medium(s)  330 . In some embodiments, the location determination module  340  can determine the location of the vehicle gateway device  150  using various geolocation methods that use, but are not limited to, Wi-Fi, Bluetooth, Internet Protocol (IP), and/or proximity to beacons. The location determination module  340  may determine location of the gateway device  110  and generate location data  336  associated with the location of the gateway device  110 . The location data  336  may include geographical positioning information (e.g., GPS coordinates or latitudinal and longitudinal coordinates) that may represent the location of the vehicle gateway device  150 . Additionally or alternatively, the location information may identify an area within a grid (such as a map tile) that identifies and/or estimates the location of the vehicle gateway device  150 . 
     In operation, the vehicle metric data  334  can include raw vehicle data received from the vehicle bus and/or the various additional devices  180  via the vehicle interface  326 , communications interface(s)  324 , and/or input ports of the vehicle gateway device  150 . In operation, the bucketed vehicle metric data  334  can include aggregated metric data. In some embodiments, the data processing module  338  can bucket the raw vehicle data as aggregated data and can store the aggregated results as the bucketed vehicle metric data  334 . 
     In operation, the additional devices data  337  can include data received from the various additional devices  180  via the vehicle interface  326 , communications interface(s)  324 , and/or input ports of the vehicle gateway device  150 . Example additional devices data  337  can include, but is not limited to, camera data, video data, and/or temperature sensor data. 
     In operation, the configuration data  332  can include one or more configurations that configure operation of the vehicle gateway device  150 . For example, such configurations may be received from a user and/or the management device  230  (and/or other devices in communication with the vehicle gateway device  150 ), and may include various communications specifications (e.g., that indicate functionality of the input and output ports), executable program instructions/code, algorithms or processes for processing the received data, and/or the like. The vehicle gateway device  150  may store multiple configurations in the configuration data  332 , which may be selectively run or implemented, e.g., via user selection via the management server  140  and/or the user device(s)  120 . 
     In operation, the data processing module(s)  338  can process and analyze received data. The processing and analysis by the data processing module(s)  338  may result in one or more outputs from the vehicle gateway device  150  that may be provided via the communications interface(s)  324 , as further described herein. In various implementations, the data processing module(s)  338  may be executed by the processor(s)  322 . 
     In operation, the diagnostic service  342  can process and analyze received diagnostic data. The processing and analysis by the diagnostic service  342  may result in one or more outputs from the vehicle gateway device  150  that may be provided via the communications interface(s)  324 , as further described herein. In various implementations, the diagnostic service  342  may be executed by the processor(s)  322 . 
     In various embodiments, firmware of the vehicle gateway device  150  may be updated such that the vehicle gateway device  150  may provide additional functionality. Such firmware updating may be accomplished, e.g., via communications with the management server  140 , thereby enabling updating of multiple vehicle gateway devices  150  remotely and centrally. Additional functionality may include, for example, additional communications specifications, additional ways of communicating with additional devices  180  (e.g., additional control languages, etc.), additional configurations or options for configurations, and/or the like. 
     VI. Example Methods and Functionality for Efficient Data Aggregation 
       FIGS. 4A-4B  are flowcharts illustrating example methods and functionality related to efficient data aggregation on a vehicle gateway device  150 , according to various embodiments of the present disclosure. Turning to  FIG. 4A , beginning at block  402 , raw vehicle data can be received. In particular, the vehicle gateway device  150  can receive the raw vehicle data. The vehicle gateway device  150  can receive the raw vehicle data via the vehicle interface  326  with a vehicle  110 . The vehicle gateway device  150  can communicate with electronic controllers of the vehicle  110  and/or the vehicle&#39;s computer over the vehicle interface  326  and the vehicle bus. The communication between the vehicle gateway device  150  and the vehicle  110  can use a particular communication protocol, such as OBD-II or J1939. In some embodiments, the vehicle gateway device  150  can record broadcasted data over the vehicle bus, thereby receiving the raw vehicle data. Additionally or alternatively, the vehicle gateway device  150  can request raw vehicle data over the vehicle bus. The raw vehicle data can be received over a period of time. As described herein, example raw vehicle data can include any vehicle diagnostic data, such as, but not limited to, data related to cruise control use, coasting, accelerator pedal use, idling, battery state, anticipation, motor rotations per minute, motor power, fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. of the vehicle  110 . 
     In some embodiments, the vehicle gateway device  150  can receive vehicle battery data associated with a battery from the vehicle  110 . The vehicle battery data can represent a state of the vehicle battery. The vehicle battery data can be for an electric vehicle, a hybrid vehicle (such as a plug-in hybrid electric vehicle), or internal combustion engine (ICE) vehicles. The vehicle gateway device  150  can listen for battery-related messages from a battery management system (BMS) of the vehicle  110 . Additionally or alternatively, the vehicle gateway device  150  can request vehicle battery data from the battery management system. 
     At block  404 , the raw vehicle data can be decoded and/or translated. In particular, the vehicle gateway device  150  can decode and/or translate the raw vehicle data. The raw vehicle data can be in a particular data format, such as an OBD-II or J1939 data format. Accordingly, the vehicle gateway device  150  can decode and/or translate the raw vehicle data in the particular data format. The vehicle gateway device  150  can decode and/or translate the raw vehicle data based at least in part on rules specifically related to the vehicle. For example, the vehicle gateway device  150  can include rules for decoding particular data formats, such as OBD-II or J1939. The vehicle gateway device  150  can use different sets of rules for decoding and/or translating data from a particular vehicle depending on the communication protocol that the particular vehicle uses. In some embodiments, the vehicle gateway device  150  can decode and/or translate vehicle battery data from messages from the battery management system (BMS). Additionally or alternatively, the vehicle gateway device  150  can store the raw vehicle data in its original data format. 
     At block  406 , vehicle metric data can be determined. In particular, the vehicle gateway device  150  can determine vehicle metric data from the raw vehicle data. For example, the raw vehicle data regarding cruise control use, coasting, accelerator pedal use, idling, battery state, anticipation, motor rotations per minute, motor power, fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. can be voluminous. The vehicle gateway device  150  can parse and organize the raw vehicle data into individual vehicle metrics. For example, a value and/or on/off state can be determined for each of cruise control use, coasting, accelerator pedal use, idling, battery state, anticipation, motor rotations per minute, motor power, fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. over the period of time. Moreover, some example vehicle metrics can be based on a combination of vehicle parameters. For example, a vehicle metric can be for coasting. The vehicle gateway device  150  can determine the vehicle metric for coasting to be either true or false based on a combination of vehicle parameters, such as engine torque, vehicle speed, brake pedal engagement, and/or accelerator pedal engagement. In particular, the vehicle gateway device  150  can determine the vehicle metric for coasting to be true when each of the following are determined to be true: engine torque is zero, vehicle speed is greater than zero, brake pedal is not engaged, and accelerator pedal is not engaged. 
     Another example of determined vehicle metric can be for accelerator pedal engagement. In some embodiments, accelerator pedal data from the vehicle bus may be unreliable. Accordingly, the vehicle gateway device  150  can determine the vehicle metric for accelerator pedal engagement based on at least one of engine torque or engine load. For example, the vehicle gateway device  150  can determine the vehicle metric for accelerator pedal engagement as a percentage based value ranges for engine torque and/or engine load. 
     Yet another example of determined vehicle metric can be for anticipation. Anticipation can generally refer to driver behavior with respect to anticipating having to brake, which can be indicative of fuel/energy efficient driving. For example, those drivers that anticipate traffic in their driving will typically not have to brake as hard. The vehicle metric for anticipation can be a categorizations of brake events, such as, any brake event and/or a quick brake event. The vehicle gateway device  150  can determine the brake event category based on a combination of vehicle parameters, such as brake pedal engagement, accelerator pedal engagement, engine torque, and/or engine load. In particular, the vehicle gateway device  150  can determine the vehicle metric for a quick brake event when each of the following are determined: the accelerator pedal is disengaged and the brake pedal is subsequently engaged in approximately less than one second. Any brake event can include any time the driver presses the brake pedal. 
     At block  408 , the vehicle metric data can be stored. In particular, the vehicle gateway device  150  can store the vehicle metric data in the computer-readable storage medium(s)  330 . For example, the vehicle gateway device  150  can store the vehicle metric data in a database on the computer-readable storage medium(s)  330 . As described herein, aggregated bucketed vehicle metric data may be generated by the vehicle gateway device  150  and transmitted to the management server  140 . However, in some environments, the management server  140  may query the vehicle gateway device  150  for particular vehicle metric data, which can be retrieved from the computer-readable storage medium(s)  330 . 
     At block  410 , the vehicle metric data can be bucketed. In particular, the vehicle gateway device  150  can determine corresponding vehicle metric buckets for each of the vehicle metrics. In some embodiments, there can be a single bucket for a particular metric. One example category of buckets is an engine revolutions per minute (RPM) category. Example buckets for RPM can include RPM bands with RPM ranges for each band. Example RPM band buckets include a first bucket for an RPM band of approximately 800-1700 RPM and a second bucket for an RPM band starting from a low of approximately 700-900 RPM to a high of approximately 1600-1800 RPM. In some embodiments and vehicles, the RPM band of approximately 800-1700 RPM can be an efficient range for operating a vehicle with respect to fuel/energy use and the RPM bands starting from a low of approximately 700-900 RPM to a high of approximately 1600-1800 RPM can be inefficient ranges for operation of the vehicle with respect to fuel/energy use. The bucket of 800-1700 RPM can be considered a “green” RPM range. Conversely, the other bucket can be considered a “red” RPM range(s). If the vehicle metric data includes RPM values of 798, 799, and 800 for each millisecond, respectively, then the 800 RPM value can be placed in the efficient RPM bucket and the 798 and 799 RPM values can be placed in the inefficient bucket. In some embodiments, the particular buckets can be customized for types of vehicles. For example, different types of vehicles can have different recommended RPM ranges for fuel/energy efficiency. The “green band” RPM range for different vehicle may vary by plus or minus 50 to 100 RPM depending on the particular vehicle or type of vehicle. Many of the vehicle metrics described herein can be useful indicators for fuel/energy efficient driving or the lack thereof. 
     Another example category of buckets is a cruise control category. Example buckets for cruise control can include a cruise control on bucket and a cruise control off bucket. For example, if the vehicle metric data includes instances of cruise control being on for timestamps 1 and 2 and cruise control being off for timestamp 3, then the first two instances can be placed in the cruise control on bucket and the remaining instance can be placed in the cruise control off bucket. Use of cruise control can increase or be indicative of fuel/energy efficient driving. 
     Yet another example category of buckets is a coasting category. Example buckets for coasting can include a coasting true bucket and a coasting false bucket. For example, if the vehicle metric data includes instances of coasting being true for timestamps 1 and 2 and coasting being false for timestamp 3, then the first two instances can be placed in the coasting true bucket and the remaining instance can be placed in the coasting false bucket. As described herein, the determination of whether coasting is true or false at a particular timestamp can be based on a number of vehicle parameters, such as engine torque, vehicle speed, brake pedal engagement, and/or accelerator pedal engagement. Similar to previous metrics, use of coasting can increase or be indicative of fuel/energy efficient driving. 
     Similar to the previous bucket examples, the following bucket examples can characterize the state of a vehicle over a period of time at respective timestamps of the vehicle. Yet another example category of buckets is an accelerator pedal engagement category. Example buckets for accelerator pedal engagement can include a first bucket for accelerator pedal engagement over approximately 95 percent, and a second bucket for accelerator pedal engagement less than or equal to approximately 95 percent. Yet another example category of buckets is for idling. Example buckets for idling can include a first bucket for idling true, and a second bucket for idling false. Yet another example category of buckets is for anticipation. Example buckets for idling can include a first bucket for any brake event, and a second bucket for a quick brake event. Similar to previous metrics, reduced use of accelerator pedal engagement above 95% and/or reduced idling can increase or be indicative of fuel/energy efficient driving. 
     Another example bucket is a bucket for a particular vehicle battery charge. For example, in the context of an electric vehicle or a plug-in hybrid electric vehicle, the vehicle gateway device  150  can determine that vehicle battery data is associated with a particular instance of a vehicle battery charge. 
     At block  412 , the vehicle metric data can be aggregated. In particular, the vehicle gateway device  150  can aggregate, over the period of time, the vehicle metrics into the corresponding vehicle metric buckets to generate aggregated bucketed vehicle metric data. The vehicle gateway device  150  can represent the aggregations differently based on the embodiment or in multiple ways. For example, the vehicle gateway device  150  can aggregate a cumulative time spent in each bucket. In the case of RPM buckets, the vehicle gateway device  150  can aggregate a cumulative time spent in each bucket (e.g., 1 minute and 10 seconds in the “green” bucket and 2 minutes and 15 seconds in the “red” bucket). Additional example aggregations can include: time spent with cruise control on and time spent with cruise control off; time spent coasting as true and time spent coasting as false; time spent with the accelerator pedal engagement over approximately 95 percent and time spent with the accelerator pedal engagement less than or equal to approximately 95 percent; and/or time spent idling as true and time spent idling as false. Additionally or alternatively, the vehicle gateway device  150  can represent the time spent in each bucket as a percentage. In some embodiments, the vehicle gateway device  150  can store the bucketed vehicle metric data and/or the aggregated bucketed vehicle metric data in the computer-readable stored medium(s)  330  of the vehicle gateway device  150 . 
     In some embodiments, the vehicle gateway device  150  can aggregate, over the period of time, quantities. For example, if each bucket has discrete items (such as events), the vehicle gateway device  150  can aggregate the discrete items in each bucket. In the case of anticipation buckets, the vehicle gateway device  150  can aggregate the total number of any type of brake event in a first bucket and the total number of quick brake events in the second bucket. For example, the vehicle gateway device  150  can aggregate the first bucket to have a total of 15 of any type of brake events and the second bucket to have a total of 5 of quick brake events. Additionally or alternatively, the vehicle gateway device  150  can represent each aggregated bucket total as a percentage. 
     In some embodiments, the vehicle gateway device  150  can aggregate bucket(s) for a vehicle battery charge by determining charge record(s) from the vehicle battery data. An example charge record can include (i) data indicative of an amount of energy charged relative to a capacity of the battery (such as a percentage of the battery charged for a particular charge instance) and (ii) an amount of energy charged relative to a period of time (such as a charge amount in a unit of energy like kilowatt-hour (kWh)). Another example charge record can include (i) a start state of charge, (ii) an end state of charge, and (iii) an amount of energy charged. As described herein, the vehicle gateway device  150  can transmit historical vehicle battery data to the management server  140  and the management server  140  can determine charge record(s) from the historical vehicle battery data. Depending on the embodiment, the historical vehicle battery data can include charge record(s) or the historical vehicle battery data can include the underlying data with which the management server  140  can calculate the charge record(s). 
     At block  414 , it can be determined whether the aggregation time threshold has been met. In particular, the vehicle gateway device  150  can determine whether the aggregation time threshold has been met. Example aggregation time thresholds can include 1 minute, 2 minutes, 5 minutes, etc. The vehicle gateway device  150  can maintain a running timer to determine whether the aggregation time threshold has been met. Additionally or alternatively, the vehicle gateway device  150  can maintain a last expiration time variable and can determine a difference between the last expiration time with a current time. When the difference between the last expiration time and the current time is greater than or equal to the aggregation time threshold, the vehicle gateway device  150  can determine that the aggregation time threshold has been met. If it has been determined that the aggregation time threshold has been met, the method can proceed to block  418  for transmitting the aggregated data. Otherwise, the method can return to block  402  to receive more vehicle data and operate in a loop until the aggregation time threshold has been met. 
     In some embodiments, there can be different time thresholds for different vehicle metrics. For example, metrics regarding RPM and fuel level can be provided to the management server  140  more regularly, such as every five minutes. As another example, the vehicle battery data and/or the battery charge record(s) can be provided once or twice a day from the vehicle gateway device  150  to the management server  140 . 
     In some embodiments (while not illustrated), while the block  412  for aggregating bucketed vehicle metric data appears before the block  414  for determining whether the aggregation time threshold has been met, the reverse can occur. Specifically, the block  412  for aggregating bucketed vehicle metric data can occur after the block  414  that determines whether the aggregation time threshold has been met. For example, if the aggregation time threshold has been met (such as five minutes), the vehicle gateway device  150  can then aggregate the bucketed data and then proceed to block  418  for transmitting the aggregated data. 
     At block  418 , the aggregated bucketed vehicle metric data can be transmitted. In particular, in response to determining that an aggregation time threshold is met, the vehicle gateway device  150  can transmit, to a receiving server system (such as the management server  140 ), the aggregated bucketed vehicle metric data. For example, the vehicle gateway device  150  can transmit any of the aggregated bucketed data relating to cruise control use, coasting, accelerator pedal use, idling, battery state, anticipation, motor rotations per minute, motor power, fuel level, engine revolutions per minute (RPM), speed, engine torque, engine load, brake use, etc. In particular, the vehicle gateway device  150  can transmit charge records to a computing device such as the management server  140 . In some embodiments, if the vehicle gateway device  150  loses network connection, the vehicle gateway device  150  can queue aggregated vehicle data until it obtains the network connection again. As shown, after the data has been transmitted, the method can return to block  402  to receive more data and perform in a loop until the aggregation time threshold is met again. 
     Accordingly, the vehicle gateway device  150  can advantageously transmit vehicle data in an efficient manner. Example advantages (not all of which may be applicable in every embodiment) can include the following. For example, instead of the vehicle gateway device  150  transmitting vehicle data with a higher frequency (such as every millisecond), the vehicle gateway device  150  can transmit the vehicle data with a lower frequency. This can result in lower bandwidth usage. As another example, instead of transmitting vehicle individual data items (such as cruise control use, RPM, speed, engine torque, engine load, brake use, etc. for every millisecond), the vehicle gateway device  150  transmits aggregated vehicle data. Accordingly, the aggregated vehicle data can have a smaller data size than the total data size of the individual data items. In other words, the aggregated vehicle data can be a compressed, summary data representation of the raw vehicle data. This can be advantageous because the compressed vehicle data can use less network bandwidth and/or can be transmitted to the destination server faster in contrast to the individual data items that would use more network bandwidth and/or would be transmitted slower. 
     Turning to  FIG. 4B , beginning at block  432 , vehicle location data can be determined. In particular, the vehicle gateway device  150  can determine the vehicle location data. For example, the vehicle gateway device  150  can receive location data from the location device(s), such as GPS or GLONASS receivers. The location data can be associated with timestamps. Accordingly, the vehicle gateway device  150  can determine geolocation data associated with the vehicle  110 , which can include time data. 
     At block  434 , data from the additional device(s) can be determined. In particular, the vehicle gateway device  150  can receive data from the additional device(s). For example, the vehicle gateway device  150  can receive camera data and/or sensors data. Similar to the vehicle location data that can be associated with timestamps, the additional devices data can be associated with timestamps. At block  436 , the vehicle location data and/or the additional devices data can be stored. In particular, the vehicle gateway device  150  can store the vehicle location data and/or the additional devices data in the computer-readable stored medium(s)  330  of the vehicle gateway device  150 . 
     At block  438 , data can be aggregated and/or bucketed. In particular, the vehicle gateway device  150  can aggregate the vehicle location data and/or the additional devices data. For example, as opposed to a time series that includes pairs of time values and data values for relatively small units of time, the vehicle gateway device  150  can aggregate at least one of the vehicle location data or the additional devices data to represent that a respective data value is associated with a period time. Additionally or alternatively, the vehicle location data and/or the additional devices data can be bucketed. The block  438  for aggregating/bucketing data can be similar to blocks  410 ,  412  of  FIG. 4A  for aggregating/bucketing data. For example, similar to the bucketed vehicle metric data that was aggregated by the vehicle gateway device  150  described above with respect to  FIG. 4A , the vehicle location data and/or the additional devices data can be bucketed/aggregated by the vehicle gateway device  150 . For example, in the case of vehicle location data, particular locations or location areas can each have respective buckets and the vehicle gateway device  150  can determine how much time the vehicle  110  spent at each location or location area over a period of time, i.e., a cumulative time for each location bucket. For example, in the case of additional sensor data, ranges of the sensor data can each have respective buckets and the vehicle gateway device  150  can determine how much time the sensor spent within the respective sensor ranges over a period of time, i.e., a cumulative time for each sensor range bucket. 
     At block  440 , it can be determined whether the aggregation time threshold has been met. In particular, the vehicle gateway device  150  can determine whether the aggregation time threshold has been met. The block  440  for determining whether the aggregation time threshold has been met can be similar to block  414  of  FIG. 4A  for determining whether the aggregation time threshold has been met. For example, the aggregation time threshold can be the same for the aggregated vehicle data, the vehicle location data, and/or the additional devices data. Also, in some embodiments, while not illustrated, the block  438  for aggregating/bucketing data can be performed after it has been determined that the aggregation time threshold has been met. If the aggregation time threshold has been met, the method can proceed to block  444 . Otherwise, the method can return to block  432  to receive more vehicle location data and/or additional devices data and perform in a loop until the aggregation time threshold has been met. At blocks  444 ,  446 , the vehicle location data and/or the additional devices data can be transmitted to a receiving server system. In particular, the vehicle gateway device  150  can transmit the vehicle location data and/or the additional devices data (which can be aggregated/bucketed) to the management server  140 . As shown, after the data has been transmitted, the method can return to block  432  to receive more data and perform in a loop until the aggregation time threshold is met again. 
     VII. Example Methods and Functionality for Processing Received and/or Aggregated Data 
       FIGS. 5A-5B  are flowcharts illustrating example methods and functionality related to processing vehicle-related data and using the processed data. Turning to  FIG. 5A , beginning at blocks  502 ,  504 ,  506 , data can be received. In particular, at block  502 , a computing device (such as the management server  140 ) can receive vehicle metric data (such as the aggregated bucketed vehicle metric data) from the vehicle gateway device  150 . At block  504 , the computing device can receive vehicle location data from the vehicle gateway device  150 . At block  506 , the computing device can receive additional devices data from the vehicle gateway device  150 . Other data can be received, such as data from third parties and/or data regarding fuel/energy purchasing. As described herein, the computing device (such as the management server  140 ) can receive the data in batches or intervals. At block  508 , the received data can be stored. In particular, the management server  140  can store the received data in the computer-readable stored medium(s)  210 , such as by storing the received data in the analysis-related database  256 . 
     As depicted, the blocks  502 ,  504 ,  506 ,  508  for receiving and storing data can operate in a loop by returning to the first block  502 . Thus, the management server  104  can receive and/or store data for multiple vehicle gateway devices and/or vehicles over time. 
     At block  512 , the data can be processed and/or aggregated. In particular, the management server  140  can process and/or aggregate the data. As described herein, the management server  140  can receive bucketed data for a particular time window. Accordingly, the management server  140  can combine and/or take a portion of the bucketed data. For example, the management server  140  can determine a vehicle metric for a certain time period (such as one or several days) by at least combining bucketed data within the time period, where each bucket of data can correspond to a subset of the time period (such as bucketed data for every five minutes). 
     The management server  140  can aggregate/filter data based on a property in common. Example common properties can include a common vehicle, vehicle characteristic, driver, driver characteristic, route, fleet, cohort, and/or time period. The graphical user interfaces  700 ,  900 , described in further detail below with respect to  FIGS. 7A and 9 , respectively, can depict aggregated data by vehicle. For example, as shown in  FIG. 7A , the management server  104  can aggregate the state of charge (or other vehicle metric) of a particular vehicle. As shown in  FIG. 9 , the management server  104  can aggregate various metrics by vehicle to determine, for example, fuel/energy consumed or total miles driven. The graphical user interface  800 , described in further detail below with respect to  FIG. 8A , can depict aggregated data by driver. For example, as shown in  FIG. 8A , the management server  104  can aggregate various vehicle metrics (such as cruise control, coasting, accelerator pedal, idling, anticipation, and/or RPM) by driver. The management server  104  can aggregate vehicle metrics from multiple vehicle gateway devices that are each associated with the same driver. 
     The management server  140  can combine different types of data. For example, the summary user interface  600 , described in further detail below with respect to  FIG. 6 , can depict a combination of different types of data. To present the data in the summary user interface  600  of  FIG. 6 , the management server  140  can combine vehicle location data, vehicle metrics related to fuel/energy, speed data, and/or other vehicle metadata to display vehicle results, metadata, and the map  605 . The management server  140  can aggregate the data based on a common characteristic, such as by a vehicle identifier. 
     The management server  104  can calculate some metrics. The summary user interface  900 , described in further detail below with respect to  FIG. 9 , can depict some metrics that are calculated from other metrics. For example, as depicted in the user interface  900  of  FIG. 9 , the management server  104  can calculate estimated carbon emissions and/or effective mpg based on miles driven and/or other metrics. 
     In some embodiments, the management server  104  can pre-compute some metrics. For example, as the management server  104  receives data, the management server  104  can continuously process and/or aggregate the data on a running basis. Additionally or alternatively, the management server  104  can process and/or aggregate data in response to user requests. For example, the management server  104  can process and/or aggregate metrics in response to user selections to generate any of the user interfaces described herein. 
     From the block  512 , the method can process data to determine different scores along different paths. For example, at block  522 , fuel/energy usage and/or efficiency can be determined. In particular, the management server  104  can identify metrics associated with fuel/energy usage and/or efficiency. Example fuel/energy usage metrics can include, but are not limited to, fuel consumed, energy consumed, percent electric driving, total miles driven, carbon emissions, total emissions saved, energy recovered, and/or effective mpg. Example fuel/energy efficiency metrics can include, but are not limited to, cruise control use, coasting, accelerator pedal, time idling, anticipation, and/or RPM. 
     At block  524 , fuel/energy efficiency weights associated with vehicle metrics can be determined. In particular, the management server  104  can determine fuel/energy efficiency weights using correlations. For example, the management server  104  can determine correlations among the vehicle metrics and the fuel/energy usage over various periods of time. Example correlations can indicate improved fuel/energy efficiency associated with one or more vehicle metrics, such as, but not limited to, cruise control use, coasting, accelerator pedal, time idling, anticipation, and/or RPM, and, in particular, a relative importance of particular vehicle metrics to efficient fuel/energy usage. The management server  104  can determine weightings of the one or more metrics based at least in part on the correlations. For example, it may turn out that RPM should have a higher weighting than coasting based on the impact on fuel/energy usage. 
     At block  526 , fuel/energy efficiency weights customizations can be received. In particular, in some embodiments, the management server  104  can receive user-specified fuel/energy efficiency weights customizations. For example, an administrator can specify the relative importance of particular vehicle metrics for the purpose of determining fuel/energy efficiency. 
     At block  528 , a fuel/energy efficiency score can be determined. In particular, the management server  104  can determine a fuel/energy efficiency score based on weights and the vehicle metric data. For example, the management server  104  can determine a fuel/energy efficiency score for a driver, route, vehicle, fleet, and/or cohort by combining multiple vehicle metrics according to the weightings. In some embodiments, a fuel/energy efficiency score can be calculated based on predefined weightings, which may not be based on system-determined correlations. The vehicle metrics can be weighted equally and/or differently. Example fuel/energy efficiency scores can be represented as a percentage, a letter, or some other indicator. The summary user interface  850 , described in further detail below with respect to  FIG. 8B , can depict some fuel/energy efficiency scores. As depicted in the user interface  850  of  FIG. 8B , a letter score can be assigned to a vehicle, such as the first score  836 , and/or to a group of vehicles, such as the second score  838 . The management server  104  can assign a score to individual vehicle metrics. In some embodiments, predefined and/or user-defined percentages or value ranges can be assigned score indicators, such as an “A,” “B,” etc. efficiency grade. 
     From the block  512 , the method can process data to determine a safety score along the paths including block  532 . At block  532 , safety can be determined. In some embodiments, the management server  104  can determine safety from driver history data. Example driver history data can indicate incidents associated with safety, such as incidents that involve an insurance provide like a car accident. Additionally or alternatively, safety can be determined without driver history data. For example, in some embodiments, the management server  104  can estimate safety based on known predictor metrics, such as coasting, anticipation, brake events, accelerator pedal use, cruise control use, etc. 
     At block  534 , safety weights associated with vehicle metrics can be determined. In particular, the management server  104  can determine safety weights using correlations. For example, the management server  104  can determine correlations among the vehicle metrics and the driver history data over various periods of time. Example correlations can indicate improved safety associated with one or more vehicle metrics, such as, but not limited to, reduced hard accelerator pedal use, anticipation, cruise control use, coasting, etc., and, in particular, a relative importance of particular vehicle metrics to safety. The management server  104  can determine weightings of the one or more metrics based at least in part on the correlations. For example, it may turn out that reduced hard accelerator pedal use and/or anticipation should have a higher weighting than cruise control use based on the impact to vehicle safety. 
     At block  536 , safety weights customizations can be received. In particular, in some embodiments, the management server  104  can receive user-specified safety weights customizations. For example, an administrator can specify the relative importance of particular vehicle metrics for the purpose of determining safety. 
     At block  538 , a fuel/energy efficiency score can be determined. In particular, the management server  104  can determine a fuel/energy efficiency score based on weights and the vehicle metric data. For example, the management server  104  can determine a fuel/energy efficiency score for a driver, route, vehicle, fleet, and/or cohort by combining multiple vehicle metrics according to the weightings. In some embodiments, a fuel/energy efficiency score can be calculated based on predefined weightings, which may not be based on system-determined correlations. The vehicle metrics can be weighted equally and/or differently. Example fuel/energy efficiency scores can be represented as a percentage, a letter, or some other indicator. The summary user interface  850 , described in further detail below with respect to  FIG. 8B , can depict some fuel/energy efficiency scores. As depicted in the user interface  850  of  FIG. 8B , a letter score can be assigned to a vehicle, such as the first score  836 , and/or to a group of vehicles, such as the second score  838 . The management server  104  can assign a score to individual vehicle metrics. In some embodiments, predefined and/or user-defined percentages or value ranges can be assigned score indicators, such as an “A,” “B,” etc. efficiency grade. 
     At block  542 , comparisons, trends, correlations, recommendations, and/or route optimizations can be determined. In particular, the management server  104  can determine comparisons, trends, and/or correlations between different fleets and/or organizations. For example, the management server  104  can identify fleet sizes of similar sizes and generate comparison data regarding fuel/energy efficiency and/or safety. Thus, different fleets and/or organizations can be compared, which can allow organizations to improve fuel/energy efficiency and/or safety. 
     The management server  104  can include recommendation logic. For example, management server  104  can include rules where if drivers, vehicles, routes, and/or fleets have efficiency and/or safety scores below certain thresholds, then corresponding recommendations can be output for the efficiency and/or safety issues. 
     The management server  104  can perform route optimization. For example, the management server  104  fuel purchasing. The management server  104  can use the data regarding vehicles, geolocation data regarding the vehicles, the vehicle fuel/energy efficiency, driving behavior, and/or fuel level, to make routing recommendations for fuel stops. An example recommendation can indicate that after a delivery a vehicle should fuel at a particular gas station because, based on data from fuel card vendors, that the particular gas station may not be cheapest, but the vehicle may not have to make a left turn in or out and it will get the vehicle back on the route without adding significant stop time. 
     At block  542 , a report can be generated. In particular, the management server  104  can generate reports that correspond to any of the user interfaces described herein. At block  546 , interactive graphical user interfaces can be generated. In particular, the management server  104  can generate user interfaces that correspond to or are similar to any of the user interfaces described herein, such as the user interfaces described in further detail below with respect to  FIGS. 6, 7A-7C, 8A-8B, 9, 10A-10B, 11, 12, and 13 . At block  548 , user input can be received and the graphical user interfaces can update. In particular, the management server  104  can generate update user interfaces in response to receiving user input, such as user selections and/or filters. 
     At block  552 , alerts can be generated. In particular, the management server  104  can generate alerts related to vehicle metrics. For example, the management server  104  can generate alerts related to fuel/energy state, such as low fuel/battery charge and/or a completion or expected completion of a battery recharge. In some embodiments, the alerts can be user defined. 
     VIII. Example Monitoring and Data Analysis Graphical User Interfaces 
       FIGS. 6, 7A-7C, 8A-8B, 9, 10A-10B, 11, 12, and 13  illustrate example interactive graphical user interfaces related to monitoring and analysis of data from vehicle gateway devices, according to various embodiments of the present disclosure. The interactive graphical user interfaces of  FIGS. 6, 7A-7C, 8A-8B, 9, 10A-10B, 11, 12, and 13  may be provided by the management server  140 , and may be accessible via user device(s)  120 . In general, received data and analysis data are automatically gathered from multiple vehicle gateway devices  150  by the management server  140  (as described herein), and the received data and analysis data may then be further aggregated and analyzed to provide information and insights as described herein. Typically, the graphical user interfaces provided by the management server  140  are specific to an organization, and may include information from multiple vehicle gateway devices  150  associated with the organization. 
       FIG. 6  illustrates an example interactive graphical user interface  600  for searching/presenting vehicles and/or associated vehicle metadata. The graphical user interface  600  can include search areas  602 ,  603 , vehicle results  604 , and a map  605 . A user can search for vehicle(s) using the search areas  602 ,  603  by specifying text and/or filters. The map  605  can include annotations  606 ,  608 ,  610 ,  612  that correspond to results from the vehicle results  604 . User selections, such as user input provided to the search areas  602 ,  603 , can cause the vehicle results  604  and/or the map  605  to dynamically update. In particular, in response to user selection(s), the map can zoom-in on the filtered results. In some embodiments, an element associated with a vehicle in the graphical user interface  600  is selectable and can cause presentation of a vehicle-specific user interface, such as the graphical user interface  700  described below with respect to  FIG. 7A . 
       FIG. 7A  illustrates an example interactive graphical user interface  700  for presenting vehicle metadata for a particular vehicle. As described herein, a vehicle gateway device can transmit vehicle metadata, such as metrics and/or location data, to the management server  104 , which can cause presentation of the graphical user interface  700  that can include or be based on the metadata. The graphical user interface  700  can include vehicle metadata  704 . The graphical user interface  700  can include an image  702  captured from a camera in the vehicle. The graphical user interface  700  can include a map  710 . The map  710  can be based on the location data received from the vehicle gateway device of the vehicle. The map  710  can display route(s)  712  of the vehicle. The graphical user interface  700  can include visualizations based on the vehicle metric(s), such as the visualization  708 . The visualization  708  can visually depict a graph for the state of charge metric over a period of time. A user can change the metric associated with the visualization  708  with the metric selector  707 , which can cause the visualization  708  to update accordingly. A user can select a particular date/time range of interest with the interface selector(s)  706  and may select how at least some of the data associated the vehicle should be aggregated (e.g., day, week, month, etc.) and presented within the graphical user interface  700 . Using the interface selector(s)  706 , the user may determine whether the displayed data is live data, and may select to view live, constantly updated data being received from the vehicle. As depicted, additional interface selector(s)  706  can allow a user to select a particular operator of the vehicle, which can cause graphical user interface  700  to update accordingly. 
       FIGS. 7B-7C  illustrate example visualizations of battery charge metrics, which can be included in graphical user interfaces. In  FIG. 7B , the visualization  720  includes a graph  722  that represents a vehicle battery&#39;s charge over time, as indicated by the vehicle metrics from the vehicle gateway device. As described herein, in some cases, the vehicle gateway device may be unable to accurately report a vehicle&#39;s battery charge while the vehicle is charging because the vehicle may be in an off state. Accordingly, the visualization  720  and the graph  722  can be generated by a system that does not have estimation features enabled and is reporting the most recent battery charge data as transmitted by the vehicle gateway device. As depicted, the graph  722  has a flat line and then suddenly and sharply increases in value. The sudden increase in value in the graph  722  can correspond to when the vehicle stopped charging and/or the vehicle was turned on again, which allowed the vehicle gateway device to transmit an updated vehicle charge metric. 
     In  FIG. 7C , the visualization  730  includes a graph  732  that represents an estimated vehicle battery&#39;s charge over time. As mentioned above, the visualization  730  can be included in a graphical user interface. For example, the visualization  730  of  FIG. 7C  can be presented in the graphical user interface  700  and can replace the visualization  708  of  FIG. 7A . In contrast with the graph  722  of  FIG. 7B  that included a sudden increase in charge value when the battery metric became available, the graph  732  of  FIG. 7C  can more accurately represent a vehicle charge because the server can estimate the graph  732  from historical data, as described herein. 
       FIG. 7D  illustrates another example interactive graphical user interface  740  for presenting vehicle metadata for a particular vehicle. The graphical user interface  740  of  FIG. 7D  can be similar to the graphical user interface  700  described above with respect to  FIG. 7A . However, in addition or alternative to the information and/or elements presented in the graphical user interface  700  of  FIG. 7A , the graphical user interface  740  of  FIG. 7D  can present information and/or elements associated with a charging state and/or state of charge value for the vehicle battery. For example, the graphical user interface  740  of  FIG. 7D  can present visual representation(s)  742 ,  744  of an indication of the charging state of the battery, such as the vehicle battery currently being charged. As shown, the visual representation(s)  742 ,  744  can be an icon, graphic, and/or text indicating that the vehicle battery is currently being charged. In the case of the vehicle battery not being charged, while not shown, the graphical user interface  740  can present an icon, graphic, and/or text that indicates to the user that the vehicle battery is not being charged. The graphical user interface  740  of  FIG. 7D  can present a visual representation  746  for the state of charge value for the battery (here “61%”). Additionally or alternatively, while not shown, a visual representation for the state of charge value for the battery can be a graphic illustrating a percentage of the battery charge. 
       FIGS. 8A-8B  illustrate example interactive graphical user interfaces related to driver efficiency. In  FIG. 8A , the graphical user interface  800  includes a vehicle metric summary area  802 . The vehicle metric summary area  802  can include vehicle metrics, which can be based on aggregated and/or filtered data. As described herein, the vehicle metrics can be aggregated and/or filtered by driver and/or for a particular time period. For example, the first set of vehicle metrics  804  in the vehicle metric summary area  802  can be associated with a first driver, such as the driver “1” here. 
     The vehicle metrics in the vehicle metric summary area  802  can be associated with fuel/energy efficiency and/or safety. As depicted, the vehicle metrics can be associated with cruise control, coasting, the accelerator pedal, idling, anticipation, and RPM range(s) (e.g., “GREEN BAND DRIVING.” The vehicle metrics in the vehicle metric summary area  802  can be fuel/energy efficiency and/or safety indicators. The vehicle metrics  804  can include percentages, which can indicate an amount of use of those particular features. For example, the first set of vehicle metrics  804  can include percentages, such as “13.7%,” that indicates that a driver (here driver “1”) used cruise control 13.7% of the time over the specified time period. 
     In  FIG. 8B , the graphical user interface  850  can be similar to the graphical user interface  800  of  FIG. 8A . Similar to the vehicle metric summary area  802  of  FIG. 8A , the vehicle metric summary area  832  can include vehicle metrics and the vehicle metrics can be aggregated and/or filtered for a particular driver and/or for a particular time period. However, the vehicle metrics in  FIG. 8B  can be represented differently than the metrics in  FIG. 8A . The vehicle metrics in the vehicle metric summary area  832  can include fuel/energy efficiency and/or safety indicators, a fuel/energy efficiency score for a particular driver, and/or an overall fuel/energy efficiency score for multiple drivers. For each of the vehicle metrics (such as cruise control, coasting, engine torque, idling, anticipation, and RPM range(s)), a fuel/energy efficiency and/or safety indicators can be assigned. As depicted, example indicators can be represented as a letter. While a letter for a score is used in  FIG. 8B , other score representations can be used by the system. In some embodiments, a percentage and/or other numeric value for a vehicle metric can be determined for the results, and the percentage and/or or other numeric value within a range or threshold can be assigned an indicator, such as a score/letter. With reference to the first set of vehicle metrics  834 , a fuel/energy efficiency score  836  can represent a combined score for a particular driver, where the score  836  can be based on the first set of vehicle metrics  834 , as described herein. 
     In  FIG. 8B , the graphical user interface  850  can further include aggregated vehicle metrics  840  and a fuel/energy efficiency score  838  for multiple drivers. The aggregated vehicle metrics  840  can be an aggregation of metrics for multiple drivers. Similarly, the fuel/energy efficiency score  838  can be a score for multiple drivers and/or can be based on the aggregated vehicle metrics  840 . 
       FIG. 9  illustrates an example interactive graphical user interface  900  for analyzing vehicle fuel/energy usage. The graphical user interface  900  includes a fuel/energy usage summary area  902 , which can include metrics related to fuel/energy usage. The fuel/energy usage metrics in the fuel/energy usage summary area  902  can be based on aggregated and/or filtered data. As described herein, the fuel/energy usage metrics can be aggregated and/or filtered by vehicle and/or for a particular time period. For example, the first set of fuel/energy usage metrics  904  in the fuel/energy usage summary area  902  can be associated with a first vehicle, such as the vehicle “14783” here. As depicted, example fuel/energy usage metrics can be related to fuel consumed, energy consumed, percentage of electric driving, total distance driven, carbon emissions, and/or fuel economy, such as effective miles per gallon. 
       FIGS. 10A-10B  illustrate example interactive graphical user interfaces for analyzing vehicle charging. In  FIG. 10A , the graphical user interface  1000  includes a vehicle charging summary area  1002 , which can include summary metrics related to vehicle charging. The charging summary metrics in the vehicle charging summary area  1002  can be based on aggregated and/or filtered data. As described herein, the charging summary metrics can be aggregated and/or filtered by vehicle and/or for a particular time period. For example, the first set of charging summary metrics  1004  in the vehicle charging summary area  1002  can be associated with a first vehicle, such as the vehicle “14783” here. As depicted, example charging summary metrics can be related to number of charges, a statistical measure of charge time (such as average charge time), and/or an amount of energy charged (such as a total kilowatt-hour (kWh) charged). In some embodiments, portions of the vehicle charging summary area  1002  are selectable. For example, an element associated with a vehicle, such as the “14783” text or the “34873” text, can be selected by a user, which can cause the user interface to update and display details regarding charge events associated with the respective vehicle, which can be described in further detail below with respect to  FIG. 10B . 
     In  FIG. 10B , the graphical user interface  1050  includes a vehicle charging summary area  1052 . The vehicle charging summary area  1052  can include depictions of charge events, which can be based on aggregated and/or filtered data. As described herein, each charge event can be stored as a charge record in a database. The charge events can be aggregated and/or filtered by vehicle and/or for a particular time period. For example, the charge events in the vehicle charging summary area  1052  can be for a particular vehicle, such as the vehicle “34873” here. Each charge event in the vehicle charging summary area  1052  can include information such as a start state of charge, an end state of charge, a last charge, a start time, an end time, and/or a duration. 
       FIG. 11  illustrates an example interactive graphical user interface  1100  for analyzing vehicle fuel/energy usage. The graphical user interface  1100  of  FIG. 11  can be similar to the graphical user interface  900  of  FIG. 9  for analyzing vehicle fuel/energy usage. The graphical user interface  1100  includes a fuel/energy usage summary area  1102 , which can include metrics related to fuel/energy usage. The fuel/energy usage metrics in the fuel/energy usage summary area  1102  can be aggregated and/or filtered by vehicle and/or for a particular time period. As depicted, example fuel/energy usage metrics can be related to an amount of electric driving, energy consumed, energy recovered, fuel economy (such as effective miles per gallon), and/or emissions saved. 
       FIGS. 12 and 13  illustrate example interactive graphical user interfaces for analyzing route efficiency and/or fuel/energy usage. In  FIG. 12 , the graphical user interface  1200  includes a fuel/energy summary area  1202 , which can include metrics related to fuel/energy usage. The graphical user interface  1200  of  FIG. 12  can be similar to the graphical user interface  1100  of  FIG. 11  for analyzing vehicle fuel/energy usage. However, a difference between the graphical user interface  1200  of  FIG. 12  and the graphical user interface  1100  of  FIG. 11  can be the characteristic upon which vehicle metrics are aggregated. The fuel/energy usage metrics in the fuel/energy summary area  1202  can be aggregated and/or filtered by route (instead of vehicle) and/or for a particular time period. For example, the first set of fuel/energy metrics  1204  in the fuel/energy summary area  1202  can be associated with a first route, such as the “Line A” route here. As depicted, example fuel/energy efficiency and/or usage metrics can be related to cruise control (such as a number of times cruise control was used during a run on that route), number of runs, a statistical measure of energy consumed (such as an average), a statistical measure of energy recovered (such as an average), and/or a statistical measure of emissions saved (such as an average). 
     In the graphical user interface  1200 , the element  1206  for a particular route (here Line A) can be selectable. User selection of the element  1206  can cause presentation of a route-specific user interface, such as the graphical user interface  1300  described below with respect to  FIG. 13 . 
     In  FIG. 13 , the graphical user interface  1300  includes a fuel/energy visualization area  1302  and a fuel/energy summary area  1304 , which can include metrics related to fuel/energy usage for a particular route. The fuel/energy visualization area  1302  and/or the fuel/energy summary area  1304  can include vehicle metrics, which can be based on aggregated and/or filtered data. As described herein, the vehicle metrics can be aggregated and/or filtered by vehicle, for a particular route, and/or for a particular time period. For example, fuel/energy visualization area  1302  can include one or more graphs that depict a statistical measure of fuel/energy usage per vehicle over time for a particular route. As another example, with respect to the fuel/energy summary area  1304 , the first set of fuel/energy summary metrics  1306  can be associated with a first vehicle on the particular route, such as the vehicle “14783” here on the “Line A” route. As depicted, example fuel/energy usage metrics per vehicle on a particular route can be related to number of runs, a statistical measure of energy consumed (such as an average), a statistical measure of energy recovered (such as an average), and/or a statistical measure of emissions saved (such as an average). 
     IX. Example Methods and Functionality for Vehicle Battery Charge Estimation 
       FIG. 14  is a flowchart illustrating example methods and functionality for vehicle battery charge estimation. The flowchart of  FIG. 14  can be similar to the flowcharts of  FIGS. 5A-5B  that are related to processing vehicle-related data and using the processed data. 
     Beginning at block  1402 , vehicle battery data can be received. In particular, a computing device (such as the management server  140 ) can receive vehicle battery data from the vehicle gateway device  150 . In some embodiments, the management server  140  can receive vehicle battery data, such as charge records associated with a battery from the vehicle. Example vehicle battery data (such as charge records) can include: (i) a start state of charge, (ii) an end state of charge, and (iii) an amount of energy charged. Example depictions of charge records can be shown in  FIG. 10B . Additional example vehicle battery data (such as charge records) can include: (i) data indicative of an amount of energy charged relative to a capacity of the battery and (ii) an amount of energy charged relative to a period of time. The start and end state of charges can be represented as a percentage. Similarly, data indicative of an amount of energy charged relative to a capacity of the battery can be represented as a percentage. An amount of energy charged and/or an amount of energy charged relative to a period of time can in a unit of energy, such as a kilowatt-hour (kWh). In some embodiments, the vehicle gateway device  150  can determine the charge records. As described herein, some vehicle computers are turned off while charging and it may not be possible to receive charge information in substantially real-time. Accordingly, the management server  140  can receive vehicle battery data that is historical and represents previous charge event(s). 
     In some embodiments, the vehicle battery data can be in a less processed format than a charge record format. For example, instead of a charge record, the vehicle battery data can be in a format closer to what the vehicle gateway device  150  receives from a battery management system (BMS). Accordingly, the management server  140  can process the vehicle battery data as described below with respect to the next block  1404 . 
     At block  1404 , the vehicle battery data can be processed. In particular, the management server  140  can process the vehicle battery data. For example, processing by the management server  140  can include storing the vehicle battery data in the analysis-related database  256 . Additionally or alternatively, the management server  140  can determine (i) a start state of charge, (ii) an end state of charge, and (iii) an amount of energy charged, (iv) data indicative of an amount of energy charged relative to a capacity of the battery, and/or (v) an amount of energy charged relative to a period of time from the vehicle battery data. As described herein, processing vehicle data can include processing of bucketed data. 
     At block  1406 , it can be determined whether a state of charge request has been received. In particular, the management server  104  can determine whether a state of charge request has been received. A user computing device  120  can cause a state of charge request to be sent to the management server  140 . For example, a user computing device  120  that requests the graphical user interface  700  of  FIG. 7A , described above, can cause a state of charge request to be received by the management server  140  because the graphical user interface  700  can include a state of charge metric. An example state of charge request can be for a particular vehicle and for a particular time period. As depicted, if a state of charge request has not been received, the method can return to block  1402  to receive vehicle battery data in a loop over time, which can be from multiple vehicles. If a state of charge request has been received, the method can proceed to block  1408 . 
     At block  1408 , it can be determined whether the requested charge data is available. In particular, the management server  140  can determine whether the requested charge data is available. As described herein, a vehicle computer can be turned off while a vehicle is charging and it may not be possible for the vehicle gateway device  150  to receive a current state of charge from the vehicle&#39;s battery management system. Accordingly, while the vehicle gateway device is unable to transmit vehicle battery data associated with the current charge of the battery, a user computer device  120  can request the current state of charge of the battery and the method can proceed to subsequent blocks  1410 ,  1412 ,  1414 ,  1416 ,  1418 ,  1420 . In particular, if a state of charge request for a current state of charge request is sent while the current state of charge is unavailable, then the method can proceed to the next block  1410 . Conversely, charge data can be available if, for example, the vehicle computer is turned on or the state of charge request is for a historical state of charge and the historical data is available. If the charge data is available, then the method can proceed to block  1420 . 
     At block  1410 , a charge estimate function can be determined. In particular, the management server  140  can determine a charge estimate function. An example charge estimate function can output an estimated current state of charge based on historical vehicle battery data. In some embodiments, the management server  140  can determine a customized charge estimate function, which is customized for a particular vehicle/battery. For example, the estimated current state of charge of a battery can be based on historical vehicle battery data from the same battery. Example input to a charge estimate function can include an approximate start time for a current charge of the battery, a last state of charge for the battery, and/or a current time. Example output of a charge estimate function can include one or more state of charge values over a period of time. An example charge estimate function can also be used by the management server  140  to determine an expected time when the vehicle battery will reach a certain state of charge. 
     In some embodiments, the management server  140  can determine a charge estimate function from one or more charge records that indicate (i) a start state of charge, (ii) an end state of charge, and (iii) an amount of energy charged, (iv) data indicative of an amount of energy charged relative to a capacity of the battery, and/or (v) an amount of energy charged relative to a period of time from the vehicle battery data. A charge estimate function based on one or more charge records can define a linear function with an equation substantially similar to y=mx+b. For example, a linear equation can be determined from a start state of charge, an end state of charge, and an amount of energy charged over a period of time. Similarly, a linear equation can be determined data from (i) an amount of energy charged relative to a capacity of the battery and (ii) an amount of energy charged relative to a period of time. The management server  140  can determine a charge estimate function from multiple charge records by combining multiple charge records, such as by taking an average, a weighted average, or a decaying average based on the age of the charge record. 
     Additionally or alternatively, the management server  140  can determine a polynomial charge estimate function from one or more charge records. The historical vehicle battery data can include multiple data points, such as time series data for a charge event. The management server  140  can apply curve-fitting techniques to the multiple data points to generate an estimated polynomial function. 
     At block  1412 , input data can be received. In particular, the management server  140  can receive input data. Example input data can be included in the charge state request. In particular, example input data can include an approximate start time for a current charge of the battery, a last state of charge for the battery, and/or a current time. 
     At block  1414 , a state of charge can be estimated. In particular, the management server  140  can estimate a state of charge using the charge estimate function. The management server  140  can use at least some the initialization data as input to the charge estimate function to output a state of charge. Thus, while a vehicle computer is off/while the vehicle gateway device is unable to transmit vehicle battery data associated with the requested state of charge of the battery, the management server  140  can estimate a state of charge (such as a percentage) and/or state of charge over time (such as a graph) for the vehicle battery. As described herein, an example charge estimate function can be a linear or a polynomial function, which can output one or more states of charge based on the input and/or can be used to determine an estimated completion time or a time when the battery will reach a particular charge level. As described herein, an example charge estimate function can be customized for a particular vehicle/battery. 
     At block  1416 , it can be determined whether an alert for the fleet, cohort, vehicle, battery, and/or charge event exists. In particular, the management server  140  can determine whether an applicable alert for the fleet, cohort, vehicle, battery, and/or charge event exists. In some embodiments, a user can define an alert for the fleet, cohort, vehicle, battery, and/or charge event. If an alert is applicable, the management server  140  can apply a charge alert condition to determine if an alert should be sent. An example charge alert condition can include a threshold state of charge for the battery that would cause the example charge alert condition to be satisfied. In other words, determining that the charge alert condition is satisfied can include identifying that the current state of charge is above a predefined charge level threshold. Thus, if a current estimated charge of the battery satisfies the charge alert condition based on the current time, the method can proceed to block  1418 . At block  1418 , an alert can be sent. In particular, the management server  140  can transmit an alert to the user computing device  120 , such as an in-application alert, an email, a text message, etc. If the alert condition has not been satisfied, the method can return back to block  1412  to receive updated input data, such as an updated current time, which can cause the alert condition to be checked in a loop until the condition is satisfied or some other exit condition occurs. 
     At block  1420 , charge data can be presented. In particular, the management server  140  can cause presentation of the charge data (such as a state of charge) in a report and/or a graphical user interface. Example output graphical user interfaces and/or visualizations of charge data are described in further detail above with respect to  FIGS. 7A, 7C . The management server  140  can cause presentation of a visualization of the state of charge and/or the graph in a report and/or graphical user interface. 
     X. Example Methods and Functionality for Vehicle Battery Charge Determination 
       FIG. 15  is a flowchart illustrating example methods and functionality for vehicle battery charge determination. The flowchart of  FIG. 15  can be similar to and/or used in conjunction with the flowcharts of  FIGS. 4A-4B  related to data processing by a vehicle gateway device  150 . Some aspects of the flowchart of  FIG. 15  can also be similar to the flowcharts of  FIGS. 5A-5B  that are related to processing vehicle-related data and using the processed data. 
     Beginning at block  1502 , vehicle bus messages can be received. In particular, the vehicle gateway device  150  can receive the vehicle bus messages. The vehicle gateway device  150  can receive the vehicle bus messages via a vehicle interface  326  with a vehicle  110 , which is an electric vehicle in this case. The block  1502  of  FIG. 15  for receiving vehicle bus messages can be similar to the block  402  of  FIG. 4A  for receiving raw vehicle data. For example, the vehicle bus messages received by the vehicle gateway device  150  from the vehicle  110  can use a particular communication protocol, such as OBD-II or J1939. A vehicle bus message can include a communication bus address, such as a CAN address and/or a source address of the vehicle bus message. As described herein, electronic controllers in a vehicle  110  can be turned off. For example, some electronic controllers (such as an ECU) can be in an off state before and during some time an electric vehicle is charging. However, when a charger and/or power source is connected to an electric vehicle, the electronic controller(s) can change to an on state for some time and transmit the vehicle bus messages. At block  1504 , the vehicle bus messages can be processed. For example, vehicle gateway device  150  can decode and/or translate the vehicle bus messages. The block  1504  of  FIG. 15  for processing vehicle bus messages can be similar to the block  404  of  FIG. 4A  for processing raw vehicle data. 
     At block  1506 , it can be determined whether a received vehicle bus message is indicative of a vehicle battery being in a charging state. In particular, the vehicle gateway device  150  can analyze a vehicle bus message for such indicia. In response to initiation or cancellation of vehicle battery charging (such as a charger being connected or disconnected), an electronic controller can generate repeatable and predictable communication bus traffic (such as messages being sent from a particular communication bus address). Thus, as described herein, the vehicle gateway device  150  can detect the presence or lack of presence of one or more types of vehicle bus messages as indicia that the vehicle battery charging has been initiated or cancelled. The vehicle gateway device  150  can identify, from the vehicle bus messages, a particular vehicle bus message. In particular, the vehicle gateway device  150  can determine that a type of the vehicle bus message matches a particular vehicle bus message type, which can indicate a potential initiation of charging of a battery of the electric vehicle  110 . An example of the vehicle gateway device  150  determining that the type of the vehicle bus message matches a particular vehicle bus message type can include the vehicle gateway device  150  identifying that the vehicle bus message includes a particular communication bus address. In some embodiments, the particular communication bus address can be the address for the vehicle&#39;s battery control module and/or battery management system. The vehicle gateway device  150  can be configured to detect different indicia based on the type of the vehicle  110 . For example, the address can differ based on the type of vehicle  110 , such as the make, model, and/or year of the vehicle  110 . Thus, in some embodiments, the vehicle gateway device  150  can conditionally search for a different address based on the type of the vehicle  110 . If it has been determined that a received vehicle bus message is indicative of a vehicle battery being in a charging state, the method can proceed to block  1508  for executing the diagnostic service  342 . Otherwise, the method can return to block  1502  to wait to receive more vehicle bus messages and perform in a loop until a vehicle bus message is received with the appropriate indicia. 
     At block  1508 , a diagnostic service  342  can be executed. In particular, the vehicle gateway device  150  can execute the diagnostic service  342 . The diagnostic service  342  can be configured to execute and to receive, via the vehicle interface  326 , diagnostic data regarding the electric vehicle  110 . As described herein, execution of the diagnostic service  342  can use a substantial amount of power. Thus, it can be advantageous to execute the diagnostic service  342  at opportune times, as described herein. In some embodiments, execution of the diagnostic service  342  can include changing the state of the diagnostic service  342 . For example, the diagnostic service  342  can operate in a sleep mode, which uses relatively low amounts of power. The vehicle gateway device  150  can execute the diagnostic service  342  by causing the service to wake and switch to a greater power consuming mode. 
     In particular, the diagnostic service  342  can receive diagnostic data. In some embodiments, the diagnostic service  342  can issue queries to the car&#39;s electronic controllers via the vehicle interface  326  to receive diagnostic data. Additionally or alternatively, the diagnostic service  342  can passively receive diagnostic data from electronic controllers. Example diagnostic data can include a current amperage data for the vehicle&#39;s battery. Additional example diagnostic data can also include a state of charge for the vehicle&#39;s battery. The diagnostic service  342  receiving diagnostic data can be similar to the block  404  of  FIG. 4A  for processing raw vehicle data. 
     At block  1510 , a charge state of the vehicle battery can be determined. In particular, the vehicle gateway device  150  can use the diagnostic data from the diagnostic service  342  to confirm a charging state of the battery, such as the vehicle battery being currently charged. In some embodiments, an electronic controller of the vehicle  110  may report a non-zero amperage in the diagnostic data. Moreover, the electronic controller of the vehicle  110  may report an amperage above a particular value threshold when charging of the vehicle battery has been initiated. If it has been confirmed that the vehicle battery is in a charging state, the method can proceed to block  1512  to process the diagnostic data. Otherwise, the method can proceed to block  1520  to disable the diagnostic service  342 . 
     At block  1512 , the diagnostic data can be processed. In particular, the vehicle gateway device  150  can process the diagnostic data. The vehicle gateway device  150  can transmit an indication of the charging state of the battery to the management server  140 . In some embodiments, the vehicle gateway device  150  can determine a state of charge value from the vehicle battery. The vehicle gateway device  150  can log the state of charge value of the vehicle battery. The vehicle gateway device  150  can transmit the state of charge value of the battery to the management server  140 . 
     At block  1513 , the diagnostic data can be used. In particular, the management server  140  can use the transmitted diagnostic data. For example, the management server  140  can cause presentation of a graphical user interface with vehicle battery data, such as the graphical user interface  740  describe above with respect to  FIG. 7D . In particular, the management server  140  can present, in a graphical user interface, a visual representation of the indication of the charging state of the battery. Additionally or alternatively, the management server  140  can present, in a graphical user interface, one or more visual representations for (i) the indication of the charging state of the battery and (ii) the state of charge value for the battery. Additional uses of the diagnostic data are described herein, such as with respect to  FIGS. 5A and 5B  described above. Accordingly, the management server  140  can use the diagnostic data in substantially real-time. 
     At block  1514 , it can be determined whether charging has been cancelled. In particular, the vehicle gateway device  150  can identify a charging cancellation event. A charging cancellation event can correspond to a charger being disconnected from the vehicle  110 . In some embodiments, identifying a charging cancellation event by the vehicle gateway device  150  can include determining, from diagnostic data, that a charge value for the battery is less than a threshold charge value. Additionally or alternatively, identifying a charging cancellation event by the vehicle gateway device  150  can include receiving multiple charge values for the battery over time and determining that a threshold quantity of the charge values are each less than a threshold charge value. For example, if N consecutive charge events are each less than a threshold charge value, then the gateway device  150  can identify a charging cancellation event. Additionally or alternatively, identifying a charging cancellation event by the vehicle gateway device  150  can include calculating that an elapsed time satisfies a threshold period of time and determining that, during the elapsed time that satisfies the threshold period of time, a charging or battery associated message has not been received. Example charging or battery associated messages can include a message with a non-zero amperage value and/or a message with a state of charge value for the battery. If a charging cancellation event has been determined, the method can proceed to block  1518  to process the cancellation. Otherwise, the method can return to block  1512  to process additional diagnostic data. 
     As described, the method can operate in a loop to process the diagnostic data. Accordingly, until a charging cancellation event is identified, the vehicle gateway device  150  can operate in a loop to determine a current state of charge value for the battery and log the current state of charge value. In some embodiments, the vehicle gateway device  150  can transmit the current state of charge value for the battery to the management server  140 . 
     At block  1518 , a charging cancellation event can be processed. In particular, the vehicle gateway device  150  can log the charging cancellation event. In some embodiments, the vehicle gateway device  150  can transmit, to the management server  140 , a charging cancellation indication. 
     At block  1520 , the diagnostic service  342  can be disabled. In particular, the vehicle gateway device  150  can disable the diagnostic service  342  to conserve power. In some embodiments, disabling the diagnostic service  342  can cause the diagnostic service  342  to enter a sleep mode. Accordingly, either the method determined at block  1510  that charging was not in progress and disabled the diagnostic service  342  or a charging cancellation event was determined at block  1514  and, again, the diagnostic service  342  was disabled. Thus, the method can efficiently execute and disable the diagnostic service  342  to determine vehicle charging status without draining the vehicle battery. As shown, the method can return to block  1502  to operate in a loop and receive further vehicle bus messages. 
     XI. Additional Implementation Details and Embodiments 
     Various embodiments of the present disclosure may be a system, a method, and/or a computer program product at any possible technical detail level of integration. The computer program product may include a computer readable storage medium (or mediums) having computer readable program instructions thereon for causing a processor to carry out aspects of the present disclosure. 
     For example, the functionality described herein may be performed as software instructions are executed by, and/or in response to software instructions being executed by, one or more hardware processors and/or any other suitable computing devices. The software instructions and/or other executable code may be read from a computer readable storage medium (or mediums). 
     The computer readable storage medium can be a tangible device that can retain and store data and/or instructions for use by an instruction execution device. The computer readable storage medium may be, for example, but is not limited to, an electronic storage device (including any volatile and/or non-volatile electronic storage devices), a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing. A non-exhaustive list of more specific examples of the computer readable storage medium includes the following: a portable computer diskette, a hard disk, a solid state drive, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a static random access memory (SRAM), a portable compact disc read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon, and any suitable combination of the foregoing. A computer readable storage medium, as used herein, is not to be construed as being transitory signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission media (e.g., light pulses passing through a fiber-optic cable), or electrical signals transmitted through a wire. 
     Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network. The network may comprise copper transmission cables, optical transmission fibers, wireless transmission, routers, firewalls, switches, gateway computers, and/or edge servers. A network adapter card or network interface in each computing/processing device receives computer readable program instructions from the network and forwards the computer readable program instructions for storage in a computer readable storage medium within the respective computing/processing device. 
     Computer readable program instructions (as also referred to herein as, for example, “code,” “instructions,” “module,” “application,” “software application,” and/or the like) for carrying out operations of the present disclosure may be assembler instructions, instruction-set-architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state-setting data, configuration data for integrated circuitry, or either source code or object code written in any combination of one or more programming languages, including an object oriented programming language such as Java, C++, or the like, and procedural programming languages, such as the “C” programming language or similar programming languages. Computer readable program instructions may be callable from other instructions or from itself, and/or may be invoked in response to detected events or interrupts. Computer readable program instructions configured for execution on computing devices may be provided on a computer readable storage medium, and/or as a digital download (and may be originally stored in a compressed or installable format that requires installation, decompression or decryption prior to execution) that may then be stored on a computer readable storage medium. Such computer readable program instructions may be stored, partially or fully, on a memory device (e.g., a computer readable storage medium) of the executing computing device, for execution by the computing device. The computer readable program instructions may execute entirely on a user&#39;s computer (e.g., the executing computing device), partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user&#39;s computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). In some embodiments, electronic circuitry including, for example, programmable logic circuitry, field-programmable gate arrays (FPGA), or programmable logic arrays (PLA) may execute the computer readable program instructions by utilizing state information of the computer readable program instructions to personalize the electronic circuitry, in order to perform aspects of the present disclosure. 
     Aspects of the present disclosure are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the disclosure. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer readable program instructions. 
     These computer readable program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. These computer readable program instructions may also be stored in a computer readable storage medium that can direct a computer, a programmable data processing apparatus, and/or other devices to function in a particular manner, such that the computer readable storage medium having instructions stored therein comprises an article of manufacture including instructions which implement aspects of the function/act specified in the flowchart(s) and/or block diagram(s) block or blocks. 
     The computer readable program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device to cause a series of operational steps to be performed on the computer, other programmable apparatus or other device to produce a computer implemented process, such that the instructions which execute on the computer, other programmable apparatus, or other device implement the functions/acts specified in the flowchart and/or block diagram block or blocks. For example, the instructions may initially be carried on a magnetic disk or solid state drive of a remote computer. The remote computer may load the instructions and/or modules into its dynamic memory and send the instructions over a telephone, cable, or optical line using a modem. A modem local to a server computing system may receive the data on the telephone/cable/optical line and use a converter device including the appropriate circuitry to place the data on a bus. The bus may carry the data to a memory, from which a processor may retrieve and execute the instructions. The instructions received by the memory may optionally be stored on a storage device (e.g., a solid state drive) either before or after execution by the computer processor. 
     The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present disclosure. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of instructions, which comprises one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the blocks may occur out of the order noted in the Figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. In addition, certain blocks may be omitted in some implementations. The methods and processes described herein are also not limited to any particular sequence, and the blocks or states relating thereto can be performed in other sequences that are appropriate. 
     It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts or carry out combinations of special purpose hardware and computer instructions. For example, any of the processes, methods, algorithms, elements, blocks, applications, or other functionality (or portions of functionality) described in the preceding sections may be embodied in, and/or fully or partially automated via, electronic hardware such application-specific processors (e.g., application-specific integrated circuits (ASICs)), programmable processors (e.g., field programmable gate arrays (FPGAs)), application-specific circuitry, and/or the like (any of which may also combine custom hard-wired logic, logic circuits, ASICs, FPGAs, etc. with custom programming/execution of software instructions to accomplish the techniques). 
     Any of the above-mentioned processors, and/or devices incorporating any of the above-mentioned processors, may be referred to herein as, for example, “computers,” “computer devices,” “computing devices,” “hardware computing devices,” “hardware processors,” “processing units,” and/or the like. Computing devices of the above-embodiments may generally (but not necessarily) be controlled and/or coordinated by operating system software, such as Mac OS, iOS, Android, Chrome OS, Windows OS (e.g., Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10, Windows Server, etc.), Windows CE, Unix, Linux, SunOS, Solaris, Blackberry OS, VxWorks, or other suitable operating systems. In other embodiments, the computing devices may be controlled by a proprietary operating system. Conventional operating systems control and schedule computer processes for execution, perform memory management, provide file system, networking, I/O services, and provide a user interface functionality, such as a graphical user interface (“GUI”), among other things. 
     As described above, in various embodiments certain functionality may be accessible by a user through a web-based viewer (such as a web browser), or other suitable software program. In such implementations, the user interface may be generated by a server computing system and transmitted to a web browser of the user (e.g., running on the user&#39;s computing system). Alternatively, data (e.g., user interface data) necessary for generating the user interface may be provided by the server computing system to the browser, where the user interface may be generated (e.g., the user interface data may be executed by a browser accessing a web service and may be configured to render the user interfaces based on the user interface data). The user may then interact with the user interface through the web-browser. User interfaces of certain implementations may be accessible through one or more dedicated software applications. In certain embodiments, one or more of the computing devices and/or systems of the disclosure may include mobile computing devices, and user interfaces may be accessible through such mobile computing devices (for example, smartphones and/or tablets). 
     Many variations and modifications may be made to the above-described embodiments, the elements of which are to be understood as being among other acceptable examples. All such modifications and variations are intended to be included herein within the scope of this disclosure. The foregoing description details certain embodiments. It will be appreciated, however, that no matter how detailed the foregoing appears in text, the systems and methods can be practiced in many ways. As is also stated above, it should be noted that the use of particular terminology when describing certain features or aspects of the systems and methods should not be taken to imply that the terminology is being re-defined herein to be restricted to including any specific characteristics of the features or aspects of the systems and methods with which that terminology is associated. 
     Conditional language, such as, among others, “can,” “could,” “might,” or “may,” unless specifically stated otherwise, or otherwise understood within the context as used, is generally intended to convey that certain embodiments include, while other embodiments do not include, certain features, elements, and/or steps. Thus, such conditional language is not generally intended to imply that features, elements and/or steps are in any way required for one or more embodiments or that one or more embodiments necessarily include logic for deciding, with or without user input or prompting, whether these features, elements and/or steps are included or are to be performed in any particular embodiment. 
     The term “substantially” when used in conjunction with the term “real-time” forms a phrase that will be readily understood by a person of ordinary skill in the art. For example, it is readily understood that such language will include speeds in which no or little delay or waiting is discernible, or where such delay is sufficiently short so as not to be disruptive, irritating, or otherwise vexing to a user. 
     Conjunctive language such as the phrase “at least one of X, Y, and Z,” or “at least one of X, Y, or Z,” unless specifically stated otherwise, is to be understood with the context as used in general to convey that an item, term, etc. may be either X, Y, or Z, or a combination thereof. For example, the term “or” is used in its inclusive sense (and not in its exclusive sense) so that when used, for example, to connect a list of elements, the term “or” means one, some, or all of the elements in the list. Thus, such conjunctive language is not generally intended to imply that certain embodiments require at least one of X, at least one of Y, and at least one of Z to each be present. 
     The term “a” as used herein should be given an inclusive rather than exclusive interpretation. For example, unless specifically noted, the term “a” should not be understood to mean “exactly one” or “one and only one”; instead, the term “a” means “one or more” or “at least one,” whether used in the claims or elsewhere in the specification and regardless of uses of quantifiers such as “at least one,” “one or more,” or “a plurality” elsewhere in the claims or specification. 
     The term “comprising” as used herein should be given an inclusive rather than exclusive interpretation. For example, a general purpose computer comprising one or more processors should not be interpreted as excluding other computer components, and may possibly include such components as memory, input/output devices, and/or network interfaces, among others. 
     While the above detailed description has shown, described, and pointed out novel features as applied to various embodiments, it may be understood that various omissions, substitutions, and changes in the form and details of the devices or processes illustrated may be made without departing from the spirit of the disclosure. As may be recognized, certain embodiments of the inventions described herein may be embodied within a form that does not provide all of the features and benefits set forth herein, as some features may be used or practiced separately from others. The scope of certain inventions disclosed herein is indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.