[Frage] Infopsg für Steca Tarom 4545

oha0815

Neuer User
Mitglied seit
28 Jan 2015
Beiträge
84
Punkte für Reaktionen
0
Punkte
6
hi ho,

ich hätte da gern mal wieder ein problem.

Hab von Steca den Solarregler Tarom4545, den ich per UART(seriell) mitm Raspi verbunden hab.
Über ein script bekomm ich die Daten (1zeile) minütlich in folgender form in "eine" xxx.txt

Code:
1;2016/10/22;15:23;14.4;15.6;#;63.0;#;2.4;6.4;#;3.2;2.4;0.9;0.9;22.3;0;B;1;0;0;12.2;12.3;2.8;2.8;0;F36B
1;2016/10/22;15:24;14.4;15.5;#;63.0;#;2.3;7.7;#;3.2;2.4;0.9;0.9;22.4;0;B;1;0;0;12.2;12.4;2.8;2.8;0;20BA
1;2016/10/22;15:25;14.5;15.6;#;63.0;#;2.4;10.7;#;3.3;2.4;0.9;0.9;22.5;0;B;1;0;0;12.2;12.4;2.9;2.9;0;8C5F
1;2016/10/22;15:26;14.5;15.6;#;63.0;#;2.4;10.8;#;3.3;2.4;0.9;0.9;22.6;0;B;1;0;0;12.3;12.4;2.9;2.9;0;9653
1;2016/10/22;15:27;14.5;15.6;#;63.0;#;2.3;10.7;#;3.3;2.3;0.9;0.9;22.7;0;B;1;0;0;12.3;12.5;2.9;2.9;0;FCBA

quasi pro minute eine zeile mehr !

Jetz hab ich dieses entdeckt:psginforaspi.JPG das wär optimal um z.b. den ladestrom anzuzeigen !!

Nun meine frage: Kann mir irgendjemand helfen mit der Integrierung meiner Daten in ein infopsg z.b. in bez. auf battspg oder gesladestr

wie liest sas Daten aus einem .txt, vor allem müßt sas immer in die letzte Zeile springen um die aktuellsten Daten zu bekommen !!

-----Aktualisiert------

UART - Empfang

Code:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define BAUDRATE B4800

char UART[]= "/dev/ttyAMA0";
char FILEDEVICE[]= "/verzeichnis/tarom.txt";
char Recieve[255]="";
int Laenge;
int File;
struct termios newtio={};

unsigned char WriteFile()
{ 
    int Counter;    
    int Temp;

    Temp = open(FILEDEVICE, O_WRONLY | O_CREAT | O_APPEND);
    
    write(Temp, Recieve, Laenge);
    close(Temp); 
    system("chmod 644 /verzeichnis/tarom.txt");
  
    for(Counter = 0; Counter < Laenge; Counter++)
        {
            Recieve[Counter] = 0;
        }
    
    Laenge = 0;   
 
}

unsigned char Empfangen()
{
    int res;
    unsigned char Buffer;

    res = read(File, &Buffer, 1);
    return Buffer;
}

int UART_Init()    
{
    File = open(UART, O_RDONLY | O_NOCTTY);
    
    if (File < 0)
    {
        printf("Fehler beim oeffnen von %s\n", UART);
        exit(-1);
    }
    
    memset(&newtio, 0, sizeof(newtio));
    newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;   
    newtio.c_iflag = IGNPAR;
    newtio.c_oflag = 0;
    newtio.c_lflag = 0;        
    newtio.c_cc[VTIME] = 0;    
    newtio.c_cc[VMIN] = 1;    

    tcflush(File, TCIFLUSH);
    tcsetattr(File, TCSANOW, &newtio);
    return File;
}

int main(int argc, char** argv)
{
    char Zeichen;

    UART_Init();

    while (1)
    {
        Zeichen = Empfangen();
    
        if((Zeichen == 13))
    {
        Recieve[Laenge] = 0x0A;
            Laenge++;
            WriteFile();
        }
    else if(Zeichen > 13)
    {
            Recieve[Laenge] = Zeichen;
            Laenge++;
    
            if (Laenge > 254)
        {
                WriteFile();
            }
        }
    } 
    
    close (File);
    return 0;
}

