SBFSport mit Cronjob funktioniert nicht

  • Ich habe seit einigen Tagen einen SMA SB 3600SE und möchte aus Kompatibilitätsgründen die Ausgabe von SBFSpot parsen und in eine Datenbank schreiben. Das klappt mit meinem PHP-Skript von der Shell auch wunderbar, rufe ich das Skript aber über einen Cronjob auf, geht es nicht (ich rufe innerhalb von PHP auf über shell_exec):


    Mit debug Meldungen erhalte ich das hier:


    Der Vollständigkeit halber noch der PHP AUfruf:

    Code
    shell_exec('/usr/local/bin/sbfspot.3/SBFspot -v -finq -nocsv -nosql')


    Hat jemand eine Idee? Mit system(), exec(), passthtru() etc. hab ichs auch schon probiert, immer das gleiche...

  • Wie es aussieht, ist die Netzwerkeinstellung nicht ganz richtig.


    Eine Frage am Rande:
    Warum lässt du das Programm nicht seine SQLite-Datei beschreiben? Aus dieser Datenbank kannst und man ganz einfach mittels Datenbankabfragen die Daten, die du haben willst, extrahieren und in eine eigene Datenbank schreiben.


    Oder nutze die CSV-Dateien.
    Das aus der Aufgabe, die das Programm auf die Konsole ausgibt, zu machen, wäre mir zu viel Aufwand.

    Hanjörg Resa


    SunnyBoy GCI 2400 (bis 28.04.2016)
    SunnyBoy2.5-1VL-40 (seit 11.05.2016)
    2*12 BP-Solar 585

  • Wenn das Skript aber von der Kommandozeile über das PHP-CLI (php -f skript.php) anstandslos funktioniert: Was kann dann an den Netzwerkeinstellungen falsch sein? Der Aufruf im Cronjob erfolgt ganz genau so wie über das CLI. Bin da echt ratlos...


    Warum aus der Ausgabe parsen? Fällt mir ehrlich gesagt leichter als eine CSV Datei zu parsen. Außerdem läuft SBFspot auf einem Raspberry, und die permanten Schreibzugriffe auf die SD-Karte sind sicherlich nicht der Gesundheit der Karte zuträglich. Eine MySQL-Datenbank läuft auf einem anderen Rechner ohnehin schon, da wäre eine zusätzliche SQlite DB irgendwie doppelt gemoppelt. Zur Not könnte ich für mein altes Logging die Werte aus der MySQL-Datenbank von SBFspot holen, aber mich würde schon allein aus Neugier brennend interessieren, warum der Cronjob nich tläuft.

  • Mein SBFSpot läuft auch auf einem PI, die Dateien liegen aber auf einem bei NFS erreichbaren Rechner mit "echter" Festplatte ;-)
    So wird nicht auf die SD-Karte geschrieben.


    Das Problem beim Starten von Programmen per Crontab ist, dass dort nicht die gesamte Umgebung (Pfad, Variablen, ..) des Benutzers, unter dessen Kennung der Job läuft, vorhanden ist.
    Und so kommt es, dass sich Programme unterschiedlich verhalten.


    Ich habe mir angewöhnt, in dem Script, das ich automatisch ausführen lasse, immer alles zu definieren. Auch gebe ich komplette Pfade an oder wechsele sogar in das Verzeichnis, in dem die ausführbare Datei liegt.


    Und dann beim Editor darauf achten, dass er den richtigen Zeilenumbruch speichert ;-)

    Hanjörg Resa


    SunnyBoy GCI 2400 (bis 28.04.2016)
    SunnyBoy2.5-1VL-40 (seit 11.05.2016)
    2*12 BP-Solar 585

  • Zitat von HResa

    Mein SBFSpot läuft auch auf einem PI, die Dateien liegen aber auf einem bei NFS erreichbaren Rechner mit "echter" Festplatte ;-)
    So wird nicht auf die SD-Karte geschrieben.


    Hatte ich auch schon überlegt. Aber eigentlich dachte ich, dass die Nummer mit SBFspot eine schnelle Angelenheit wäre. Jetzt artet es doch aus ...

    Zitat


    Das Problem beim Starten von Programmen per Crontab ist, dass dort nicht die gesamte Umgebung (Pfad, Variablen, ..) des Benutzers, unter dessen Kennung der Job läuft, vorhanden ist.
    Und so kommt es, dass sich Programme unterschiedlich verhalten.
    Ich habe mir angewöhnt, in dem Script, das ich automatisch ausführen lasse, immer alles zu definieren. Auch gebe ich komplette Pfade an oder wechsele sogar in das Verzeichnis, in dem die ausführbare Datei liegt.


    Ist auch mein Verdacht, dass irgendwas beim Aufruf der ausführbaren Datei nicht erreichbar ist. Aber was bloß... ich könnte den Pfad dahin als Umgebungsvariable vorher spreichern. Im Cronjob sind aber sowohl die Pfade zur ausführbaren Datei als auch zu PHP als auch zum Skript absolut aufgeführt.

    Zitat


    Und dann beim Editor darauf achten, dass er den richtigen Zeilenumbruch speichert ;-)


    Ich schreib direkt in der Shell, da taucht das Problem nicht auf...

  • Bei mit steht auf dem PI in der Crontab:

    Code
    */5 5-23 * * * /home/pi/scripte/SBFspot.sh


    Und in der Datei selber:

    Bash
    #!/bin/bash
    ls -la /media/linux/
    /usr/local/bin/sbfspot.3/SBFspot -v


    Das "ls" soll nur sicherstellen, dass der Automount das NFS-Share gemountet hat, in das geschrieben wird.


    Ich habe mal die Zeilen aus der "SBFspot.cfg", die nicht mit # beginnen (sortiert) zusammengefasst:


    Die "SBFspot.cfg" liegt im gleichen Verzeichnis wie das Programm.


    Ich habe ein "SB2.5-1VL-40" WR und greife über das LAN auf ihn zu. Beim SBFSpot erstellt mir die CSV-Dateien und schreibt auch in die Datenbank.


    Übrigens, man kann auch eine MySQL-Datenbank befüllen. Man muss dort wohl nur die passenden Tabellen vorher anlegen, oder dem User das recht geben. Keine Ahnung.
    In der cfg stehen unten die (auskommentierten) Zugangsbedingungen für die Datenbank.

    Hanjörg Resa


    SunnyBoy GCI 2400 (bis 28.04.2016)
    SunnyBoy2.5-1VL-40 (seit 11.05.2016)
    2*12 BP-Solar 585

  • Ich befülle bereits eine MySQL Datenbank. Das funktioniert auch soweit super, wenn nur die Werte OK wären. Aber das habe ich in einem anderen Thread schon thematisiert.


    Ich versuch das jetzt mal mit den CSV Dateien. Mal sehen, ob das was bringt.


    UPDATE: Ich werde jetzt eine andere Variante als die über das parsen der Ausgabe auf der Kommandozeile versuchen. Warum die Werte über SBFspot andere sind als auf dem Sunny Portal, werde ich mit SMA kären. Dazu mehr im anderen Thread unter https://www.photovoltaikforum.…pot-t116167.html#p1472325