s0 Stromzähler über Fritzbox - ttyUSB0 auslesen

Hallo,

ich habe einen s0-Stromzähler, der über die Fritzbox mit einem seperaten Programm geloggt wird.

Dazu einen RS232-to-USB Konverter mit Anschlüssen 4 und 8 als DTR und CTS direkt mit dem s0-Ausgang des Stromzählers verbunden.

Auf der Fritzbox befinden sich die
pl2302.ko,
usbserial.ko und
ftdi_sio.ko
als Treiber und es wird ein virtueller Comport angelegt ttyUSB0.

Hat schon jemand eine direkte Auslesemöglichkeit mit IPS entwickelt?
Kann man die 1-Wire-Sachen irgendwie dafür hernehmen?
Ich versuchs mal über die ETA-Heizkessel-comportgeschichte…

Gruß Konny

So jetzt hab ich mal den Comport über FritzUSBFernanschluss drann.
Wie kann ich Impulse aus dem Comport auslesen?
:confused:
Gruß Konny

Ich glaub ich leg das wieder auf Eis…
logfile auslesen ist einfacher…

Ob es einfacher ist weiss ich nicht, aber es geht in dieser Rubrik doch dauernd um den Com-Port :

Häng dich doch da mal mit ran.

Gruß
Bruno

Dazu muss der Comport aber erst mal was senden, entweder auf Anforderung oder eigenständig.

Genau,
und das kann mit einem Steuerungsskript AUF der Fritzbox passieren…
… Module laden
… Knoten anlegen
… Rechte setzen
… Eingang ComPort starten, Konsole auslesen und zählen
aber das kann ich nicht…: :confused:


wie ist das mit einer Telnetkonsole auslesen… (schmarrn)

Konny

Ich bräuchte noch einen Tip wie ich von einem Logfile in der Form:
Datum, Wert,Zahl
Datum1,Wert1,Zahl1
Datum2,Wert2,Zahl2
Datum3,Wert3,Zahl3

möglichst einfach zu einer Auswertung komme.

Das log-file hab ich schon in einem String und mit explode:

  $data = file_get_contents($filename); // gesamte Datei in einen String einlesen
   $S0 = explode(',', $data);       // $data in durch , separierte Datensätze zerlegen
	echo "$S0[0]
";
   SetValueString(43757 /*[Device\Stromzähler\konnyS0\Timestamp]*/, (float)(str_replace(',', '.', $S0[0])));

analog $S0[1] usw…

komm ich in die erste Zeile…
mit arrays kenn ich mich nicht aus…
ich hab auch nix einfaches dazu im Forum gefunden :frowning:
Gruß Konny

Was willst denn auswerten, alles oder nur den letzten Wert. Lass es durch eine for Schleife laufen.

für das Auswerten S0 hab ich ja schon div.Scripten hier gefunden
bzw eigene Vorstellungen… gedanklich weiter :

//Lesen Tages-Logfile in eine Stringvariable zur Verarbeitung
//Datenbeschreibung erste Zeile immer gleich
//lege Datensätze an,Form: Datum-Zeit, Wert
//ermittle Anzahl DB-Sätze Zeilen-1
//max 12*12=144 Datensätze (5min)
//ermittle Zeit erster Datensatz (zweite Zeile) zu richtigen Viualisierung
//ermittle Zeit letzter Datenstatz (letzte Zeile)
Schleife Anzahl
//lese Datensätze ein je vorhandene Zeile
//berechne Differenz der Datensätze-1 je Zeile
//schreibe Diff-Wert in IPS Datenbank
ende
//speicher Tagesdaten ab
//visualisiere Graph als Bildchen
//berechne div. Verbrauch und Kosten

so in etwa…

graph.PNG

Dann bastel mal.

letzte Zeile aus Log.


$lines = file($logfile);
//letzte Zeile aus Log
$letzterLog = $lines[count($lines)-1];
//aufteilen in einzelne Daten
$split = explode(',', $letzterLog);
print_r($split);

Wie gehen die Arraywerte in die Variaben?

Bitte weitere Hilfe

$Anzahl=count($lines); //Anzahl der Arrays
echo "Anzahl der Zeilen ".$Anzahl."
";
for($x = 1; $x < ($Anzahl); $x++)
{
  $split[$x] = explode(',', $lines[$x]); //aufteilen in einzelne Daten
  echo $lines[$x]; //kontrolle
  $S0[0] = ?????????????????????		//Zeitstempel
  $S0[2] = ?????????????????????    //Ablesung 5 Minuten
  $S0[5] = ?????????????????????    //Tagesablesung
   SetValueString(43757 /*[Device\Stromzähler\konnyS0\Timestamp]*/, (float)(str_replace(',', '.', $S0[0])));
	SetValueString(38893 /*[Device\Stromzähler\konnyS0\1steAblesung]*/, (float)(str_replace(',', '.', $S0[2])));
	SetValueString(52398 /*[Device\Stromzähler\konnyS0\Tageszähler]*/, (float)(str_replace(',', '.', $S0[5])));
	//print_r($split[$x]);
} 

Gruß Konny

Ich kann dir nicht so ganz folgen.

$split = explode(',', $lines[$x]);

$SO = $split[0];
$SO1 = $split[1]; //usw. 

oder was meinst Du.

Ja danke, super… wie gesagt diverse Funktionen und mit Arrays hab ich noch nix zu tun gehabt :slight_smile:

$lines = file($logfile); //Array

$Anzahl=count($lines); //Anzahl der Arrays
echo "Anzahl der Zeilen ".$Anzahl."
";
for($x = 1; $x < ($Anzahl); $x++)
{
  $split = explode(',', $lines[$x]); //aufteilen in einzelne Datenzeilen
  echo $x.": ".$lines[$x]."
"; //kontrolle
  $S0 = $split[0];  //Zeitstempel
  $S01= $split[1];  //Wert1
  $S02= $split[2] ; //Ablesung 5 Minuten
  $S03= $split[3];  //Wert3
  $S04= $split[4];  //Wert4
  $S05= $split[5];  //Tageszähler
	SetValueString(43757 /*[StromS0\S0_0_Timestamp]*/, $S0);
	SetValueFloat(27901 /*[StromS0\S0_1]*/,(float)($S01));
	SetValueFloat(38893 /*[StromS0\S0_2]*/,(float)(str_replace(',', '.', $S02)));
	SetValueFloat(27173 /*[StromS0\S0_3]*/,(float)(str_replace(',', '.', $S03)));
	SetValueFloat(36476 /*[StromS0\S0_4]*/,(float)(str_replace(',', '.',$S04)));
	SetValueFloat(52398 /*[StromS0\S0_5_Tagesz]*/,(float)(str_replace(',', '.', $S05)));
	//print_r($split[$x]);
}

Die Variablen sind jetzt zwar geloggt in die Datenbank, aber leider mit der falschen Zeit…bzw. nicht mit dem passende Zeitstempel…
wo komm ich da weiter?

Ich glaube es ist dann einfacher und besser nur den letzten Datensatz alle 5 Minuten auszulesen?
Damit wäre das Zeitproblem eleminiert…
… so hab ich es jetzt auch gemacht mit trigger 5min…

Nachtrag …schaut ganz gut aus … etwas das Script für die Raumtemperatur-Trend geändert und schon hab ich es so einigemaßen…

Gruß Konny

trend_s0.png