Daten vom seriellen Port einlesen?

Begonnen von kct-networx, 14 Januar 2013, 18:57:32

Vorheriges Thema - Nächstes Thema

kct-networx

Guten Abend zusammen,

hat jemand eine Idee wie ich Daten vom Seriellen Port in FHEM einlesen kann?
Die Daten werden permanent gesendet, ich brauche also "nur" lauschen was da gesendet wird und möchte das gerne in ein Logfile speichern.

Das Device ist ein Prolific 2303 USB-seriell Konverter. Daran hängt der Projet-Leveljet. Dieser sendet in kurzen Abständen Daten zu Füllstand in Litern, Sensorabstand (in cm) und Füllhöhe (in cm).

Hat jemand von euch schon mal direkt ein seriellen port in fhem definiert und zum "empfangen von Daten" bewegt??

Grüße,
Markus

UliM

Hi,
kann Dir damit leider nicht weiterhelfen - aber es wäre vmtl hilfreich, den verwendeten Rechner und OS zu wissen.
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

kct-networx

Zitat von: UliM schrieb am Mo, 14 Januar 2013 19:08aber es wäre vmtl hilfreich, den verwendeten Rechner und OS zu wissen.
Hi,
bin mir nicht sicher was das helfen würde, aber nun gut.
OS: Windows Server 2003 (WHS)
Rechner: Acer H340 mit Intel Atom Platform

Ich dachte es ist vollkommen egal für welches OS man diese Frage beantwortet.
Denn ob man den seriellen port mit /dev/ttyXXXYYYZZZ@19200 unter Linux anspricht oder mit com4@19200 unter windows ist ja dann schon Detailarbeit....

Vielleicht sollte ich die Frage präzisieren:

Gibt es ein Modul das ich definieren kann um den seriellen port auslesen zu können?

Also ähnlich der Definition wie bei einer CUL? (z.B. define DeviceName ModulName com3@38400)

Grüße,
Markus

Joachim

Musst Du ein Modul für umarbeiten

Ich habe Dir mal meinen rudimentären Unbau für meine Lüftungsanlage Comfoair 550 angehängt.
Die sendet auch permanent, und es sind einige deutsche Kommentare für Perlanfänger wie mich drin.
Der Rest ist dann try and error.

Viel Spass Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

kct-networx

Herzlichen Dank Joachim!

Ich werde mir das Modul von dir ansehen und (hoffentlich erfolgreich) auf meine Bedürfnisse anpassen.
Ergebnisse dann später hier...

;-)

Grüße und nochmals meinen Dank,
Markus

Joachim

FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Tobias

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

hans88

Hallo,
ich habe ein Programm mit Windows VB erstellt das
den ebus meiner Weishaupt WTC15 mit liest und die
Daten grafisch darstellt. Als Hardware habe ich einen
ebus -- seriell Converter der an einen seriell -- USB
Converter angeschlossen ist.
Jetzt will ich das Programm nach FHEM portieren.
Dazu habe ich schon alle möglichen Wiki's durchgelesen.
Komme aber nicht recht weiter.

Jetzt meine Fragen:

Wie muss ich den seriell USB Converter in FHEM definieren ?
Wie wird ein Programm ähnlich WHR962 aufgerufen (event gesteuert) ?

Ich hoffe dass Ihr mir weiter helfen könnt.

Gruß Hans

Joachim

Moin Hans,

hier mein Aufruf für WHR962


define WHR962 WHR962 /dev/ttyUSB1@9600
attr WHR962 room Keller


gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Hallo Joachim,

vielen Dank für die Antwort.
Mir fehlen halt die Grundlagen.

Heist das wenn Daten an der seriellen Schnittstelle anstehen
wir das Modul WHR962 aufgerufen ?

Gruß Hans

Joachim

Moin Hans,

Ganz klares Jain.

Mit dem Eintrag in der fhem.cfg wird die Schnittstelle dem Modul zugeordnet, wenn jetzt Daten an dieser Schnittstelle anstehen, werden sie an das Modul weitergeleitet, dass Modul muss sie dann interpretieren und die gewünschten Readings an FHEM zurückgeben.
Nimm mal an der markierten Stelle die Raute weg

