COM Port Abfrage in der Bash

Nach 1Minute kommt eine Ausgabe mit 6 Zeilen und wird dann regeläßig um weitere 6 Zeilen erweitert wenn ich nicht abreche.

Ich kenne die Heizungsanlage nicht - aber es wird wohl jede Minute der Zustand der Heizung ausgegeben....

So weit so schlecht ;-) Was mich aber noch mehr wundert ist, woher die 11,8 kommt und warum das ganze 1 Minute bis zur ersten Ausgabe dauert.

Naja, ab dann wird jede Minute der Wert in die Datei geschrieben. Und einmal hatte dein Temperatursensor eben 11.8°C zurückgeliefert...

Die Datei wächst dabei. Wenn Du z.B. nur den neuesten Wert haben möchtest könntest Du z.B. mit tail -n 1 -f aussentemperatur.txt diese Auslesen ...
 
Alle 10s gibts Updates...

Wenn ich "root@cacti01:~# ./wartiexe | grep TA:" benutze, wird doch gar keine Datei benutzt aus der "alte" Werte stammen können, oder?
 
Code:
./wartiexe | grep TA:

das hat nichts mit Dateien zu tun. Die Datei kommt erst bei > aussentemperatur.txt ins Spiel.

PS: Statt wartiexe geht natürlich auch
Code:
cat /dev/ttyUSB0
Nur mit cat hat es bei mir nicht ganz so gut geklappt - warum auch immer.

Nochmal zum Problem:

Möchtest Du nach einem Datensatz aufhören zu lesen? Wenn ja, warum.
Dann könnte man "wartiexe" ggf. auch anpassen ....
 
Also,

letztendlich will ich doch jeden einzelnen Wert mittels "wget..." in meine Hausteuerung bekommen (siehe langer Beitrag oben). Das kann ich aber nur Wert für Wert, also wget für wget machen.
Dazu muss ich jeden Wert aus der seriellen Ausgabe rauscutten und mittels wget übergeben.

Das soll natürlich nicht nur einmal passieren sondern alle 5 Minuten.


Leider konnten wir es bisher ja leider nicht schaffen einen einzelnen Wert rauszuschneiden und dann weiter zu verarbeiten, aber vielleicht hast du ja noch mehr Ideen. :-)
 
Hast Du denn schon mal folgendes probiert (siehe vorigen Post )?

Code:
cat /dev/ttyUSB0 | wartiexe | grep TA: | tr -s ' ' ' ' | cut --delimiter=' ' -f2 | cut -b-4

oder das

Code:
wartiexe | grep TA: | tr -s ' ' ' ' | cut --delimiter=' ' -f2 | cut -b-4



Wobei ich bezweifele, dass Du mit wget einen Wert in "setzen" kannst. Ich hätte gedacht, dass man damit nur Werte runter laden kannn...
 
Leerzeilen würde ich mit sed entfernen,

sed -e '/^\s*$/d'.

Mit wget (generell dem Aufruf einer URL) kann man auch Informationen übermitteln. Du schickst ja einen String an einen Server, und danach bekommst du etwas zurück (oder lässt den Server etwas beliebiges anderes machen).
 
warti schrieb:
Hast Du denn schon mal folgendes probiert (siehe vorigen Post )?

Code:
cat /dev/ttyUSB0 | wartiexe | grep TA: | tr -s ' ' ' ' | cut --delimiter=' ' -f2 | cut -b-4

oder das

Code:
wartiexe | grep TA: | tr -s ' ' ' ' | cut --delimiter=' ' -f2 | cut -b-4



Wobei ich bezweifele, dass Du mit wget einen Wert in "setzen" kannst. Ich hätte gedacht, dass man damit nur Werte runter laden kannn...



