Subversion Repositories HomeAutomation

Rev

Rev 2284 | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
2047 arune 1
function RRD_Tool() {Log("\033[31mCall to RRD_Tool() can be removed from autostart.js!\033[0m\n");}
2
 
2048 arune 3
/* Declaration of static variables */
4
RRD_Tool_myInterval = null;
5
RRD_Tool_StoredData = null;
6
RRD_Tool_Timers = null;
7
/* Constant config name */
8
RRD_Tool_Config = "RRD_Tool_config";
9
 
2047 arune 10
function RRD_Tool_Init()
1770 linlun 11
{
2047 arune 12
    //Log("\033[33mRRD Tool updater starting...\033[0m");
1770 linlun 13
 
2042 arune 14
    var last_value_string = Storage_GetParameters(RRD_Tool_Config);
15
    RRD_Tool_StoredData = new Array();
16
    RRD_Tool_Timers = new Array();
1770 linlun 17
    for (var name in last_value_string)
18
    {
2042 arune 19
        RRD_Tool_StoredData[name] = eval("(" + last_value_string[name] + ")");
20
        Log("\033[33mFound: "+name+" with update rate of "+RRD_Tool_StoredData[name]["rrd"]["Period_s"]+"s.\033[0m");
21
        RRD_Tool_Timers[name] = Timer_SetTimer(function(timer) {RRD_Tool_timerUpdate(timer)}, RRD_Tool_StoredData[name]["rrd"]["Period_s"]*1000, true);
1770 linlun 22
    }
2047 arune 23
    //Log("\033[33mRRD Tool updater created.\033[0m");
1770 linlun 24
}
25
 