psg-Tarom-.php

PHP:
 <?php
    
    include_once __DIR__."/../include/psg.php";
    
    $lastline = exec("tail -n1 /pfad zur/tarom.txt", $retarr, $retval);
    $exparr = (explode(";",$lastline,27));
    
    $ver="V#V 6.00#";
    $info='';
    $info.='P#';
    $info.=$exparr[2].' Batt:'.exparr[3].' Modul:'.exparr[4];
    $info.='*HTML#';
    echo $info.$ver;
    exit;
    
?>



momentane gebastelte Ansicht :Tarom schmal.JPG sehr geil !!
 
Zuletzt bearbeitet:
Moin


So holst du dir die letzte Zeile aus der index.html (auch nur eine Textdatei)...
PHP:
<?php
header('Content-Type: text/html;Charset=UTF-8');
$lastline = exec("tail -n1 index.html", $retarr, $retval);
echo '<button name="'.$lastline.'" onclick="alert(this.name)">Wer wird es richten?</button>';
?>
 
Zuletzt bearbeitet:
Das Einlesen in der psg wie von koyaanisqatsi beschrieben mit dem tail liefert die letzte Zeile und dann diese in php z. B. mit dem explode zerlegen, um an die entsprechenden Werte zu kommen. Da du hier zwei Werte auswerten möchtest, benötigst du ein psg zum Lesen der beiden Werte und zum Ablegen in der SaS-Datenbank und zwei infopsgs für die beiden Anzeigen. Dort würde dann mit dem momentanen Algorithmus für jede Stunde des Tages min und max festgehalten und dargestellt. Denkst du dir das so in dieser Form oder habe ich das falsch verstanden?
 
@ koyaanisqatsi

es sollte bei dem code von dir wenn ich auf den button drück die letzte zeile aus meiner tarom.txt dargestellt werden, es wird aber die komplette tarom.txt angezeigt !?

PHP:
<?php
header('Content-Type: text/html;Charset=UTF-8');
$lastline = exec("tail -n1 tarom.txt", $retarr, $retval);
echo '<button name="'.$lastline.'" onclick="alert(this.name)">Wer wird es richten?</button>';
?>

@JL3

grundsätzliches ziel wäre, wenn ich wie beim psginfohimbeere, rechts minütlich die werte für mommodstr und gesladestr in zahlen angezeigt bekomme
und die beiden werte als grafik(balken) alle 10 oder15min - gibt ne schönere kurve ;-) / mommodstr is immer mehr oder gleich dem gesladestr

in einem extra psg könnt ich ja dann noch andre spannungen oder ströme anzeigen lassen
 
Zuletzt bearbeitet:
Wenn mit...
tail -n1 tarom.txt
...der komplette Dateiinhalt angezeigt wird, dann besteht die, meiner Meinung nach, nur aus einer Zeile.

Das Skript*, welches die tarom.txt erzeugt, sollte dann auch einen Zeilenvorschub beim Schreiben des Datensatzes einfügen.
...so nach dem Motto...
Code:
echo -ne "#version;date;data1;data2;data3;etc[COLOR=red]\n[/COLOR]" >> tarom.txt
cat tarom.txt
#version;date;data1;data2;data3;etc
#version;date;data1;data2;data3;etc
tail -n1 tarom.txt
#version;date;data1;data2;data3;etc



* ...welches wir nicht kennen.
 
Zuletzt bearbeitet:
...
@JL3

grundsätzliches ziel wäre, wenn ich wie beim psginfohimbeere, rechts minütlich die werte für mommodstr und gesladestr in zahlen angezeigt bekomme
und die beiden werte als grafik(balken) alle 10 oder15min - gibt ne schönere kurve ;-) / mommodstr is immer mehr oder gleich dem gesladestr

in einem extra psg könnt ich ja dann noch andre spannungen oder ströme anzeigen lassen
Für einen minütlichen Durchlauf müsste man das PsG psg-IrgendeinName-.php nennen, da die "-"-Zeichen um den Namen, das PsG zeitkritisch einstuft und dann minütlich durchführt.

Die Grafik für alle 10/15 Minuten ist mit der vorhanden nicht machbar. Dafür müsste ein komplett neues PsG geschrieben werden.
 
