NEWS
Parser
-
@Homoran dann
msg.date = date; -
@OliverIO Ehrlich?
so einfach?
wird das in das Array geschrieben? -
@Homoran ja wird auch in das Array geschrieben.
Ist aber nicht so schlimm, da das Array sonst nicht anderweitig ausgewertet wird.
Und beim nächsten mal das Datum ja wieder neu gesetzt wird. -
@OliverIO Nochmals Danke!
Irgendwann kapier selbst ich es.DP:
{"code":"4159","type":"Externe Netzstörung","description":"Erhöhte Netzfrequenz","action":"Installation kontrollieren1 ","date":"28 Feb 2020 10:13:51"}
-
@OliverIO Hallo Oliver, habe gesehen dass du mit dem Wechselrichter PIKO ganz schön Erfolg gehabt hast. Leider habe ich mein Projekt mit dem Auslesen zurückstellen müssen. Jetzt hätte ich jedoch wieder etwas Zeit. Würden die Erkenntnisse aus dem PIKO etwas für meinen Regler bringen?
-
@steinerma
Ziel war es die Fehlermeldungen aus dem Gerät auszulesen und in einen lesbaren Text zu übersetzen.
Evtl. kann @Homoran sein aktuelles Skript, falls er es nochmal verändert hat, hier bereitstellen. -
@OliverIO sende hier dennoch mal das Skript, welches ich von dir hatte und noch geringfügig erweitert habe (Aufruf Webseite, und Beschreiben von Modbus-Datenpunkt. Bitte nicht lachen - bin blutiger Anfänger
var request = require('request'); var url = 'http://192.168.0.34/schema.php'; function dataRequest(req) { if (req.readyState == 4) { var string = req.responseText.substring(11); var size = convertAtoH(string,2); string = string.substring(2); string = string.substring(8); // Timestamp uebergehen var ertrag = 0; for (var i=0;i < (size/2);i++) { var value = convertAtoH(string,4); string = string.substring(4); //temps if(i < 7) { if(value > 32768) { value -= 65536; } setState("modbus.0.holdingRegisters.862_ID175"/*Reserve*/, getState(i).val); // Datenpunkt von Modbus mit Variable i beschreiben (In i+1 steht dann die Nummer drin) der Temperaturwert rechnet sich dann (value/10).toFixed(1) } } } }
-
@steinerma
hast du den eine konkrete Frage?
Falls ich irgendwo schon mal was geschrieben habe, dann musst mir das nochmal zeigen, kann micht nicht mehr erinnern.Das Skript scheint auch nicht vollständig zu sein.
Da dürfte nicht viel passieren. -
@OliverIO Freundlicherweise hattest du mir das Skript am 28 Feb 2020, 14:32 (siehe in diesem Trade weiter oben) entschlüsselt. Der Regler, auf welchem die auszulesenden Werte enthält, gibt keine Werte aus. Die Werte müssen gemäss deinem Skript aus einer Datenbank abgerufen werden. Ich wäre schon glücklich, wenn ich Werte aus der Datenbank holen könnte.
Dein Skript sollte ich noch so erweitern, dass da noch ein/oder mehrere Datenpunkte beschrieben werden können. Das habe ich mal nach bestem Wissen und Gewissen versucht...
Leider kommt beim Datenpunkt modbus.0.holdingRegisters.862_ID175 (welchen ich beschreibe) immer nur die Zahl "0" raus.
Meine Frage: weisst du, wo ich den Fehler mache? Gemäss deiner Rückmeldung von vorhin gehe ich davon aus, dass ich auch das Auslesen nicht korrekt erstellt habe? -
@steinerma
ok dann lese nochmal meine Post von oben genau durch und führe alle Schritte durch.
Bei Problemen frage konkret was nicht funktioniert.
Das Skript 2 Posts hier drüber funktioniert nicht, weil es nicht vollständig ist. -
Evtl. kann @Homoran sein aktuelles Skript, falls er es nochmal verändert hat, hier bereitstellen.
werde ich gerne machen.
GHAbe aber noch nichts verändert, weil ich zum Glück noch keinen weiteren Fehler hatte und so die "Funtionsfähigkeit" im Live-Modus nicht testen konnte -
@steinerma Du arbeitest aber anscheinend über modbus.
Das ist ganz was anderes - wir arbeiten über das Webinterface -
@Homoran Den Wert aus dem Webinterface möchte ich gerne über Modbusübertragen. Modbus funktioniert bei mir über den Modbusadapter.
Jedoch erhalte ich keine Werte aus dem Webinterface... -
@steinerma sagte in Parser:
Den Wert aus dem Webinterface möchte ich gerne über Modbusübertragen.
Das habe ich mir gedacht
@steinerma sagte in Parser:
Modbus funktioniert bei mir über den Modbusadapter.
Dann hast du ja die Fehlermeldungen
@steinerma sagte in Parser:
Jedoch erhalte ich keine Werte aus dem Webinterface...
Welche Version hast du denn da?
-
Danke für deine Antwort. Ursprünglich wollte ich die Werte mit Parser auslesen. OliverIO hat dann herausgefunden, dass die Werte nicht im Sourcecode stehen. Er konnte die Stelle, an der das ganze aus der Datenbank gelesen wird eruieren. Siehe in diese Trade vom 28 Feb 2020, 14:32.
Wenn ich das Ganze jetzt richtig interpretiere, muss ich keinen Parser-Adapter mehr haben sondern ein Skript erstellen. Den Parser-Adapter habe ich noch nicht deinstalliert, er hat Version 1.0.7 -
@steinerma sagte in Parser:
Danke für deine Antwort. Ursprünglich wollte ich die Werte mit Parser auslesen. OliverIO hat dann herausgefunden, dass die Werte nicht im Sourcecode stehen. Er konnte die Stelle, an der das ganze aus der Datenbank gelesen wird eruieren. Siehe in diese Trade vom 28 Feb 2020, 14:32.
Wenn ich das Ganze jetzt richtig interpretiere, muss ich keinen Parser-Adapter mehr haben sondern ein Skript erstellen. Den Parser-Adapter habe ich noch nicht deinstalliert, er hat Version 1.0.7korrekt.
es kommt aber auf die Firmware-Version des Communication-Boards (und von dem Webinterface) vom Piko an, ob es im Code steht oder nicht.
deswegen hatte ich danach gefragt -
@Homoran Ach so, bitte entschuldige - ich habe bei mir keinen Piko Wechselrichter. Es handelt sich bei mir um einen Sonnenkollektor-Regler der Firma Prozeda. Dieser ist über das Conexio 200 Modul verbunden. Das Conexio 200 Modul enthält einen LAN Anschluss und ist mit einem Webinterface ausgerüstet. Hier ein Beispiel der Messwerte:
Die Messwerte stehen aber leider nicht im Quelltext und somit lässt es sich nicht so einfach mit Parser auslesen
-
@steinerma
Irgendwie fangen wir schon wieder von vorne an, obwohl das doch oben alles schon besprochen wurde. Die Werte sind in der Datei Logging.txt
https://forum.iobroker.net/topic/30628/parser/13
Ein paar Posts weiter hab ich geschrieben was man grob machen müsste.
Du musst es schon versuchen die Anweisungen umzusetzen, wenn du damit Probleme hast stell konkrete Fragen bei warst du Probleme hast.
Wir machen hier Code und Daten Reengineering
Das gehört schon etwas zu den fortgeschrittenen Disziplinen.
Allerdings musst du dich da auch in das ein oder andere versuchen einzulesen.
Wie gesagt, bevor du komplett verzweifelt stelle hier konkrete Fragen -
@OliverIO Bitte entschuldige - ich bin mit Java überhaupt nicht bewandt.
habe hier versucht Daten aus der Logging.txt abzurufen:
(Zeilen 1-7). Kann man das so machen?var request = require('request'); var url = 'http://192.168.0.34/logging.txt'; function updateData() { sendRequest('medius_val.xml?dummy='+Math.round((Math.random()*99999999)), dataRequest); }
-
@steinerma
Ich glaube wir müssen da viel früher anfangen und erst mal Grundlagen vermitteln. An diesem Skript gibt es leider mehrere Probleme
Hast du mal nachgeschlagen, was die einzelnen Zeilen überhaupt tun?
Zeile eins: require Lädt zusätzliche Programmbibliotheken, welche im Basis Umfang von Nodejs/javascript nicht enthalten sind
Hier wird die Bibliothek Request geladen. Fast alle Bibliotheken werden in einer so genannten registry verwaltet.
Der Link zu Dieser registry und speziell zu diesem Paket lautet wie folgt
https://www.npmjs.com/package/request
Dort kann man nachlesen, was für Befehle diese Bibliothek überhaupt anbietet und wie diese zu verwenden sind
Request ist ein Paket mit dem man sehr leicht Dateien aus dem Internet abrufen kann und in Java Skript weiter verwenden Kann
Wenn du dort nach liest dann hilft dir das einfachste Beispiel schon weiter.const request = require('request'); request('http://www.google.com', function (error, response, body) { console.error('error:', error); // Print the error if one occurred console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received console.log('body:', body); // Print the HTML for the Google homepage. });
In diesem Beispiel wird die Seite von Google aufgerufen, und wenn die Daten da sind, bekommst du das Ergebnis über die Parameter error Response und Body zurück.
Anhand der Erklärungen an den jeweiligen Zeilen siehst du das der Inhalt der Datei dann im body steht
Nimm einmal dieses Beispiel und setzt angeblich die Gestelle deine Adresse mit dem Logging.txt ein Und schauen was passiert
Wenn du Hilfe zu den einzelnen befehlen benötigst, hilft es schon diese zu kopieren und mit dem Zusatz Javascript in Google einfach einzugeben
Wie gesagt ohne debugger ist es etwas aufwändiger und der Befehl Console.log ist dein Freund, da er dir den Inhalt einzelner variablen ausgeht und du erkennen kannst ob etwas funktioniert oder nicht