Autor Thema: COM Port send  (Gelesen 5798 mal)

BanannaJoe

  • Gast
COM Port send
« am: 27 April 2013, 08:23:08 »
Hallo,
ich versuche gerade meine Haussteuerung von IP-Symcon nach FHEM zu portieren. Hier gibt es eine Funktion ComPortsend, welche lediglich eine zeichenfolge auf den seriellen Port schickt. Für den Anschluß habe ich einen FTDI USBseriell Wandler. Mein erstes Problem ist, das ich keine Ahnung habe, wie ich den Wandler als COM Port ansprechen kann und wie ich dann aus FHEM eine Zeichenfolge darauf schicken kann.
Über eine Unterstützung aus dem Forum würde ich mich sehr freuen.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24914
Aw: COM Port send
« Antwort #1 am: 27 April 2013, 09:26:07 »
Ohne es je benutzt zu haben vermute ich, dass dafuer http://fhem.de/commandref.html#ECMD zustaendig ist.

Offline sky64

  • Jr. Member
  • **
  • Beiträge: 52
Aw: COM Port send
« Antwort #2 am: 27 April 2013, 15:25:29 »
Was möchtest Du denn erreichen ? Mehr Infos dazu führen ev. zu einer besseren Lösung.

Die Variante mit ECMD ist sicherlich möglich, auch komplex weil man dazu noch ECMD Class usw. definieren muss.
Wenn es einfache nur um die Ausgabe eines Strings geht, so macht man das auf der Konsole ja mit
echo "string" > /dev/ttyUSB0

Vorher muss der "COM-Port" mit stty auf die richtige Baudrade und ev. andere Parameter eingestellt werden.
Z.B: stty -F /dev/ttyUSB0 9600
Das kann man z.B. in die /etc/rc.local packen.

Im fhem kommt man dann mit einem { system("echo string > /dev/ttyUSB0") } an der passenden Stelle zum Ziel.

define notify_name notify quelle { system("echo string > /dev/ttyUSB0") }

Gruß Ronald
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

BanannaJoe

  • Gast
Aw: COM Port send
« Antwort #3 am: 27 April 2013, 19:05:16 »
Ja Super, vielen viele Dank für die Schnelle Hilfe!!!
Das mit echo fuktioniert schonmal von der Konsole aus. Jetzt muß ich mir das nur noch aus Fhem hinbekommen.
Vielleicht hat hier noch jemand einen Rat. Ich habe einige FS20 Wandsender. Beim Drücken einer Taste möchte ich einen String an den Seriellen port übergeben. Hier habe ich einen selbstgebauten Sender angeschlossen, der Intertechno als auch RECS80 sendet. Über den String wird unterschieden, Welches Protokoll und welcher Befehl gesendet wird. Kann mir jemand sagen, an welcher stelle ich denn definieren kann, was geschieht, wenn ein FS20 code empfangen wird.
Vielen Dank schon einmal

Offline sky64

  • Jr. Member
  • **
  • Beiträge: 52
Aw: COM Port send
« Antwort #4 am: 27 April 2013, 19:29:08 »
Also wie man FS20 einrichtet steht ausführlich in der http://fhem.de/Heimautomatisierung-mit-fhem.pdf
Und wie man auf einen Tastendruck reagiert auch (Seite 23), genau so wie ein Beispiel in meiner Antwort.
nochmal z.B.
define sende_string notify FS20_Tastenname:on { system("echo string > /dev/ttyUSB0") }

Gruß Ronald
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

BanannaJoe

  • Gast
Aw: COM Port send
« Antwort #5 am: 28 April 2013, 09:36:31 »
Und Nocheinmal einen Herzlichen Dank! Du hast mir wirklich sehr geholfen.
Bezüglich FS20 habe ich mir die Anleitung angeschschaut und das funktioniert auch alles. Nur das senden eines Befehls mit der notifi funktion bekomme ich nicht hin. Ich habe diese zeile in die fhem.cfg eingefügt.