Dieses ist der Quellcode der nachm compilieren meine tarom.txt erzeugt und befüllt:

Code:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define BAUDRATE B4800

char UART[]= "/dev/ttyAMA0";
char FILEDEVICE[]= "/verzeichnis/tarom.txt";
char Recieve[255]="";
int Laenge;
int File;
struct termios newtio={};

unsigned char WriteFile()
{ 
    int Counter;    
    int Temp;

    Temp = open(FILEDEVICE, O_WRONLY | O_CREAT | O_APPEND);
    
    write(Temp, Recieve, Laenge);
    close(Temp); 
    system("chmod 644 /verzeichnis/tarom.txt");
  
    for(Counter = 0; Counter < Laenge; Counter++)
        {
            Recieve[Counter] = 0;
        }
    
    Laenge = 0;   
 
}

unsigned char Empfangen()
{
    int res;
    unsigned char Buffer;

    res = read(File, &Buffer, 1);
    return Buffer;
}

int UART_Init()    
{
    File = open(UART, O_RDONLY | O_NOCTTY);
    
    if (File < 0)
    {
        printf("Fehler beim oeffnen von %s\n", UART);
        exit(-1);
    }
    
    memset(&newtio, 0, sizeof(newtio));
    newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;   
    newtio.c_iflag = IGNPAR;
    newtio.c_oflag = 0;
    newtio.c_lflag = 0;        
    newtio.c_cc[VTIME] = 0;    
    newtio.c_cc[VMIN] = 1;    

    tcflush(File, TCIFLUSH);
    tcsetattr(File, TCSANOW, &newtio);
    return File;
}

int main(int argc, char** argv)
{
    char Zeichen;

    UART_Init();

    while (1)
    {
        Zeichen = Empfangen();
    
        if((Zeichen == 13))
    {
        Recieve[Laenge] = 0x0D;
            Laenge++;
            WriteFile();
        }
    else if(Zeichen > 13)
    {
            Recieve[Laenge] = Zeichen;
            Laenge++;
    
            if (Laenge > 254)
        {
                WriteFile();
            }
        }
    } 
    
    close (File);
    return 0;
}


Weiß jetz aber nicht wie ich da nen umbruch reinbekomm !
 
Probier mal statt
Recieve[Laenge] = 0x0D;

dies:
Recieve[Laenge] = 0x0A;
 
Wenn die Datei ordentlich aussieht (Zeilenvorschub), hab ich noch als Ansporn ein Testskript welches das Explode demonstriert, das Array durchzählt und die Daten einzeln ausgibt...
PHP:
<?php
header('Content-Type: text/html;Charset=UTF-8');
$lastline = exec("tail -n1 tarom.txt", $retarr, $retval);
$exp_arr = (explode(";",$lastline,27));
echo '<pre>Array-Elemente: '.count($exp_arr).'</pre>';
for ($i=0;$i<=count($exp_arr);$i++) {
echo $exp_arr[$i]."<br/>";
}
?>
 
Zuletzt bearbeitet:
Recieve[Laenge] = 0x0A; --> hats gebracht, tail gibt jetz die letzte zeile korrekt aus.

wie mach ich jetzt weiter, vorerst ginge es mir mal darum, das mir sas in einem psg ein paar aktuelle daten(zahlen) anzeigt wie z.b. $zeit und $battspg und $modulspg1

wie bekomme ich jetz die mit tail rausgefischten daten in mein logzerrlegen.php ??
 
Nach dem explode() (siehe Post #9 ) befinden sich alle Daten im Array: $exp_arr
Und zwar...
1. = $exp_arr[0]
Letzte = $exp_arr[26]
Screenshot_2016-10-26-21-23-41.jpg
...macht insgesamt: 27 (von 0 - 26 )

Zeit
$zeit = $exp_arr[2];
# Das dritte Arrayelement
 
Zuletzt bearbeitet:
Nicht vergessen: Ein PsG muss mit psg... beginnen. Und die echos müssen raus. Also das hier
echo '<pre>Array-Elemente: '.count($exp_arr).'</pre>';
for (
$i=0;$i<=count($exp_arr);$i++) {
echo
$exp_arr[$i]."<br/>";
}
hst im PsG nichts verloren, diente dir nur dem Finden des richtigen Arrayelements. ;)

