rfxtrx433e unter Windows, wer kann mir weiterhelfen?

Begonnen von sigii, 22 Dezember 2014, 16:12:26

Vorheriges Thema - Nächstes Thema

sigii

Hallo Zusammen,

Erst mal vielen Dank an alle hier, durch deren Artikel im Wiki und hier im Forum ich imstande war, meinen FHEM-Server in Betrieb zu nehmen.
Bevor ich zu meinem Problem komme, erst mal ein paar Eckkoordinaten zu meinem System:
- Server: Win 2008R2 (Bäh, aber er läuft sowieso 7/24, warum nicht auch FHEM drauf laufen lassen?)
- Hauptsächlich Homematic Komponenten, aber auch ein Harmony Hub läuft ohne Probleme
- Da noch viele alte Ikea Koppla Steckdosen herumliegen, jetzt noch ein rfxtrx433e
- Und weil es sonst viel zu einfach wäre, hängt der rfxtrx433e, per Fritz USB Fernzugang an einer 7490. Der Server steht nämlich im Keller, und die Fritzbox günstig im Wohnzimmer
- Und zu guter Letzt, ich habe keine Ahnung von Perl, aber immerhin schon in vielen anderen Programmiersprachen programmiert

Nach der Installation des rfxtrx433e erst mal die passende Firmware geflashed und per RFXmngr erste Tests gefahren. Überraschung, alles funktioniert wie erhofft.
Nach dem Anschluß an FHEM die Ernüchterung - nix geht. Aber ein paar mal habe ich es kurzfristig geschafft, eine Steckdose zu schalten.
Wen man beim TRX mit modify den define-String ändert geht es für ein paar Sekunden. (Ohne das man wirklich irgend etwas modifiziert)
Da logfile meldet auch, das nicht richtig initialisiert wurde, und das Forum gibt den Tip, einfach die Zeit in folgendem Statement zu erhöhen:

DevIo_TimeoutRead($hash, 0.5);


Doch egal wie hoch man die Zeit setzt, nix ändert sich. Nach etwas stöbern habe ich jedoch folgendes in der DevIo.pm gefunden:
########################
########################
# Read until you get the timeout. Use it with care since it waits _at least_
# timeout seconds, and it works on Windows only for TCP/IP connections
sub
DevIo_TimeoutRead($$)

Aha, das scheint mir des Rätsels Lösung zu sein, probieren wir doch mal statt dessen folgendes für die komplette Initialisierung (Die original Zeilen jeweils auskommentiert):
  my $init = pack('H*', "0D00000000000000000000000000");
  DevIo_SimpleWrite($hash, $init, 0);
#  DevIo_TimeoutRead($hash, 0.5);
  sleep 1;
  DevIo_DoSimpleRead($hash);


  TRX_Clear($hash);

  #
  # Get Status
  $init = pack('H*', "0D00000102000000000000000000");
  DevIo_SimpleWrite($hash, $init, 0);
#  $buf = unpack('H*',DevIo_TimeoutRead($hash, 0.1));
  sleep 1;
  $buf = unpack('H*',DevIo_DoSimpleRead($hash));


Und siehe da, es scheint so als ob der rfxtrx433e jetzt richtig initialisiert.
Ich weiß, dass ich FHEM jetzt 2 mal für je eine Sekunde außer Gefecht setze, aber da der Code ja nur beim Starten aufgerufen wird, kann ich das verschmerzen.
Leider hält das Ganze nur für ca. 20 Sekunden an, und dann geht wieder nix.
Also weitersuchen, und der Übeltäter scheint die Funktion DevIo_CloseDev in der DevIo.pm zu sein, die am Ende des Startvorgangs die Verbindung gleich wieder unterbricht.
Also erst mal die Symptome bekämpfen mit einem
  return if($dev eq "com3\@38400");

am Anfang der Funktion.
Teilerfolg, der rfxtrx433e bleibt am Laufen, und ich kann meine Steckdosen schalten, bekomme aber folgende Fehlermeldung im log:
PERL WARNING: (in cleanup) Can't call method "Call" on an undefined value at C:/fhem/perl/site/lib/Win32API/CommPort.pm line 193 during global destruction.

Leider habe ich keine Ahnung woher dieser Aufruf kommt, dem log-File zufolge kommt er aber ziemlich genau jede Stunde wieder. Hat irgend wer eine Ahnung wo ich noch Eingreifen kann, um den CloseDev Befehl zu unterdrücken?

Gruß
sigii


drdownload

Hi, ich weiß das geht jetzt am Thema vorbei aber warum keine vm mit Linux für fhem?
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

sigii

Hi,

wäre auch möglich, aber es läuft schon ein Hyper-V auf dem Server, leider geht bei 2008R2 keine Weiterleitung des USB-Ports in die VM und ein Versuch mit VirtualBox ist wg. Unverträglichkeit gescheitert. Fritz USB Weiterleitung geht auch nur auf Win Systeme, eine direkte Weiterleitung in die VM scheidet somit auch aus.
Letzte Option wäre noch eine separate FHEM Instanz auf der Fritzbox, aber da der Win Server leistungsstärker ist und sowieso schon läuft, habe ich es mir in den Kopf gesetzt FHEM darauf laufen zu lassen.
Und wenn ich mir sowas in den Kopf gesetzt habe, dann ziehe ich es auch durch :-)
(Bei mir im Haushalt leben aber völlig undogmatisch Win, Linux, Android und iOS zusammen)

Gruß
sigii

Willi

Hast Du mal probiert den TRX mit noinit zu definieren?
FHEM@Q600(debian) mit DS9490R (1Wire) | FHEM@Sheevaplug(debian) mit RFXCOM-Receiver(80002), CULv3 & USB-WDE1 | FHEM@odroid mit CULv2 & RFXtrx433

sigii

#4
Hallo Willi,

ja, habe ich probiert. Ohne meine Änderungen kommen folgende Einträge im Log-File und nichts geht:
2014.12.26 14:03:50 1: TRX: TRX1 no init is done
2014.12.26 14:03:50 3: Opening TRX1 device com3
2014.12.26 14:03:50 3: Setting TRX1 baudrate to 38400
2014.12.26 14:03:50 3: TRX1 device opened
2014.12.26 14:03:50 1: TRX: defined with noinit. Do not send init string to device.


Weiter unten im Log steht noch eine Eintrag der darauf hindeutet, das com3 wieder geschlossen wurde:
PERL WARNING: Use of uninitialized value $InBytes in numeric gt (>) at ./FHEM/45_TRX.pm line 400.

Mit meinen Änderungen geht alles aber es kommt die vorher beschriebene Perl Warning.

EDIT: Nochmal getestet, diesmal mit save config. :-)

Gruß
Siggi

Norberto

Hallo sigii,

Habe das gleiche Problem wenn ich zum experimentieren ein FHEM unter Windows laufen lasse.

Hattest Du inzwischen eine finale Lösung gefunden?

Gruß, Norbert