um den Akku meiner Solaranlage im Blick zu haben, habe ich mich für den Victron Energy BMV-702 entschieden.
Zusammen mit dem USB-Adapter läßt sich der BMV relativ einfach an den PC anbinden und mit Hilfe der Software auch anzeigen.
Nun soll das ganze aber auch an IPS angebunden werden. Dazu habe ich einen seriellen Port angelegt.
Der Serial Port gibt seine Daten an einen Cutter weiter.
Und hier nun beginnt mein Problem, wie geht es jetzt weiter? Woher weiß ich, was das Linke und Rechte Trennzeichen sind?
So sieht das Debug des seriellen Ports aus:
ASCII Codes sind Hex Werte
Hast du den Haken unten links im Debug Fenster gesehen?
Du kannst dir Darstellung (Hex, Klartext) in der Console umschalten.
Michael
Hättest du anstatt einen Screenshot, den Inhalt hier hochgeladen, wäre es etwas einfacher.
Die Trennzeichen sind ganz normale Steuerzeichen. Steuerzeichen – Wikipedia
Am einfachsten ist es wohl den Cutter ob im Dropdown auf R: CRLF einzustellen.
Dann bekommst du jede Zeile einzeln in deine RegisterVariable.
In dem dort hinterlegten Script, kommt das hier:
$Data = explode(chr(0x09),$_IPS['VALUE']);
// $Data[0] => Ist der Index, z.B. Alarm oder H1 , H2 etc
// $Data[1] => Ist der Wert
So ich habe es hinbekommen… Danke nochmal Michael.
<?
$Data = explode(chr(0x09),$_IPS['VALUE']);
// $Data[0] => Ist der Index, z.B. Alarm oder H1 , H2 etc
// $Data[1] => Ist der Wert
echo $Data[0];
echo $Data[1];
if(substr($Data[0],0,1) == 'V') {
SetValue(44829 /*[Software\PV\BMV 700 Daten\Batterie Spannung]*/,(floatval($Data[1])/1000));
}
if(substr($Data[0],0,1) == 'I') {
SetValue(10277 /*[Software\PV\BMV 700 Daten\Batterie Strom]*/,(floatval($Data[1])/1000));
}
if(substr($Data[0],0,3) == 'SOC') {
SetValue(23564 /*[Software\PV\BMV 700 Daten\Batterie Status]*/,(floatval($Data[1])/10));
}
?>
Eine Frage bleibt aber noch.
Es kommen im Sekundentakt Werte, wenn ich das Script laufen habe, dann braucht IPS all meine Systemleistung. Ich kann dann auf dem Rechner eigentlich nichts mehr machen, selbst das Webfront ist gähnend langsam.
Kann man irgendwie begrenzen, das Werte nur aller 10 Sekunden aufgezeichnet werden?
Wie?
Kommen die Werte eventuell sogar noch schneller rein?
Das kannst du sonst sehen, wenn du in der RegVar als übergeordnete Instanz Mal keine/None wählst.
Rauschen die Daten im IO dann noch schneller rein?
Alternativ auch einmal die Expertenansicht PHP-Threads öffnen.
Eigentlich ist das jetzt ein nicht so rechenintensives Script, dass es alles lahmlegen sollte.
Worauf läuft IPS ?
Verzögerung kannst du es selbst nicht, nur etwas ‚Tricksen‘.
Z.B. über ein Script den IO öffnen und nach X Sekunden wieder schließen.
Das Script dann über ein ScriptTimer alle Minute starten.
Michael
Also die Werte kommen im Sekundentakt. Und der Cutter ist das Problem.
Sobald ich diesen „Einschalte“ geht die Auslastung hoch. Nur mit dem IO ist alles super. Auch das zuschalten des Scriptes bringt keine steigerung der Auslastung.
ich habe in der letzten Zeit hier noch etwas rumprobiert.
Ergebnis ist das selbe.
Die Daten kommen im Sekundentakt oder sogar noch schneller rein.
Im IO ist das kein Problem.
Sobald der Cutter arbeiten muss, dann geht IPS auf 35% Systemleistung. Und legt damit meinen Rechner lahm. :mad:
Jetzt wollte ich mal das von Michael angesproche probieren:
Ich finde nur den Befehl nicht, mit dem ich den IO öffnen und schließen kann.
Kann mir da jemand nochmals auf die Sprünge helfen.
kannst Du mir bitte etwas unter die Arme greifen ich hänge fest. Ich bekomme die Daten einfach nicht lesbar dargestellt.
Ich habe allerdings keinen Speicher sondern einen Victron Smart Solar regler der per USB angeschlossen ist.
Ich habe Dir bis zum Cutter folgen können. Aber dann bin ich raus
ich denke nicht da ich die Daten nicht lesen kann. Soweit ich das beurteilen kann kommt da Hex an…
Habe mal in 2 Dateien mit unterschoedlichem Leseformat geschrieben. Siehe Anhang.
Vielen Dank für Deine Hilfe.