notify bei eingehender TCP Botschaft auslösen

Begonnen von klausw, 30 Oktober 2013, 15:43:06

Vorheriges Thema - Nächstes Thema

klausw

Hallo zusammen,

ich habe ein fertiges Modul auf dem ein Mikrocontroller mit Ethernet Schnittstelle sitzt.
Die Ports des Mikrocontrollers lassen sich über die eingebaute Website auf Input, Output, A/D Conv., PWM... konfigurieren.
Über einfache TCP Kommandos lassen sich die Ports auslesen und Outputs setzen. Mit den ECMD Modulen funktioniert das auch super.

nun zu meinem Problem:
Inputs lassen sich so einstellen, das bei einem Triggerevent am Port eine TCP Botschaft gesendet wird.
Nun würde ich das gern mit FHEM auswerten und bei ankommender Botschaft ein notify auslösen. Also ohne pollen.
Gibt es da bereits Lösungen?

Gruß
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

UliM

Hi,
wenn Du die gesendete "Botschaft" einstellen kannst, sicher - dann einfach den entspr. Schaltvorgang als URI absetzen.
Sonst bräuchtest Du halt nen port-listener.

Was genau setzt denn der MC ab? Konfigurierbar? Wie weit?

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

klausw

Hi Uli,

war ja klar, das ich die wichtigsten Infos vergessen habe ;)
Die Botschaft lässt sich leider nicht ändern. Ich habe mal angefragt ob es möglich ist das nach zurüsten, aber noch keine Antwort.

Der MC hat 13 konfigurierbare Ports. Die von a bis m durchbenannt sind.
Wenn z.B. Port A auf Input mit Trigger auf allen Flanken eingestellt ist und ich mit z.B. Telnet, Socat etc. verbunden bin sendet er bei jedem Pegelwechsel auf High: "a=1" und auf Low: "a=0"

Sieht also so aus, als ob ich einen port-listener brauche.
Gibt es schon ein ähnliches Modul, welches ich anpassen kann?

Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

klausw

ich habe ne Antwort bekommen
In der neuen Firmware kann man die Kommandos anpassen, also werde ich erstmal abwarten :)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

stevestrong

#4
hi Klaus,
der port-listener würde mich auch interessieren.
hast du neuigkeiten diesbezüglich?
lg steve

rudolfkoenig

Vielleicht hilft cmdalias:

define a1 cmdalias a=1 AS trigger a1 a1

klausw

#6
Zitat von: rudolfkoenig am 16 Dezember 2013, 08:40:17
Vielleicht hilft cmdalias:

define a1 cmdalias a=1 AS trigger a1 a1

Oh, das habe ich bisher übersehen
Leider ist es eine Raw TCP Verbindung.
Das heisst, es wird nur "a=1" gesendet, und nicht "fhemhost:48083/fhem?cmd=a=1".
Und die Verbindung muss von FHEM Seite aus aufgebaut werden.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

klausw

Zitat von: stevestrong am 16 Dezember 2013, 01:37:23
hi laus,
der port-listener würde mich auch interessieren.
hast du neuigkeiten diesbezüglich?
lg steve
Hatte das Thema aus den Augen verloren.
Vielleicht habe ich über die Feiertage ein bisschen Zeit.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

rudolfkoenig

ZitatDas heisst, es wird nur "a=1" gesendet, und nicht "fhemhost:48083/fhem?cmd=a=1".

Ich meinte das telnet Interface, aber der benoetigt auch ein NL.
/fhem?cmd= wird vom FHEMWEB benoetigt zusammen mit einem HTTP header.

klausw

Achso, ja darüber hatte ich auch schon nachgedacht.
Gerade habe ich mir das Teil nochmal angeschaut. Es liefert bei Statusänderung der GPIOs den Status aller Pins in Hex zurück. Also wenn ich GPIO1 auf 1 wechsle und der Rest 0 ist: "x=01 " und wenn er auf 0 wechselt "x=00 ".
Als Trennzeichen kommt also nur ein Leerzeichen.
Ausserdem möchte ich auf den gleichen Port auch senden können(um GPIOs die als Output eingestellt sind zu setzen).

Wenn es da nix gibt, kann ich aber auf DevIo aufsetzen oder?
Gibt es da ein einfaches Modulbeispiel, was ich mir zum Verständnis anschauen kann?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

justme1968

wenn du so weit bist das du lesen und schreiben kannst schau dir mal readingsProxy an damit kannst du ein device das alle ports kombiniert hat auf mehrere fhem devices aufsplitten die dann getrennt in fhem darstellbar sind. also mit eigenen icon, eigenen webCmd, ....

in dem thread hier: http://forum.fhem.de/index.php/topic,16374.msg109816.html#msg109816 findest du weiter unten ein paar beispiele.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

klausw

Zitat von: justme1968 am 16 Dezember 2013, 22:15:02
wenn du so weit bist das du lesen und schreiben kannst schau dir mal readingsProxy an damit kannst du ein device das alle ports kombiniert hat auf mehrere fhem devices aufsplitten die dann getrennt in fhem darstellbar sind. also mit eigenen icon, eigenen webCmd, ....

in dem thread hier: http://forum.fhem.de/index.php/topic,16374.msg109816.html#msg109816 findest du weiter unten ein paar beispiele.

gruss
  andre
Du meinst um den Hexwert in einzelne Geräte auseinander zu klabustern?
Wenn ich schon so weit wäre  8)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

justme1968

mit IO::Socket::INET müsste es etwa in der art funktionieren:

- ReadFn definieren
- etwa so ein docket auf und zu machen:sub
iTunes_startUpdater($)
{
  my ($hash) = @_;
  my $name   = $hash->{NAME};

  iTunes_stopUpdater($hash,0);

  my $conn = IO::Socket::INET->new(PeerAddr=>"$hash->{Host}:$hash->{Port}");

  if($conn) {
    $hash->{STATE} = "Connected";

    $hash->{FD}    = $conn->fileno();
    $hash->{CD}    = $conn;         # sysread / close won't work on fileno
    $hash->{CONNECTS}++;
    $selectlist{$name} = $hash;
    Log(GetLogLevel($name,3), "$name: updater connected to $hash->{Host}:$hash->{Port}");

    iTunes_requestUpdate($hash);

  } else {
    iTunes_stopUpdater($hash, 1);

  }
}

sub
iTunes_stopUpdater($$)
{
  my ($hash, $connect) = @_;
  my $name   = $hash->{NAME};

  return if( !$hash->{CD} );

  close($hash->{CD}) if($hash->{CD});
  delete($hash->{FD});
  delete($hash->{CD});
  delete($selectlist{$name});
  $hash->{STATE} = "Disconnected";
  if($connect) {
    Log3 $name, 4, "$name: updater Connect failed.";
  } else {
    Log3 $name, 4, "$name: updater Disconnected";
  }
}

- sobald daten da sind wird die readFn aufgerufen und du kannst dort etwa so lesen:      my $buf;
      my $ret = sysread($hash->{CD}, $buf, 1024*1024);
      if(!defined($ret) || $ret <= 0) {
      iTunes_startUpdater($hash);
        return;
      }

- schreiben entsprechend mit syswrite

alles was iTunes heisst solltest du umbenennen :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

klausw

Danke Andre,

super Erklärung, das empfangen der Daten funktioniert schon.
Aber wenn die Gegenstelle nicht da ist dann versucht sich FHEM endlos zu verbinden, lässt sich da ein timeout einfügen?

Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

justme1968

wenn die verbindung nicht geht nicht sofort wieder versuchen sondern mit InternalTimer irgendwann später.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968