HM-LC-SW4-BA-PCB toggelt bei statusRequest

Begonnen von HoTi, 04 August 2015, 13:09:07

Vorheriges Thema - Nächstes Thema

HoTi

Hallo zusammen,

ich habe meine Rollos über HM-LC-SW4-BA-PCB Schalter an FHEM angebunden. Ich überwache das manuelle fahren der Rollos über die Taster des HM-LC-SW4-BA-PCB.

Wenn FHEM jetzt neu Startet wird ein statusRequest ausgelöst. Bei diesem Statusrequest wir ein Manelles Fahren erkannt weil der Schalter anscheinen kurz toggelt, kann mir jemand sagen wier ich das umgehen kann?

Das passiert wenn ich mauell ein statusRequest auslöse:

2015.08.04 13:07:57 3: CUL_HM set EG_ku_RO_mi_HOCH statusRequest
2015.08.04 13:07:58 3: Manuell HOCH erkannt -> EG_ku_RO_mi_HOCH hat einen neuen Status -> 0


Hier mal meine erkennungsroutine, ich hoffe das ihr das versteht was ich mir da zusammen gesponnen haben:

sub Rollo_Manuell($$)
{
my ($name,$event) = @_;

my ($etage,$raum,$typ,$ort,$fahrt) = split('_',$name);
#Log(3,"$etage / $raum / $typ / $fahrt");

my $device = $etage . '_' . $raum . '_' . $typ . '_' . $ort . '_dummy';

my $hash = {};
$hash->{NAME} = $defs{$name};
$hash->{DEVICE} = $defs {$device};
my $device_hash = $hash->{"DEVICE"};



my $t_on;
my $aktpos = ReadingsVal($device,'Pos',0);
my $newpos;
my $dt;
my $ausfahrzeit = ReadingsVal($name,'Ausfahrzeit',23.6);
my $einfahrzeit = ReadingsVal($device,'Einfahrzeit',24.7);
my $automatic = ReadingsVal('Automatik',$device,0);

if($automatic == 0)
{
  if($event =~m/(ein|on).*/)
  {
    $t_on = time_str2num(ReadingsTimestamp($name,'state',0));

    fhem("setreading $name LastEvent $t_on");
  }
 
  if($event =~m/(aus|off).*/)
  {
    my $lastevent = ReadingsVal($name,'LastEvent',0);
    my $dt = time() - $lastevent;
    fhem("setreading $name LastEvent 0");

  if($fahrt =~m/(HOCH).*/)
  {
    $newpos = $aktpos - (100 * $dt / $einfahrzeit);
    $newpos = sprintf("%d",$newpos); # runden
    $newpos = 0 if($newpos < 0);
    $newpos = 100 if($newpos > 100);
    readingsSingleUpdate($device_hash,'Pos',$newpos,0);
    readingsSingleUpdate($device_hash,'state',"Pos $newpos",0);
    Log(3,"Manuell HOCH erkannt -> $name hat einen neuen Status -> $newpos");
  }elsif($fahrt =~m/(RUNTER).*/)
  {
  $newpos = $aktpos + (100 * $dt / $ausfahrzeit);
    $newpos = sprintf("%d",$newpos); # runden
    $newpos = 0 if($newpos < 0);
    $newpos = 100 if($newpos > 100);
    readingsSingleUpdate($device_hash,'Pos',$newpos,0);
    readingsSingleUpdate($device_hash,'state',"Pos $newpos",0);
    Log(3,"Manuell RUNTER erkannt -> $name hat einen neuen Status -> $newpos");
  }
 

}
}
}
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

frank

wodurch wird deine sub gestartet. ich denke dort solltest du ansetzen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

HoTi

so:
define Rollo_Manu_HOCH_on_notify notify (.*_RO_.*_HOCH):on {Rollo_Manuell($NAME,$EVENT);;}
define Rollo_Manu_RUNTER_on_notify notify (.*_RO_.*_RUNTER):on {Rollo_Manuell($NAME,$EVENT);;}
define Rollo_Manu_HOCH_off_notify notify (.*_RO_.*_HOCH):off {Rollo_Manuell($NAME,$EVENT);;}
define Rollo_Manu_RUNTER_off_notify notify (.*_RO_.*_RUNTER):off {Rollo_Manuell($NAME,$EVENT);;}
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

