Sollog für Würth / SMA/ Diehl / SolarMax / Delta (Solarlogger)

Ja, Ralf, ich hab zaglibus Programm für den Würth WR umgeschrieben und bin noch nicht so fit in C zu programmieren. Mit der Visualisierung kenn ich mich noch gar nicht aus. Weis noch nicht, ob das auf der Fritzbox geht. Der Zaglibu arbeitet ja mit einer Mysql- Datenbank auf einem PC. Was meinst Du, ob das auf der Box darstellbar ist?
 
An MySql haben sich schon einige versucht, ich kann mich nicht erinnern von Erfolgen gelesen zu haben.

Du hast trotzdem nicht erklärt, was dieses "startet nicht" bedeutet. Kannst Du mir sagen, was das Programm tun soll? Mein Eindruck ist, daß es von jemandem geschrieben wurde, der nicht viel Erfahrung mit C hatte. Außerdem ist die Einrückung nicht einheitlich, das macht das Lesen auch nicht leichter. Und wenn man dann auch nicht weiß, was das Programm tun soll, ist es erst Recht schwierig.
 
Ja, Ralf, es geht darum, vom Wechselrichter Daten auszulesen um sie dann grafisch darzustellen. Es interessieren besonders Leistung, Energie, Spannung und Temperatur. Dann kann man erkennen, wenn die Leistung nicht mehr stimmt und man was unternehmen muss.
Bei mir ist es so, daß der WR ca. 800 m entfernt im Haus meiner Eltern sich befindet. Die 800 m hab ich mit einer WLAN- Verbindung mit Dosenantennen überbrückt. Dann hab ich Internettelefonie eingerichtet und meine Eltern sparen sich die Grundgebühr des Telefonanschlusses.
Zaglibus Wechselrichter hat Ethernet- Anschluss, worüber er ihn abfragt.
Meiner hat nur 485 er Schnittstelle. Darum machs ich über einen 485/USB- Wandler und einem Hub für den Stick. Das Protokoll ist das gleiche.
An den Wechselrichter wird ein String geschickt mit den Abfragekürzeln.
Der WR antwortet darauf mit den Werten. Diese werden dann in Dezimalwerte umgerechnet und zusammen mit der Zeit auf den Stick geschrieben.
Mit ftp kann ich mir die Daten holen und z.B. mit Excel darstellen.
So weit bin ich momentan.
Zaglibus Lösung macht da mehr her:
http://lassowski.dyndns.org/BierderLOG/solarertrag.php?wr=1
Dann gibt es noch den Manfred Richter, der seine Lösung für die Fritzbox anbietet:
http://solarlogger.dyndns.tv/
Ja, der Zaglibu und ich sind keine Profis im Programmieren.
Ich habe das Programm schon zum Laufen gebracht. Wenn ich aber die Konsole, mit der ich es gestartet hatte, abgeschaltet hatte, wurde es beendet.
Dann dachte ich, starte es mit der crontab. Aber es lies sich nicht starten.
Als ich dann den Teil auskommentiert hatte, konnte ich es mit cron auch starten. Muss noch schaun, was ich damit mach.
Ausser dem Würth hab ich noch 2 Connergy WR mit dabei. Die haben CAN- Anschlüsse.
Ein Kollege, der einen CAN-USB-wandler (Tini-can) hat, hat mal versucht seinen Conergy mit der Fritzbox zu loggen. Er hatte bisher noch keinen Erfolg, es läge am Treiber, und konnte auch hier keinen abschliessenden Rat bekommen.
Ich habe mal gelesen, daß Du einem Anwender geholfen hast, seinen Zähler mit cacti zu loggen. Der hat sich jetzt die Lösung von Manfred Richter gekauft.
Jedenfalls bin ich wieder einen (kleinen) Schritt weiter. :D
 
Ich hatte irgendwann mal etwas von C++ in C umgeschrieben, kann sein, daß es das war.

Ich habe gesehen, daß Du in [POST=1643499]#40[/POST] noch etwas eingefügt hast wegen stdin. Ich sehe das auch so, daß dies absolut unnötig ist und vermutlich den Start im Hintergrund verhindert.

