Homematic wired Direktverknüpfungen (peering)

Begonnen von Ralf9, 21 Dezember 2014, 20:05:06

Vorheriges Thema - Nächstes Thema

hglaser

ZitatWenn ich beim  "HMW_IO_12_FM" bei einem internen Peering eine Taste drücke bekomme ich nur "4B(K)" (press key) gemeldet, aber nicht den aktuellen State des Ausgangs "69(i)"
Hallo Ralf

Ja das ist beim HMW_IO_12_FM scheinbar wirklich so. Ich habe es gerade auch probiert. Du kannst Dir aber damit behelfen, in dem Du das Logging einschaltest, dann kommt nach der loggingtime ein "i" befehl. Nicht gerade Echtzeit. aber dafür eine Rückmeldung, daß wirklich eingeschaltet ist.

2015.05.20 19:25:50.024 3: HM485d: Rx:  I[3](3,Y,F,B)(FE) 0000E1DD -> FFFFFFFF [6] 4B(K) 0B008E {40E8}
2015.05.20 19:25:50.050 3: HM485d: Rx:  I[0](3,Y,F,B)(F8) 0000E1DD -> FFFFFFFF [18] 41(A) 0B1B0003004C455130323338323137 {16F8}
2015.05.20 19:25:51.956 3: HM485d: Rx:  I[1](3,F,B)(7A) 0000E1DD -> 00000001 [6] 69(i) 080000 {1BA8}
2015.05.20 19:25:51.964 3: HM485d: Tx: ACK(1,B)(39) 00000001 -> 0000E1DD [2] {E372}

beim io12sw7 kommt von Haus aus ein 0x69

ZitatHMW-IO-12-FM     start 0x39  step 28  count 28
Ja danke, dort steht was. Ich werde das behaviour wohl auch noch integrieren müssen.

Danke für deine sub setRawEEpromData($$$$). Immer gut wenn ich nicht selber suchen muß :-)



hglaser

Zitatich finde bei den IO- und Switch-Modulen ein Übersicht über alle Peerings sehr praktisch und hilfreich.
Spricht  etwas dagegen diese Übersicht in das Reading des Muduls zu schreiben?
In der Anlage ist zu sehen, wie ich es gelöst habe.
Du möchtest es ins Reading des Modules verstehe ich das richtig? das sind die einzelnen channels und Long- und Short- Werte ? und Du möchtest die HEX Daten und nicht die berechneten Werte?

lg Harald

Ralf9

#17
Zitat von: honk am 20 Mai 2015, 22:08:28
Du möchtest es ins Reading des Modules verstehe ich das richtig? das sind die einzelnen channels und Long- und Short- Werte ? und Du möchtest die HEX Daten und nicht die berechneten Werte?
Ja, ich möchte es sichtbar ins reading des Moduls. Bei den Funkmodulen sind die Hexwerte auch sichtbar in den readings.
Mit den Hex-Daten ist es übersichtlicher. Wenn ich es ausführlich mit den berechneten Werten benötige kann ich ja in den entspechenden Kanal reingehen und es mir anzeigen lassen.


0039_01  00003E950006 E1 A7

_01 = laufende Nr der Peeringeinträge
E1 = Eingang 1
A7 = Ausgang 7


003F_S  FF00007017000000C0D1F0  - 10.0 Min

_S = Short
10.0 Min = short_on_time in Minuten


004A_L  FF0000B84B000000C0C9F0 - 50.0 Min

_L = Long
50.0 Min = long_on_time in Minuten

Nachtrag:
Hier ist eine weitere Darstellungsvariante

0039_01 00003E950006 E1 A7
003F FF00007017000000C0D1F0 - 10.0 Min short_on_time
004A FF0000B84B000000C0C9F0 - 50.0 Min long_on_time



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

hglaser

Danke Ralf
Ich weiß nun was Du willst. Bitte um Bedenkzeit.

lg Harald




Ralf9

#19
Hallo Harald,

