Funk-Gong Sender in fhem einbinden

Begonnen von rippi46, 06 Januar 2017, 18:58:44

Vorheriges Thema - Nächstes Thema

HomeAuto_User

Hallo,
ist es möglich, hier alle Informationen zu bündeln. So kann ich diese in das dazugehörige Modul einarbeiten um nicht manuell  immer den sendMSG durchzuführen.

@Ralf, bezüglich deiner VerarbeitungsRoutine (sub in der SIGNALduino.pm) machst du da bitte einen PR um alles zusammenzuführen damit @Coolheizer dann erfolgreich mit dem Modul Klingeln kann?

MfG :-*
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Ralf9

#91
Zitat@Ralf, bezüglich deiner VerarbeitungsRoutine (sub in der SIGNALduino.pm) machst du da bitte einen PR um alles zusammenzuführen

Mir wäre es lieber, wenn Du den PR machen würdest.

Mit der "sub SIGNALduino_GROTHE" wird geprüft ob am Anfang die preamble ist.
Falls die Nachricht mit 2 Nullen beginnt
00100011100000010010100111011001101001111 000  D=238129D9A78  L=41
wird am Anfang eine Null entfernt
0100011100000010010100111011001101001111      D=470253B34F   L=40
damit fallen die 3 Nullen am Ende, die nicht zur Nachricht gehören, weg.

sub SIGNALduino_GROTHE()
{
my ($name,$bitData,$id,$mcbitnum) = @_;
#my $debug = AttrVal($name,"debug",0);

my $bitLength;
$bitData = substr($bitData, 0, $mcbitnum);
my $preamble = "01000111";
my $pos = index($bitData, $preamble);
if ($pos < 0 || $pos > 5) {
return (-1,"Start pattern ($preamble) not found");
} else {
if ($pos == 1) { # eine Null am Anfang zuviel
$bitData =~ s/^0//; # eine Null am Anfang entfernen
}
$bitLength = length($bitData);
my ($rcode, $rtxt) = SIGNALduino_TestLength($name, $id, $bitLength, "GROTHE ID=$id");
if (!$rcode) {
return (-1," $rtxt");
}
}

my $hex=SIGNALduino_b2h($bitData);

SIGNALduino_Log3 $name, 4, "$name: GROTHE protocol Id=$id detected. $bitData ($bitLength)";
return  (1,$hex); ## Return the bits unchanged in hex
}



ZitatknownFreqs      => '866.35',
            clockrange         => [210,220],                     # min , max
            length_min         => '41',
            method   => \&main::SIGNALduino_MCRAW,

Die Protokolldefinition passt so nicht ganz:
In der knownFreqs ist ein Tippfehler
Die clockrange ist recht knapp, die Sender und Empfänger haben Toleranzen. Ich habe mal eine Toleranz von ca 0.2 genommen.
knownFreqs => '868.35',
clockrange => [170,260], # min , max
developId => 'y',
length_min => '40',
method => \&main::SIGNALduino_GROTHE,


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Ralf9

ZitatSo kann ich diese in das dazugehörige Modul einarbeiten um nicht manuell  immer den sendMSG durchzuführen.

Momentan funktioniert nur ein send raw, damit auch ein sendMSG funktioniert, sind noch Anpassungen in der sendMSG Routine notwendig.
Außerdem ist in der Protokolldefinition eine zusätzliche Variable für die Pause notwendig.

In der sendMSG Routine wird dann geprüft ob eine manchester Pause definiert ist und dann die manchester Bitfolge in das send raw Format gewandelt.

z.B.

sendMSG P96#470253B34F#R30

dabei gilt

s - short low
S - short high
l - long low
L - long high

0100011100000010010100111011001101001111

0 ist Ss
1 ist sS

0  1  0  0  0  1  1  1  0  0  000010010100111011001101001111
Ss sS Ss Ss Ss sS sS sS Ss Ss

mit
ss ist l
SS ist L

ergibt sich:
SlLsSsSlSs


mit SlLsSsSlSs... kann dann send raw zusammengesetzt werden
P0 - S
P1 - s
P2 - L
P3 - l
SR;R=30;P0=273;P1=-162;P2=462;P3=-398;P5=1557;D=1032101030101210101010103210321030123012301232323210323015;


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

elektron-bbs

Ich bin jetzt dabei, das Protokoll einzubauen. Mit dem Senden bin ich mir noch nicht ganz sicher. Coolheizer, probiere doch bitte mal folgende Befehle:


set CUL868 raw SC;;R=30;;SR;;R=1;;P0=1500;;P1=-215;;D=01;;SM;;R=1;;C=215;;D=470253B34F;;
set CUL868 raw SC;;R=30;;SR;;R=1;;P0=1500;;P1=-215;;D=01;;SM;;R=1;;C=215;;D=47824DB5CB;;
set CUL868 raw SC;;R=30;;SR;;R=1;;P0=1500;;P1=-215;;D=01;;SM;;R=1;;C=215;;D=47904762803F;;
Intel(R) Atom(TM) CPU N270 mit 2 SIGNALduino nanoCC1101 + ESPEasy 2x serial server SIGNALduino nanoCC1101, Raspberry Pi 2 mit 2 CUL Stackable CC1101, Raspberry Pi 3 mit SIGNALduino radino + nano328 + 2 x SIGNAL-ESP CC1101 + 2 x rf_Gateway