define RECS80_L_EZ notify Licht_EZ:on { system("echo 0000FFFF0F0F##\ > /dev/ttyUSB1") }

da ich 0000FFFF0F0F# an ttyUSB1 senden möchte. Ich habe gelesen, dass Sonderzeichen wie # im format ##\ eingefügt werden müssen. Ist das richtig oder mache ich da was falsch?

Offline sky64

  • Jr. Member
  • **
  • Beiträge: 52
Aw: COM Port send
« Antwort #6 am: 28 April 2013, 09:56:57 »
Hallo

Zitat
Nur das senden eines Befehls mit der notifi funktion bekomme ich nicht hin.

Was genau geht nicht ?
Wird das notiy nicht ausgeführt oder geht der String nicht raus ?
Zum debug eignet sich die Telnet-Console gut.
Also mit "telnet ip_des_fhem_servers 7072" eine Verbindung herstellen.
Da kann man dann die Befehle direkt eingeben.
Zum Testen des Sendens z.B. einfach mal das "{ system("echo 0000FFFF0F0F##\ > /dev/ttyUSB1") }" eingeben.
Wenn Du sehen willst was wirklich gesendet wird kannst Du statt des /dev/ttyUSB1 auch mal eine Datei angeben.
Als z.B. "{ system("echo 0000FFFF0F0F##\ > /tmp/test") }" , dann kannst Du mit "cat /tmp/test" nachsehen was wirklich raus geht.

Zum debugen des notify könnte der Eventmonitor helfen (Webfrontend, Menü ganz unten)
Man sieht welche Infos wirklich von den Geräten kommen und Du muss Dein "Licht_EZ:on" entsprechend anpassen.

Gruß Ronald
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

BanannaJoe

  • Gast
Aw: COM Port send
« Antwort #7 am: 28 April 2013, 10:58:57 »
ich glaube ich habe das problem gefunden aber leider noch nicht gelöst.
Sobald ich uber telnet einen befehl sende in dem eine # ist, bekomme ich die Meldung "Unknown command  try help
" egal ob ich einen \ davor oder dahinter setze. gibt es die möglichkeit ein ascii zeichen per chr() zu übergeben?

Offline sky64

  • Jr. Member
  • **
  • Beiträge: 52
Aw: COM Port send
« Antwort #8 am: 28 April 2013, 11:32:14 »
Man kann unter Bash mit "echo -e" alle ASCII-Zeichen senden.
Diese müssen allerdings oktal angegeben werden. ( Hex geht auch fast immer )
Das sieht dann so aus (oktal)
{ system("echo -e '0000FFFF0F0F\064' > /dev/ttyUSB1") }
hex
{ system("echo -e '0000FFFF0F0F\x23' > /dev/ttyUSB1") }

Ich habe das gerade mal getestet, offenbar werden die Strings werden vor der Übergabe schon geparst.
Auf jeden Fall geht es so :
{ system("echo '0000FFFF0F0F\064' > /dev/ttyUSB1") }
[/b]
Gruß Ronald
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24914
Aw: COM Port send
« Antwort #9 am: 28 April 2013, 11:36:21 »
Egal ob ueber telnet oder fhem.cfg oder sonst, fhem ignoriert alles ab dem ersten # Zeichen.
In so einem Fall empfehle ich die Zeile in eine Funktion in 99_myUtils.pm auszulagern.

BanannaJoe

  • Gast
Aw: COM Port send
« Antwort #10 am: 28 April 2013, 11:55:25 »
Mit
define RECS80_L_EZ notify Licht_EZ:on { system("echo '0000FFFF0FF0\x23' > /dev/ttyUSB1") }
funktioniert es!
Ganz ganz herzlichen Dank noch einmal ich denke jetzt komme ich erst beinmal alleine weiter.

 

decade-submarginal