Deine Beschreibung erläutert übrigens ausführlich den Einsatzzweck des Programms, aber wenig die Details. "An den Wechselrichter wird ein String geschickt mit den Abfragekürzeln. Der WR antwortet darauf mit den Werten." Der Teil hätte ruhig etwas ausführlicher sein können, aber wenn das Programm funktioniert, kann man sich auch aus dem Programm noch Details holen.

Du schreibst, Du bist einen kleinen Schritt weiter. Was fehlt denn noch? Und warum willst Du überhaupt das Programm stoppen und wieder neu starten, statt es durchgehend laufen zu lassen?
 
Du schreibst, Du bist einen kleinen Schritt weiter. Was fehlt denn noch? Und warum willst Du überhaupt das Programm stoppen und wieder neu starten, statt es durchgehend laufen zu lassen?
Gestern 21:32
Ja, die Visualisierung fehlt halt noch.
Ich denke, es ist von Vorteil, das Programm täglich mal neu zu starten z. B. wenn es sich mal aufhängt.
Ich bin ja noch beim Testen und mit der crontab ist das ja leicht zu machen.
Der Manfrd Richter schreibt, er lässt das Programm durch einen 2. Prozess überwachen. Aber ich denke , das brauchen wir nicht.
Was ich gelesen habe, legt er für jeden Tag ein neues Datenfile an. Ich weis noch nicht recht wie ich es machen soll. Es werden ja riesige Mengen an Daten gesammelt. Mit der Mysql- DB kenn ich mich noch rein gar nicht aus.

Ich meine , der Mogilowski hat mal Deinen Namen erwähnt:
http://www.mogilowski.net/lang/de-de/2008/12/28/elv-em-1000-energy-meter-on-debian-with-cacti/
 
Ich denke, es ist von Vorteil, das Programm täglich mal neu zu starten z. B. wenn es sich mal aufhängt.
Hat sich das Programm bei Dir schon mal aufgehängt, oder bei jemand anderem?
Ich denke, es ist von Vorteil, dann den Grund zu finden, warum sich das Programm aufhängt.

Was ich gelesen habe, legt er für jeden Tag ein neues Datenfile an. Ich weis noch nicht recht wie ich es machen soll. Es werden ja riesige Mengen an Daten gesammelt. Mit der Mysql- DB kenn ich mich noch rein gar nicht aus.
Jeden Tag eine neue Datei ist nicht weiter schwierig.
Riesige Mengen heiß auf Deutsch wieviel genau? In was für einen Intervall willst Du denn das Gerät abfragen?
Unabhängig von Auskennen gibt es das Problem, daß MySql es nicht mag, wenn es nicht geordnet beendet wird. Wenn sich also mal die Box unmotiviert neu startet, kann es passieren, daß danach die Datenbank inkonsistent ist.
 
Ich hab jetzt die if- Bedingung bei meinem Fehler weggelassen. Jetzt kann ich auch über cron starten.

Aber es schreibt keine Daten ins Datenfile.

Wenn ich es aus der Konsole starte, funktioniert das Speichern.

Ich habe auch mal mit:
Code:
numwritten = fwrite( text, sizeof( char ), 25, file );
versucht zu schreiben. Da tut sich genauso nichts.
Bin ratlos.
Hierdran hängts:
Code:
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_attr) != 0)
    perror("terminal: tcsetattr() failed");
Muss mich wohl mehr mit der Terminalbehandlung auseinandersetzen.

Es scheint grundsätzlich nicht zu gehen. Ich habe es mit einem kleinen Beispielprogramm ohne nichts versucht. Es geht im Terminal , auch im Hintergrund. Aber wenn ich es mit cron starte, schreibt es nichts ins File.
Und wenn ich die Konsole schliesse, wird das Programm auch beendet.
 
Zuletzt bearbeitet:
In meinem Programm steht:
Code:
	  fprintf(file, "\n%s",text);
Aber es funktioniert irgendwie grundsätzlich nicht, wenn ich mit cron starte.
Das Programm läuft, aber es wird nichts geschrieben.
Aus der Konsole heraus geht es, wie geschrieben, aber wenn ich sie beende, wird das Programm auch beendet. Ich weis jetzt nicht mehr, was ich probieren soll.
Ich hab es auf meinem Ubuntu- PC getestet. Aber auf der Box wird es wohl auch nicht anders sein. :mad:
 
...
Aber es funktioniert irgendwie grundsätzlich nicht, wenn ich mit cron starte.
Das Programm läuft, aber es wird nichts geschrieben.
...
Evtl. werden mit cron die Argumente nicht berücksichtigt.
 