sub
WHR960_Read($)
{
#Log 1,"WHR960_Read";
my ($hash) = @_;
my $name = $hash->{NAME};
my ($data, $crc);
my $buf = DevIo_SimpleRead($hash);
my $tn = TimeNow();
my ($key, $val) = ("key", "val");
    ###### Daten der seriellen Schnittstelle holen, in RAW umwandeln, und an $buf1 anhaengen
return "" if(!defined($buf));
$buf = unpack('H*', $buf);
$buf1 .= $buf;
--> Log 5, $buf1; <---

wenn die Weishaupt WTC15 permanent sendet, sollte jetzt im Log ein permanenter Datenstrom anstehen, diesen kannst Du dann auswerten.

gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Jaaaa, Danke

ich hab jetzt die Daten im log.
Es gab nur noch die Schwierigkeit dass mein Loglevel, der
sinnigerweise "global verbose" heist auf 3 war.

Jetzt kann ich weiter "probieren".
Mir fehlt einfach eine kurze Beschreibung wie man ein Module
erstellt und was die Parameter bedeuten.

Gruss Hans

Joachim

Willkommen im Club,

habe am Anfang genauso gepöbelt.

viel Spass bei deinem Modul.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Hallo Joachim,

ich habe dein script so geändert dass jetzt die daten in den Readings angezeigt
werden.
Wie hast du die daten weiterverarbeitet ? plot ?

Gruß Hans

Joachim

Moin Hans,

ersteinmal die gewünschten Daten in ein Log schreiben
bei mir so:

define FileLog_WHR960 FileLog ./log/WHR960-%Y-%m.log WHR960
attr FileLog_WHR960 logtype text
attr FileLog_WHR960 room Logs

dann einen Weblink erzeugen:

define weblink_WHR960 weblink fileplot FileLog_WHR960:WHR960:CURRENT
attr weblink_WHR960 plotsize 1050,840
attr weblink_WHR960 room Keller

danneinige Zeit warten, und im weblink ein passendes gplot erstellen.

gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Danke Joachim,

jetzt bin ich so weit dass ich einen leeren Plot angezeigt bekomme.
Ich habe die entsprechenden HowTo's gelesen aber eine Beschreibung
des Syntax für die .gplot Datei habe ich nicht gefunden. Mit meiner
Version werden keine Werte ausgegeben.
Mir ist auch nicht klar ob ich gplot oder PGM2 benutze.
Die Fehlermeldungen im log deuten auf PGM2 hin.
Kannst Du mir mal deine WHR962.gplot zu verfügung stellen ?


Gruß Hans








Joachim

Moin Hans,

einmal zum Guttenbergen:


# Attribute 'small' is useful for gnuplot/-scroll only,
# if plotsize is less than 800,400
#set terminal png transparent small size <SIZE> crop

set terminal png transparent size <SIZE> crop

set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set ytics nomirror
set y2tics
#set ytics
set title '<TL>'
set grid xtics y2tics

set y2label "Temperatur in C"
set ylabel "Ventilstellung (%)"


set y2range [-10:25]
set yrange [-10:25]

#FileLog 4:Komf_Temp::
#FileLog 4:Frischluft::
#FileLog 4:Zuluft::
#FileLog 4:Abluft::
#FileLog 4:Fortluft::
#FileLog 4:ErdWT::

plot \
"< egrep 'Komf_Temp' <IN>"\
         using 1:4 axes x1y2 title 'Komforttemperatur' with lines,\
"< egrep 'Frischluft' <IN>"\
         using 1:4 axes x1y2 title 'Frischluft' with lines,\
"< egrep 'Zuluft' <IN>"\
        using 1:4 axes x1y1 title 'Zuluft' with lines,\
"< egrep 'Abluft' <IN>"\
         using 1:4 axes x1y2 title 'Abluft' with lines,\
"< egrep 'Fortluft' <IN>"\
        using 1:4 axes x1y1 title 'Fortluft' with lines,\
"< egrep 'ErdWT' <IN>"\
         using 1:4 axes x1y2 title 'Erdwaermetauscher' with lines,

für Dich anpassen musst Du es alleine,
oder Du nimmst im Weblink die Konfigurationshilfe siehe:

Aw: gplot auch für Stati möglich? [Beitrag #78887 ist eine Antwort auf Beitrag #78680]
Link

das sollte gehen.
Dazu gibt es noch eine genauere Beschreibung, aber die finde ich auf die schnelle nicht.

gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Danke funktioniert Super.

Ohne deine Hilfe hätte ich schon längst aufgegeben.
Aber so wie es aussieht ist das Projekt bald fertig.

jetzt noch 2 Fragen:

Wie kann ich auf einer Seite 2 Plots untereinander darstellen ?

Ist es möglich die Daten aus der Logdatei auf
einer seperaten Seite (aufbereitet) darzustellen.

Gruß Hans

Joachim

1.
einfach 2 Plots im gleichen Raum definieren.

2.
keine Ahnung.
Wie willst Du denn die Daten aufbereitet haben?

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Es fallen ja nicht nur Temperaturen sonder auch
Stati wie

Brenner Ein/Aus
Sommer/Winter
Tag/Nacht

an

Diese wollte ich in einer Übersicht darstellen.


Gruß Hans

Joachim

Daten ins log schreiben lassen, und im Plot mit anzeigen lassen, link s.o.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Hallo,
hier mein Modul 00_WTCX5.pm.

Das Modul dient zur Auswertung der eBus Befehle einer Weishaupt WTC15 u.
arbeitet "read only".
Es sollte aber auch mit anderen Weishaupt Geräten funktionieren.


Meine Hardware ist ein Raspberry, USB serial converter und ein eBus serial
converter.

Es werden nur die Befehle  "500a" , "0700" u. "0507" ausgewertet.

Fogende readings werden geliefert :

Außen Temperatur
Beriebsart Sommer/Winter
Brenner Ein /Aus
Leistung %
Modus Heizung/ Warm-Wasser  
Vorlauf-Ist Temperatur
Vorlauf-Soll Temperatur
WarmW-Ist Temperatur
Warm-Wasser Soll Temperatur

Als Basis diente das Modul 00_TAHR.pm und 00_WHR962.pm
Ich bin Neuling bei fhem und das war mein erstes perl Programm.
Wenn Fehler gefunden werden bin ich dankbar für Hinweise.


Viel Spaß damit

Gruß Hans

Joachim

Herzlichen Glückwunsch

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hans88

Hallo Joachim,

noch mal vielen Dank !
Ohne deine Hilfe hätte ich es wahrscheinlich nicht geschafft.

Gruß Hans

hans88

Hallo,
ich habe für den Raspberry eine einfache ebus Schnittstelle (read only) gebaut.
Sie besteht nur aus 2 Bauteilen und benutz den GPIO Anschluss.

http://elinux.org/File:GPIOs.png

Das ganze funktioniert problemlos und wird mittlerweile von mir auch verwendet.

Zum justieren des Potis habe ich minicom installiert.

sudo apt-get install minicom

minicom -b 2400 -o -D /dev/ttyAMA0

Ebus anschließen.

Dann das Poti so einstellen dass kontinuierlich daten auf dem Bildschirm
erscheinen.
Nicht irritieren lassen das sind irgendwelche Sonderzeichen.

Viel Spaß damit

Hans

kt83

Hallo Joachim,

ich möchte eine ComfoAir 200L einbinden und habe (vorerst :-) zwei  Fragen dazu:
Gibt es eine neuere Version Deines Moduls (und falls ja, würdest Du sie bitte zur Verfügung stellen)?
Hast Du eine CC Ease Bedieneinheit angeschlossen (bzw. ruft Dein Beispielmodul aktiv ab)?

Viele Grüße,
Thomas.

Joachim

Moin Thomas,

bin mangels Zeit bisher nicht dazu gekommen, das Modul weiterzuentwickeln.

CC-Ease ist angeschlossen, und mein Modul lauscht.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

kt83

Hallo Joachim,

habe jetzt mit Deinem Modul meine ComfoAir 200 angeschlossen.
Habe auch schon ein bisschen was verändert:
  • die aktuelle Stufe der Lüftung wird abgegriffen, daraus wir ein Chart erzeugt:

(siehe Anhang / see attachement)
  • das Konstrukt zum Schreiben von Werten aller 5 min habe ich durch Standard-FHEM-Mittel ersetzt ($readingFnAttributes, event-on-change-reading und event-min-interval)
  • etwas unbenutzen Code rausgenommen[/list]

    Vielen Dank nochmal für Dein Modul! (sollte das nicht mal mit ins SVN?)

    Grüße,
    Thomas.

    Joachim

    Super Thomas,

    Das Modul war meine erste Begegnung mit Perl, bitte verzeih mir.
    Wir können ja mal zusehen, dass wir das gemeinsam veröffentlichungstauglich bekommen.
    Ich habe leider im Moment wenig Zeit, aber der Winter kommt bestimmt.

    halte mich doch bitte auf dem laufenden, ggf. in einem neuen Tread.
    Vieles an dem Modul ist eigentlich nur Fleißarbeit (Parameter in readings schubsen)

    Gruß Joachim
    FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
    FHEM auf Raspberry
    1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
    div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

    kt83

    Hallo Joachim,

    dann setzen wir uns doch den Jahreswechsel als Ziel, für eine veröffentlichungstaugliche Version des Moduls :-)

    Grüße,
    Thomas.

    Joachim

    Moin Thomas,

    das lass uns dann aber in einem neuen Tread machen.
    Als kleine Warnung: Meine Perl-Kenntnisse sind nahezu Null, aber ich bin hartnäckig.

    Ich schlage vor, Du eröffnest einen neuen Tread und hängst die von dir an dem Modul gemachten Änderungen an.
    Morgen ist mein Urlaub zuende, dann habe ich auf der Arbeit wieder Zeit.

    Gruß Joachim
    FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
    FHEM auf Raspberry
    1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
    div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

    PeMue

    Hallo zusammen,

    ich häng mich einfach mal bei Euch dazu mit einer Grundsatzfrage:

    Auf der Suche nach Beispielen, wie man eine serielle Schnittstelle (ggf. auch über USB) einliest, gibt es welche, die Device::SerialPort verwenden. Ihr verwendet das Modul DevIo.pm, was aber im Prinzip dann im Kern auch wieder Device::SerialPort zugreift.
    Warum ist DevIo.pm dann besser bzw. günstiger? Weil man dann später über Netz die Daten mit fhem2fhem besser verteilen kann (umparametrieren und fertig?)? Zum Lernen finde ich den Ansatz mit Device::SerialPort "eingängiger", es kann aber auch sein, dass ich zuerst das Modul von pah analysiert habe ...

    Danke + Gruß

    PeMue
    RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
    RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

    Joachim

    Moin PeMue,

    Weshalb in meinem Modul DevIo.pm verwendet wird, ist einfach.
    Ich habe ein vorhandenes Modul für mein Modul umgearbeitet, und da war das so drin.
    Also purer Zufall.

    Gruß Joachim
    FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
    FHEM auf Raspberry
    1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
    div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232