Hallo zusammen,
das Problem wurde hier schon angesprochen: Klick, da es aber nicht Denn spezifisch zu sein scheint mache ich hier einen eigenen Thread auf.
Folgende Situation bei mir:
Ein Raspberry sendet per scat Daten ans Wirkgate (TCP), dort läuft ein Scort der die Daten empfängt und an einen UDP-Port auf dem localhost weiterleitet. Dieses Setup hat es bis zum Letzten Update problemlos getan, seitdem kommen im Plugin keine Daten mehr an.
Was ich probiert habe:
1. Manueller Empfang der Daten vom raspberry per socat auf dem Wiregate in der Kommandozeile: Funktioniert
2. Senden an den UDP Port auf dem das Plugin lauscht von der Kommandozeile aus: Auch dabei kommen keine Daten an.
Meine Vermutung geht also dahin, dass sich irgend etwas an der Plugin Schnittstelle geändert hat.
Der socat Aufruf:
Die Sourcen des Plugins (Vorlage stammt aus dem Forum):
das Problem wurde hier schon angesprochen: Klick, da es aber nicht Denn spezifisch zu sein scheint mache ich hier einen eigenen Thread auf.
Folgende Situation bei mir:
Ein Raspberry sendet per scat Daten ans Wirkgate (TCP), dort läuft ein Scort der die Daten empfängt und an einen UDP-Port auf dem localhost weiterleitet. Dieses Setup hat es bis zum Letzten Update problemlos getan, seitdem kommen im Plugin keine Daten mehr an.
Was ich probiert habe:
1. Manueller Empfang der Daten vom raspberry per socat auf dem Wiregate in der Kommandozeile: Funktioniert
2. Senden an den UDP Port auf dem das Plugin lauscht von der Kommandozeile aus: Auch dabei kommen keine Daten an.
Meine Vermutung geht also dahin, dass sich irgend etwas an der Plugin Schnittstelle geändert hat.
Der socat Aufruf:
Code:
/usr/bin/socat -u tcp-listen:49990,reuseaddr,fork udp-datagram:127.0.0.1:49991,bind=:49992,reuseaddr
Code:
# Plugin zum Empfang der Sensordaten vom Raspberry # Die Vorlage für die Datenübertragung via socat stammt von makki (https://knx-user-forum.de/members/makki.html) # # ####################### ### Wichtige Infos: ### ####################### # # Im WG ist eine Socketverbindung mit folgenden Parametern zu erstellen: # Name: z.B. Raspberry # Socket1: tcp-listen, Socket: IP_DES_RASPBERRY:49990, Optionen: reuseaddr,fork # Socket2: udp-datagram, Socket: 127.0.0.1:49991, Optionen: bind=:49992,reuseaddr # #################### ###Einstellungen:### #################### my $ga_temp_bib = '11/1/170'; #GA Temperatur my $ga_relF_bib = '11/1/171'; #GA rel. Feuchte my $ga_tauP_bib = '11/1/172'; #GA Taupunkt my $ga_absF_bib = '11/1/173'; #GA absolute Feuchte my $ga_lux_bib = '11/1/174'; #GA Helligkeit #Diese Einstellungen können normalerweise so belassen werden! #my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen) #my $send_port = "50106"; # Sendeport (UDP, siehe in Socket-Einstellungen) my $recv_ip = "127.0.0.1"; # Empfangsport (UDP, siehe in Socket-Einstellungen) my $recv_port = "49991"; # Empfangsport (UDP, siehe in Socket-Einstellungen) ###################### ##ENDE Einstellungen## ###################### my $socknum = 20; # Eindeutige Nummer des Sockets +1 # Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen) $plugin_info{$plugname.'_cycle'} = 0; # Konstanten zur Berechnung von abs. Feuchte & Taupunkt # a = 7.5, b = 237.3 für T >= 0 # a = 7.6, b = 240.7 für T < 0 über Wasser (Taupunkt) # a = 9.5, b = 265.5 für T < 0 über Eis (Frostpunkt) my $a = 7.5; my $b = 237.3; # Hauptverarbeitung # Initialisierung des Sockets if (!$socket[$socknum]) { # socket erstellen $socket[$socknum] = IO::Socket::INET->new( LocalPort => $recv_port, Proto => "udp", ReuseAddr => 1, LocalAddr => $recv_ip) or return ("open of $recv_ip : $recv_port failed: $!"); $socksel->add($socket[$socknum]); # add socket to select $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin return "opened UDP-Socket $socknum"; } if ($fh) # Read from UDP-Socket { my $buf; my $result = "Unknown"; recv($fh,$buf,255,0); if(!$buf || (length($buf) < 11)) # Bogus messages { return "Invalid message"; } my @items = split(/;/, $buf); if ((@items == 5) && (index($items[0], 'Bib') != -1)) { $items[1] =~ s/^\s+//; #relative Feuchte $items[2] =~ s/^\s+//; #Temperatur $items[3] =~ s/^\s+//; #VAD $items[4] =~s/^\s+//; #VDD #Formeln siehe http://www.wetterochs.de/wetter/feuchte.html my $SDD = 6.1078 * 10**(($a*$items[2])/($b+$items[2])); # Sättigungsdampfdruck in hPa my $DD = $items[1]/100 * $SDD; # Dampfdruck in hPa my $v = log($DD/6.1078)/log(10); #log10 my $TD = $b*$v/($a-$v); #Taupunkttemperatur in °C my $AF = 10**5 * 18.016/8314.3 * $DD/($items[2]+273.15); #absolute Feuchte in g Wasserdampf pro m3 Luft knx_write($ga_relF_bib, $items[1], 5); knx_write($ga_temp_bib, $items[2], 9); knx_write($ga_tauP_bib, $TD, 9); knx_write($ga_absF_bib, $AF, 9); update_rrd("Bibliothek_hum", "", $items[1], "GAUGE"); update_rrd("Bibliothek_temp", "", $items[2], "GAUGE"); update_rrd("Bibliothek_dew", "", $TD, "GAUGE"); update_rrd("Bibliothek_ahum", "", $AF, "GAUGE"); $result = sprintf("Bib - rF: %.2f, T: %.2f, TD: %.2f, AF: %.2f, VAD: %.2f, VDD: %.2f", $items[1], $items[2], $TD, $AF, $items[3]); } #if (time() - $plugin_info{$plugname.'_rfidlast_'.$bufhex} < $interval) { # return; #} #$plugin_info{$plugname.'_rfidlast_'.$bufhex} = time(); return $result; } return;
Kommentar