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
Hi,
kann Dir damit leider nicht weiterhelfen - aber es wäre vmtl hilfreich, den verwendeten Rechner und OS zu wissen.
Gruß, Uli
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
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
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
Viel Glück
Hier findest du im Wiki ein Beispiel:
http://www.fhemwiki.de/wiki/Ultraschallsensor (//www.fhemwiki.de/wiki/Ultraschallsensor)
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
Moin Hans,
hier mein Aufruf für WHR962
define WHR962 WHR962 /dev/ttyUSB1@9600
attr WHR962 room Keller
gruß Joachim
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
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
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
Willkommen im Club,
habe am Anfang genauso gepöbelt.
viel Spass bei deinem Modul.
Gruß Joachim
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
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
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
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 (http://forum.fhem.de/index.php?topic=12945.msg78887#msg78887)
das sollte gehen.
Dazu gibt es noch eine genauere Beschreibung, aber die finde ich auf die schnelle nicht.
gruß Joachim
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
1.
einfach 2 Plots im gleichen Raum definieren.
2.
keine Ahnung.
Wie willst Du denn die Daten aufbereitet haben?
Gruß Joachim
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
Daten ins log schreiben lassen, und im Plot mit anzeigen lassen, link s.o.
Gruß Joachim
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
Herzlichen Glückwunsch
Gruß Joachim
Hallo Joachim,
noch mal vielen Dank !
Ohne deine Hilfe hätte ich es wahrscheinlich nicht geschafft.
Gruß Hans
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 (//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
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.
Moin Thomas,
bin mangels Zeit bisher nicht dazu gekommen, das Modul weiterzuentwickeln.
CC-Ease ist angeschlossen, und mein Modul lauscht.
Gruß Joachim
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.
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
Hallo Joachim,
dann setzen wir uns doch den Jahreswechsel als Ziel, für eine veröffentlichungstaugliche Version des Moduls :-)
Grüße,
Thomas.
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
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 (//sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/70_NT5000.pm), die Device::SerialPort verwenden. Ihr verwendet das Modul DevIo.pm (//sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/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
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