frank

wahrscheinlich am besten, mal im eventmonitor verfolgen, was bei statusrequest und bei echtem manuellen bedienen an events erfolgt. die notifys dann auf ein eindeutiges event ausrichten.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

HoTi

hmm,

das ist der log beim statusRequest:
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li CMDs_pending
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li battery: ok
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li CMDs_done
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li_SW_01 deviceMsg: off (to vccu)
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li_SW_01 level: 0
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li_SW_01 pct: 0
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li_SW_01 off
2015-08-04 14:03:13 CUL_HM EG_wz_RO_li_SW_01 timedOn: off



und das beim SChalten:
2015-08-04 14:03:46 CUL_HM EG_wz_RO_li CMDs_pending
2015-08-04 14:03:46 CUL_HM EG_wz_RO_li_SW_01 set_on
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li battery: ok
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 deviceMsg: off (to vccu)
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 level: 0
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 pct: 0
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 off
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 timedOn: off
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li battery: ok
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li CMDs_done
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 deviceMsg: on (to vccu)
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 level: 100
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 pct: 100
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 on
2015-08-04 14:03:47 CUL_HM EG_wz_RO_li_SW_01 timedOn: off
2015-08-04 14:03:49 HMLAN hmusb loadLvl: low
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li CMDs_pending
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li_SW_01 set_off
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li battery: ok
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li CMDs_done
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li_SW_01 deviceMsg: off (to vccu)
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li_SW_01 level: 0
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li_SW_01 pct: 0
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li_SW_01 off
2015-08-04 14:03:50 CUL_HM EG_wz_RO_li_SW_01 timedOn: off


Was wäre für dich da ein eindeutiges Event? Leider seht bei beidem "off" oder "on" drin.
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

frank

das auffälligste wäre, dass das schalten mit "set_on" eingeleitet wird.
2015-08-04 14:03:46 CUL_HM EG_wz_RO_li_SW_01 set_on

eventuell kannst du aber in deiner sub die aktionen in abhängigkeit vom wert des reading "recentStateType" ausführen lassen. das nutze ich bei einem hm-cc-tc, um manuell am thermostat veränderte temperatureinstellungen zu erkennen. das reading generiert aber keine events. das müsstest du dann zum testen einfach mal in die logdatei schreiben lassen.

mein notify sieht zb so aus:

define n_set_desired notify .*_Climate:.*desired-temp:.* {\
my $controlMode = ReadingsVal($NAME, "R-controlMode", "?");;\
my $recentStateType = ReadingsVal($NAME, "recentStateType", "?");;\
my $room = $1 if($NAME =~ m/Thermostat.(.*)_Climate/);;\
if($recentStateType eq "info") {\
if($controlMode =~ m/central/) {\
fhem("set ".$NAME." desired-temp ".$EVTPART1);;\
Log 1,"----- NOTIFY ----- $NAME $EVENT";;\
}\
}\
fhem("set PID20.".$room." desired ".$EVTPART1) if($room =~ m/(AZ|WZ|SZ|Bad|Kueche)/);;\
}
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

HoTi

ich bersuche es mal mit set_on (allerdings war das eine Mauelle auslösung über FHEM da ich gerade nicht zuhause bin, ich werde es dann nochmal zuhause Testen.

Was du da machst, habe ich noch nihct ganz verstanden. Das muss ich mir in ruhe anschauen.
Was mir aber schon aufgefallen ist machen "recentStateType" stehen auf "ack" und andere auf "info" was macht dieses Reading?!

Viele Grüße aus  Oberbayern
Tim (RettungsTim)

frank

ZitatWas mir aber schon aufgefallen ist machen "recentStateType" stehen auf "ack" und andere auf "info" was macht dieses Reading?!
je nach typ der letzten message vom device. wenn dein notify triggert, machst du deine aktionen in abhängigkeit vom reading. das funktioniert natürlich nur, wenn sich der typ unterscheiden lässt.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html