2048 arune 26
RRD_Tool_Init();
2042 arune 27
RRD_Tool_timerUpdate = function(timer)
1770 linlun 28
{
29
    var alias_string = Storage_GetParameters("LastValues");
2042 arune 30
    for (var name in RRD_Tool_Timers)
1770 linlun 31
    {  
2279 linlun 32
        if (RRD_Tool_Timers[name] == timer) {
2042 arune 33
            //Log("Timer: "+timer+", named: "+name+" with data: "+RRD_Tool_StoredData[name]["rrd"]["file"]+"\n");
1770 linlun 34
            /* Create command to execute...*/
35
            var names = "";
36
            var values = "N";
37
            var cmd = "/usr/bin/rrdtool update --template ";
38
            var first = 1;
2042 arune 39
            for (var label in RRD_Tool_StoredData[name]["rrdNames"])
1770 linlun 40
            {
41
                //Log("Found label: "+label+"\n");
2042 arune 42
                var data = eval("(" + alias_string[RRD_Tool_StoredData[name]["rrdNames"][label]["Module"]] + ")");
2284 linlun 43
                var datatype=RRD_Tool_StoredData[name]["rrdNames"][label]["data"];
2300 linlun 44
                if (typeof data[datatype] == 'undefined')
45
                {
46
                    //Log("\033[31mCould not find datatype: "+RRD_Tool_StoredData[name]["rrdNames"][label]["data"]+".\033[0m");
47
                    continue;
48
                }
49
                if (typeof data[datatype]["value"][RRD_Tool_StoredData[name]["rrdNames"][label]["value"]] == 'undefined')
50
                {
51
                    //Log("\033[33mwifipid: result was: " + JSON.stringify(data[datatype]) + "\033[0m\n");
52
 
53
                    //Log("\033[31mCould not find value: "+RRD_Tool_StoredData[name]["rrdNames"][label]["value"]+".\033[0m");
54
                    continue;
55
                }
2284 linlun 56
                var periodicity=RRD_Tool_StoredData[name]["rrd"]["Period_s"];
2300 linlun 57
                //Log("\033[31mTimeout: "+RRD_Tool_StoredData[name]["rrdNames"][label]["noTimeOut"]+"  "+datatype+".\033[0m");
58
                if (typeof RRD_Tool_StoredData[name]["rrdNames"][label]["noTimeOut"] == 'undefined')
2284 linlun 59
                {
2300 linlun 60
//                Log("\033[31mUndef.\033[0m");
61
                    if (((get_time() - periodicity*2) > data[datatype]["timestamp"]))
62
                    {
63
//                      Log("\033[31mError1: RRD-store "+name+" could not store data, too old. Current time="+get_time()+", periodicity="+periodicity+", data timestamp="+data[datatype]["timestamp"]+" data: "+RRD_Tool_StoredData[name]["rrdNames"][label]["data"]+" value: "+RRD_Tool_StoredData[name]["rrdNames"][label]["value"]+".\033[0m");
64
                        continue;
65
                    }
66
                } else {
67
//                Log("\033[31mDef.\033[0m");
68
                    if (((get_time() - periodicity*2) > data[datatype]["timestamp"])&& RRD_Tool_StoredData[name]["rrdNames"][label]["noTimeOut"] != '1')
69
                    {
70
//                      Log("\033[31mError2: RRD-store "+name+" could not store data, too old. Current time="+get_time()+", periodicity="+periodicity+", data timestamp="+data[datatype]["timestamp"]+" data: "+RRD_Tool_StoredData[name]["rrdNames"][label]["data"]+" value: "+RRD_Tool_StoredData[name]["rrdNames"][label]["value"]+".\033[0m");
71
                        continue;
72
                    }
2284 linlun 73
                }
1770 linlun 74
                if (first == 1) {
75
                    names += label;
76
                    first = 0;
77
                } else {
78
                    names += ":"+label;  
79
                }
2141 linlun 80
                if (typeof data[RRD_Tool_StoredData[name]["rrdNames"][label]["data"]]["value"] == "string")
81
                {
2220 arune 82
                    values += ":"+data[RRD_Tool_StoredData[name]["rrdNames"][label]["data"]]["value"];
2141 linlun 83
                }
84
                else
85
                {
2284 linlun 86
                    values += ":"+data[RRD_Tool_StoredData[name]["rrdNames"][label]["data"]]["value"][RRD_Tool_StoredData[name]["rrdNames"][label]["value"]];
2141 linlun 87
                }  
1770 linlun 88
            }
2284 linlun 89
            if (first != 1) {
90
                cmd += names + " "+RRD_Tool_StoredData[name]["rrd"]["file"]+" "+values;
2300 linlun 91
//              Log("Command: "+cmd);
2284 linlun 92
                Execute(cmd);
93
            }
2279 linlun 94
            break;
1770 linlun 95
        }
96
    }
97
}
2042 arune 98
 
2279 linlun 99
 
2042 arune 100
/* Tab complete stuff */
101
RRD_Tool_Aliases        = function() { return Module_GetAliasNames(); };
102
RRD_Tool_Intervals      = function() { return [ 5, 10, 30, 60, 120, 150, 300 ]; };
2218 arune 103
RRD_Tool_MinValues      = function() { return [ -40, 0 ]; };
104
RRD_Tool_MaxValues      = function() { return [ 50, 100, 10000, 20000 ]; };
2042 arune 105
/* Function returns an array with all CAN variables existing in LastValues storage */
106
RRD_Tool_Variables      = function()
107
{
108
    var last_value_string = Storage_GetParameters("LastValues");
109
    var last_values = new Array();
110
    var last_values_variables = [];
111
    for (var name in last_value_string)
112
    {
113
        last_values[name] = eval("(" + last_value_string[name] + ")");
114
        for (var name2 in last_values[name])
115
        {
116
            /* Only get unique variables */
117
            if (last_values_variables.indexOf(name2) == -1)
118
            {
119
                last_values_variables.push(name2);
120
            }
121
        }
122
    }
123
    return last_values_variables;
124
};
125
 
