FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rico5588 am 11 März 2017, 23:49:56

Titel: Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 11 März 2017, 23:49:56
Hallo,

habe mir eine Relais Karte erstanden und möchte den Status der Eingänge und Ausgänge in einen Dummy Schreiben.
abrufen geht mit folgenden Befehl.
{ system("echo getr | /bin/nc 192.168.9.97 1234 ")}
Als Ergebnis erhalte ich "getr11000000" je nach dem welche Relais an sind.
Wie kann ich in einem at oder Notify diesen Befehl Ausführen und das Ergebnis in ein Dummy Schreiben.
Das hier funktioniert leider nicht.

define RelaisEinfahrtStatusAT at +*00:00:20  {\
my $Rel1 =Value{ system("echo getr | /bin/nc 192.168.9.97 1234 ")};;;; \
Log 3, "ist: $Rel1";;;;\
fhem("set RelaisEinfahrtStatus $Rel1")}
attr RelaisEinfahrtStatusAT room Relay

Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: dev0 am 12 März 2017, 07:05:21

my $Rel1 = qx("echo getr | /bin/nc 192.168.9.97 1234");; \


Da der Aufruf aber blockierend ist, würde ich eher einen cron job laufen lassen, der den ermittelten Wert an FHEM übergibt.
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 12 März 2017, 09:11:08
Guten Morgen,

kannst du eine Anleitung empfehlen? So richtig habe ich keinen Plan wie ich das machen kann.
Ein fertiges Modul gibt es aber nicht zufällig schon? Nicht das ich es mir zu kompliziert mache!

MFG Rico
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: dev0 am 12 März 2017, 09:38:48
Du kannst aus einem shell script Werte direkt an FHEM übergeben, ohne zusätzliches Modul:

echo setreading <device> <reading> <value> | nc localhost 7072
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 12 März 2017, 16:27:39
Wo kann man sich ein Beispiel ansehen.
Aktuell würde ich
#!/bin/bash
echo getr | /bin/nc 192.168.9.97 1234

in eine test.sh einfügen und dann?
Denn Aufruf in einen cronjob und dann?
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 13 März 2017, 22:05:37
könnte nochmal Hilfe gebrauchen mit dem Bash script.

#!/bin/sh
StatusRelais1=$(echo R1 | /bin/nc 192.168.9.97 1234 2>&1)
echo $StatusRelais1
if  [ "$StatusRelais1" = "Relayon 1" ]
        then re1="on"
        else  re1="off"
fi
echo $re1
(echo "Password"; echo "setreading RelaisEinfahrt1 state "$re1"") |nc "192.168.9.54" 7072


(als $StatusRelais1 erhalte ich "Relayon 1")
(als $re1 erhalte ich "off")
geht so weit super nur der Status bleibt immer "off"
Irgendwie wird "Relayon 1" nicht erkannt.
Tipps??

MFG Rico
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 30 März 2017, 12:08:51
Habe es hinbekommen,

habe immer "sh test.sh" aufgerufen das hat nicht funktioniert.
mache es nun mit "bash test.sh" da geht es nun einwandfrei.
anbei noch mein script, hat sich noch ein paar mal geändert.
#!/bin/bash
# Daten von Relaiskarte an Fhem senden
secs=3600
SECONDS=0
#Schleife für 60 Minuten starten
while (( SECONDS < secs ));
do
#Daten von Relaiskarte holen
Getr=$(echo getr | /bin/nc <IP-Relaiskarte> <Port-Relaiskarte> 2>&1)
Geti=$(echo geti | /bin/nc <IP-Relaiskarte> <Port-Relaiskarte> 2>&1)
#Daten aufbereiten und in Variable schreiben
# und nur bei Änderungen des status zu fhem senden
R1=${Getr:6:8}
R2=${Geti:6:8}
re1=$R1$R2
if  [[ "$re2" = "$re1" ]]
        then echo $re1
        else
re2=$re1
(echo "Password FHEM";
echo "setreading RelaisEinfahrtStatus state "$re1"" ;
echo "exit") | nc "IP-FHEM" 7072
echo re1 $re1
fi
done


