Autor Thema: Telnet Wrapper via expect  (Gelesen 454 mal)

Online Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2882
  • ~ Challenging Innovation ~
Telnet Wrapper via expect
« am: 11 Juli 2018, 20:08:34 »
Hi,


ich habe ein expect Script zusammengeschustert, mit dem man sich etwas einfacher mit der FHEM Telnet Schnittstelle verbinden kann.



#!/usr/bin/expect -f


set HOST [lindex $argv 0]
set PORT [lindex $argv 1]
set PASSWORD [lindex $argv 2]
set COMMAND [lindex $argv 3]
set timeout 10


spawn -noecho telnet $HOST $PORT
match_max 10000000
log_user 0


if { $PASSWORD != "-" } {
expect -exact "\r\r
Entering character mode\r\r
Escape character is '^\]'.\r\r
\r
Password: "
send -- "$PASSWORD\r"
expect -exact "\r
Entering line mode\r
Escape character is '^C'.\r
\r\r
\r\r
"
}


send -- "$COMMAND\r"


# start interactive session
if { $COMMAND == "" } {
  interact


# open permanent channel
} elseif { [regexp -nocase "^(inform|iowrite).*" $COMMAND] } {
  expect "$COMMAND\r"
  interact


# run one-time command
} else {
  # # FIXME does not work with FHEM because commands without output would be stuck...
  # # ... but we want this to avoid the output of our sent commands back to the user
  # # to improve scriptability
  #
  # # OPTION 1: only works for FHEM commands with multi-line output,
  # #           but longer output is still incomplete :-(
  # expect -re "\n(.*)\r"
  # log_user 1
  # puts "$expect_out(0,string)"
  # log_user 0
  # send -- "quit\r"
  # expect eof


  # # OPTION 2: only works for FHEM command without output
  # expect {
  #   # no return
  #   -exact "\n" {
  #     send -- "quit\r"
  #     expect eof
  #   }
  #
  #   # command has return text
  #   -re "\n(.*)\r" { #TODO longer output is incomplete
  #     log_user 1
  #     puts "$expect_out(0,string)"
  #     log_user 0
  #     send -- "quit\r"
  #     expect eof
  #   }
  # }


  # Fallback option that works with complete output
  # but copies sent FHEM commands to the user... :-(
  expect "$COMMAND\r"
  log_user 1
  send -- "quit\r"
  expect *eof
}


Leider funktioniert das Script nicht wie gedacht, denn die gesendeten Befehle erscheinen ebenfalls beim Benutzer.
Das ist für eine interaktive Session nicht tragisch, schränkt aber die Script-Fähigkeit leider ziemlich ein bei der Weiterverarbeitung des Outputs... Auch will man dann natürlich das "Bye..." am Ende nicht haben.


Die Schwierigkeit ist, dass ich keine funktionierende Möglichkeit finde die Ausgabe zu filtern.


Ich dachte ich frage einmal, ob sich hier damit schonmal jemand beschäftigt hat und/oder eine Lösung weiß.




Gruß
Julian
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

Docker-FHEM 5.10dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs, LG OLED 65C8, Sonos Playbar+2xOne+Sub, 2x Sonos One, 1x Sonos Play:1

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15048
  • s/fhem\.cfg/configDB/g
Antw:Telnet Wrapper via expect
« Antwort #1 am: 11 Juli 2018, 21:12:08 »
noch einfacher als die bisherige Variante geht doch kaum noch...
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.12.2018 - 18:30 Uhr

Online Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2882
  • ~ Challenging Innovation ~
Antw:Telnet Wrapper via expect
« Antwort #2 am: 12 Juli 2018, 01:23:51 »
Welche ist die bisherige Variante?
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

Docker-FHEM 5.10dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs, LG OLED 65C8, Sonos Playbar+2xOne+Sub, 2x Sonos One, 1x Sonos Play:1

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 19006
Antw:Telnet Wrapper via expect
« Antwort #3 am: 12 Juli 2018, 10:16:41 »
Zitat
Welche ist die bisherige Variante?
Ich vermute "perl fhem.pl [host:]port cmd cmd cmd"

Online Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2882
  • ~ Challenging Innovation ~
Antw:Telnet Wrapper via expect
« Antwort #4 am: 12 Juli 2018, 12:28:07 »
Hm okay da hab ich natürlich die Abhängigkeit, dass ich bei einem separaten System eine zweite Fhem Installation brauche (wenn auch ohne Daemon). Diese Abhängigkeit ist nicht soooo toll.

In der Doku steht leider auch nicht wie man ein Passwort mit übergibt. Ist das einfach als erster Parameter?
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

Docker-FHEM 5.10dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs, LG OLED 65C8, Sonos Playbar+2xOne+Sub, 2x Sonos One, 1x Sonos Play:1

Offline Wuppi68

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1665
  • Wuppertaler Wimpelbeauftragter
Antw:Telnet Wrapper via expect
« Antwort #5 am: 12 Juli 2018, 13:09:28 »
Hm okay da hab ich natürlich die Abhängigkeit, dass ich bei einem separaten System eine zweite Fhem Installation brauche (wenn auch ohne Daemon). Diese Abhängigkeit ist nicht soooo toll.

In der Doku steht leider auch nicht wie man ein Passwort mit übergibt. Ist das einfach als erster Parameter?

es geht doch "immer" auch ssh <user>@<fhemhost> perl fhem.pl [host:]port cmd cmd cmd
Jetzt auf nem I3 und primär Homematic

kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Online Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2882
  • ~ Challenging Innovation ~
Antw:Telnet Wrapper via expect
« Antwort #6 am: 12 Juli 2018, 20:25:11 »
Ich hab mich irgendwie dumm angestellt, habs jetzt.


Danke :-)
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

Docker-FHEM 5.10dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs, LG OLED 65C8, Sonos Playbar+2xOne+Sub, 2x Sonos One, 1x Sonos Play:1

Online Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2882
  • ~ Challenging Innovation ~
Antw:Telnet Wrapper via expect
« Antwort #7 am: 12 Juli 2018, 22:38:19 »
Hm, ich muss doch nochmal einhaken.


Die Nutzung von fhem.pl ermöglicht es nicht z.B. eine dauerhafte Verbindung mittels "inform on" aufzubauen.
Auch ist es nicht möglich eine interaktive Session zu starten. Diese 3 Use Cases lassen sich mit Expect aber (zumindest jeweils separat) sehr gut abbilden.


Die Frage ist nun: Bin ich tatsächlich darauf angewiesen das zu splitten und Einmalbefehle über fhem.pl auszuführen und beide anderen Fälle über Expect? Klingt für mich etwas unbefriedigend :-/
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

Docker-FHEM 5.10dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs, LG OLED 65C8, Sonos Playbar+2xOne+Sub, 2x Sonos One, 1x Sonos Play:1