Device sendet ständig ohne Aufforderung & "CFGFN" ist leer in der Übersicht

Begonnen von ritchie, 21 Juli 2013, 20:31:15

Vorheriges Thema - Nächstes Thema

ritchie

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.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ritchie

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.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

betateilchen

   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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ritchie

Witzig.

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

Dank für die Infos...

Gruss R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

ritchie

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.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

betateilchen

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*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

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.