ich habe meinen Vorschlag mal bei mir eingebaut, siehe Anlage.
Durch den Aufruf von get_peering() in der  "sub internalUpdateEEpromData($$)" wird nach dem Schreiben ins EEPROM die Peeringsübersicht  in dem Reading automatisch aktualisiert.

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

Hallo Harald,

funktioniert bei Dir der  (0xCB) - Key-Sim - Befehl?
Gibt es dabei einen Trick? Funktioniert er sowohl bei ungepeerten als auch bei gepeerten Ausgängen.
Was verwendest du als Nummer des Eingangs?

Da es mir nicht gelungen ist mit dem Key-Sim - Befehl einen Ausgang zu schalten, habe ich die Ausgänge zusätzlich mit der Zentrale (00000001) gepeert.
Damit kann ich dann per webcmd mit dem (0x4B) - Key-Event die Ausgänge schalten.

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

hglaser

Zitat von: Ralf9 am 24 Mai 2015, 22:55:16
Hallo Harald,

funktioniert bei Dir der  (0xCB) - Key-Sim - Befehl?
Gibt es dabei einen Trick? Funktioniert er sowohl bei ungepeerten als auch bei gepeerten Ausgängen.
Was verwendest du als Nummer des Eingangs?
Hallo Ralf

Ja key syms funktionieren bei mir, jedoch nur mit gepeerten Ausgängen. Auch mit der CCU funktioniert es nur mit gepeerten Ausgängen. Ich habe jedoch noch nicht versucht mit der Zentrale zu peeren. Trick gibts da eigentlich keinen, Du brauchst nur einen Counter. Den speichere ich in den Readings. genauere Beschreibung findest Du hier: http://forum.fhem.de/index.php/topic,10607.msg100358.html#msg100358

