Daten vom AVR NetIO mit ethersex per httplog an fhem senden

Begonnen von daniel_k, 18 November 2013, 01:56:10

Vorheriges Thema - Nächstes Thema

daniel_k

Hallo,

ich habe hier und in anderen Foren gelesen das man sich Daten vom AVR NetIO per httplog zum fhem Server senden lassen kann.
Nun habe ich den ganzen Abend herrumprobiert und es kommt ums verrecken nichts beim fhem an.
Ich habe bei ethersex unter httplog unter Service die IP von fhem eingetragen und unter Pfad /fhem.
In der httplog.c Zeile 119 habe ich den Port auf 8083 geändert, aber alles hat nichts gebracht.
Wenn ich nun im Browser 192.168.178.(Pfad NetIO)/ecmd?ht cmd=set+LED_EG+on eingebe kommt OK aber nichts passiert.

Ich finde leider keine Erklärung was noch bei ethersex eingestellt oder geändert werden muss.

Ich hoffe es kann mir einer weiter helfen.

Klaus0815


Hallo Daniel,

Hast Du beim Pfad auch die 8083 mit angegeben ?

Ich habe auch lange mit Ethersex gekämpft, bis es mir Kommandos geschickt hat.

Ich starte direkt bash-Skripte über Telnet, nutze bei Eitherx das pin_rising / pin_faling.

Falls Du nicht weiterkommst, kann ich Dir gerne die Befehle raus suchen

Grüße

Klaus

daniel_k

Danke Klaus,

ich bin inzwischen offen für alles!

Hab noch weiter probiert und habe es inzwischen sogar schon soweit hinbekommen, das ich in der access.log vom fhem Server den eingehenden Befehl sehe, nur tut sich halt bei fhem immer noch nichts.

Beispiel:
192.168.178.105 - - [18/Nov/2013:17:32:04 +0100] "GET /fhem?cmd=set LED_EG off HTTP/1.1" 200 4948 "-" "-"
Das ist von ethersex, hier tut sich nichts.

Nun noch der aus Opera, FireFox... oder welchen Browser auch immer
192.168.178.40 - - [18/Nov/2013:16:50:09 +0100] "GET /fhem?cmd=set%20LED_EG%20on HTTP/1.1" 302 151 "-" "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16"
Nur muss ich sagen, ich kann eigentlich keinen Unterschied erkennen der einmal schaltet und einmal nicht!!
Es ist zum verzweifeln!
Ich habe das Problem mit dem Port durch einen Proxy, wie hier beschrieben umgestellt http://www.fhemwiki.de/wiki/Apache_Authentication_Proxy, habe somit keine Problem mehr mit dem Port.

Wenn ich nur wüste warum es einmal geht und einmal nicht.

Danke
Daniel

Klaus0815

Hallo Daniel,

ich triggere nichts direkt in FHEM, bei mir läuft alles über selbstgebastelte Bash-skripte, FHEM nutze ich eher um HM- und FS-20-Komponenten zu steuern.
aber Du müsstest das bei Dir entsprechend kombinieren können

aber ich starte von Ethersex aus auf dem Server Skripte z.B. mit: (bei  Watch IO changes and react)
ECMDTCP(PA2, RISING, 192.168.178.33, sh /ordner/unterordner/program1\n)
(auf dem Server läuft dann netcat und hört auf Port 2701)

vom Server aus rufe ich FHEM mit z.B.:

echo "set Licht_Flur on"  | nc 127.0.0.1 7072 -q 1  2>/dev/null

auf

Grüße

Klaus

daniel_k

Hallo Klaus,

so habe gestern den ganzen Tag, mich erst mit httplog, dann mit watchasync und schließlich mit Watch IO auseinander gesetzt.
Ich muss sagen, der erste Teil war für die Katz.
Httplog läuft bei mir garnicht, Daten werden zwar gesendet, nur bei fhem kommen sie nicht an.
Watchasync läuft super, wenn man beim NetIO einen ganzen Port frei hat, bei meinem NetIO sind aber gerade mal 3 Pins frei und zwar einer bei PortA, einer bei PortB und einer bei PortD. Nachdem watchasync aber immer gleich einen ganzen Port belegt, für mich unbrauchbar.

