878 lines
108 KiB
HTML
878 lines
108 KiB
HTML
|
|
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>dynamic — Plutonium reporter 1.0 documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
|
|
|
|
|
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
|
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|
<script type="text/javascript" src="../_static/language_data.js"></script>
|
|
|
|
<script type="text/javascript" src="../_static/js/theme.js"></script>
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
<link rel="index" title="Index" href="../genindex.html" />
|
|
<link rel="search" title="Search" href="../search.html" />
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav">
|
|
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-scroll">
|
|
<div class="wy-side-nav-search" >
|
|
|
|
|
|
|
|
<a href="../index.html" class="icon icon-home"> Plutonium reporter
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class="caption"><span class="caption-text">Contents:</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="../introduction.html">Introduction to Plutonium</a></li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" aria-label="top navigation">
|
|
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="../index.html">Plutonium reporter</a>
|
|
|
|
</nav>
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
|
|
<div class="rst-content">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
|
|
<ul class="wy-breadcrumbs">
|
|
|
|
<li><a href="../index.html">Docs</a> »</li>
|
|
|
|
<li><a href="index.html">Module code</a> »</li>
|
|
|
|
<li>dynamic</li>
|
|
|
|
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
<div itemprop="articleBody">
|
|
|
|
<h1>Source code for dynamic</h1><div class="highlight"><pre>
|
|
<span></span><span class="ch">#!/usr/bin/python3</span>
|
|
<span class="kn">import</span> <span class="nn">os</span>
|
|
<span class="kn">import</span> <span class="nn">sys</span>
|
|
<span class="kn">import</span> <span class="nn">cherrypy</span>
|
|
<span class="kn">import</span> <span class="nn">influxdb</span>
|
|
<span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">import</span> <span class="nn">datetime</span>
|
|
<span class="kn">import</span> <span class="nn">json</span>
|
|
<span class="kn">from</span> <span class="nn">pprint</span> <span class="k">import</span> <span class="n">pprint</span>
|
|
<span class="kn">from</span> <span class="nn">cherrypy.lib.httputil</span> <span class="k">import</span> <span class="n">parse_query_string</span>
|
|
|
|
|
|
<span class="c1"># Universal variables</span>
|
|
<span class="n">_SCRIPT_PATH</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
|
|
<span class="n">influx_host</span> <span class="o">=</span> <span class="s1">'localhost'</span>
|
|
<span class="n">influx_port</span> <span class="o">=</span> <span class="mi">8086</span>
|
|
<span class="n">influx_user</span> <span class="o">=</span> <span class="s1">'pi'</span>
|
|
<span class="n">influx_pwd</span> <span class="o">=</span> <span class="s1">''</span>
|
|
<span class="n">influx_db</span> <span class="o">=</span> <span class="s1">'voltage'</span>
|
|
<span class="n">influx_weather_db</span> <span class="o">=</span> <span class="s1">'weather_v2'</span>
|
|
<span class="n">influx_IoT_db</span> <span class="o">=</span> <span class="s1">'weather_v2'</span>
|
|
<span class="n">influx_status_db</span> <span class="o">=</span> <span class="s1">'status'</span>
|
|
<span class="n">height_above_sea_level</span> <span class="o">=</span> <span class="mi">452</span>
|
|
|
|
<span class="n">variables_known</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"range"</span><span class="p">,</span>
|
|
<span class="s2">"granularity"</span><span class="p">,</span>
|
|
<span class="s2">"start"</span><span class="p">,</span>
|
|
<span class="s2">"end"</span><span class="p">,</span>
|
|
<span class="s2">"type"</span><span class="p">]</span>
|
|
<span class="n">default_variables</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"range"</span><span class="p">:</span> <span class="s2">"1h"</span><span class="p">,</span>
|
|
<span class="s2">"granularity"</span><span class="p">:</span> <span class="s2">"30s"</span><span class="p">,</span>
|
|
<span class="s2">"end"</span><span class="p">:</span> <span class="s2">"1s"</span><span class="p">,</span>
|
|
<span class="s2">"type"</span><span class="p">:</span> <span class="s2">"none"</span><span class="p">}</span>
|
|
|
|
|
|
<span class="c1">#------------------------------------------------------------------------------</span>
|
|
<span class="c1"># Generic Functions</span>
|
|
<span class="c1">#------------------------------------------------------------------------------</span>
|
|
|
|
<div class="viewcode-block" id="check_GET"><a class="viewcode-back" href="../examples.html#dynamic.check_GET">[docs]</a><span class="k">def</span> <span class="nf">check_GET</span><span class="p">(</span><span class="n">arguments</span><span class="p">):</span>
|
|
<span class="sd">'''Validates html query</span>
|
|
|
|
<span class="sd"> Takes the key-val pairs and evaluates them against those variables, that</span>
|
|
<span class="sd"> are defined as known to be safe to be parsed.</span>
|
|
|
|
<span class="sd"> ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> str(arguments):</span>
|
|
<span class="sd"> "A string of options to be directly evaluated as a dictionary"</span>
|
|
|
|
<span class="sd"> ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> list(str(variable)):</span>
|
|
<span class="sd"> "List of strings, occupied by variables validated to be safe"</span>
|
|
|
|
<span class="sd"> '''</span>
|
|
<span class="n">_q</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">arguments</span><span class="p">))</span>
|
|
<span class="n">keys_to_process</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="n">key</span><span class="p">:</span><span class="n">_q</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">_q</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">variables_known</span><span class="p">}</span>
|
|
<span class="n">resulting_variables</span> <span class="o">=</span> <span class="n">default_variables</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">resulting_variables</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">keys_to_process</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">resulting_variables</span></div>
|
|
|
|
|
|
<span class="c1">#------------------------------------------------------------------------------</span>
|
|
<span class="c1"># Classes</span>
|
|
<span class="c1">#------------------------------------------------------------------------------</span>
|
|
<span class="k">class</span> <span class="nc">Helper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">'''Helping calculations and functions</span>
|
|
|
|
<span class="sd"> Some generic helpers, that do additional calculations, such as</span>
|
|
<span class="sd"> percentages, predictions etc.</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span> <span class="nf">pressure_to_std_atm</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">raw_pressure</span><span class="p">,</span> <span class="n">temperature</span><span class="p">,</span> <span class="n">hasl</span><span class="p">):</span>
|
|
<span class="n">a2ts</span> <span class="o">=</span> <span class="n">raw_pressure</span> \
|
|
<span class="o">+</span> <span class="p">((</span><span class="n">raw_pressure</span> <span class="o">*</span> <span class="mf">9.80665</span> <span class="o">*</span> <span class="n">hasl</span><span class="p">)</span>\
|
|
<span class="o">/</span> <span class="p">(</span><span class="mi">287</span> <span class="o">*</span> <span class="p">(</span><span class="mi">273</span> <span class="o">+</span> <span class="n">temperature</span> <span class="o">+</span> <span class="p">(</span><span class="n">hasl</span><span class="o">/</span><span class="mi">400</span><span class="p">))))</span>
|
|
|
|
<span class="c1">#a2ts = raw_pressure + hasl/10</span>
|
|
<span class="k">return</span> <span class="n">a2ts</span>
|
|
|
|
<span class="k">def</span> <span class="nf">percentageCalc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">voltage</span><span class="p">,</span> <span class="n">system</span><span class="p">):</span>
|
|
<span class="sd">''' Turns current charge for lead acid batteries into a human</span>
|
|
<span class="sd"> readable %</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> float(voltage): Voltage in V</span>
|
|
<span class="sd"> int(system): nominal system voltage, e.g. 12, 24, 48 etc</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float(percentage): Two decimal state of battery in percentage</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="k">if</span> <span class="n">system</span> <span class="ow">is</span> <span class="mi">12</span><span class="p">:</span>
|
|
<span class="n">percentage</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="mf">24.5724168782</span>\
|
|
<span class="o">*</span> <span class="n">voltage</span> <span class="o">*</span> <span class="n">voltage</span> <span class="o">-</span> <span class="mf">521.9890329784</span> <span class="o">*</span> <span class="n">voltage</span>\
|
|
<span class="o">+</span> <span class="mf">2771.1828105637</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">system</span> <span class="ow">is</span> <span class="mi">24</span><span class="p">:</span>
|
|
<span class="n">percentage</span> <span class="o">=</span> <span class="mf">2.4442</span> <span class="o">*</span> <span class="n">voltage</span> <span class="o">*</span> <span class="n">voltage</span>\
|
|
<span class="o">-</span> <span class="mf">82.004</span> <span class="o">*</span> <span class="n">voltage</span> <span class="o">+</span> <span class="mf">602.91</span>
|
|
<span class="k">elif</span> <span class="n">system</span> <span class="ow">is</span> <span class="mi">48</span><span class="p">:</span>
|
|
<span class="c1"># percentage = round((voltage - 46.5) * 18.87, 2)</span>
|
|
<span class="n">percentage</span> <span class="o">=</span> <span class="nb">round</span><span class="p">((</span><span class="n">voltage</span> <span class="o">-</span> <span class="mf">46.5</span><span class="p">)</span> <span class="o">*</span> <span class="mf">23.26</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">percentage</span> <span class="o">=</span> <span class="mf">100.00</span> <span class="k">if</span> <span class="n">percentage</span> <span class="o">></span> <span class="mf">100.00</span> <span class="k">else</span> <span class="n">percentage</span>
|
|
<span class="n">percentage</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">percentage</span> <span class="o"><=</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">percentage</span>
|
|
<span class="k">return</span> <span class="n">percentage</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">DynamicEnergy</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">''' Parse readings from victron MPPT via Ve.Direct stored in</span>
|
|
<span class="sd"> InfluxDB</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span> <span class="o">=</span> <span class="n">influxdb</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">InfluxDBClient</span><span class="p">(</span>
|
|
<span class="n">influx_host</span><span class="p">,</span> <span class="n">influx_port</span><span class="p">,</span> <span class="n">influx_user</span><span class="p">,</span> <span class="n">influx_pwd</span><span class="p">,</span> <span class="n">influx_db</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">helpers</span> <span class="o">=</span> <span class="n">Helper</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">FreshValues</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="sd">''' Get most up-to-date energy reading.</span>
|
|
|
|
<span class="sd"> returns:</span>
|
|
<span class="sd"> dict(): {'state': str(),</span>
|
|
<span class="sd"> 'time': 'YYYY-mm-DDTHH:MM:SS.149636706Z',</span>
|
|
<span class="sd"> 'V_unit1': float(mV),</span>
|
|
<span class="sd"> 'Psol': fint(W),</span>
|
|
<span class="sd"> 'V_array': int(mV),</span>
|
|
<span class="sd"> 'ChCurr': int(mV)}</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">bat_query</span> <span class="o">=</span> <span class="s2">"SELECT voltage FROM mppt WHERE type = 'bat'"</span> \
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time DESC LIMIT 1"</span>
|
|
<span class="n">voltage_battery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">bat_query</span><span class="p">)</span>
|
|
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT last(*) "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM mppt "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > now() - 10m "</span>\
|
|
<span class="o">+</span> <span class="s2">"GROUP BY type fill(0)"</span>
|
|
<span class="n">state_query</span> <span class="o">=</span> <span class="s2">"SELECT voltage,state FROM mppt "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time DESC LIMIT 1"</span>
|
|
<span class="n">state_db_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">state_query</span><span class="p">)</span>
|
|
<span class="n">state</span> <span class="o">=</span> <span class="n">state_db_result</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'mppt'</span><span class="p">)</span>
|
|
<span class="n">states</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
|
|
<span class="n">db_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">bat</span> <span class="o">=</span> <span class="n">db_result</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'mppt'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'bat'</span><span class="p">})</span>
|
|
<span class="n">day</span> <span class="o">=</span> <span class="n">db_result</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'mppt'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'day'</span><span class="p">})</span>
|
|
<span class="n">prev_day</span> <span class="o">=</span> <span class="n">db_result</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'mppt'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'prev_day'</span><span class="p">})</span>
|
|
<span class="n">solar</span> <span class="o">=</span> <span class="n">db_result</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'mppt'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'solar'</span><span class="p">})</span>
|
|
<span class="n">total</span> <span class="o">=</span> <span class="n">db_result</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'mppt'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'total'</span><span class="p">})</span>
|
|
<span class="n">bats</span> <span class="o">=</span> <span class="n">bat</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
<span class="n">solars</span> <span class="o">=</span> <span class="n">solar</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
<span class="n">days</span> <span class="o">=</span> <span class="n">day</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
<span class="n">prev_days</span> <span class="o">=</span> <span class="n">prev_day</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
<span class="n">totals</span> <span class="o">=</span> <span class="n">total</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
|
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="n">t_stamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">bats</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span>
|
|
<span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S"</span><span class="p">)</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2">.%m.%Y %H:%M:%S"</span><span class="p">,</span> <span class="n">t_stamp</span><span class="p">)</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'state'</span><span class="p">]</span> <span class="o">=</span> <span class="n">states</span><span class="p">[</span><span class="s1">'state'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'ChCurr'</span><span class="p">]</span> <span class="o">=</span> <span class="n">bats</span><span class="p">[</span><span class="s1">'last_current'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'V_array'</span><span class="p">]</span> <span class="o">=</span> <span class="n">bats</span><span class="p">[</span><span class="s1">'last_voltage'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'perc_array'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">helpers</span><span class="o">.</span><span class="n">percentageCalc</span><span class="p">(</span>
|
|
<span class="n">bats</span><span class="p">[</span><span class="s1">'last_voltage'</span><span class="p">],</span>
|
|
<span class="mi">48</span><span class="p">)</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'Psol'</span><span class="p">]</span> <span class="o">=</span> <span class="n">solars</span><span class="p">[</span><span class="s1">'last_power'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'Vsol'</span><span class="p">]</span> <span class="o">=</span> <span class="n">solars</span><span class="p">[</span><span class="s1">'last_voltage'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'Wh_day'</span><span class="p">]</span> <span class="o">=</span> <span class="n">days</span><span class="p">[</span><span class="s1">'last_Wh'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'Pmax_prev_day'</span><span class="p">]</span> <span class="o">=</span> <span class="n">days</span><span class="p">[</span><span class="s1">'last_Pmax'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'Wh_prev_day'</span><span class="p">]</span> <span class="o">=</span> <span class="n">prev_days</span><span class="p">[</span><span class="s1">'last_Wh'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'Pmax_day'</span><span class="p">]</span> <span class="o">=</span> <span class="n">prev_days</span><span class="p">[</span><span class="s1">'last_Pmax'</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s1">'total_Wh'</span><span class="p">]</span> <span class="o">=</span> <span class="n">totals</span><span class="p">[</span><span class="s1">'last_Wh'</span><span class="p">]</span>
|
|
|
|
<span class="k">return</span> <span class="n">result</span>
|
|
|
|
<span class="k">def</span> <span class="nf">stat_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="sd">'''Max power and daily generation.</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="c1"># GET variables now set, ready to reference them</span>
|
|
<span class="n">_days</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">'days'</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span><span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="n">measures</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(power)*24 as DayWh, max(Pmax) AS Pmax "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM mppt WHERE type='solar' OR type='day' "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time > '</span><span class="si">{}</span><span class="s2"> 00:00:00' - </span><span class="si">{}</span><span class="s2">d "</span>\
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(1d) fill(previous)"</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time DESC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">date</span><span class="p">,</span> <span class="n">_days</span><span class="p">)</span>
|
|
<span class="n">measure</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">tm</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">P_max</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">Wh_sol</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="k">for</span> <span class="n">datapoint</span> <span class="ow">in</span> <span class="n">measure</span><span class="p">[</span><span class="s1">'mppt'</span><span class="p">]:</span>
|
|
<span class="n">row</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">tstamp</span> <span class="o">=</span> <span class="n">datapoint</span><span class="p">[</span><span class="s1">'time'</span><span class="p">]</span>
|
|
<span class="n">Pmax</span> <span class="o">=</span> <span class="n">datapoint</span><span class="p">[</span><span class="s2">"Pmax"</span><span class="p">]</span> <span class="o">-</span> <span class="mi">10</span>
|
|
<span class="n">DayWh</span> <span class="o">=</span> <span class="n">datapoint</span><span class="p">[</span><span class="s2">"DayWh"</span><span class="p">]</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">tstamp</span><span class="p">[:</span><span class="mi">10</span><span class="p">],</span> <span class="n">Pmax</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">DayWh</span><span class="p">)])</span>
|
|
<span class="k">return</span> <span class="n">result</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
|
|
<span class="k">def</span> <span class="nf">solar_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''</span>
|
|
<span class="sd"> Function to get solar readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
|
|
<span class="sd"> yields: csv in raw, text format</span>
|
|
<span class="sd"> time,V_solar,I_solar,P_solar,V_array</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">mppt_query_str</span> <span class="o">=</span> <span class="s2">"SELECT min(power) AS Pmin, max(power) AS Pmax,"</span> \
|
|
<span class="o">+</span> <span class="s2">"mean(power) AS Pavg "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM mppt WHERE type='solar' "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time > now() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time > now() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">) fill(previous)"</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">mppt_query</span> <span class="o">=</span> <span class="n">mppt_query_str</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(voltage) as Usol, "</span> \
|
|
<span class="o">+</span> <span class="s2">"mean(power) as Psol, mean(power)/mean(voltage) as Isol "</span> \
|
|
<span class="o">+</span> <span class="s2">"FROM mppt WHERE type='solar' "</span> \
|
|
<span class="o">+</span> <span class="s2">"AND time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">) fill(previous) ORDER BY time DESC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">bat_volt_query</span> <span class="o">=</span> <span class="s2">"SELECT mean(voltage) as Varr "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM mppt WHERE type='bat' "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">) "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">bat_volt_query</span> <span class="o">=</span> <span class="n">bat_volt_query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">bat_measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">bat_volt_query</span><span class="p">)</span>
|
|
<span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">mppt_measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">mppt_query</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,V_solar,I_solar,P_solar,V_array</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="n">volt_dict</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="n">voltage</span> <span class="ow">in</span> <span class="n">bat_measures</span><span class="p">[</span><span class="s2">"mppt"</span><span class="p">]:</span>
|
|
<span class="n">volt_dict</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">voltage</span><span class="p">[</span><span class="s2">"time"</span><span class="p">]:</span> <span class="n">voltage</span><span class="p">[</span><span class="s2">"Varr"</span><span class="p">]})</span>
|
|
<span class="k">for</span> <span class="n">datapoint</span> <span class="ow">in</span> <span class="n">measures</span><span class="p">[</span><span class="s2">"mppt"</span><span class="p">]:</span>
|
|
<span class="n">tm</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">datapoint</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">solar_voltage</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">datapoint</span><span class="p">[</span><span class="s2">"Usol"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">solar_current</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">datapoint</span><span class="p">[</span><span class="s2">"Isol"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">solar_power</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">datapoint</span><span class="p">[</span><span class="s2">"Psol"</span><span class="p">])</span>
|
|
<span class="n">solar_power</span> <span class="o">=</span> <span class="n">solar_power</span> <span class="o">-</span> <span class="mi">11</span> <span class="k">if</span> <span class="n">solar_power</span> <span class="o">></span> <span class="mi">11</span> <span class="k">else</span> <span class="mi">0</span>
|
|
<span class="n">solar_power</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">solar_power</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">except</span><span class="p">:</span>
|
|
<span class="n">solar_power</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">datapoint</span><span class="p">[</span><span class="s2">"Psol"</span><span class="p">])</span>
|
|
<span class="n">array_voltage</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">volt_dict</span><span class="p">[</span><span class="n">tm</span><span class="p">])</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tm</span><span class="p">,</span> <span class="n">solar_voltage</span><span class="p">,</span>
|
|
<span class="n">solar_current</span><span class="p">,</span> <span class="n">solar_power</span><span class="p">,</span>
|
|
<span class="n">array_voltage</span><span class="p">)</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">Expose</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">''' Default expose class. Takes other classes and exposes them</span>
|
|
<span class="sd"> via html. GET checks should be defined here.</span>
|
|
<span class="sd"> Function args and kwargs don't need to be checked, as they are internal</span>
|
|
<span class="sd"> and not exposed.</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">energy</span> <span class="o">=</span> <span class="n">DynamicEnergy</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">weather</span> <span class="o">=</span> <span class="n">DynamicWeather</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">DynamicStatus</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">iot</span> <span class="o">=</span> <span class="n">DynamicIoT</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">helpers</span> <span class="o">=</span> <span class="n">Helper</span><span class="p">()</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="s2">"Index, MOFO"</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">solar_realtime_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">res_type</span> <span class="o">=</span> <span class="n">q</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">energy</span><span class="o">.</span><span class="n">FreshValues</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">res_type</span> <span class="o">==</span> <span class="s1">'json'</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">result</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">solar_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">sol_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">energy</span><span class="o">.</span><span class="n">solar_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">sol_monitor</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">wind_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">wind_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">weather</span><span class="o">.</span><span class="n">wind_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,Speed,Gusts,Direction</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">speed</span><span class="p">,</span> <span class="n">gust</span><span class="p">,</span> <span class="n">direction</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">wind_monitor</span><span class="p">[</span><span class="s1">'w_speeds'</span><span class="p">],</span>
|
|
<span class="n">wind_monitor</span><span class="p">[</span><span class="s1">'w_gusts'</span><span class="p">],</span>
|
|
<span class="n">wind_monitor</span><span class="p">[</span><span class="s1">'w_dirs'</span><span class="p">]):</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">speed</span><span class="p">[</span><span class="s1">'time'</span><span class="p">],</span>
|
|
<span class="n">speed</span><span class="p">[</span><span class="s1">'value'</span><span class="p">],</span>
|
|
<span class="n">gust</span><span class="p">[</span><span class="s1">'value'</span><span class="p">],</span>
|
|
<span class="n">direction</span><span class="p">[</span><span class="s1">'value'</span><span class="p">])</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">temphumi_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">temphumi_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">weather</span><span class="o">.</span><span class="n">temphumi_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,T(ins),T(out),Humi(ins),Humi(out)</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">Thin</span><span class="p">,</span> <span class="n">Thout</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">temphumi_monitor</span><span class="p">[</span><span class="s1">'th_ins'</span><span class="p">],</span>
|
|
<span class="n">temphumi_monitor</span><span class="p">[</span><span class="s1">'th_outs'</span><span class="p">]):</span>
|
|
<span class="n">tm_temp</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Thin</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">temp_in_val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Thin</span><span class="p">[</span><span class="s2">"Temp"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">temp_out_val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Thout</span><span class="p">[</span><span class="s2">"Temp"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">hum_in_val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Thin</span><span class="p">[</span><span class="s2">"Hum"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">hum_out_val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Thout</span><span class="p">[</span><span class="s2">"Hum"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tm_temp</span><span class="p">,</span>
|
|
<span class="n">temp_in_val</span><span class="p">,</span>
|
|
<span class="n">temp_out_val</span><span class="p">,</span>
|
|
<span class="n">hum_in_val</span><span class="p">,</span>
|
|
<span class="n">hum_out_val</span><span class="p">)</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">usense_temphumi_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">usense_temphumi_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">iot</span><span class="o">.</span><span class="n">usense_temphumi_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,T(tea),Humi(tea)</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">temp_humi</span> <span class="ow">in</span> <span class="n">usense_temphumi_monitor</span><span class="p">[</span><span class="s1">'temphumis'</span><span class="p">]:</span>
|
|
<span class="n">tm_temp</span> <span class="o">=</span> <span class="n">temp_humi</span><span class="p">[</span><span class="s2">"time"</span><span class="p">]</span>
|
|
<span class="n">temp_tea_val</span> <span class="o">=</span> <span class="n">temp_humi</span><span class="p">[</span><span class="s2">"temp"</span><span class="p">]</span>
|
|
<span class="n">hum_tea_val</span> <span class="o">=</span> <span class="n">temp_humi</span><span class="p">[</span><span class="s2">"hum"</span><span class="p">]</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tm_temp</span><span class="p">,</span> <span class="n">temp_tea_val</span><span class="p">,</span> <span class="n">hum_tea_val</span><span class="p">)</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">pressure_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">pressure_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">weather</span><span class="o">.</span><span class="n">pressure_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,Pressure</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">Press</span><span class="p">,</span> <span class="n">Tout</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">pressure_monitor</span><span class="p">[</span><span class="s2">"press_raws"</span><span class="p">],</span>
|
|
<span class="n">pressure_monitor</span><span class="p">[</span><span class="s2">"Touts"</span><span class="p">]):</span>
|
|
<span class="n">tm</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Press</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">pressure</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">helpers</span><span class="o">.</span><span class="n">pressure_to_std_atm</span><span class="p">(</span><span class="n">Press</span><span class="p">[</span><span class="s2">"pressure"</span><span class="p">],</span>
|
|
<span class="n">Tout</span><span class="p">[</span><span class="s2">"Tout"</span><span class="p">],</span>
|
|
<span class="n">height_above_sea_level</span><span class="p">)</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tm</span><span class="p">,</span> <span class="n">pressure</span><span class="p">)</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">cpumem_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">cpumem_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">cpumem_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,Cpu,Mem,Disk</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">cpu</span><span class="p">,</span> <span class="n">disk</span><span class="p">,</span> <span class="n">mem</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">cpumem_monitor</span><span class="p">[</span><span class="s2">"cpus"</span><span class="p">],</span>
|
|
<span class="n">cpumem_monitor</span><span class="p">[</span><span class="s2">"disks"</span><span class="p">],</span>
|
|
<span class="n">cpumem_monitor</span><span class="p">[</span><span class="s2">"mems"</span><span class="p">]):</span>
|
|
<span class="n">tm</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">cpu</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">cpu</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">cpu</span><span class="p">[</span><span class="s2">"usage"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">mem</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">mem</span><span class="p">[</span><span class="s2">"usage"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">disk</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">disk</span><span class="p">[</span><span class="s2">"usage"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tm</span><span class="p">,</span> <span class="n">cpu</span><span class="p">,</span> <span class="n">mem</span><span class="p">,</span> <span class="n">disk</span><span class="p">)</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">network_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">network_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">network_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,Bin,Bout,Din,Dout,Ein,Eout</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">traf</span> <span class="ow">in</span> <span class="n">network_monitor</span><span class="p">[</span><span class="s2">"traffic"</span><span class="p">]:</span>
|
|
<span class="n">tm</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traf</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">Bin</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traf</span><span class="p">[</span><span class="s2">"traffic_b_in"</span><span class="p">]</span><span class="o">/</span><span class="mi">1024</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">Bout</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traf</span><span class="p">[</span><span class="s2">"traffic_b_out"</span><span class="p">]</span><span class="o">/</span><span class="mi">1024</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">Din</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traf</span><span class="p">[</span><span class="s2">"traffic_drop_in"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">Dout</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traf</span><span class="p">[</span><span class="s2">"traffic_drop_out"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">Ein</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traf</span><span class="p">[</span><span class="s2">"traffic_e_in"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">Eout</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traf</span><span class="p">[</span><span class="s2">"traffic_e_out"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">tm</span><span class="p">,</span>
|
|
<span class="n">Bin</span><span class="p">,</span>
|
|
<span class="n">Bout</span><span class="p">,</span>
|
|
<span class="n">Din</span><span class="p">,</span>
|
|
<span class="n">Dout</span><span class="p">,</span>
|
|
<span class="n">Ein</span><span class="p">,</span>
|
|
<span class="n">Eout</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">solcap_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">solcap_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="o">.</span><span class="n">solcap_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,Solar,Capacitor</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">Sol</span><span class="p">,</span> <span class="n">Cap</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">solcap_monitor</span><span class="p">[</span><span class="s1">'sols'</span><span class="p">],</span>
|
|
<span class="n">solcap_monitor</span><span class="p">[</span><span class="s1">'caps'</span><span class="p">]):</span>
|
|
<span class="n">tm</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">Sol</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">solar_value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">Sol</span><span class="p">[</span><span class="s2">"voltage"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="o">/</span> <span class="mi">100</span>
|
|
<span class="n">cap_value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">Cap</span><span class="p">[</span><span class="s2">"voltage"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tm</span><span class="p">,</span> <span class="n">solar_value</span><span class="p">,</span> <span class="n">cap_value</span><span class="p">)</span>
|
|
|
|
<span class="nd">@cherrypy</span><span class="o">.</span><span class="n">expose</span>
|
|
<span class="k">def</span> <span class="nf">esp_battery_monitor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">q</span> <span class="o">=</span> <span class="n">check_GET</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="n">place_tag</span> <span class="o">=</span> <span class="n">q</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span>
|
|
<span class="n">esp_bat_monitor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">iot</span><span class="o">.</span><span class="n">esp_battery_graph_data</span><span class="p">(</span><span class="o">**</span><span class="n">q</span><span class="p">)</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"time,batt(</span><span class="si">{_place_tag}</span><span class="s2">),batt_perc(</span><span class="si">{_place_tag}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">_place_tag</span><span class="o">=</span><span class="n">place_tag</span>
|
|
<span class="p">)</span>
|
|
<span class="k">yield</span> <span class="n">header</span>
|
|
<span class="k">for</span> <span class="n">batt</span> <span class="ow">in</span> <span class="n">esp_bat_monitor</span><span class="p">[</span><span class="s1">'volts'</span><span class="p">]:</span>
|
|
<span class="n">tm_batt</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">batt</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">batt_val</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">batt</span><span class="p">[</span><span class="s2">"voltage"</span><span class="p">])</span> <span class="o">/</span> <span class="mi">1023</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">except</span><span class="p">:</span>
|
|
<span class="n">batt_val</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">batt_perc</span> <span class="o">=</span> <span class="mf">4.39</span>
|
|
<span class="k">yield</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="s2">,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tm_batt</span><span class="p">,</span> <span class="n">batt_val</span><span class="p">,</span> <span class="n">batt_perc</span><span class="p">)</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">DynamicStatus</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">influx_status_client</span> <span class="o">=</span> <span class="n">influxdb</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">InfluxDBClient</span><span class="p">(</span>
|
|
<span class="n">influx_host</span><span class="p">,</span>
|
|
<span class="n">influx_port</span><span class="p">,</span>
|
|
<span class="n">influx_user</span><span class="p">,</span>
|
|
<span class="n">influx_pwd</span><span class="p">,</span>
|
|
<span class="n">influx_status_db</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">cpumem_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''</span>
|
|
<span class="sd"> Function to get RasPi value readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(usage) AS usage "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM RasPI "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_status_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">cpu</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'RasPI'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'cpu'</span><span class="p">})</span>
|
|
<span class="n">disk</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'RasPI'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'disk'</span><span class="p">})</span>
|
|
<span class="n">mem</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'RasPI'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'mem'</span><span class="p">})</span>
|
|
<span class="n">cpus</span> <span class="o">=</span> <span class="p">[</span><span class="n">cpu_use</span> <span class="k">for</span> <span class="n">cpu_use</span> <span class="ow">in</span> <span class="n">cpu</span><span class="p">]</span>
|
|
<span class="n">disks</span> <span class="o">=</span> <span class="p">[</span><span class="n">disks_use</span> <span class="k">for</span> <span class="n">disks_use</span> <span class="ow">in</span> <span class="n">disk</span><span class="p">]</span>
|
|
<span class="n">mems</span> <span class="o">=</span> <span class="p">[</span><span class="n">mems_use</span> <span class="k">for</span> <span class="n">mems_use</span> <span class="ow">in</span> <span class="n">mem</span><span class="p">]</span>
|
|
<span class="c1"># Let's get the data from DB</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'cpus'</span><span class="p">:</span><span class="n">cpus</span><span class="p">,</span> <span class="s1">'disks'</span><span class="p">:</span><span class="n">disks</span><span class="p">,</span> <span class="s1">'mems'</span><span class="p">:</span><span class="n">mems</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span>
|
|
|
|
<span class="k">def</span> <span class="nf">network_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''</span>
|
|
<span class="sd"> Function to get RasPi value readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT derivative(max(*)) AS traffic "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM net "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_status_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">traffic</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'net'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="n">q</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]})</span>
|
|
|
|
<span class="n">traffics</span> <span class="o">=</span> <span class="p">[</span><span class="n">traf</span> <span class="k">for</span> <span class="n">traf</span> <span class="ow">in</span> <span class="n">traffic</span><span class="p">]</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'traffic'</span><span class="p">:</span> <span class="n">traffics</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span>
|
|
|
|
<span class="k">def</span> <span class="nf">solcap_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''</span>
|
|
<span class="sd"> Function to get RasPi value readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(voltage) as voltage "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM iss "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_status_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">sol</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'iss'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'solar'</span><span class="p">})</span>
|
|
<span class="n">cap</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'iss'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'capcaitor'</span><span class="p">})</span>
|
|
|
|
<span class="n">sols</span> <span class="o">=</span> <span class="p">[</span><span class="n">solar</span> <span class="k">for</span> <span class="n">solar</span> <span class="ow">in</span> <span class="n">sol</span><span class="p">]</span>
|
|
<span class="n">caps</span> <span class="o">=</span> <span class="p">[</span><span class="n">capacitor</span> <span class="k">for</span> <span class="n">capacitor</span> <span class="ow">in</span> <span class="n">cap</span><span class="p">]</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'sols'</span><span class="p">:</span> <span class="n">sols</span><span class="p">,</span> <span class="s1">'caps'</span><span class="p">:</span> <span class="n">caps</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span>
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="DynamicIoT"><a class="viewcode-back" href="../examples.html#dynamic.DynamicIoT">[docs]</a><span class="k">class</span> <span class="nc">DynamicIoT</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="sd">''' All IoT related methods. Currently, this goes to the weatherDB,</span>
|
|
<span class="sd"> but is subject to change in the future. </span>
|
|
<span class="sd"> '''</span>
|
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">influx_iot_client</span> <span class="o">=</span> <span class="n">influxdb</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">InfluxDBClient</span><span class="p">(</span>
|
|
<span class="n">influx_host</span><span class="p">,</span>
|
|
<span class="n">influx_port</span><span class="p">,</span>
|
|
<span class="n">influx_user</span><span class="p">,</span>
|
|
<span class="n">influx_pwd</span><span class="p">,</span>
|
|
<span class="n">influx_IoT_db</span>
|
|
<span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="DynamicIoT.esp_battery_graph_data"><a class="viewcode-back" href="../examples.html#dynamic.DynamicIoT.esp_battery_graph_data">[docs]</a> <span class="k">def</span> <span class="nf">esp_battery_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''</span>
|
|
<span class="sd"> Function to get RasPi value readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(battery) as voltage "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM usense "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_iot_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">volt</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'usense'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="n">q</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]})</span>
|
|
|
|
<span class="n">volts</span> <span class="o">=</span> <span class="p">[</span><span class="n">bat_volt</span> <span class="k">for</span> <span class="n">bat_volt</span> <span class="ow">in</span> <span class="n">volt</span><span class="p">]</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'volts'</span><span class="p">:</span> <span class="n">volts</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span></div>
|
|
|
|
<div class="viewcode-block" id="DynamicIoT.usense_temphumi_graph_data"><a class="viewcode-back" href="../examples.html#dynamic.DynamicIoT.usense_temphumi_graph_data">[docs]</a> <span class="k">def</span> <span class="nf">usense_temphumi_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''</span>
|
|
<span class="sd"> Function to get RasPi value readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(temperature) as temp, "</span>\
|
|
<span class="o">+</span> <span class="s2">"mean(humidity) as hum "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM usense "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_iot_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">temphumi</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'usense'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="n">q</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]})</span>
|
|
|
|
<span class="n">temphumis</span> <span class="o">=</span> <span class="p">[</span><span class="n">temp_humi</span> <span class="k">for</span> <span class="n">temp_humi</span> <span class="ow">in</span> <span class="n">temphumi</span><span class="p">]</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'temphumis'</span><span class="p">:</span> <span class="n">temphumis</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="DynamicWeather"><a class="viewcode-back" href="../examples.html#dynamic.DynamicWeather">[docs]</a><span class="k">class</span> <span class="nc">DynamicWeather</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="sd">'''Weather reports, taken dynamically from InfluxDB.</span>
|
|
<span class="sd"> All measurements tailored to suit the Davis Vantage Vue weather</span>
|
|
<span class="sd"> station'''</span>
|
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">influx_weather_client</span> <span class="o">=</span> <span class="n">influxdb</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">InfluxDBClient</span><span class="p">(</span>
|
|
<span class="n">influx_host</span><span class="p">,</span>
|
|
<span class="n">influx_port</span><span class="p">,</span>
|
|
<span class="n">influx_user</span><span class="p">,</span>
|
|
<span class="n">influx_pwd</span><span class="p">,</span>
|
|
<span class="n">influx_weather_db</span>
|
|
<span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="DynamicWeather.wind_graph_data"><a class="viewcode-back" href="../examples.html#dynamic.DynamicWeather.wind_graph_data">[docs]</a> <span class="k">def</span> <span class="nf">wind_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''Function to get wind value readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
|
|
<span class="sd"> yields: csv in raw, text format</span>
|
|
<span class="sd"> time, Speed, Gusts, Direction</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(value) AS value FROM wind "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_weather_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">w_speed</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'wind'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'speed'</span><span class="p">})</span>
|
|
<span class="n">w_dir</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'wind'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'direction'</span><span class="p">})</span>
|
|
<span class="n">w_gust</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'wind'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'windgust'</span><span class="p">})</span>
|
|
<span class="n">w_speeds</span> <span class="o">=</span> <span class="p">[</span><span class="n">speed</span> <span class="k">for</span> <span class="n">speed</span> <span class="ow">in</span> <span class="n">w_speed</span><span class="p">]</span>
|
|
<span class="n">w_dirs</span> <span class="o">=</span> <span class="p">[</span><span class="n">direction</span> <span class="k">for</span> <span class="n">direction</span> <span class="ow">in</span> <span class="n">w_dir</span><span class="p">]</span>
|
|
<span class="n">w_gusts</span> <span class="o">=</span> <span class="p">[</span><span class="n">gust</span> <span class="k">for</span> <span class="n">gust</span> <span class="ow">in</span> <span class="n">w_gust</span><span class="p">]</span>
|
|
<span class="c1"># Let's get the data from DB</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'w_speeds'</span><span class="p">:</span><span class="n">w_speeds</span><span class="p">,</span> <span class="s1">'w_dirs'</span><span class="p">:</span><span class="n">w_dirs</span><span class="p">,</span> <span class="s1">'w_gusts'</span><span class="p">:</span><span class="n">w_gusts</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span></div>
|
|
|
|
<div class="viewcode-block" id="DynamicWeather.temphumi_graph_data"><a class="viewcode-back" href="../examples.html#dynamic.DynamicWeather.temphumi_graph_data">[docs]</a> <span class="k">def</span> <span class="nf">temphumi_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''Function to get ttmper and humidity value readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
|
|
<span class="sd"> yields: csv in raw, text format</span>
|
|
<span class="sd"> time, Speed, Gusts, Direction</span>
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(humidity) AS Hum, "</span>\
|
|
<span class="o">+</span> <span class="s2">"mean(temperature) AS Temp "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM temphumi "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span> \
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_weather_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">th_in</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'temphumi'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'internal'</span><span class="p">})</span>
|
|
<span class="n">th_out</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'temphumi'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'external'</span><span class="p">})</span>
|
|
|
|
<span class="n">th_ints</span> <span class="o">=</span> <span class="p">[</span><span class="n">temphumi_in</span> <span class="k">for</span> <span class="n">temphumi_in</span> <span class="ow">in</span> <span class="n">th_in</span><span class="p">]</span>
|
|
<span class="n">th_outs</span> <span class="o">=</span> <span class="p">[</span><span class="n">temphumi_out</span> <span class="k">for</span> <span class="n">temphumi_out</span> <span class="ow">in</span> <span class="n">th_out</span><span class="p">]</span>
|
|
<span class="c1"># Let's get the data from DB</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'th_ins'</span><span class="p">:</span><span class="n">th_ints</span><span class="p">,</span> <span class="s1">'th_outs'</span><span class="p">:</span><span class="n">th_outs</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span> </div>
|
|
|
|
<div class="viewcode-block" id="DynamicWeather.pressure_graph_data"><a class="viewcode-back" href="../examples.html#dynamic.DynamicWeather.pressure_graph_data">[docs]</a> <span class="k">def</span> <span class="nf">pressure_graph_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">q</span><span class="p">):</span>
|
|
<span class="sd">'''</span>
|
|
<span class="sd"> Function to get pressure readings from InfluxDB.</span>
|
|
<span class="sd"> These parsed into a CSV</span>
|
|
|
|
<span class="sd"> yields: csv in raw, text format</span>
|
|
<span class="sd"> time, Pressure</span>
|
|
|
|
<span class="sd"> '''</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"SELECT mean(pressure) AS pressure, "</span>\
|
|
<span class="o">+</span> <span class="s2">"mean(temperature) as Tout "</span>\
|
|
<span class="o">+</span> <span class="s2">"FROM temphumi "</span>\
|
|
<span class="o">+</span> <span class="s2">"WHERE type = 'raw' OR type='external' "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time > NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"AND time < NOW() - </span><span class="si">{}</span><span class="s2"> "</span>\
|
|
<span class="o">+</span> <span class="s2">"GROUP BY time(</span><span class="si">{}</span><span class="s2">), type "</span>\
|
|
<span class="o">+</span> <span class="s2">"FILL(previous) "</span>\
|
|
<span class="o">+</span> <span class="s2">"ORDER BY time ASC"</span>
|
|
|
|
<span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">q</span><span class="p">[</span><span class="s1">'range'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span>
|
|
<span class="n">q</span><span class="p">[</span><span class="s1">'granularity'</span><span class="p">])</span>
|
|
<span class="n">db_results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">influx_weather_client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="n">press_raws</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'temphumi'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'raw'</span><span class="p">})</span>
|
|
<span class="n">Touts</span> <span class="o">=</span> <span class="n">db_results</span><span class="o">.</span><span class="n">get_points</span><span class="p">(</span><span class="n">measurement</span><span class="o">=</span><span class="s1">'temphumi'</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'external'</span><span class="p">})</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'press_raws'</span><span class="p">:</span> <span class="n">press_raws</span><span class="p">,</span> <span class="s1">'Touts'</span><span class="p">:</span> <span class="n">Touts</span><span class="p">}</span>
|
|
<span class="k">return</span> <span class="n">result</span> </div></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<footer>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
© Copyright 2019, Milan 'Ventil' Toman
|
|
|
|
</p>
|
|
</div>
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.Navigation.enable(true);
|
|
});
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|