Vielleicht hilft es jemandem...
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 30 März 2017, 12:49:03
1. durch die 1. Zeile:
#!/bin/bash
wird schon der passende "Interpreter" geladen. also ein bash script.sh ist eigentlich "Doppelgemoppelt", es reicht ein /script.sh. Wenn Unix dieses so nicht will, dürfte es nicht als ausführbar markiert seion, es hilft ein chmod +x script.sh. das x steht für Ausführbar (execut)

2. Warum so eine Zeile?
(echo "Password FHEM";
echo "setreading RelaisEinfahrtStatus state "$re1"" ;
echo "exit")

Du kannst es zusammenfassen:
echo -en "Password FHEM\nsetreading RelaisEinfahrtStatus state $re1\nexit")
das \n steht für "Enter"

3. (Ergänzung zu 2.) Folgendes ist komisch.
echo "setreading RelaisEinfahrtStatus state "$re1"" ;
das siehr für den echo aus wie
echo "string1" $re1"string2" ;
also das $re ist nicht innerhalb des Strings. Wenn Du dort die " haben willst, must Du sie maskieren, z.B. mit \"

4. (und Wichtig)
Du lässt eine Schleife ziemlich lange laufen.  Wie kommst Du darauf, das die Bedingung "SECONDS < secs" sich mal ändert? SECONDS wird innerhalb der Schleife nicht geändert.

Außerdem kann Unix seeeehr schnell sein. Eventuell solltest Du noch irgendwo ein "sleep" einbauen ...
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 30 März 2017, 13:27:14
Hallo
zu1.
chmod +x test2.sh
Habe ich versucht erhalte aber immer nach dem aufruf /test2.sh
Datei oder Verzeichnis nicht gefunden...
zu 2.
Ok ist jetzt kürzer (Habe noch net soviel Ahnung von Bash etc...)
zu3.
scheint auch ohne zu gehen...
zu4. das ist ein Problem was ich bisher völlig übersehen habe....
ohne eine Pause mit sleep blockiere ich mir die Relaiskarte fast 100%, mit sleep 1s wird es deutlich besser....
Ich hatte die Schleife eingebaut da ich den Status der Relaiskarte im Sekundentakt abfragen möchte, ein Cronjob aber minimal 1 minute hat.
irgendwie ist das alles nocht nicht das richtige.

MFG Rico
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 30 März 2017, 13:54:35
1)
Wenn Du /test.sh aufrufst, ist es kein Wunder, das der Rechner nichts findet. / = root und dort liegt bestimmt Dein Script nicht. Da gehört ein . davor, welcher für das aktuelle Verzeichnis steht, also ./test.sh

3)
Wie schon geschrieben: Möchte FHEM dort ein " oder nicht ....

4)
Warum willst Du so schnell abfragen?

Und wenn Du alle Sec brauchst, dann würde ich es auch als kompletten selbständigen Deamon und nicht als Cron-Job laufen lassen. Es hat schon seinen Grund, warum der cron in der Mindesteinstellung 1Minute kann.
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 30 März 2017, 14:04:54
1) das ist doch ziemlich dämlich von mir....geht nun
2) scheinbar nein, da ich deine Zeile verwendet habe und es geht
echo -en "Password FHEM\nsetreading RelaisEinfahrtStatus state $re1\nexit")
4) die Relaiskarte hat 8 Eingänge, diese wollte ich nutzen um Bewegungsmelder oder Taster anzuschliessen und damit Aktionen auszuführen...
leider geht es scheinbar nicht so wie gedacht, da die menge der Abfragen die Karte Blockiert. Jedoch für einen Taster ich ja das Signal binnen Millisekunden (theoretisch) erfassen können müsste.
Die Relaiskarte  selber kann scheinbar nicht senden(sagen Eingang 1 ist on)

Was meinst du mit Daemon?
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 30 März 2017, 14:20:52
Ein Deamon ist ein dauernd laufender Hintergrundprozess. z.B. Apache, fhem, .... eben ein Dienstbares Helferlein