Ja und dann, bin ich heute Nacht so gegen 1:00Uhr bei deiner Lösung angekommen.
Ich muss sagen es läuft, nur mit der Weitergabe mit netcat hängt es noch ein wenig.
Ich starte netcat, der NetIO sendet an netcat
root@FHEM-xxx:~# netcat -l -p 2701
/media/usb/bash/bewegung.sh

und dann tut sich nichts mehr.
Wenn ich den Bash-Skript aber direkt aufrufe klappt es:
root@FHEM-xxx:~# /media/usb/bash/bewegung.sh

Leider sind meine Linux-Kentnisse nicht all zu groß, könnte es daran liegen, dass ich netcat per Hand starte, oder das ich per root angemeldet bin, oder...?
Ich denke es ist nur eine Kleinigkeit

Danke und Gruß
Daniel

kpwg

Wäre denn ECMD mit Readfunktion eine Lösung? Hier http://forum.fhem.de/index.php/topic,13914.msg107909.html#msg107909 wurde was geschrieben, nur leider bin ich noch nicht soweit, helfend an der Sache mitzustricken.

Klaus0815

Hallo Daniel,

wie sieht denn dein Befehl aus, den Du von Ethersex aus verschickst ?
Hast Du auch das \n am Ende ? Das ist quasi das Enter-Zeichen

Ich benutze statt Netcat ncat ( http://nmap.org/ncat/ )
und zwar folgendermaßen:
ncat --exec "/bin/bash" -l 2701 --keep-open
wichtog ist das --exec, damit ncat die Programme auch ausführt

Mit netcat müsste es auch gehen, Du musst dann aber -c -l angeben
(gib mal nc -help ein)

Grüße

Klaus

daniel_k

Hallo Klaus

ja danke das war es, bei mir war auf dem Server nc installiert und nicht ncat!
Hab ich installiert und es läuft!!! :)
Nur noch eine Frage, hoffe ich wenigstens, was hast du gemacht das der NetIO nicht nach 3x Senden aussteigt.
Hab ich im ethersex-devel... Forum gelesen, warst du doch.

Sonst muss ich mich sehr bedanken, habe wieder viel dazugelernt.

Danke
Daniel

Klaus0815

Hallo Daniel,

ich bin mir nicht sicher was ich gemacht habe, aber ich glaube Du musst dem Ethersex eine Antwort schicken, also z.B einfach ein "echo ok"

Gib mal Bescheid obs klappt

Grüße
Klaus

daniel_k

Danke Klaus,

dass es doch immer an so Kleinigkeiten hängt, habe einfach in jedes Bash-Skript eine Zeile mit "echo OK" eingefügt und es läuft.
Ich habe die Zeile "ncat --exec "/bin/bash" -l 2701 --keep-open" einfach in die "rc.local" eingetragen, ich hoffe das langt.
Ich werde jetzt alles mal beobachten und den Erfolg genießen!! 8)

Danke für deine Zeit
Gruß
Daniel

TorstenS

Hallo,
ich habe jetzt auch Notifications von Ethersex zum FHEM am laufen.
Ohne Shellscripte, netcat und sowas. Einfach direkt.
Dazu habe ich im ethersex source in protocols/ecmd/senderecmd_sender_net.c
in Zeile 36 einfach den Port von 2701 auf 7072 geändert.
In der Watch IO (and react) config kann ich dann direkt FHEM Kommandos angeben. Z.B.
ECMDTCP(PD3, RISING, 192.168.0.3, set Burner on\n\n)
ECMDTCP(PD3, FALLING, 192.168.0.3, set Burner off\n\n)
Wichtig sind die beiden \n am Ende. Die IP muss natürlich auf die eigene FHEM IP angepasst werden.
In FHEM habe ich dann einfach ein entsprechendes dummy Device angelegt
und schon habe ich einen schönen Plot für meinen Heizungs-Brenner.