- - - Aktualisiert - - -

psg-Log-.php (Die Minuszeichen um den Namen starten das Script jede Minute)
PHP:
<?php
    
    include_once __DIR__."/../include/psg.php";
    
    $lastline = exec("tail -n1 tarom.txt", $retarr, $retval);
    $exparr = (explode(";",$lastline,27));
    
    $ver="V#V 6.00#";
    $info='';
    $info.='P#';
    $info.=$exparr[2].' Batt:'.exparr[3].' Modul:'.exparr[4];
    $info.='*HTML#';
    echo $info.$ver;
    exit;
    
?>
 
php ist sooo cool, wenn man sich auskennt !!!

das ich nur die hauptsächlichen 2 zeilen fürs psg brauch ist mir sogar selbst aufgefallen, werd mal weiter basteln...
 
Wenn du später Historien-Daten benötigst, so muss das psg noch erweitert werden.
 
das werd ich bestimmt, ich muß jetz nur des ganze mal ne zeit beobachten
um überhaupt zu wissen was ich nachher in ner grafik angezeigt bekommen will !

ich hätt jetz nur so auf die schnelle ein anderes problemchen, würd gern der ordnung halber über cron (<- das bekomm ich hin) nachts (23.55) ein bash script (<- das bekomm ich nicht hin) starten, das mir meine vorhandene tarom.txt aus dem ordner rauskopiert - aus dem tarom das datum (yyyy-mm-dd).txt macht - in nen andren ordner abspeichert - die ursprüngliche tarom.txt löscht !
hat jetz zwar mit sas nicht wirklich viel zu tun aber ich glaub ich bekomm da graue haare bis ich das zum laufen bekomm !

grüßle
 
Moins


cat, date und tail
Code:
cat /pfad/tarom.txt > /pfad/$(date +"%Y-%m-%d_%H:%M"_tarom.txt && tail -n1 /pfad/$(date +"%Y-%m-%d_%H:%M")_tarom.txt > /pfad/tarom.txt
...damit das SaS-PSG nicht verwirrt wird, wird tarom.txt nicht gelöscht, sondern mit dem letzten Datensatz überschrieben.

Das && bedingt die Ausführung von tail.
...wird nur ausgeführt wenn vorheriges cat erfolgreich war.

Komplete Syntax: exec && true || false
 
Zuletzt bearbeitet:
Code:
#!/bin/bash
#
mv /pfadzurdatei/tarom/tarom.txt /pfadwohinessoll/$( LC_ALL=de_DE.utf8 date +'%Y-%m-%d'; ).txt
touch /pfadzurdatei/tarom/tarom.txt
#EOF

- - - Aktualisiert - - -

@koy: Ja, gute Idee :)

- - - Aktualisiert - - -

es sollten nur die vollen Pfadangaben zu Datei mit rein, weil ist ja cron...

- - - Aktualisiert - - -

Code:
#!/bin/bash
#
cat /pfadzurdateiinsas/tarom.txt > /pfadwohinessoll/$(date +"%Y-%m-%d").txt
tail -n1 /pfadwohinessoll/$(date +"%Y-%m-%d").txt > /pfadzurdateiinsas/tarom.txt
#EOF
 
das sieht ja richtig gut aus, soweit ich das beurteilen kann, wird heut mittag noch getestet !!

mal sone frage am rande : sitzt ihr beiden zu 100% vorm pc oder wie läuft das bei euch? kaum hab ich ne frage abgeschickt, isse
schon gelöst !
das is echt spitze
 
PC war mal zu Zockerzeiten angesagt, mit soooo einer fetten Grafikkarte.
...jetzt: 24/7 Online mit gerooteten Androiden und Adminzugang zu Geräten.
:rolleyes:
 
zum zocken hab ich nen lappi mit soooooo einer fetten graka, ;-)
muß mir aber wohl demnächst fürs 7"tab ne bt tastatur organisieren, mit dem touch werd ich noch kirre beim texten !
oki, ab nach hause zum testen....
 
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.