Klar werden bei cron die Argumente berücksichtigt.
Aber wo Du es ansprichst, in [POST=1643392]#38[/POST] sind da gar keine Argumente, also werden sie auch nicht berücksichtigt.

@Pololu
Bevor Du versuchst, das Programm weiter zu verschlimmbessern, finde doch erst einmal heraus, was tatsächlich passiert.

Du kannst mal am Anfang die Zeile mit "#define DEBUG" auf 1 ändern und es am PC laufen lassen, da sollte einiges an Informationen darüber kommen, was gesendet und empfangen wird.
Dann könnten wir mal versuchen, das Programm in eine vernünftige Form zu bringen.
 
Klar werden bei cron die Argumente berücksichtigt.
...
Also bitte, ... ich habe nicht behauptet, dass in cron die Argumente grundsätzlich nicht berücksichtigt werden. Es geht hier um diesen konkreten Fall, wo noch experimentiert wird.;)
 
Ich hab dieses Miniprogramm und kriege keine Daten gespeichert:
Code:
/* fputs example */
#include <stdio.h>

int main ()
{
   FILE * pFile;

  char	sentence[256] = {"KDY=B;KMT=40;KYR=B9F;KT0=1154;TNF=1388;TKK=19;PAC=5C;PRL=1;IL1=54;IDC=1A;UL1=910;UDC=A2C;SYS=FFFF|"};

   printf ("Enter sentence to append: ");
   pFile = fopen ("testdatei","a");
   fputs (sentence,pFile);
   fclose (pFile);
   return 0;
}

Die crontab sieht so aus:
Code:
# m h  dom mon dow   command

37 * * * * /home/erwinruhl/Desktop/test/test1
58 * * * * /home/erwinruhl/Desktop/test/sollog testdatei 5

Und es funktioniert nicht.

Vielleicht kann es einer ausprobieren?
 
...
char sentence[256] = {"KDY=B;KMT=40;KYR=B9F;KT0=1154;TNF=1388;TKK=19;PAC=5C;PRL=1;IL1=54;IDC=1A;UL1=910;UDC=A2C;SYS=FFFF|"};
...
Ich weiss nicht ob es daran liegt (kann jetzt nicht testen;) ), aber versuch mal ohne die Klammern {}. Die benutzt man nicht beim String. Oder wolltest Du ein zweidimensionales Array? Dann fehlt noch was.
 
Und "funktioniert nicht" heißt auf Deutsch was konkret?

Aber meine Vermutung ist, daß Du Dir mal den Unterschied zwischen absoluten und relativen Pfaden anschauen solltest.
 
Ich hab es eben nochmal ohne die geschweifte Klammer ausgeführt. Es funktioniert im Shell. Wenn ich es mit cron starte nicht.Es werden keine Daten im File abgelegt
Ich hab in Ubuntuhilfe folgendes gefunden:
Häufige Fehler¶

Befehl klappt in Skript und Shell, aber nicht im Cronjob¶

Der PATH wurde nicht, wie oben im Beispiel, gesetzt, und Cron findet Kommandos nicht, die von der Konsole fehlerfrei funktionieren. Cron benutzt von sich aus nicht die PATH-Variable des Users, so dass man entweder einen PATH definieren muss oder die benutzten Programme mit vollem Pfad aufrufen muss.
Aber ich denke, ich hab den Pfad richtig eingegeben. Das Programm liegt im Ordner "test" auf dem Desktop.
Es staret ja, nur werden keine Daten im File abgelegt.

Ralf, was genau meinst Du muss ich mit relativen und absoluten Pfaden beachten?
 
Oben in [POST=1644211]#56[/POST] hast Du dieses Kommando stehen:
Code:
/home/erwinruhl/Desktop/test/sollog testdatei 5
Wie genau führst Du es denn in der Shell aus? Und welche Datei erwartest Du nachher, und ganz wichtig, wo?

Nachdem Du darüber nachgedacht hast, führe mal folgendes in der Shell aus:
Code:
cd /
/home/erwinruhl/Desktop/test/sollog testdatei 5
Was passiert dann?

Außerdem hatt ich in [POST=1644195]#54[/POST] gefragt, wie die Ausgabe mit aktivem DEBUG aussieht.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.