Funksignalanalyse mit SDR fähigem DVB-T Stick

Begonnen von C_Herrmann, 08 Februar 2014, 16:00:44

Vorheriges Thema - Nächstes Thema

machnetz

Moin,

ich habe nun alles nach Anleitung aufgebaut, bin aber anscheinend zu untalentiert um eine Frequenz einzustellen geschweige denn ein Funktelegramm aufzuzeichnen.

In der aktuellen Version des SDR-Sharp (und auch den anderen Versionen) gab/gibt es keine Möglichkeit die Frequenz einzustellen, ich bekomme es also nicht hin im Bereich bei 868MHz irgendwas zu sehen.

Kann mir jemand weiterhelfen oder einen Link senden, wo ich das weiter verfolgen bzw. erfragen kann?

Danke und Gruß, machnetz

C_Herrmann

Hallo machnetz,

ich benutze immer noch die Stable-Version. Dort musste noch irgendeine Datei zugefügt werden, die in den nightly's schon enthalten ist.

Zunächst muss der Stick oben links auf RTL-SDR/USB eingestellt werden.

Am linken Bildrand gibt es ein Register Radio. Dort muss WFM ausgewählt werden. Dann habe ich unter Frequency 868.336.000 und unter Center 868.400.000 eingestellt. Filter bandwidth steht auf 200000. Damit kann ich alle Geträte in diesen Bereich erkennen.

Zum Aufnehmen muss das Register "Recording (Plugin)" aufgeklappt werden. Zum Aufzeichnen der Funksignale muss Baseband und nicht Audio aktiviert sein.

In den übrigen Registern habe ich nichts verändert.

Gruß,
Christian
FHEM auf RPi, CUL868, FHT, UNIRoll, verschiedene FS20 Komponenten, IT, Zigbee zum Testen

Ranseyer

Ich wärme das Thema mal wieder auf...

Das Programm RTL_433 ist schon sehr nett:
Zitatrtl_433, an ISM band generic data receiver for RTL2832 based DVB-T receivers

Usage:   = Tuner options =
   [-d <RTL-SDR USB device index>] (default: 0)
   [-g <gain>] (default: 0 for auto)
   [-f <frequency>] [-f...] Receive frequency(s) (default: 433920000 Hz)
   [-p <ppm_error] Correct rtl-sdr tuner frequency offset error (default: 0)
   [-s <sample rate>] Set sample rate (default: 250000 Hz)
   [-S] Force sync output (default: async)
   = Demodulator options =
   [-R <device>] Enable only the specified device decoding protocol (can be used multiple times)
   [-G] Enable all device protocols, included those disabled by default
   [-l <level>] Change detection level used to determine pulses [0-16384] (0 = auto) (default: 0)
   [-z <value>] Override short value in data decoder
   [-x <value>] Override long value in data decoder
   [-n <value>] Specify number of samples to take (each sample is 2 bytes: 1 each of I & Q)
   = Analyze/Debug options =
   [-a] Analyze mode. Print a textual description of the signal. Disables decoding
   [-A] Pulse Analyzer. Enable pulse analyzis and decode attempt
   [-D] Print debug info on event (repeat for more info)
   [-q] Quiet mode, suppress non-data messages
   [-W] Overwrite mode, disable checks to prevent files from being overwritten
   = File I/O options =
   [-t] Test signal auto save. Use it together with analyze mode (-a -t). Creates one file per signal
       Note: Saves raw I/Q samples (uint8 pcm, 2 channel). Preferred mode for generating test files
   [-r <filename>] Read data from input file instead of a receiver
   [-m <mode>] Data file mode for input / output file (default: 0)
       0 = Raw I/Q samples (uint8, 2 channel)
       1 = AM demodulated samples (int16 pcm, 1 channel)
       2 = FM demodulated samples (int16) (experimental)
       3 = Raw I/Q samples (cf32, 2 channel)
       Note: If output file is specified, input will always be I/Q
   [-F] kv|json|csv Produce decoded output in given format. Not yet supported by all drivers.
   [-C] native|si|customary Convert units in decoded output.
   [-T] specify number of seconds to run
   [-U] Print timestamps in UTC (this may also be accomplished by invocation with TZ environment variable set).
   [<filename>] Save data stream to output file (a '-' dumps samples to stdout)