Zur ersten Codezeile:
Code:
root@cacti01:~# cat /dev/ttyUSB0 | wartiexe | grep TA: | tr -s ' ' ' ' | cut --delimiter=' ' -f2 | cut -b-4
-bash: wartiexe: Kommando nicht gefunden.
root@cacti01:~# ls -alh
insgesamt 2,5M
drwx------  4 root root 4,0K  6. Mai 14:37 .
drwxr-xr-x 25 root root 4,0K  5. Mai 00:40 ..
drwx------  2 root root 4,0K 29. Dez 18:16 .aptitude
-rw-------  1 root root  14K  6. Mai 15:37 .bash_history
-rw-r--r--  1 root root  570 31. Jan 2010  .bashrc
drwxr-xr-x  5 root root 4,0K 21. Feb 20:58 .cpan
-rw-r--r--  1 root root    0  6. Mai 14:37 dateiausgabe2.txt
-rw-r--r--  1 root root    0  6. Mai 14:32 dateiausgabe.txt
-rw-r--r--  1 root root 1,1K 13. Feb 20:17 hmc.cache
-rwxr--r--  1 root root  84K 11. Feb 15:24 hmcompanion.jar
-rw-r--r--  1 root root  140 19. Nov 2007  .profile
-rw-r--r--  1 root root 2,4M  6. Mai 10:01 test001.log
-rw-r--r--  1 root root 6,3K  6. Mai 00:13 test01.txt
-rwxrwxrwx  1 root root 5,3K  6. Mai 14:00 wartiexe
-rw-r--r--  1 root root 1,8K  6. Mai 14:07 wartisource.c
root@cacti01:~#



Bei der zweiten passiert auch nach 3-4 Minuten nichts.



Wenn ich das richtig verstanden habe ist wget notwendig:
http://www.christian-luetgens.de/homematic/db-access/anwendung/Anwendung.htm
 
upps :freaky:



cat /dev/ttyUSB0 | wartiexe | grep TA: | tr -s ' ' ' ' | cut --delimiter=' ' -f2 | cut -b-4

ist latürnich BS. Richtiger ist:

cat /dev/ttyUSB0 | grep TA: | tr -s ' ' ' ' | cut --delimiter=' ' -f2 | cut -b-4
 
Passiert leider auch nichts nach mehreren Minuten.


Langsam verzweifele ich :-(
 
Ich hatte ja schon mal geschrieben, dass es daran liegt, dass cat kein Abschlusszeichen erhält und sich deshalb nicht schließt. Das hast du ja selbst beschrieben: Wenn du cat öffnest, dann aktualisiert sich die Ausgabe ständig. Aber der Prozess wird nicht geschlossen! Daher ist das so nicht möglich.
 
Schade und ärgerlich.

Gibts denn wenigstens die Möglichkeit eine Terminalsession zu öffnen, den #TXT Befehl abzusetzen, die Ausgabe in eine Textdatei zu leiten, die Terminalsitzung wieder zu schließen UND das alles automatisiert?

Das wäre ja der zweite Weg.
 
Ja, da hat lamer11 recht - kein Abschlusszeichen - deshalb eine verzögerte Ausgabe.

Also doch "c" - änder mal das c-prg wie folgt ab.

Code:
while (1)
        {
                readline(fd,buf,255);
                if (strstr(buf, "TA:") != NULL)
                {
                        printf("%s\n", buf);
                        break;
                }
        }

Das Prg. Sollte nach Finden von TA: die Zeile ausgeben und sich beenden. Danach mit den "cut" Befehlen den Wert ermitteln.

Falls das Funktioniert könntest Du dieses Prg. mit "crontab" jede 5 Minuten aufrufen. Dann hast Du den Wert jede 5 Minuten ...
 
Na so langsam kommen wir der Sache näher :) Ich kann nur kein Stück C :(


Hiermit bekomme ich jetzt eine saubere Zahl hin
Code:
root@cacti01:~# ./wartiexe | head -n 1 | tr -s ' ' ' ' | cut -d " " -f 2 | cut -d "°" -f 1
10,6
root@cacti01:~#


Jetzt versuche ich grade den wget Befehl, aber das klappt nicht, d.h. ich noch kurz an anderer Stelle nachfragen...
Ergänzung ()

Soooo, mit
root@cacti01:~# wget "http://192.168.0.11/addons/db/state.cgi?item=test01&dp=STATE&value=13"
bekomme ich nun einen Wert in die Haussteuerung. Hier z.B. wird der Systemvariable "test01" der Zahlenwert "13" zugeordnet. Nachher wird es dann "TA" sein mit dem ausgelesen Wert.



Code:
root@cacti01:~# wget "http://192.168.0.11/addons/db/state.cgi?item=test01&dp=STATE&value=13"
--2012-05-06 22:19:45--  http://192.168.0.11/addons/db/state.cgi?item=test01&dp=STATE&value=13
Verbindungsaufbau zu 192.168.0.11:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 9
In »state.cgi?item=test01&dp=STATE&value=13« speichern.

100%[=================================================>] 9           --.-K/s   in 0s

2012-05-06 22:19:45 (1,12 MB/s) - »state.cgi?item=test01&dp=STATE&value=13« gespeichert [9/9]

root@cacti01:~#



Wir kann ich meinen ausgelesen Wert anstelle der hier beispielhaften "13" eintragen lassen und das ganze dann absenden?
Ergänzung ()

Endlich gehts!!! :D

Code:
#!/bin/bash
a=`/root/wartiexe | head -n 1 | tr -s ' ' ' ' | cut -d " " -f 2 | cut -d "°" -f 1 | sed "s/,/./g"`
`wget "http://192.168.0.11/addons/db/state.cgi?item=test01&dp=STATE&value=$a"`
#echo $a


Jetzt nur mal schauen in welchen Intervallen und welche Werte ich aufnehme.

Tausend Dank für die bisherige Geduld :-)
 
