Logo

    

    

 

 

| Konzept | Javascript | Script Banner | CGI SunnyData-fake | CGI SunnyWeb |
Javascript für die Datenabfrage und Anzeige
von webmaster, Sonntag, 11. April 2010


/*Wie auf der Abbildung "Konzept" zu sehen ist, werden die 
Messwerte des WR durch den Client vom Server angefordert,  
per Javascript auf dem Client verarbeitet und letztendlich 
im Browser angezeigt. Dazu wird ineinem ersten Schritt ein 
HttpRequest-Kanal zwischen Client und Server aufgebaut:*/

var httpxml = null;
if (window.ActiveXObject) {
	httpxml = new ActiveXObject("MSXML2.XMLHTTP.3.0");
}
else if (window.XMLHttpRequest) {
	httpxml = new XMLHttpRequest();
}

/*Die beiden if/else-Varianten decken verschiedene Browser ab und 
sollten bei IE und Firefox funktionieren. Durch die Funktion "abfrage" 
erfolgt die Anfrage an den Server, wenn der HttpRequest-Kanal 
erfolgreich aufgebaut wurde. Anschließend erfolgt die Auforderung 
an den Server, die Daten zu senden. Sobald der Server die Anfrage 
bestätigt hat, ändert sich der Status httpxml und die Funktion 
"ausgeben" für die Verarbeitung der Daten und die Darstellung 
im Browser wird gestartet. Dazu später mehr.*/

//Daten abfragen und Verarbeitung aufrufen

function abfrage() {
	if (httpxml != null) {
		httpxml.open("GET", "/Pfad/Datei", true);	 //Datei öffnen
		httpxml.setRequestHeader("Pragma", "no-cache"); //Cachen der Daten verhindern
		httpxml.setRequestHeader("Cache-Control", "must-revalidate");
		httpxml.setRequestHeader("If-Modified-Since", document.lastModified);
		httpxml.onreadystatechange = ausgeben;	//Funktionstart definieren
		httpxml.send();		//Daten anfordern
		return false;
	}
}

/*Die Funktion "ausgeben" verarbeitet die empfangenen Daten und gibt 
sie mit den Einheiten an die Anzeigefelder im Browser aus:*/

function ausgeben() {
	if (httpxml.readyState == 4) {
		var daten = httpxml.responseText.replace(/,/g, ".");  //für Berechnungen Komma durch Punkt ersetzen
		var werte = daten.split(/\t/); //aus String Array generieren, Trennzeichen Tabulator
		werte.splice(16, 2); //Müll abschneiden und zwei Elemente für Ppv u. Effizienz reservieren
		var zeit = werte[0].split(/\s/); // Datum/Zeit trennen
		werte.splice(0, 1, zeit[0], zeit[1]);
		var intWerte = new Array(2, 3, 4, 5, 7, 9, 10, 13); //Integer erzeugen
		for (var i = 0; i < intWerte.length; i++) {
			werte[intWerte[i]] = parseInt(werte[intWerte[i]]);
		}
		werte[6] = werte[6].replace(/^\s+/,""); //führende Leerzeichen entfernen
		werte[8] = werte[8].replace(/^\s+/,"");
		werte[12] = werte[12].replace(/^\s+/,"");
		werte[11] = (werte[11] * 10 + 149059) / 10;	//Korrektur E-gesamt um 14905,9 kWh
		werte[16] = werte[7] * 100000 / werte[2] / werte[10]; //Wirkungsgrad berechnen
		werte[16] = werte[16].toFixed(2); //und mit zwei Nachkommastellen in Array speichern
		werte[17] = parseInt(werte[2] * werte[10]/1000); //Ppv berechnen
			//Einheiten für Messwerte definieren und Werte an Displays ausgeben
		var einheiten = new Array("", "", " V", " V", " mA", " V", " Hz", " W", 
		" \u2126", " k\u2126", " mA", " kWh", " h", "", "", "", " %", " W");
		for (var i = 1; i <= werte.length; i++) {
			document.getElementById("feld"+i).value = werte[i - 1] + einheiten[i - 1];
		}
	}
}
//Ein Counter sorgt für die regelmäßige Aktualisierung der Daten:

var refInterval = 0;
var messinterval = 60;

function startCounter() {
	refInterval = refInterval - 1; //Counter von 60 - 1
	if (refInterval < 1) { //Counter bei "0" auf "60" setzen
		refInterval = messinterval; //und
		abfrage(); //Abfrage aufrufen
	}
	document.getElementById("counter1").value = refInterval + " sek."; //aktuelle Counterzeit anzeigen
	timerID = setTimeout("startCounter()", 1000); //eine sek. warten, dann Funktion neu starten
}
//

Für andere Wechselrichter müssen die Variablen ggf. angepasst werden. Die messwerte.html kann unverändert übernommen werden, wenn die Reihenfolge der Datensätze im Array "werte" vorab entsprechend sortiert wird.
Die Messwerte können auch im LAN angezeigt werden. Dazu wird im Browser die interne IP des Servers mit dem Port 80 eingegeben, z.B. 190.160.444.100:80.

Download der Scripte als Textdatei

Darstellung des Codes erfolgt mit:
SyntaxHighlighter version 3.0.83 (July 02 2010)
http://alexgorbatchev.com/SyntaxHighlighter