Supported device protocols:
    [01]* Silvercrest Remote Control
    [02]  Rubicson Temperature Sensor
    [03]  Prologue Temperature Sensor
    [04]  Waveman Switch Transmitter
    [05]* Steffen Switch Transmitter
    [06]* ELV EM 1000
    [07]* ELV WS 2000
    [08]  LaCrosse TX Temperature / Humidity Sensor
    [09]* Acurite 5n1 Weather Station
    [10]* Acurite 896 Rain Gauge
    [11]* Acurite 609TXC Temperature and Humidity Sensor
    [12]  Oregon Scientific Weather Sensor
    [13]* Mebus 433
    [14]* Intertechno 433
    [15]  KlikAanKlikUit Wireless Switch
    [16]  AlectoV1 Weather Sensor (Alecto WS3500 WS4500 Ventus W155/W044 Oregon)
    [17]* Cardin S466-TX2
    [18]  Fine Offset Electronics, WH-2 Sensor
    [19]  Nexus Temperature & Humidity Sensor
    [20]  Ambient Weather Temperature Sensor
    [21]  Calibeur RF-104 Sensor
    [22]* X10 RF
    [23]* DSC Security Contact
    [24]* Brennstuhl RCS 2044
    [25]* GT-WT-02 Sensor
    [26]* Danfoss CFR Thermostat
    [27]* Energy Count 3000 (868.3 MHz)
    [28]* Valeo Car Key
    [29]  Chuango Security Technology
    [30]  Generic Remote SC226x EV1527
    [31]  TFA-Twin-Plus-30.3049 and Ea2 BL999
    [32]  Fine Offset WH1080 Weather Station
    [33]  WT450
    [34]  LaCrosse WS-2310 Weather Station
    [35]  Esperanza EWS
    [36]* Efergy e2 classic
    [37]* Inovalley kw9015b rain and Temperature weather station
    [38]  Generic temperature sensor 1
    [39]* Acurite 592TXR Temperature/Humidity Sensor and 5n1 Weather Station
    [40]* Acurite 986 Refrigerator / Freezer Thermometer
    [41]  HIDEKI TS04 Temperature and Humidity Sensor
    [42]  Watchman Sonic / Apollo Ultrasonic / Beckett Rocket oil tank monitor
    [43]  CurrentCost Current Sensor
    [44]  emonTx OpenEnergyMonitor
    [45]  HT680 Remote control
    [46]  S3318P Temperature & Humidity Sensor
    [47]  Akhan 100F14 remote keyless entry
    [48]  Quhwa
    [49]  OSv1 Temperature Sensor
    [50]  Proove
    [51]  Bresser Thermo-/Hygro-Sensor 3CH
    [52]  Springfield Temperature and Soil Moisture
    [53]  Oregon Scientific SL109H Remote Thermal Hygro Sensor
    [54]  Acurite 606TX Temperature Sensor
    [55]  TFA pool temperature sensor
    [56]  Kedsum Temperature & Humidity Sensor
    [57]  blyss DC5-UK-WH (433.92 MHz)
    [58]  Steelmate TPMS
    [59]  Schraeder TPMS
    [60]* LightwaveRF
    [61]  Elro DB286A Doorbell
    [62]  Efergy Optical
    [63]  Honda Car Key
    [64]* Template decoder
    [65]  Fine Offset Electronics, XC0400
    [66]  Radiohead ASK
    [67]  Kerui PIR Sensor

* Disabled by default, use -R n or -G



Noch besser scheint mir: Universal-Radio Hacker.

FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

mebwaster

Habe einen SDR DVB-T Stick gekauft. Funktioniert super mit meinen Temperaturfühlern und dem rtl_433: Bekomme die Temperaturwerte aller Fühler ausgegeben.

Wie bekomme ich nun die Werte ins FHEM?
Habe ein kleines Java-Programm geschrieben, welches die Ausgabe von rtl_433 auswertet und die Sensordaten pro Fühler in jeweils ein eigenes Verzeichnis schreibt (und dabei auch gleich die gelieferten Fahrenheit in Celsius umrechnet):
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.ProcessBuilder.Redirect;
import java.text.DecimalFormat;


public class TempParser
{
Process sensorProgram;
static DecimalFormat df=new DecimalFormat("#.#");

public static void main(String[] args) throws IOException
{
TempParser parser=new TempParser();
parser.run();
}

public void run() throws IOException
{
startSensorProgram();

InputStream in=sensorProgram.getInputStream();
BufferedReader bin=new BufferedReader(new InputStreamReader(in));

String line=bin.readLine();
System.out.println("Header: "+line);
while( (line=bin.readLine())!=null )
{
String[] data=line.split(",");
String deviceId=data[1];
String tempStr=data[3];
String humidStr=data[4];

double tempFahrenheit=Double.parseDouble(tempStr);
double tempCelsius=(tempFahrenheit-32)*5/9;
String celString=df.format(tempCelsius);

writeValueFiles(deviceId, celString, humidStr);
}
}

private void startSensorProgram() throws IOException
{
ProcessBuilder pb=new ProcessBuilder("/usr/local/bin/rtl_433", "-R", "20", "-F", "csv");
pb.redirectError(Redirect.INHERIT);
sensorProgram = pb.start();
}

private void writeValueFiles(String deviceId, String celString, String humidStr)
{
File outputPath=new File("/var/sensor/"+deviceId);
if( !outputPath.exists() )
outputPath.mkdir();
writeValueFile(outputPath,"temp",celString);
writeValueFile(outputPath,"hydr",humidStr);
}

private void writeValueFile(File outputPath, String name, String content)
{
try
{
File outFile=new File(outputPath,name);
FileWriter fout=new FileWriter(outFile);
BufferedWriter bout=new BufferedWriter(fout);
bout.write(content);
bout.close();
System.out.println("Write value <"+content+"> to file <"+outFile+">.");
}
catch( IOException io )
{
io.printStackTrace();
}
}

}


Im FHEM habe ich dann über das Modul "CustomReadings" die einzelnen Fühler eingelesen.
Das funktioniert eigentlich recht gut.
Nun die Frage - gibt es einen besseren Weg, diese Daten ins FHEM reinzubekommen?
Obwohl die Lösung gut funktioniert, hat sie einige Nachteile. Z.B. das die Sensorwerte zeitverzögert kommen (je nach CustomReadings interval), oder es auch nicht auffällt wenn ein Sensor ausfällt - es bleibt immer der letzte empfangene Wert angezeigt.