Dachs: MSR1 mit Linux auslesen (OpenSource Projekt)

  • Hallo dachs_finder,


    Ich habe leider erst jetzt deine Nachrichten bekommen und weis nicht wie ich darauf antworten soll, daher mache ich einfach mal ein Thead dazu auf.


    Hallo alle,


    einige wissen es ja schon, ich lesen meinen Dachs mit MRS1 mit einem Linux "Server" aus. Jetzt bin ich von dachs_finder nach mehr Informationen dazu gefragt worden. Oder ob wir nicht dazu eine Art OpenSource Projekt aufmachen wollen. Das finde ich eine gute Idee. :) Vor allem wenn sich dadurch noch mehr finden lassen die Linux einsetzten und somit noch bestehende Probleme beseitigen helfen.


    Mein System im Überblich:
    -PII Rechner mit Suse Linux 8.2
    -Apatche I Webserver mit PHP4
    -My SQL Datenbank


    -Dazu habe ich ein C-Programm geschrieben, welches die Daten vom Dachs holt und im "chared Memory" ablegt.
    -Ein weiteres C-Programm speichert die Daten in die Datenbank.
    -Ein CGI (in C geschrieben) zeigt die aktuellen Daten aus den "chared Memory" über den Webserver an.
    -Einige PHP Scripte können dann aus Datenbank Kurven oder Statistiken anzeigen




    Jetzt sollten wir aber erst darüber diskutieren in welcher Form man ein Projekt daraus macht. Denn meine Lösung muss ja nicht beste sein und ist sicherlicht auch nicht so ohne weiteres von einem nicht Programmierer zu installieren.


    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT
    Speicher : LG Chem 6.4 mit Effekta AX 5000 und ca. 2KWp Solar

  • Hallo Mofaklaus,


    das finde ich richtig gut, wenn wir uns hier über die Datenaufnahme und -weiterverarbeitung unter Linux unterhalten können.


    Ich selbst betreibe einen Rechner neben dem Dachs, auf dem Linux-Ubuntu läuft.
    Die Datenübergabe Dachs-Rechner geschieht bei mir im Augenblick von Hand und wird
    mit der Tabellenkalkulation von OpenOffice verarbeitet.
    Im Augenblick bin ich dabei, eine 8-Bit-Relaiskarte an den parallelen Port des Rechners zu hängen.
    Den C-Code dafür habe ich aus dem Internet und für meinen Bedarf leicht abgeändert.
    Die grafische Oberfläche zur Funktionsverwaltung der Relaiskarte habe ich mit Gambas (VB unter Linux) geschafft.
    Es stört mich bisher nur, daß ich mich immer als ROOT einwählen muß, um die Relaiskarte anzusprechen.
    Das sollte irgendwann einmal vom normalen User aus geschehen.
    Also, ich stecke noch an/in den Anfängen, lege aber meine Tätigkeiten gerne offen.



    PS. mein Dachs läuft unter MSR2 und dazu habe ich noch keine gescheiten Informationen über I/O gefunden.



    mit Gruß
    Werner

  • Hallo Bastler,


    eine nette Sache mit Ubuntu. Sollte eigentlich keinen Unterschied machen von der Programmierung. Ich denke sowieso, dass sich jeder den Code anpassen muss und selbst kompilieren.
    Das mit der Relais-Karte(Ist bei mir eine selbst gebaute ISA-Karte) habe so gelöst. Um keinen Treiber im herkömmlichen Sinne zu schreiben, habe ein Systemprozess geschrieben, der als Root beim Systemstart mit gestartet wird. Dieser stellt über direktes schreiben und lesen in die I/O-Adressen die Verbindung zur Karte her. Die fertig aufbereiteten Daten wie z.B. Temperaturen werden dann per "Shared Memory" zur Verfügung gestellt. Darauf wiederum können dann andere Programme zugreifen. Bei mir Prozess der die Daten in die Datenbank schreibt und ein CGI welches die Daten über das Web-Interface darstellt. Dann braucht sich der User gar nicht anmelden wenn du den Apache so einstellst.


    Für deine MSR2 habe ich leider keine guten Nachrichten. Da gibt es wohl noch keinen, der eine PC Verbindung herstellen konnte(Ohne Windoff-Original-Software).
    Mein Ansatz hier führ währe zunächst das Dachs-Web automatisch auslesen, wenn man es denn hat.
    Oder im zweiten Ansatz das Modem Anrufen, über eine Interne Telefonanlage und versuchen, da was raus zu bekommen.
    Der dritte Ansatz währe dann erst ein Opto-Kopf zu besorgen und es Darüber zu versuchen, das müsste aber die schwierigste Variante sein.



    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT
    Speicher : LG Chem 6.4 mit Effekta AX 5000 und ca. 2KWp Solar

  • Hi ihr Pinguine :aok: ,


    zu Linux kann ich leider nichts beisteuern = 0 Dunst. Wenn ihr was für Datenbanken benötigt oder Trendkurven, kann ich evtl. helfen.


    Was das Auslesen des MSR2 betrifft, wird es hier auch irgendwann mal ein GLT Protokoll geben wie beim MSR1, steht aber auf der Prioliste von Senertec gaaaaaaaaaanz weit hinten :crygirl: Somit bleibt ein Dachs mit MSR2 in Gebäuden mit Leittechnik ein Fremdkörper von dem man nur eine Betriebs,Wartungs und Störmeldung bekommt. Jeden popeligen Kessel, Pumpen usw. kann man heutzutage auslesen, nur den Dachs nicht :negativ:


    Auch ist es von Senertec nicht gewünscht das der Dachs von einer externen Regelung angesteuert wird, denn Regelungstechniker sind unfähig ein BHKW vernünftig zu steuern :bomb: Ist ja auch ein hochkompliziertes Höllengerät so ein Dachs :P



    Gruß


    Tom

  • Ich habe da gerade noch einen Kleinen Nachtrag gefunden zu Variante 3


    http://www.optical-probe.de/index_de.html
    Ich werde mir wohl so ein Kopf kaufen um ertmal ganz klein anfange, meine Wärmemengen Zähler aus zu lesen. Der hat auch so eine Schnitstelle.


    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT
    Speicher : LG Chem 6.4 mit Effekta AX 5000 und ca. 2KWp Solar

  • Hallo Leute.


    Nun melde ich mich auch mal.


    Mofaklaus hat mich gefragt was ich mir so vorstelle.


    Daher mal meine Vorstellungen.


    Step 1:
    - System soll auf einem Embedet-Rechner laufen (z.B. wrap bzw. ALIX Board )
    - Als Datenbank würde ich SQ-Lite einsetzen, ist kein so Monster wie mysql
    - Da ein C-Programm immer passend auf das jeweilige System Kompiliert werden muss, und ich die Sprache auch nicht programmieren kann würde ich meine erste Versuche auf sh, bzw. bash aufbauen.
    - Auslesen von Dachs, 1-Wire und Hanazeder SH-8 Steuergerät (weitere System sind auch möglich)


    Step 2:
    - Webserver irgendwas kleines keine "Indianer"
    - wenn möglich auf PHP verzichten


    Da mein Dachs noch nicht läuft, kann ich das mit dem auslesen in einer bash nicht testen.


    ein

    Code
    1. echo 192 > /dev/ttyS0
    2. sleep 2
    3. cat /dev/ttyS0 | read a b c d e
    4. echo a
    5. echo b
    6. echo c
    7. echo d
    8. echo e


    könnte schon mal die erste Ergebnisse liefern.


    Vielleicht kann das ja jemand mal testen.
    Den Wert 192 hab ich glaube ich hier irgendwo mal gelesen.

  • Hallo dachs_finder,


    deine Scrip Idee ist warscheinich um zusetzt. Ich denke aber das zumindesten Perl verwenden musst.


    Die 192 die du an die TTYS0 schicken willst must du als ein Byte mit dem Wert von 192 schicken. Man müsste schauen ob es ein AscII Zeichen ist, wenn ja ist es einfach, aber wenn nicht muss man eine Lösing finden, wie cahr(192) z.B. aber dazu mache ich zu wenig mit der Shell.
    Und die Wahre herausforderung kommt beim Auslesen, denn du bekommst keine ASCII zurück vom Dachs. Das sind alles Byte-Werte die zum Teil erst noch zusammen gesetztwerden müsssen zu 32Bit-Wörter oder auch 16Bit. Je nach dem was es ist. Und dann auch noch im falle der Drehzahl in "float" umgewandet werden müssen. Wenn du das alles in einem Script hinbekommst, kann man da was draus machen.


    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT
    Speicher : LG Chem 6.4 mit Effekta AX 5000 und ca. 2KWp Solar

  • Hallo dachs_finder,


    Zitat

    Kann man mit minicom das nicht mal testen.


    Ich denke da hast du wieder das Problem, dass du keine Taste für den Wert 192 bzw 0xC0 hast. Wie gesagt, du must nur ein Byte zum Dachs senden und bekommst dann 76 zurück (Kein AscII Text). Wobe ich nur 70 aus lese, da ich nicht immer alle zurück bekomme. Es sollten aber 76 sein.


    das ist meine Funktion in C welchen den Daten Satz "192" vom Dachs hohlt.
    Ich füge einige Kommentare ein dammit man es besser Lesen kann. Diese beginnen immer mit //


    Ich hoffe du kannst es lesen, sonst stell einfach Fragen.



    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT
    Speicher : LG Chem 6.4 mit Effekta AX 5000 und ca. 2KWp Solar

  • mofaklaus


    Du hast recht, so leicht ist das nicht wenn man das unter der Bash machen möchte,
    Ich kann dank "printf" direkt einen Hex-Wert senden, aber lesen kann ich die Werte trotzdem noch nicht, bzw. es kommt viel Unsinn an.


    Damit ich aber etwas weiter machen kann, würde ich dich bitten, ob du nicht dein C-Programm so erweitern kannst, das die Werte an Standart-Out ausgegeben werden.
    Einmal das C-Programm gestartet gibt einmalig alle Werte an Prompt zurück.


    Wenn ich den Code richtig gedeutet habe, dann gibst du wenn DEBUG = 1 die Werte am Prompt aus inklusive Kommentar.
    Bei DEBUG = 2 gibst du die Werte am Prompt im Klartext und als Dezimalzahl aus.
    Wenn es jetzt noch so was wie MODUS = 1 gäbe, der alle werte Komma separiert wie im DEBUG = 1 ausgibt (nur ohne Kommentar Texte) hätten wir doch ein Universelles C-Programm, das man wahrscheinlich so kompilieren kann, das es keine Dynamischen-Libs benötigt.


    Freue mich schon auf die ersten Versuche.


    Was steht eigentlich in den letzten 6 Bytes drinnen, das du die einfach ignorieren kannst?
    Gäbe es nicht die Möglichkeit, das du prüfst wie viel übertragen wurde und wenn es zu wenig ist vorderste du den Datensatz frisch an?
    Solltest du nicht besser zwei Sekunden warten, so wie es als Maximalzeit von Senertec angegeben wird?

  • Hallo Dachs_finder,


    ich habe da mal was fertig gemacht.


    Datei bitte mit folgendem aufruf compeieren:
    gcc -o dach_shell dachs_shell.c


    und dann mit ./dachs_shell starten
    der Parameter -h zeigt eine Hilfe an. Bei Fragen bitte hier schreiben.
    Wenn du noch eine ander Form der Ausgabe brauchst ist das auch kein Problem.


    Die Datensätze 48 und 50 habe ich noch nicht umgesätzt. Sind aber nicht so wichtig.


    datei dachs_shell.c ist im Anhang gezipt.


    Gruß
    Mofaklaus

    Dateien

    • dachs_shell.zip

      (2,19 kB, 29 Mal heruntergeladen, zuletzt: )

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT
    Speicher : LG Chem 6.4 mit Effekta AX 5000 und ca. 2KWp Solar

  • mofaklaus


    So hab gerade mal dein Tool getestet.
    Es funktioniert leider nur jeder zweite bis dritte Aufruf.
    In den anderen Fällen kommt es zur keiner Ausgabe.
    Vielleicht solltest du eine Routine einbauen, die beim Fehlerfall das ganze sagen wir viermal probiert und nach dem vierten Versuch eine Fehlermeldung ausgibt.
    So ganz ohne alles ist das etwas unschön.


    Der Parameter -d hat keine Funktion, es passiert danach auch nichts.


    ./dachs_shell -m debug -d 50


    Aber so wie dein Quelltext aussieht funktioniert im Moment nur c0



    Was mir noch nicht ganz einleuchtet ist folgende Zeile:

    if (!strcasecmp("x0", data)) dataread_c0(port);


    Sollte die nicht besser so aussehen?


    if (!strcasecmp("c0", data)) dataread_c0(port);


    Im blanc Modus würde ich mich würde ich mich über eine Ausgabe alles in einer Zeile getrennt durch eine Leerstelle freuen.


    also nicht so:


    sonder so:

    Code
    1. 255 65 61 65 63 18 66 114 56 0 55 54 0.0000 fe 0 7107 5129 38558 74657


    Ich habe die auch mal die Hilfe etwas Unix Typischer umgeschreiben:


    Code
    1. ...
    2. if (help)
    3. {
    4. printf("Usage: dach_shell [OPTION]\n\n");
    5. printf("-p [ttySX] Default: ttyS0\n");
    6. printf("-m [wert] blanc text or debug Default: blanc\n");
    7. printf("-d [wert] c0 48 or 50 Default: c0 (Noch nicht Implementiert)\n\n");
    8. ...


    Normalerweise gibts noch -V für die Version und debug wird oft mit -v bzw -vvv (je nach Level) oder -d (wie debug) aufgerufen


    Wenn man einen falschen oder unbekannten Parameter eingibt, sollte eine Fehlermeldung inklusive der Hilfe kommen.


    So ich hoffe das dir der Test von mir weiterhilft.


    PS: Kann es sein, das man diesen Beitrag nirgends sieht außer wenn man danach sucht?

  • Hallo Dachs_finder,


    das Probelm mit dem Fehlerhaften Daten habe ich ganz stark, ich dachte immer das es meinen Dachs oder dem Kabel ligt, da binn ich also nicht allein.
    Da kann ich eine Schleife rein machen bzw. eine Fehlermeldung ausgeben.


    Das mit dem x0 und c0 habe ich warscheinlich falsch gemacht, sehe ich mir gleich mal an.
    Die anderen sind in der Tat noch nicht um gesetzt.


    Die ausgabe kann ich einfach anpassen.


    Die Hilfetext werde ich auch anpassen. Wenn ein Parameter falsch ist muss ich mal sehen was ich da machen kann.


    Erst mal vielen Dank für die Hinweise.


    melde mich wieder wenn ich das Umgesetzt habe.
    Gruß
    Mofaklaus

    BHKW : Dachs Gas 5,5kW
    SolarTherm.: 10m² Kago mit 600l Systemspeicher
    PV: 4kWp / SMA SunnyBoy SWR3000 / 14x ASE-300-DG-FT
    Speicher : LG Chem 6.4 mit Effekta AX 5000 und ca. 2KWp Solar

  • das Probelm mit dem Fehlerhaften Daten habe ich ganz stark, ich dachte immer das es meinen Dachs oder dem Kabel ligt, da binn ich also nicht allein.
    Da kann ich eine Schleife rein machen bzw. eine Fehlermeldung ausgeben.


    Hi


    also am Kabel kann es nicht liegen, da die original DOS-Software unter der DosBOX 100% sauber funktioniert.
    Ich denke es könnte an einem Timing Problem liegen.


    Vielleicht kann Tom dazu was sagen oder ein andere hier, der das GLT Protokoll nutzt.


    Vielleicht beides, also eine Schleife z.B. bis zu 10 mal (per parameter zu konfigurieren und danach ein Fehler.
    Zwischen den Versuche würde ich auch 1sec Pause machen.


    Hab hier mal zwei Links (Link1 Link2) gefunden der sich mit dem Seriellen Port unter C beschäftigt.
    Vielleicht hilft dir das weiter.

  • 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