anbei die subs (optimierungsbedürftig ein paar if's zuviel)

sub HM485_SetKeyEvent($$) {
my ($hash, $cmd) = @_;

my $retVal            = '';
my $frameData;
my ($hmwId, $chNr)    = HM485::Util::getHmwIdAndChNrFromHash($hash);
my $devHash            = $main::modules{'HM485'}{'defptr'}{substr($hmwId,0,8)};
my $deviceKey          = HM485::Device::getDeviceKeyFromHash($devHash);
my $chType            = HM485::Device::getChannelType($deviceKey, $chNr);
my ($behaviour,$bool,$role) = HM485::Device::getChannelBehaviour($hash);

if ($role && $role eq 'switch') {
$behaviour = $role .'_ch';
}

my $valuePrafix        = $bool ? '/subconfig/paramset/hmw_'. $behaviour.
'_values/parameter' : '/paramset/values/parameter/';
my $values            = HM485::Device::getValueFromDefinitions(
$deviceKey . '/channels/' . $chType . $valuePrafix
);

foreach my $valueKey (keys %{$values}) {
if ($valueKey eq 'press_short'  || $valueKey eq 'press_long') {

my $valueHash  = $values->{$valueKey} ? $values->{$valueKey} : '';
my $control    = $valueHash->{'control'} ? $valueHash->{'control'} : '';
my $frameValue = undef;
my $peerHash;

if (($cmd eq 'press_short' && $control eq 'button.short') || ($cmd eq 'press_long' && $control eq 'button.long')) {
if ($control eq 'button.short' || $control eq 'button.long') {
#we need the last counter from the readings
my $lastCounter = $hash->{'READINGS'}{'sim_counter'}{'VAL'};
$frameValue = HM485::Device::simCounter($valueHash, $cmd, $lastCounter);
} else {
$retVal = 'no press_short / press_long for this channel';
}
$frameData->{$valueKey} = {
value    => $frameValue,
physical => $valueHash->{'physical'}
};

if ($frameData) {
my $frameType  = $valueHash->{'physical'}{'set'}{'request'};
if (($frameType eq 'key_sim_short' && $cmd eq 'press_short') ||
($frameType eq 'key_sim_long'  && $cmd eq 'press_long')) {
$peerHash = HM485::PeeringManager::getPeeringFromDevice($hash,$chNr);
if ($peerHash) {
my $data = HM485::Device::buildFrame($hash, $frameType, $frameData, $peerHash);

readingsSingleUpdate($hash, 'sim_counter', $frameValue, 1);
HM485_SendCommand($hash, $peerHash->{'actuator'}{'address'}, $data) if length $data;

} else {
$retVal = 'no peering for this channel';
}
}
}
}
}
}
#print Dumper ("HM485_SetKeyEvent devkey:$deviceKey type:$chType cmd:$cmd",$values);
return $retVal;
}

sub simCounter($$$) {
my ($stateHash, $cmd, $lastCounter) = @_;

my $ret;
my $countersize = $stateHash->{'conversion'}{'counter_size'} ? int($stateHash->{'conversion'}{'counter_size'}) : 1;
my $oldcounter = $lastCounter ? $lastCounter : 1;

if ($oldcounter >= 2 ** $countersize -1) {
$ret = '0';
} else {
$ret = $oldcounter + 1 ;
}

return $ret;
}


lg Harald

Ralf9

#22
Zitat von: honk am 29 Mai 2015, 20:27:23
Ich scheitere gerade daran die richtigen Werte fürs peering ins EEprom zu schreiben.

Hallo Harald,

Ich habe bei mir die Werte fürs EEPROM händisch aus den Daten von der xml-Datei berechnet.
Die nicht verwendeten Bitpositionen habe ich mit Einsen aufgefüllt

Was schreibt die CCU als Default ins EEPROM?

Das hier ergibt FF

+6.7 SHORT_ON_TIME_MODE
0 id="MINIMAL
1 id="ABSOLUTE"  default="true"

+6.6 SHORT_OFF_TIME_MODE
0 id="MINIMAL
1 id="ABSOLUTE"  default="true"

+6.4 SHORT_TOGGLE_USE     size="0.2"
11  "DONT_USE"  default="true"
10  "DIRECT" 
00  "INVERTED"
     <value_map device_value="0x03" from_device="true" parameter_value="0" to_device="true"/>
     <value_map device_value="0x02" from_device="true" parameter_value="1" to_device="true"/>
     <value_map device_value="0x00" from_device="true" parameter_value="2" to_device="true"/>
     
+6.0 SHORT_ACTION_TYPE    size="0.1"
0  id="INACTIVE"
1  id="ACTIVE"  default="true"



und das hier ergibt 1111 000 011 010 001 = D1 F0

+15.0 SHORT_JT_ONDELAY      read_size="2" size="0.3"
000 "ONDELAY"
001 "ON"       default="true"
010 "OFFDELAY"
011 "OFF"
100 "NO_JUMP_IGNORE_COMMAND"

+15.3 SHORT_JT_ON          read_size="2" size="0.3"
000 "ONDELAY"
001 "ON"
010 "OFFDELAY"  default="true"
011 "OFF"
100 "NO_JUMP_IGNORE_COMMAND"

+15.6 SHORT_JT_OFFDELAY   read_size="2" size="0.3"
000 "ONDELAY"
001 "ON"
010 "OFFDELAY"
011 "OFF"      default="true"
100 "NO_JUMP_IGNORE_COMMAND"
   
+15.9 SHORT_JT_OFF         read_size="2" size="0.3"
000 "ONDELAY"  default="true"
001 "ON"
010 "OFFDELAY"
011 "OFF"
100 "NO_JUMP_IGNORE_COMMAND"


Bei long ist es genauso FF und D1 F0

Weißt Du zufällig was bei TIME_MODE der Unterschied zwischen MINIMAL und ABSOLUTE ist?

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

hglaser

Hallo Ralf

ZitatIch habe bei mir die Werte fürs EEPROM händisch aus den Daten von der xml-Datei berechnet.
Die nicht verwendeten Bitpositionen habe ich mit Einsen aufgefüllt
Danke Ralf, ich habs nicht mit "1en" aufgefüllt. Das wird die Lösung sein. Manchmal sieht man den Wald vor lauter Bäumen nicht. Malsehen ob ich das jetzt hinbringe. Zumindest weiss ich jetzt wo ich suchen muß.  Die CCU schreibt als Default genau dasselbe also:
     0 1 2 3 4 5 6 7 8 9 A B C D E F
0020 FFFFFFFFFFFFFFFFFFFFFFFFFF000096
0030 24000CFF000000C0000000C0D1F0FF00
0040 0000C0000000C0D1F0FFFFFFFFFFFFFF
0050 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF


ZitatWeißt Du zufällig was bei TIME_MODE der Unterschied zwischen MINIMAL und ABSOLUTE ist?
Nein weiss ich leider auch nicht. Aber diese Register gibts ja auch bei den Funk Devices. Eventuell kann da Martin oder einer der sich mit den Registern in den Funk Devices auskennt, etwas Licht ins Dunkel bringen. 

lg Harald

hglaser

Hallo

OK peeren geht schon mal. Auffüllen mit 1en war die Lösung. Zwar nur mit den Defaultwerten von einem Switch, aber es ist schon mal ein Anfang. Peeren mit einem Dimmer geht noch nicht recht, der schaltet nur aus. Hier muss ich noch nach den Defaultwerten im xml suchen.
Du hast ja glaube ich auch einen IO12FM. Hier habe ich einmal einen Eingang als Ausgang umgestellt und mit einem Eingang gepeert. Ein press_short über keysym funktioniert, wenn ich aber den Taster betätige gehts nicht. Habe dann das ganze wieder nocheinmal komplett gelöscht und über die CCU versucht. Und da gehts auch nicht.
Kannst Du das einmal probieren, ob das interne peeren mit einem IO12FM überhaupt geht und der Ausgang auf Tastendruck reagiert.

lg Harald

Ralf9

Hallo Harald,

was funktioniert bei Dir nicht beim internen peering beim IO12FM.
Wechselt in fhem der state des Ausgangs nicht?
Oder hast Du keinen wechsel am  physikalischen Ausgang z.B. an einer LED?

Ich habe zwei IO12FM mit denen ich u.a. das Treppenhaus- und Außenlicht schalte. Ich mache alles über internes peering.
Da bei mir bei einem Tastendruck nicht der state des Ausgangs an fhem gemeldet wird, habe ich für jeden verwendeten Eingang ein notify erstellt:
HMW_IO_12_GEQ_06.* get HMW_IO_12_GEQ_08_Licht_AussenWK state


Beim "HMW-LC-Sw2-DR", "HMW-LC-Bl1-DR" und "HMW-LC-Dim1L-DR" dürfte ein peering über fhem nicht unbedingt notwendig sein.
Diese haben eine Programmiertaste mit der man recht einfach einen Ausgang mit einem Eingang peeren kann.

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

hglaser

ZitatOder hast Du keinen wechsel am physikalischen Ausgang z.B. an einer LED?
ja genau so ist es. Allerdings habe ich gar keine LED angeschlossen. War nur zu Testzwecken und hab mich gewundert, daß sich nichts rührt. Ich dachte schon, meine EEprom-schreiberei wäre daran schuld. Es ist schade, daß das Ding keine Rückmeldung liefert. Das logging kann man zwar aktivieren, ist allerdings ebenfalls nutzlos. Ich werde einmal nur so interessehalber einen Eingang eines IO12SW7 mit einem Ausgang des IO12FM peeren. mal sehen, ob man da eine Rückmeldung bekommt.

lg harald

Ralf9

Zitat von: honk am 25 Mai 2015, 15:23:31
Ja key syms funktionieren bei mir, jedoch nur mit gepeerten Ausgängen. Auch mit der CCU funktioniert es nur mit gepeerten Ausgängen. Ich habe jedoch noch nicht versucht mit der Zentrale zu peeren. Trick gibts da eigentlich keinen, Du brauchst nur einen Counter. Den speichere ich in den Readings. genauere Beschreibung findest Du hier: http://forum.fhem.de/index.php/topic,10607.msg100358.html#msg100358

Danke, damit funktioniert der Key-Sim wie gewünscht. Damit ist nun auch kein peering zur Zentrale mehr notwendig.
Ich habe es wie folgt gelöst:

} elsif ( $cmd eq 'press_long' || $cmd eq 'press_short') {
my $count = 0;
my $k = 1;
my $sen = 0;
my $senadr = '';
if ( $cmd eq 'press_short') {
$k = 0;
}
if (index($value, '_') != -1) {
my @param = split('_', $value);
$senadr = $param[0];
$sen = $param[1];
} else {
$sen = $value;
$senadr = substr($hmwId, 0, 8);
}
my $webkey = ReadingsVal($name,'webKey_' . $value , '');
if ($webkey eq '') {
$count = 1;   # Counter zurücksetzen
} else {
my @param = split(' ', $webkey);
$count = $param[1];
$count = $count + 1;
$count = $count & 63
}
readingsSingleUpdate($hash, 'webKey_' . $value, $cmd . ' ' . $count, 1);
$count = ($count * 4) + $k;
my $evk = sprintf("%02X",$count);
$data  = sprintf('CB%02X%02X', $sen-1, $chNr-1);
HM485_SendCommand( $hash, $hmwId, $data . $evk . $senadr);


Ich übergebe mit dem press_short/long den Sensorkanal. Durch die optionale übergabe der Sensoradresse wird es sehr flexibel.
Bei meinem Beispiel in der Anlage wird mit dem webCmd "delShort" der Peeringeintrag 04 verwendet. Durch die  SHORT_ONDELAY_TIME wird der Ausgang 3 verzögert eingeschaltet.
Ohne die übergabe der Sensoradresse wird das interne peering mit der Nr 03 verwendet.

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

hglaser

Hallo

könnte bitte jemand, der einen HMW_LC_Bl1_DR hat, diesen peeren und einmal die eeprom Daten schicken? Oder noch besser anbei die Daten die von mir als Default gechickt werden einmal vergleichen.
$VAR1 = 'SetPeer 42FFFFFE_01 act > 57 0356 01 00';
$VAR1 = 'SetPeer 42FFFFFE_01 act > 57 0357 05 42FFFFFE02';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0012 05 42FFFFFE00';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0017 01 02';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0018 01 FF';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0019 01 00';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 001A 01 C8';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 001B 02 0000';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 001D 02 0000';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 001F 02 00C0';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0021 02 00C0';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0023 01 FF';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0024 01 31';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0025 01 43';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0026 01 75';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0027 01 07';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0028 01 FF';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0029 01 00';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 002A 01 C8';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 002B 02 0000';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 002D 02 0000';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 002F 02 00C0';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0031 02 00C0';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0033 01 05';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0034 01 31';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0035 01 43';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0036 01 75';
$VAR1 = 'SetPeer 42FFFFFE_03 sen > 57 0037 01 07';

vielen Dank

Wer es selbst einmal ausprobieren will, der kann sich natürlich auch den "peering" branch runterladen. peeren sollte nun funktionieren. Allerdings nur mit den Default Werten. Ein Verändern von z.B short_on_level ist noch nicht möglich. Anzeigen lassen kann man es sich, falls man es überprüfen möchte.

lg Harald

hglaser

Hallo Ralf

Hier einmal eine Testversion mit der "peeren" und "unpeeren" zu probieren wären. Auch die expert-Settings sollten funktionieren. Leider habe ich ich keinen Jalousie Aktor, kann also nicht selber testen.
ein set settings [Aktor] [Sensor] short_on_time=100 und mehrere peers für einen Sensor wäre dann der nächste Schritt, wenn peering und die Settings funktionieren.

lg Harald.