FHEM Forum

FHEM => Automatisierung => Thema gestartet von: ritchie am 21 Juli 2013, 20:31:15

Titel: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: ritchie am 21 Juli 2013, 20:31:15
Hallo Zusammen,

ich arbeite derzeit an einem Modul für einen EHZ Zähler.

Dieser sendet ständig seine Pakete ohne das ich eine Anfrage mache.

Von anderen System kenne ich das so, das ich dann einen Interrupt-Routine definieren kann,
wo ich die eingehenden Zeichen der seriellen Schnittstelle verarbeiten kann.

Gibt es sowas auch für FHEM.
Derzeit lese ich halt die Zeichen solange einzulesen, bis ich eine Startkennung erkannt habe und beginne dann mit dem eigentlichen Einlesen.

In meiner Modul Definition sehe ich derzeit bei "CFGFN" nichts, was fehlt hier noch


Gruss R.
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: betateilchen am 21 Juli 2013, 20:55:38
Zitat von: ritchie schrieb am So, 21 Juli 2013 20:31In meiner Modul Definition sehe ich derzeit bei "CFGFN" nichts, was fehlt hier noch

vermutlich nix. Ich habe das Ding bei den meisten Geräten gar nicht. Ich glaube, da habe ich nur ein einziges Mal einen Inhalt gesehen, als ich die Konfiguration auf mehrere Dateien verteilt hatte und die mit include verknüpft waren. Wenn ich mich recht erinnere, stand dann der Name der eingefügten Datei da drin.
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: ritchie am 21 Juli 2013, 21:37:26
Hallo Betateilchen,

ich konnte bis jetzt auch keine Infos hierzu finden. Auch haben die Module,
welche ich verwende, diesen Eintrag auch nicht.

Kann ja auch einen Eintrag zuviel erzeugt sein von mir.


Gibt es eigentlich ein Modul, welches "forken" verwendet.

Das Einlesen der seriellen Schnittstelle und das Warten auf das Startzeichen dauert dann doch sehr lange.

Gruss R.
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: betateilchen am 21 Juli 2013, 21:50:11
   my $cfgfile = $h->{CFGFN} ? $h->{CFGFN} : "configfile";
    my $fh = $fh{$cfgfile};
    if(!$fh) {
      if(!open($fh, ">$cfgfile")) {
        $ret .= "Cannot open $cfgfile: $!, ignoring its content\n";
        $fh{$cfgfile} = 1;
        $skip{$cfgfile} = 1;
      } else {
        $fh{$cfgfile} = $fh;
      }


Hat definitiv was mit dem Konfigurationsfile zu tun, also mach Dir keinen Streß deswegen.

Zu Deinem Fork-Problem kann ich Dir leider nix sagen.

Viele Grüße
Udo
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: ritchie am 21 Juli 2013, 21:53:09
Witzig.

in meinem Modul taucht der Text "CFGFN" nicht auf ...

Dank für die Infos...

Gruss R.
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: justme1968 am 21 Juli 2013, 21:58:46
wenn du wirklich forken musst geht das per BlockinCall.pm. ein beispiel wie das geht findest du z.b. im speedtest modul. dazu gibt es auch einen wiki artikel von markus bloch.

wenn es nur darum geht beim lesen nicht zu blockieren kannst du das aber viel einfacher in dem du deinen filedescriptor per selectlist in die fhem event loop einhängst. du wirst dann automatisch aufgerufen wenn daten für dich da sind. ein beispiel dafür ist das telnet modul in fhem.

gruss
  nadre
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: ritchie am 21 Juli 2013, 22:03:05
Hallo nadre,

Forken muss ich nicht wirklich. Dein Hinweis scheint wohl die Lösung zu sein.
Das schaue ich mit mal an, danke für die Info.

Gruss R.
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: betateilchen am 21 Juli 2013, 22:36:29
Zitat von: ritchie schrieb am So, 21 Juli 2013 21:53in meinem Modul taucht der Text "CFGFN" nicht auf

in meinem auch nicht. Aber wenn Du mal was suchst, was Du nirgends anders findest, dann schau in die fhem.pl *g*
Titel: Aw: Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht
Beitrag von: rudolfkoenig am 22 Juli 2013, 14:54:13
fork() bzw. BlockingCall ist in meinem Augen nur eine Notloesung. Wenn man nicht aktiv viel Rechenzeit braucht, dann sollte man das Problem moeglichst mit select loesen, auch wenn das manchmal aufwendiger zu programmieren ist.
Vlt. brauchen wir fuer das Einlesen von externen Programm-Output per select Hilfsroutinen, damit Modulautoren es einfacher haben.

Die Funktionen in DevIO.pm erledigen das meiste, was mit oeffnen/eintragen/etc zu tun hat, das Zusammenbauen der Nachrichten muss man selbst erledigen, aber dazu gibt es zahlreiche Beispiele.

fhem.pl setzt CFGFN fuer ein Geraet, falls "define" nicht aus fhem.cfg direkt stammt, sondern aus einem per include angegebenen Dateien. Wird benoetigt, damit save die Definition auch dahin wieder zurueckgeschreibt.
Die Module sollten mit diesem Eintrag nichts anfangen.