126
/*
127
electricPower={"rrd":{"file":"/var/www/appdata/rrd-data-new/electricPower.rrd","Period_s":"60"}, "rrdNames":{"power":{"Module":"powerMeter","data":"Power32","value":"value"}}}
128
 
129
<store_name>={"rrd":{"file":"<rrd_filename>","Period_s":"<push_interval>"}, "rrdNames":{"<rrd_data_source_name>":{"Module":"<alias_name>","data":"<variable_name>","value":"value"}}}
130
*/
131
 
132
/*
133
TODO:
134
handle more than one rrd data source (not possible with different alias/variables)
135
function RRDTool_AddConfig(alias_name, variable_name, push_interval, store_name, rrd_filename, rrd_data_source_name_array)
136
*/
137
 
138
/* Function to add new rrd config on atomic command line interface */
139
function RRDTool_AddConfig(alias_name, variable_name, push_interval, store_name, rrd_filename, rrd_data_source_name)
140
{
2046 arune 141
    if (arguments.length < 6)
142
    {
143
        Log("\033[31mNot enough parameters given.\033[0m\n");
144
        return false;
145
    }
146
 
2042 arune 147
    if (RRD_Tool_Config == null || RRD_Tool_StoredData == null || RRD_Tool_Timers == null)
148
    {
149
        RRD_Tool_Config = "RRD_Tool_config";
150
        RRD_Tool_StoredData = new Array();
151
        RRD_Tool_Timers = new Array();
152
    }
153
 
154
    //Log("rrd data source array length: "+rrd_data_source_name_array.length);
155
    //if (rrd_data_source_name_array.length > 0)
156
    //{
157
        var newString = "{\"rrd\":{\"file\":\"" + rrd_filename + "\",\"Period_s\":\"" + push_interval + "\"},\"rrdNames\":{\"" + rrd_data_source_name + "\":{\"Module\":\""+alias_name+"\",\"data\":\""+variable_name+"\",\"value\":\"value\"}}";
158
        //for (var rrd_data_source in rrd_data_source_name_array)
159
        //{
160
        //  newString += "";
161
        //}
162
        newString += "}";
163
 
164
        /* Push new config line to storage */
165
        Storage_SetParameter(RRD_Tool_Config, store_name, newString);
166
        //Log("New config: "+newString + " configname " + RRD_Tool_Config +"\n");
167
    //}
168
 
169
    /* Start this new config now */
170
    RRD_Tool_StoredData[store_name] = eval("(" + newString + ")");
171
    RRD_Tool_Timers[store_name] = Timer_SetTimer(function(timer) {RRD_Tool_timerUpdate(timer)}, RRD_Tool_StoredData[store_name]["rrd"]["Period_s"]*1000, true);
172
    Log("\033[33mCreated: "+store_name+" with update rate of "+RRD_Tool_StoredData[store_name]["rrd"]["Period_s"]+"s.\033[0m\n");
173
}
174
Console_RegisterCommand(RRDTool_AddConfig, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, RRD_Tool_Aliases(), RRD_Tool_Variables(), RRD_Tool_Intervals() ); });
175
 
2218 arune 176
 
177
/* Function to add new rrd config and create rrd file on atomic command line interface */
178
function RRDTool_AddConfigCreateRrd(alias_name, variable_name, push_interval, data_max, data_min, store_name, rrd_filename, rrd_data_source_name)
179
{
180
    /* Create new rrd file */
181
    /* Two avarages, one with 1 value avarage and one with 12 values avarage */
182
    /* Make sure 1 value avarage last 14 days and 12 value avarage last 10 years, independant of push interval */
183
 
184
    /* set data timeout to double push interval */
185
    /* set step to push interval */
186
 
187
}
188
//Console_RegisterCommand(RRDTool_AddConfigCreateRrd, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, RRD_Tool_Aliases(), RRD_Tool_Variables(), RRD_Tool_Intervals(), RRD_Tool_MaxValues(), RRD_Tool_MinValues() ); });
189