[MUNIN] Überwachung AVM Fritzbox Cable mit Munin

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung vorhanden)
Loading...

Aufgrund deutlicher Bandbreitenschwankungen vor ein paar Wochen habe ich mir ein neues Plugin geschrieben, welches jedoch nur auf den FritzBox Modellen 6460 und 6360 funktioniert. Das Plugin liest die aktuellen Kabelwerte aus und zeigt diese in einem Graphen an. Angefangen von Frequenz, über Modulation bis hin zu Power Level [dBuV]. Jeder dieser Daten-Gruppen wird in einem eigenen Graph angezeigt.

Konfiguriert wird das Plugin wie immer durch Enviroment Variablen, relevant sind hier besonders diese:

 * env.row 2
 * env.io Empfangsrichtung (or Senderichtung)

row ist die Zeile in der jeweiligen Tabelle, kann man auch an den Daten in $rowValues erkennen. io ist die Tabelle für Eingehend oder Ausgehend. Es muss entweder der eine String oder der andere gesetzt sein.

  1. #!/usr/bin/php
  2. <?php
  3. ##############################
  4. #%# family=auto
  5. #%# capabilities=autoconf
  6.  
  7. require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'MuninPlugin.php';
  8.  
  9. /**
  10.  * AVM WLAN Connection Count plugin for Munin
  11.  *
  12.  * - Add symlink:
  13.  * ln -s <pathtothisfile> /etc/munin/plugins/avm_cable_router
  14.  *
  15.  * - Add plugin configuration to /etc/munin/plugin-conf.d/avm
  16.  * [avm_cable_router]
  17.  * env.ip 192.168.178.1
  18.  * env.host fritz.box
  19.  * env.row 2
  20.  * env.io Empfangsrichtung (or Senderichtung)
  21.  *
  22.  * @author Mike Goldhausen
  23.  * @copyright Copyright (c) 2015 by MiGo-WebDesign, www.migo-webdesign.de, Germany
  24.  */
  25.  
  26. class AvmCable extends MuninPlugin {
  27.  
  28. 	private $rowValues = array(1 => "Kanal ID", 2 => "Frequenz [MHz]", 3 => "Modulation", 4 => "Power Level [dBuV]", 5 => "MSE [dB] ");
  29.  
  30. 	/**
  31. 	 * general Config for Plugin
  32. 	 *
  33. 	 * @return array
  34. 	 */
  35. 	protected function getPluginSetup() {
  36. 		$row = intval(getenv('row'));
  37. 		return array(
  38. 				'host_name' => $this->avm['host'],
  39. 				'graph_order' => 'wlan',
  40. 				'graph_title' => 'AVM Fritz!Box Cable DOCSIS '.$this->rowValues[$row],
  41. 				'graph_category' => 'cable_'.strtolower(getenv('io')),
  42. 				'graph_info' => 'This graph shows the Cable DOCSIS '.$this->rowValues[$row],
  43. 				'graph_vlabel' => $this->rowValues[$row],
  44. 				'graph_args' => '--base 1000'
  45. 		);
  46. 	}
  47.  
  48. 	/**
  49. 	 * Config for Graphs
  50. 	 *
  51. 	 * @return array
  52. 	 */
  53. 	protected function getPluginGraphs() {
  54. 		$graphs = array();
  55.  
  56. 		$row = intval(getenv('row'));
  57. 		$io = getenv('io');
  58.  
  59. 		$content = $this->readFromAvmGui("internet/docsis_info.lua?update=uiInfo", "<h4>".$io,"</div>");
  60.  
  61. 		$doc = new DOMDocument();
  62. 		$doc->loadHTML($content);
  63. 		$tmp = simplexml_import_dom($doc);
  64.  
  65. 		$rows = $tmp->body->div->table->tr[0]->th;
  66.  
  67. 		$i=0;
  68. 		foreach ($rows as $v) {
  69. 			$v = preg_replace("/[^0-9]/","", $v);
  70. 			if ((strlen($v) > 0) && is_numeric($v)) {
  71. 				$i++;
  72. 			}
  73. 		}
  74.  
  75. 		for ($z=1;$z<=$i;$z++) {
  76. 			$graphs['channel_'.$z]['label'] = "Kanal ".$z;
  77. 			$graphs['channel_'.$z]['info'] = "Kanal ".$z;
  78. 		}
  79.  
  80. 		return $graphs;
  81. 	}
  82.  
  83. 	/**
  84. 	 * Transform data from RAW HTML into XML Structure
  85. 	 *
  86. 	 * @param string $content
  87. 	 * @return data
  88. 	 */
  89. 	protected function transformData($content) {
  90. 		$row = intval(getenv('row'));
  91.  
  92. 		$doc = new DOMDocument();
  93. 		$doc->loadHTML($content);
  94. 		$tmp = simplexml_import_dom($doc);
  95.  
  96. 		$rows = $tmp->body->div->table->tr[0]->th;
  97.  
  98. 		$i=0;
  99. 		foreach ($rows as $v) {
  100. 			$v = preg_replace("/[^0-9]/","", $v);
  101. 			if ((strlen($v) > 0) && is_numeric($v)) {
  102. 				$i++;
  103. 			}
  104. 		}
  105.  
  106. 		for ($z=1;$z<=$i;$z++) {
  107. 			$graphs['channel_'.$z] = preg_replace("/[^0-9\.]/","", $tmp->body->div->table->tr[$row]->td[$z]);
  108. 		}
  109.  
  110. 		return $graphs;
  111. 	}
  112.  
  113. 	/**
  114. 	 * Read source & collecting values
  115. 	 *
  116. 	 * @return array
  117. 	 */
  118. 	protected function getValues() {
  119. 		$io = getenv('io');
  120. 		$content = $this->readFromAvmGui("internet/docsis_info.lua?update=uiInfo", "<h4>".$io,"</div>");
  121. 		$data = $this->transformData($content);
  122. 		return $data;
  123. 	}
  124.  
  125. }
  126.  
  127. $plugin = new AvmCable($argv);
  128. $plugin->start($argv);
  129. ?>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

Sicherheitsfrage * Time limit is exhausted. Please reload CAPTCHA.