Interaktivní grafové výstupy - Highcharts

Highcharts je JavaScriptová knihovna pro kreslení grafů v prohlížeči. Pro použití se stavebnicí MLAB vznikl software, který data získaná pomoci python knihovny pymlab dokáže vykreslovat v podobě grafu do standardního webového prohlížeče.

Instalace

Pro správné spuštění musíte mít nainstalovanou knihovnu pymlab, h5py a tornado. Instalace knihovny pymlab je popsána na vlastní stránce. Ostatní nainstalujete takto.

sudo apt-get install python-h5py python-tornado

Samotný software si stáhnete z GitHubu.

git clone https://github.com/MLAB-project/i2c-ui.git

Použití

Pro spuštění samotného softwaru musí být vytvořena pravidla pro získávání dat. Tyto pravidla jsou vyřešena pomocí pythonovského skriptu.

Skript může vypadat takto: example_sht.py. Program se spouští s parametrem, který určuje název logu (bez přípony).

  import logging
  import sys
  import time
  from pymlab import config
  from src import mv

Naimportování potřebných knihoven.

  class dewpoint():
      def __init__(self, temp=None, hum=None):
          self.sens_temp = temp
          self.sens_hum = hum
          self.temp=0
          self.hum=0
          self.dewpoint=0

      def get_dp(self):
          if self.sens_temp:
              self.temp=self.sens_temp()
              self.hum=self.sens_hum()
          x = 1 - self.hum/100
          dewpoint = (14.55 + 0.114 * self.temp) * x
          dewpoint = dewpoint + ((2.5 + 0.007 * self.temp) * x) ** 3
          dewpoint = dewpoint + (15.9 + 0.117 * self.temp) * x ** 14
          self.dewpoint = self.temp - dewpoint
          return self.dewpoint

Třída počítající rosný bod. Při její inicializaci se řekne, z jakých callback funkcí se data o teplotě a vlhkosti budou získávat. Při zavolání get_dp() se navrátí hodnota rosného bodu.

  def main():
  
      if len(sys.argv) != 2:
          sys.stderr.write("Invalid number of arguments.\n")
          sys.stderr.write("Usage: %s Project_file (without extension)\n" % (sys.argv[0], ))
          sys.exit(1)
      
      filename = sys.argv[1]
      cfg = config.Config(
          i2c = {
              "port": 1,
          },
          bus = [
              {
                  "name": "sht25", "type": "sht25",
              },
          ],
      )
      
      cfg.initialize()

Konfigurace sítě knihovny pymlab.

      teplomer01 = cfg.get_device("lts01")
      vlhkost = cfg.get_device("sht25")
      dp = dewpoint(teplomer01.get_temp, vlhkost.get_hum)
      mVis = mv.MlabVisualiser(filename)
      
      mVis.addDataset("TempSHT", "Temperature [C]", vlhkost.get_temp)
      mVis.addDataset("HumiSHT", "RelativeHumidity [%]", vlhkost.get_hum)
      mVis.addDataset("DewpSHT", "Temperature [C]", dp.get_dp)

Jednotlivé senzory (zdroje dat) přidáme do vykreslovací třídy pomocí addDataset s popiskem senzoru, typem dat a callback funkcí pro získání naměřených dat.

      mVis.run(["TempSHT", "HumiSHT", "DewpSHT"], delay=1000, repeat=0)

Spustíme nekonečnou smyčku, která čte data a ty zaznamenává do souboru. V prvním poli jsou popisky senzorů, které se mají číst. Dále rychlost čtení (perioda) a počet opakování (0 je bez ukončení)

      mVis.startWeb()

Spustíme webserver. Výchozí port je 8888.

  if __name__ == '__main__':
      main()
      
      
      

Prohlížeč dat HDF5 je například: HFDFwiev