Deine Relaikarte hat also Eingänge, die belibige Werte haben können. Diese willst Du pollen, da die Karte selber nicht Bescheit gibt, wenn sich etwas ändert?

Deshalb fragst Du die Karte ab mit:
echo getr | /bin/nc <IP-Relaiskarte> <Port-Relaiskarte>

1) Da gerade der Netzaufbau relativ viele Resourcen fordert, kann man dieses Verbinden und hinterher es auseinanderfummeln?
echo -en "getr\ngetl\n"  | /bin/nc <IP-Relaiskarte> <Port-Relaiskarte>

2) Oder eine Dauerhafte Verbindung (mit einer Hochsprache) aufbauen?

3) Gibt es eine Info, ob sich überhaupt etwas geändert hat?
Sorry, aber ohne mehr Input kann ich schlecht Helfen = Output bringen ...
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 30 März 2017, 14:28:13
Hier mal noch ein link was die Karte alles so kann...
https://www.loxforum.com/forum/faqs-tutorials-howto-s-aa/55068-relay-board-controlled-over-http-post-is-not-working (https://www.loxforum.com/forum/faqs-tutorials-howto-s-aa/55068-relay-board-controlled-over-http-post-is-not-working)
dort unter Post 11
Leider gibt es diese nicht immer im Netz zukaufen, daher kann ich gerade keine Link dazu schicken...
Vielleicht hilft das ja noch
http://www.ebay.de/itm/322246717616?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT (http://www.ebay.de/itm/322246717616?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT)
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 30 März 2017, 14:53:18
(5) the burst mode read status
Send string DUMP, then returns the status of all relays state and input, and finally OK to knot
bundle.


wie ist die Ausgabe von:
echo "DUMP" | nc
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 30 März 2017, 15:33:07
das ist die Antwort auf DUMP

relayon 1
relayoff 2
relayoff 3
relayoff 4
relayoff 5
relayoff 6
relayoff 7
relayoff 8
IL 1
IH 2
IL 3
IL 4
IL 5
IL 6
IL 7
IL 8
OK

wobei Relai1 "an" und Eingang2 "ein" ist.
Da war mir getr und geti einfacher hier kommt dann als Antwort 000001000....und soweiter.
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 30 März 2017, 15:51:54
Aber Du könntest dieses mit einer Schleife auswerten und hättest nur 1 netcat ... aber jeder wie er will ;o)
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 30 März 2017, 16:20:08
so mach ich es ja auch, siehe Post 6.
Intervall habe ich nun auf 2 sec.
Mal sehen was die Zeit sagt.
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 30 März 2017, 16:40:58
Du hast mich falsch verstanden, ich hätte einen netcat Befehl abgesetzt und die Antwort per schleife ausgewertet ;o)

Aber ohne die Hardware kann man schlecht sagen, was die Karte mehr belastet
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 30 März 2017, 16:49:25
du hast recht, ich habe es noch nicht verstanden.
Die Karte Antwortet nur einmal auf meine Anfrage, wie will ich da eine Schleife drauß machen?
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 30 März 2017, 17:35:24
Nur mal auf die schnelle (bin auf dem Sprung zur Bahn)
for i in line
do
.....
done
< echo ... | nc ...


Genau Syntax für "in line" must DU (mit Bedauern) selber raussuchen
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: rico5588 am 31 März 2017, 10:19:52
Hallo Wernieman,

ich habe vermutlich die Firmware gefunden... vielleicht ergibt sich da für dich ja noch andere möglichkeit mit Fhem zu kommunizieren?!
https://github.com/domoticz/domoticz/blob/master/hardware/RelayNet.cpp (https://github.com/domoticz/domoticz/blob/master/hardware/RelayNet.cpp)

MFG Rico
Titel: Antw:Abfrage mit Netcat in Dummy schreiben
Beitrag von: Wernieman am 31 März 2017, 12:54:50
Sortry, abwer habe die Hardware nicht und kann deshalb nicht testen/probieren