define Burner dummy
define Burner_log FileLog /opt/var/log/fhem/Burner-%Y-%U.log Burner
attr Burner_log logtype fs20
define Burner_plot SVG Burner_log:fs20:CURRENT

Ich vermute, man könnte so auch aus Control6 herraus direkt FHEM Kommandos absetzen.
Das habe ich allerdings nicht getestet. Was natürlich auch nicht (mehr) geht, ist von diesem
Ethersex Modul andere Ethersex Module per ECMD zu erreichen.

Vielleicht hilft das ja dem einen oder anderen.

Gruß
TorstenS

1wire

das habe ich probiert und funktioniert tatsächlich prima:
ECMDTCP(PB0, FALLING, 192.168.1.1, set Terrassenlicht on\n\n)

Aber wenn ich jetzt den Taster nochmals betätige bleibt das Licht an. Das Terrassenlicht ist an REL1 angeschlossen. Wie kann ich hier eine Abfrage machen?
z. B.: ECMDTCP(PB0, FALLING, 192.168.1.1, get REL1 WERT set Terrassenlicht %WERT% on\n\n)

Irgendwie häng ich da fest. Zum testen schreibe ich das ganze in einer Telnet-Session. Kann mir da jemand einen kleinen Wink mit dem Zaunpfahl geben?

Über Control6 hab ich obige Zeile auch probiert, aber hier hatte ich keinerlei Erfolge. Schade denn dort kann ich schön die REL1 abfragen:
   ON PIN_LOW(REL1) DO ESEND(192.168.1.1, "set Terrassenlicht on\n"); END     dnl an FHEM senden
   ON PIN_HIGH(REL1) DO ESEND(192.168.1.1, "set Terrassenlicht off\n\n"); END   dnl an FHEM senden

Hat jemand noch eine Idee, was ich probieren könnte?
Grüße 1wire

1wire

#12
Hallo,
da die obige Lösung bei mir nicht funktioniert hat (ich bekam immer nur einmal den Sendestring) und ich tagelang die SuFu hier im Forum und auch bei Ethersex bemüht habe, konnte ich nun in mühsam viele Puzzleteile zusammen setzen. Für andere dehnen es genauso geht, schreibe ich hier mein Lösungsweg.

In Ethersex: die Datei protocols/ecmd/sender/ecmd_sender_net.c in Zeile 36 den Port von 2701 auf 7072 gesetzt.
In menuconfig: Protokolls / ECMD / TCP/Telnet aktivieren (Port 2701, ja ist richtig :))
                       Protokolls / ECMD / TCP/ Send via TCP
In control6.src:
ON PIN_FALLING(T1) DO
     PIN_TOGGLE(LED1);
     TCP_CONNECT(192.168.1.1, 7072, message_handler);
     TCP_HANDLER(message_handler)
     TCP_SEND("set Rentier on\n");
     TCP_HANDLER_END();
END

dann alles flashen. fertig.

in Fhem wird dann in der Event liste "set Rentier on" erscheinen.
Auf der Fritzbox 7270 kann man auch den empfangenen String abfragen in einer Telnet Session mit "nc -l -p 7072"
Falls der Fehler auftaucht    nc: bind: Address already in user     dann horcht Fhem auf diesem Port, was ja auch gut ist, aber für die Testweise Überprüfung, kurz mal Fhem beenden mit shutdown.

so und jetzt Gute Nacht  :)


kpwg

Hallo 1wire,

ich teste gleich mal, wie gut es funktioniert. Bericht folgt!  :)

Gruß, Ricardo

kpwg

Es läuft leider nicht. Habe mit ESEND probiert: da funktioniert es genau wie bei Dir nur sporadisch bzw. meist nur einmal.

Mit dem TCP_HANDLER läuft mir dann das Log beim compilieren voller Fehler durch.
Syntax usw habe ich mehrfach geprüft. Welche Besonderheiten gibt es noch?