Dachs: MSR1 mit Linux auslesen (OpenSource Projekt)

  • Hi,


    also ich habe keine Probleme mit Aussetzer oder so und meine Leitung zum Dachs ist ca. 25m lang. Ich habe eine Verzögerung von 300ms nach der Anfrage.
    Also ich sende z.B E8 und warte dann 300ms. Anschliessend trudeln dann die Bytes ein und werden zerlegt und den entsprechenden Variablen mitgeteilt. Dann warte ich z.B. 2 Sekunden und schicke C0 los und warte wieder 300ms usw. usw.


    Gruß
    Tom

  • Hi Tom,


    ich kommte mir noch vorstellen, dass es an der Einstellung der RS232 liegt, Was hats du den da eingestellt?
    Bautrate, StopBit, Flusskontrolle usw....


    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT (EEG Läuft ende 2021 aus, geht dann auch in den Inselbetrieb)
    Speicher : LG Chem 6.4 (seid 2020 2x eine Gebraut gekauft) mit 3x Effekta AX 5000 im 3Phasen Betrieb und 1x Effekta AX-P 3000 alles mit ca. 4KWp Solar in allen Ausrichtungen

    Auto : Renault ZOE 50

  • Hi,


    eingestellt habe ich 9600,8,1,n,n also nichts besonderes.
    Ich gehe dann von der PC RS232 auf einen RS485 Wandler und von dort über ein IYSTY (Telefonkabel) zum RS485 Wandler am Dachs und dann auf die RS232 Schnittstelle des MSR1.


    Gruß
    Tom

  • @ Tom,


    Dann muss ich mich noch mit den Einstellungen mit C mehr beschäftigen. Da blicke ich wohl noch nicht ganz durch. Aber zur Zeit habe ich eine "workarount" der mir mein Programm dann immer neu startet. Das dumme ist nur wenn es sich mal so richtig verschluckt hat wird das Programm 30min lang neu gestartet bis es wieder richtig ausliest, und wenn in der Zeit der Dachs startet habe ich die Meldung nicht.


    Ach ja mir ist noch aufgefallen, dass es deutlich schlimmer ist wenn der Dachs läuft.


    @ Dachs_finder


    ich habe eine neue Version ferig gemacht. Die Ausgabe ist jetzt in einer Zeile. Die anderen Daten Sätze habe ich noch nicht geschafft. Aber kommt noch irgend wann. :lokomotive:


    Gruß
    Moraklaus

    Dateien

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT (EEG Läuft ende 2021 aus, geht dann auch in den Inselbetrieb)
    Speicher : LG Chem 6.4 (seid 2020 2x eine Gebraut gekauft) mit 3x Effekta AX 5000 im 3Phasen Betrieb und 1x Effekta AX-P 3000 alles mit ca. 4KWp Solar in allen Ausrichtungen

    Auto : Renault ZOE 50

  • Hallo


    kaum werden die Tage wieder kürzer so treibt die Entwicklungslust genau wie mich.


    Mein System sieht bisher so aus ("2007 Entstehung und Prototyp meines DACS Systems):


    Datenerfassungssysteme


    Jetzt bin ich dabei das System zur Steuerung des Dachses (Ein-AusSchalten nach intelligenter Lasterkennung) auszubauen (Fernziel) und vor allem mein WebServer (Nahziel) weiterzuprogrammieren.


    Ich verwende den AppWeb Webserver der auf meinem Linux Embedded System läuft und mir gute Dienste tut.
    Als dynamisches Programmierinterface welches mir Daten aus der SQLite Datenbank herausholt benutze ich
    JavaScript und für die Statische Seitengenerierung benutze ich Dreamweaver.


    Mit allem hatte ich gute Erfahrung im letzen Winter gesammelt. Mein System speichert immer noch
    fröhlich die Daten in der SQlite Datenbank welche auch auf dem Embedded System eingelagert ist.


    Auf zum fröhlichen Hacken. Der nächste Winter kommt bestimmt.


    Gruß Euer Andreas

  • Dann muss ich mich noch mit den Einstellungen mit C mehr beschäftigen. Da blicke ich wohl noch nicht ganz durch.


    Hi.


    Ich habe zwar keine Ahnung von aber auf einer der Webseiten wo ich dir mitgeschickt habe habe ich was gefunden.


    Ich hab dein C-Code mal um folgendes ergänzt

    Code
    ...
        struct termios options;
        sprintf(adresse, "/dev/%s", com);
        fd = open(adresse, O_RDWR | O_NOCTTY | O_NDELAY | O_SYNC);
    ...


    seit ich das O_SYNC und das "struct termios options;" hinzugefügt habe geht die abfrage auf Anhieb.


    anbei noch das komplette Programm.
    Ich habe es als tar.bz2 gepackt, leider kann man in diesem Forum keine tar, tar.gz, tar.bz2 oder tgz hochladen.
    Also einfach das .txt entfernen.


    tom
    das solltest du mal schleunigst anpassen ;)


    NACHTRAG:


    Ich kann jetzt auch bis Byte 75 auslesen.
    Diese Anpassung hab ich noch nicht im angehängte Programm.
    Ich habe einfach
    while(help <= 70 nach while(help <= 75
    und
    for (help=0; help<=70; help++) nach for (help=0; help<=75; help++)


    geändert.

  • a_krause


    Wie holst du die Daten vom Dach?
    Kannst du das Programm hier veröffentlichen?


    Mir schwebt auch ein Embedded System vor, allerdings soll es so wenig als möglich mit Hilfssoftware auskommen.
    Vielleicht finden wir hier gemeinsam eine gute Lösung.


    SQ-Lite möchte ich auch nutzen, allerdings füttere die DB bei mir ein shell-script (das habe ich schon mal für ein anderes Projekt gemacht)
    ein CGI Script (wahrscheinlich auch shell) soll dann den Inhalt der Seite erzeugen.


    Sobald mofaklaus sein "dach_shell" funktioniert (am besten mit allen drei Parametern (0xc0, 0x48 und 0x50)) werde ich an das füllen der sq-lite-db gehen.


    PS: was macht eigentlich 0x48 und 0x50?

  • Hallo Dachs_finder,


    ich habe leider in den nächsten Tagen nicht so die Zeit. Aber ich will sehen was ich machen kann mit den anderen Daten sätzen. Aber da steht zu größten Teil das selbe drinn nur in anderer Zusammen stellung. Ich meine ich habe mal hier einen Excel-Datei mit den hiterlassen wo die bisher bekannten Byte beschrieben sind. Entweder in der Datenbank oder in einem Beitag. Ich suche die Datei nochmal demnächst.


    Zitat

    seit ich das O_SYNC und das "struct termios options;" hinzugefügt habe geht die abfrage auf Anhieb.


    Das werde ich bei mir auch mal testen.
    Das du jetzt alle 76 Byte auslesen kannst ist nicht schlecht, zu mal es warscheinlich das ganze deutlich zuverlässiger macht. Aber in den letzt Bytes stehen nur Nullen und was die darstellen ist nicht bekannt, so weit ich weis.


    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT (EEG Läuft ende 2021 aus, geht dann auch in den Inselbetrieb)
    Speicher : LG Chem 6.4 (seid 2020 2x eine Gebraut gekauft) mit 3x Effekta AX 5000 im 3Phasen Betrieb und 1x Effekta AX-P 3000 alles mit ca. 4KWp Solar in allen Ausrichtungen

    Auto : Renault ZOE 50

  • Hi Leute.


    Ich hab jetzt mal den ersten Schritt zu meinem bash-script gemacht.


    Das Script kann jetzt schon mal mit der "dach_shell" von mofaklaus die aktuellen Daten abholen und in eine sqlitedb schreiben.


    Ich veröffentliche auch hier mal mein Script
    Vielleicht kann ja jemand mitarbeiten.
    Ich suche noch die richtigen Befehle damit ich den letzten Eintrag aus der SQlite-DB auslesen kann.


    Würde mich um aktive Mitarbeit freuen.

  • mofaklaus


    Heute hatte ich wider Probleme mit dem auslesen vom Seriellen Port, es ist anscheinend besser geworden aber noch nicht perfekt


    Vielleicht kann uns ja der a_krause seinen c-code Zeigen
    Bei ihm scheint die Ansteuerung von der Seriellen Schnittstelle besser gelöst zu sein.

  • Hallo Dachs_finder,




    struct termios options;


    die Zeile die du geschrieben hast, habe ich auch drinn nur global in zeile 28 deklariert. Und die Strucktur hat einen anderen Namen ist aber das gleiche.


    struct termios term_attr;


    mit der Zeile
    if (tcgetattr(fd, &term_attr) != 0)
    lese ich die Configuration der Schnettstelle aus. Und mit


    if (tcsetattr(fd, TCSAFLUSH, &term_attr) != 0)
    wird sie wieder gesätzt.


    Ich denke mal das O_SYNC beim öffnen hat die verbesserung gebracht. Das habe ich bei mir jetzt auch eingebaut.


    Anbei noch die Excel Date mit den verschiedenen Daten sätzen.
    Bitte schau da mal rein sag mir welches du noch umgesetzt haben möchtest. Da ich z.Z. nicht so Zeit habe, mache nur die Sachen die wichtig sind.


    Gruß
    Mofaklaus

    Dateien

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT (EEG Läuft ende 2021 aus, geht dann auch in den Inselbetrieb)
    Speicher : LG Chem 6.4 (seid 2020 2x eine Gebraut gekauft) mit 3x Effekta AX 5000 im 3Phasen Betrieb und 1x Effekta AX-P 3000 alles mit ca. 4KWp Solar in allen Ausrichtungen

    Auto : Renault ZOE 50

  • Zitat

    Ich suche noch die richtigen Befehle damit ich den letzten Eintrag aus der SQlite-DB auslesen kann.


    ich kenne mich zwar nicht so aus mit SQlitte aber in T_SQL kann man schreiben
    Select * from Dachs_c0 where ID = (select MAX(ID) from Dachs_c0)


    Dabei gehe ich gehe aber davon aus, dass du in der Tabelle Dachs_c0 einen Primery Key mit auto increment namens ID hast ;)


    Sonst musst du das Datum heranziehen, da ist es aber besser wenn du eine Spalte vom Typ DateTime hast. Da solle dann MAX auch den hösten/letzten Wert zurück geben.


    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT (EEG Läuft ende 2021 aus, geht dann auch in den Inselbetrieb)
    Speicher : LG Chem 6.4 (seid 2020 2x eine Gebraut gekauft) mit 3x Effekta AX 5000 im 3Phasen Betrieb und 1x Effekta AX-P 3000 alles mit ca. 4KWp Solar in allen Ausrichtungen

    Auto : Renault ZOE 50

  • Dabei gehe ich gehe aber davon aus, dass du in der Tabelle Dachs_c0 einen Primery Key mit auto increment namens ID hast


    So meine Tabelle hat jetzt auch einen AUTO ID


    Suchen mit sqlite kann man dann so:


    Code
    select * from dachs_c0 order by ID DESC LIMIT 1;

    Einmal editiert, zuletzt von dachs_finder ()

  • Hi Dachs_finder,


    ja ich meine die forflaufende Nummer, du solltest in jeder Tabell ein Spalte haben die eindeutig ist. Dafür wird meistens eine fortlaufende ID benutzt.


    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT (EEG Läuft ende 2021 aus, geht dann auch in den Inselbetrieb)
    Speicher : LG Chem 6.4 (seid 2020 2x eine Gebraut gekauft) mit 3x Effekta AX 5000 im 3Phasen Betrieb und 1x Effekta AX-P 3000 alles mit ca. 4KWp Solar in allen Ausrichtungen

    Auto : Renault ZOE 50