Ich habe gerade 700 Dateien aus meinen Verzeichnis gelöscht.

Das hier (bzw. wget) schreibt mir mit jeden Aufruf eine Datei

Ich denke es ist diese Ausgabe im folgenden Code:
In »state.cgi?item=HZ_TA&dp=STATE&value=8.9« speichern.
denn genauso hießen auch die Dateien...




Code:
root@cacti01:/systainterface# ./systa_to_ccu.sh
--2012-05-07 12:39:18--  http://192.168.0.11/addons/db/state.cgi?item=HZ_TA&dp=STATE&value=8.9
Verbindungsaufbau zu 192.168.0.11:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 8
In »state.cgi?item=HZ_TA&dp=STATE&value=8.9« speichern.

100%[======================================================>] 8           --.-K/s   in 0s

2012-05-07 12:39:20 (1,39 MB/s) - »state.cgi?item=HZ_TA&dp=STATE&value=8.9« gespeichert [8/8]

8.9
^C
root@cacti01:/systainterface#


Was´n das und wie unterbinde ich das. Hab diverse Optionen aus der manpage von wget ohne Erfolg probiert...




edit:
Hier der aktuelle Code:
Code:
#!/bin/bash
while [ 1 -gt 0 ];
do
	a=`/systainterface/wartiexe | head -n 1 | tr -s ' ' ' ' | cut -d " " -f 2 | cut -d "°" -f 1 | sed "s/,/./g"`
	wget "http://192.168.0.11/addons/db/state.cgi?item=HZ_TA&dp=STATE&value=$a"
	echo $a
	sleep 60
done
Ergänzung ()

Hab mir jetzt so geholfen, aber schön ist das nicht.

#!/bin/bash
while [ 1 -gt 0 ];
do
a=`/systainterface/wartiexe | head -n 1 | tr -s ' ' ' ' | cut -d " " -f 2 | cut -d "°" -f 1 | sed "s/,/./g"`
wget -q "http://192.168.0.11/addons/db/state.cgi?item=HZ_TA&dp=STATE&value=$a"
rm /systainterface/state.cgi*
echo $a
sleep 10
done
 
Zurück
Oben