[gelöst] DOIF - Wiederholung eines Unterprogramms

Begonnen von grossmaggul, 24 Januar 2019, 18:36:52

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: grossmaggul am 26 Januar 2019, 13:42:30
O.K, dann lag ich ja richtig, ist ja auch schonmal was. ;)
Verstehen tue ich es trotzdem nicht, das Unterprogramm wird doch von DOIF aus aufgerufen und läuft dann durch, wenn man jetzt während eines Durchlaufs die LEDs ausschaltet wird  an die LEDs ein off gesendet, das kann man dann auch über den Status des devices überprüfen. Zu der Zeit läuft das Unterprogramm aber immer noch und sollte doch mitbekommen, daß da ein "off" angekommen ist, aber vermutlich stelle ich mir das wieder zu einfach vor.

Du kannst ja mal Rekursionen zulassen: https://fhem.de/commandref_DE.html#DOIF_selftrigger
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Byte09

Zitat von: Damian am 26 Januar 2019, 17:03:51
Du kannst ja mal Rekursionen zulassen: https://fhem.de/commandref_DE.html#DOIF_selftrigger

hi damian ,

kannst du mir mal unter die arme greifen ? führt doif die sub ohne unterbrechung aus ?  ..... dann versthe ich nicht wie es funktionieren soll, der befehl der letztendlich dass state von "wz..." auf off ändert wird dann m.E. doch erst NACH allen anderen befehlen aus der sub ausgeführt und bleibt somit während des Ausführens der sub auf "on" ?
Oder liege ich hier so falsch ?

gruss Byte09

Damian

Zitat von: Byte09 am 26 Januar 2019, 19:23:49
hi damian ,

kannst du mir mal unter die arme greifen ? führt doif die sub ohne unterbrechung aus ?  ..... dann versthe ich nicht wie es funktionieren soll, der befehl der letztendlich dass state von "wz..." auf off ändert wird dann m.E. doch erst NACH allen anderen befehlen aus der sub ausgeführt und bleibt somit während des Ausführens der sub auf "on" ?
Oder liege ich hier so falsch ?

gruss Byte09

Ich gehe davon aus, dass das Setzen von off schon zum richtigen Zeitpunkt stattfindet. Nur reagiert DOIF auf das Event "off" bewusst nicht, bis die Ausführung von spektralDurchlauf() beendet ist, um Rekursionen (Endlosschleifen) zu vermeiden. Zitat aus der Commandref zu DOIF:

ZitatStandardmäßig unterbindet das DOIF-Modul Selbsttriggerung. D. h. das Modul reagiert nicht auf Events, die es selbst direkt oder indirekt auslöst. Dadurch werden Endlosschleifen verhindert.

Dieses Verhalten lässt sich mit Attribut selftrigger ändern.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Byte09

#33
ZitatIch gehe davon aus, dass das Setzen von off schon zum richtigen Zeitpunkt stattfindet. Nur reagiert DOIF auf das Event "off" bewusst nicht, bis die Ausführung von spektralDurchlauf() beendet ist, um Rekursionen (Endlosschleifen) zu vermeiden. Zitat aus der Commandref zu DOIF:
ok , nehme ich so hin , bleibt mir aber völlig unklar ... da das ja im umkehrschluss bedeuten müsste , das fhem selbst dann im grunde weiter funktioniert, wenn ich die sub in eine endlosschleif schicken würde. ???

kurz : mE geht es erst weiter ( auch mit 'set ... off' ), wenn die routine beendet ist und die 'mainLoop' weiterläuft , solange die sub nicht als fork läuft - und somit gehe ich irgendwie nachwievor davon aus, das es so nicht gehen kann, die sub durch eine prüfung des states zu beenden.

PS: lasse mich aber gerne duch eine funktionierende definition überzeugen ( ganz ernst gemeint )

gruss Byte09

Damian

Zitat von: Byte09 am 26 Januar 2019, 20:01:06
ok , nehme ich so hin , bleibt mir aber völlig unklar ... da das ja im umkehrschluss bedeuten müsste , das fhem selbst dann im grunde weiter funktioniert, wenn ich die sub in eine endlosschleif schicken würde. ???

kurz : mE geht es erst weiter ( auch mit 'set ... off' ), wenn die routine beendet ist und die 'mainLoop' weiterläuft , solange die sub nicht als fork läuft - und somit gehe ich irgendwie nachwievor davon aus, das es so nicht gehen kann, die sub durch eine prüfung des states zu beenden.

PS: lasse mich aber gerne duch eine funktionierende definition überzeugen ( ganz ernst gemeint )

gruss Byte09

Ich habe es gerade nachgestellt und eine Endlosschleife mit fhem"set bla on" gebaut. Es war nicht möglich irgendwelche Events dem System zu entlocken, man kommt nicht mehr dazwischen, das System ist mit sich selbst beschäftigt - ich musste FHEM killen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Byte09

Zitat von: Damian am 26 Januar 2019, 20:29:38
Ich habe es gerade nachgestellt und eine Endlosschleife mit fhem"set bla on" gebaut. Es war nicht möglich irgendwelche Events dem System zu entlocken, man kommt nicht mehr dazwischen, das System ist mit sich selbst beschäftigt - ich musste FHEM killen.

wie dem auch sei , ich habe es wie folgt gelöst:

durch die sub des TE lasse ich die Farwerte anlegen (nonblocking) und übergebe diese daten zurück an das Hilfsmodul.

dieses arbeitet diese werte step bei step ab , im grunde wird für jedes set ein neuer internaltimer gesetzt, daher ist es jederzeit abzubrechen , da di Mainloop immer wieder läuft . Neustart des ganzen vorganges , wenn alle Farbwerte abgearbeitet sind.

das ganze verpackt in ein Hilfsmodul der individuellen ersten wahl - in meinem Fall mein Modul  ;).

läuft seit 4 stunden stabil und belastet das system nicht spürbar.

gruss Byte09

Damian

Das FHEM-Modul passend zum Controller unterstützt offenbar Farbübergänge (Transitions) siehe https://wiki.fhem.de/wiki/WifiLight

Zur genauen Syntax ggf. im entsprechenden Forumsbereich nachfragen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Byte09

Zitat von: grossmaggul am 25 Januar 2019, 11:22:34
Nein, das muß nicht, ich bin offen für jede andere Lösung, die funktioniert.
Ich hatte auch schonmal versucht im Unterprogramm eine do/until Schleife zu setzen, dann wird aber bei Ausführung fhem blockiert.:-/


Das Unterprogramm:

###############################################################################
#
#  Spektraldurchlauf LED Streifen
#
###############################################################################

sub spektralDurchlauf()
{
  my $rot;
  my $gruen;
  my $blau;
 
  my $rgb;
  my $count;

   
   # GELB - Grünwert erhöhen (FF0000 -> FFFF00)
   for($count=0;$count<=255;$count++)
    {

    # Rotwert erhöhen
    $gruen = sprintf ("%02x", $count);
 
    #in RGB Wert wandeln
    $rgb = sprintf "FF${gruen}00";
 
    # Farbe in LEDs setzen
    fhem("set wz.theke RGB $rgb");
 
   }
   
   # GRÜN - Rotwert erniedrigen (FFFF00 -> 00FF00)
   for($count=255;$count>=0;$count--)
    {

    # Rotwert verringern
    $rot = sprintf ("%02x", $count);
 
    #in RGB Wert wandeln
    $rgb = sprintf "${rot}FF00";
 
    # Farbe in LEDs setzen
    fhem("set wz.theke RGB $rgb");
 
   }
   
   
   # CYAN - Blauwert erhöhen (00FF00 -> 00FFFF)
   for($count=0;$count<=255;$count++)
    {

    # Blauwert erhöhen
    $blau = sprintf ("%02x", $count);
 
    #in RGB Wert wandeln
    $rgb = sprintf "00FF${blau}";
 
    # Farbe in LEDs setzen
    fhem("set wz.theke RGB $rgb");
 
   
   }
   
   # BLAU - Grünwert verringern (00FFFF -> 0000FF)
   for($count=255;$count>=0;$count--)
    {

    # Grünwert verringern
    $gruen = sprintf ("%02x", $count);
 
    #in RGB Wert wandeln
    $rgb = sprintf "00${gruen}FF";
 
    # Farbe in LEDs setzen
    fhem("set wz.theke RGB $rgb");
 
   
   }


   # MAGENTA - Rotwert erhöhen (0000FF -> FF00FF)
   for($count=0;$count<=255;$count++)
    {

    # Rotwert erhöhen
    $rot = sprintf ("%02x", $count);
 
    #in RGB Wert wandeln
    $rgb = sprintf "${rot}00FF";
 
    # Farbe in LEDs setzen
    fhem("set wz.theke RGB $rgb");
 
   }

# ROT - Blauwert verringern (FF00FF -> FF0000)
    for($count=255;$count>=0;$count--)
    {

    # Rotwert erhöhen
    $blau = sprintf ("%02x", $count);
 
    #in RGB Wert wandeln
    $rgb = sprintf "FF00${blau}";
 
    # Farbe in LEDs setzen
    fhem("set wz.theke RGB $rgb");
 
   }
   


Möglicherweise könnte man das effizienter programmieren, ich bin allerdings noch perl Anfänger, deshalb so.:-)


moin,

wenn du magst kannst du das MSwitch mal versuchen:

-MSwitch anlegen :
define NAME MSwitch

- im device auf "get NAME get_config" klicken

- die angezeigte configuration durch die folgende ersetzen
#V 2.10
#VS V2.00
#S .Trigger_time ->
#S .Device_Affected_Details -> FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{;;$hash->{helper}{RUNNING_PID} = BlockingCall('MSwitch_spektralDurchlauf',$hash->{NAME},'MSwitch_spektralDurchlaufend',10,'','');;;}#[NF]{;;BlockingKill($hash->{helper}{RUNNING_PID}) if(defined($hash->{helper}{RUNNING_PID}));;;delete($hash->{helper}{RUNNING_PID});;;fhem("deletereading $SELF todo");;;fhem("deletereading $SELF todoanz");;;fhem("deletereading $SELF todofirst");;;}#[NF]delay1#[NF]delay1#[NF]00:00:00#[NF]00:00:00#[NF][wz.theke:state] eq "on"#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]FreeCmd-AbsCmd2#[NF]cmd#[NF]cmd#[NF]{;;my $test;;;my @test1;;;my $akttodo;;;my $kommand ;;;my $kommand1 ;;;$test = ReadingsVal( '$SELF', 'todo', '' );;;$akttodo = ReadingsVal( '$SELF', 'todofirst', '' );;;@test1 = split(' ',$test); ;;my $farbe = $test1[$akttodo];;;;;# auszufuehrende kommandos;;$kommand = "set wz.theke RGB ".$farbe;;;$kommand1 = "set HUEDevice2 rgb ".$farbe;;;fhem($kommand);;;fhem($kommand1);;;;;#;;;;$akttodo++;;;fhem("setreading $SELF todofirst $akttodo");;;if (ReadingsVal( '$SELF', 'todoanz', '' ) < $akttodo);;{;;fhem("setreading $SELF todofirst 1");;;#fhem("set $SELF exec_cmd_1 ID 1");;;};;}#[NF]#[NF]delay1#[NF]delay1#[NF]00:00:00#[NF]00:00:00#[NF][wz.theke:state] eq "on"#[NF]#[NF]0#[NF]0#[NF]3#[NF]1#[NF]#[NF]0#[NF]0#[NF]1#[ND]MSwitch_Self-AbsCmd1#[NF]no_action#[NF]del_delays#[NF]#[NF]#[NF]delay1#[NF]delay1#[NF]00:00:00#[NF]00:00:00#[NF]#[NF]#[NF]0#[NF]0#[NF]2#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]MSwitch_Self-AbsCmd2#[NF]exec_cmd_1#[NF]no_action#[NF]ID 1#[NF]#[NF]delay1#[NF]delay1#[NF][$SELF:takt]#[NF]00:00:00#[NF][wz.theke:state] eq "on"#[NF]#[NF]0#[NF]0#[NF]4#[NF]1#[NF]#[NF]0#[NF]0#[NF]1
#S .V_Check -> V2.00
#S .Trigger_condition ->
#S exec_cmd_1 -> ID 1
#S EVTPART3 -> off
#S last_event -> state:off
#S .Device_Events -> no_trigger
#S Trigger_device -> wz.theke
#S .Trigger_cmd_off -> state:off
#S EVTPART1 -> wz.theke
#S EVENT -> state:off
#S last_exec_cmd -> set spektral del_delays
#S .Trigger_off -> no_trigger
#S state -> active
#S .Device_Affected -> FreeCmd-AbsCmd1,FreeCmd-AbsCmd2,MSwitch_Self-AbsCmd1,MSwitch_Self-AbsCmd2
#S .Trigger_cmd_on -> state:on
#S .First_init -> done
#S EVTFULL -> wz.theke:state:off
#S last_cmd -> 2
#S .Trigger_on -> no_trigger
#S takt -> 00:00:02
#S change -> 10
#S .sortby -> priority
#S Trigger_log -> off
#S EVTPART2 -> state
#A MSwitch_Include_Webcmds -> 0
#A MSwitch_Delete_Delays -> 1
#A MSwitch_Include_MSwitchcmds -> 0
#A MSwitch_Inforoom -> MSwitch
#A room -> 1_test
#A MSwitch_Extensions -> 0
#A MSwitch_generate_Events -> 0
#A MSwitch_Debug -> 0
#A MSwitch_Help -> 0
#A MSwitch_Lock_Quickedit -> 1
#A MSwitch_Include_Devicecmds -> 1
#A webCmdLabel -> Takt:Aenderung
#A MSwitch_Expert -> 1
#A setList -> takt:00:00:01,00:00:02,00:00:03,00:00:04,00:00:05 change:1,2,3,4,5,6,7,8,10
#A webCmd -> takt:change
#A MSwitch_Mode -> Notify
#A MSwitch_Ignore_Types -> notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
#A readingList -> takt change


- auf "save changes" klicken
- die folgenden routinen in die 99myUtils kopieren:


###############################################################################
#
#  Spektraldurchlauf LED Streifen
#
###############################################################################

sub MSwitch_spektralDurchlauf($)
{

my ($name) = @_;


my $change =  ReadingsVal( $name, 'change', '10' );
  my $rot;
  my $gruen;
  my $blau;

  my $rgb;
  my $count;

   # GELB - Grünwert erhöhen (FF0000 -> FFFF00)
   for($count=0;$count<=255;$count=$count + $change )
    {

    # Rotwert erhöhen
    $gruen = sprintf ("%02x", $count);

    #in RGB Wert wandeln
    $rgb .= sprintf "FF${gruen}00 ";

   }
   
   # GRÜN - Rotwert erniedrigen (FFFF00 -> 00FF00)
   for($count=255;$count>=0;$count=$count - $change )
    {

    # Rotwert verringern
    $rot = sprintf ("%02x", $count);

    #in RGB Wert wandeln
    $rgb .= sprintf "${rot}FF00 ";

   }
   
   # CYAN - Blauwert erhöhen (00FF00 -> 00FFFF)
   for($count=0;$count<=255;$count=$count + $change)
    {

    # Blauwert erhöhen
    $blau = sprintf ("%02x", $count);

    #in RGB Wert wandeln
    $rgb .= sprintf "00FF${blau} ";

   }
   
   # BLAU - Grünwert verringern (00FFFF -> 0000FF)
   for($count=255;$count>=0;$count=$count - $change )
    {

    # Grünwert verringern
    $gruen = sprintf ("%02x", $count);

    #in RGB Wert wandeln
    $rgb .= sprintf "00${gruen}FF ";

   }


   # MAGENTA - Rotwert erhöhen (0000FF -> FF00FF)
   for($count=0;$count<=255;$count=$count + $change )
    {

    # Rotwert erhöhen
    $rot = sprintf ("%02x", $count);

    #in RGB Wert wandeln
    $rgb .= sprintf "${rot}00FF ";

   }

# ROT - Blauwert verringern (FF00FF -> FF0000)
    for($count=255;$count>=0;$count=$count - $change )
    {

    # Rotwert erhöhen
    $blau = sprintf ("%02x", $count);

    #in RGB Wert wandeln
    $rgb .= sprintf "FF00${blau} ";

   }
 

# Rückgabe muss ein String aus dem aufrufenden devicenamen und aller zu setzenden Farbwerte sein . als trenner dient das leerzeichen.
return "$name $rgb";
}

sub MSwitch_spektralDurchlaufend($)
{
my ($string) = @_;
return unless(defined($string));
my @a = split(" ",$string);
my $hash = $defs{$a[0]};
delete $hash->{helper}{RUNNING_PID};
my $anz = @a;
$anz=$anz-1;
fhem("setreading ".$hash->{NAME}." todo $string");
fhem("setreading ".$hash->{NAME}." todoanz $anz");
fhem("setreading ".$hash->{NAME}." todofirst 1");
fhem("set ".$hash->{NAME}." exec_cmd_1 ID 1");
}


schauen ob es geht .

gruss Byte09

grossmaggul

Hallo,

Zitatwenn du magst kannst du das MSwitch mal versuchen:
Klar mag ich.:-)

Ich habe das jetzt mal eingebaut, es funktioniert eigentlich genauso wie vorher, ausgeschaltet wird aber auch erst, wenn der Spektraldurchlauf beendet ist.
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

#39
Zitat von: grossmaggul am 27 Januar 2019, 20:19:31
Hallo,
Klar mag ich.:-)

Ich habe das jetzt mal eingebaut, es funktioniert eigentlich genauso wie vorher, ausgeschaltet wird aber auch erst, wenn der Spektraldurchlauf beendet ist.

das kann im grunde nicht sein . schaltet er die led nur nicht aus und stoppt den farbwechsel, oder läuft der farbwechsel auch weiter ?

ggf stimmt dass abschaltevent nicht , das ich da ein falsches vorausgesetzt habe. kannst du mal im eventmonitor schauen , was für ein event generiert wird wenn du ausschaltest ?

das ist ein verhalten , was die konfiguration eigentlich gar nicht hergoebt, da es entweder sofort beendet wrd bei 'off' , ansonsten beendet es sich gar nicht.

bist du sicher , das nicht das doif auch noch im hintergrund werkelt ? ... das klingt mir fast so ?!  :-\

gruss Byte09

grossmaggul

Zitatdas nicht das doif auch noch im hintergrund werkelt ?
Doch, hatte ich vergessen zu deaktivieren.:-/

Jetzt funktioniert aber irgendwie der Aufruf des Farbwechsels nicht mehr.
Ich verstehe auch nicht was MSwitch eigentlich macht, bzw. wie das aufgerufen wird, soll das einfach loslegen sobald wz.theke auf "on" geht?
Das funktioniert nämlich nicht.:-(

Hier das Event beim Einschalten:
2019-01-27 23:19:38 MSwitch led_kette todo: led_kette FF0000 FF0a00 FF1400 FF1e00 FF2800 FF3200 FF3c00 FF4600 FF5000 FF5a00 FF6400 FF6e00 FF7800 FF8200 FF8c00 FF9600 FFa000 FFaa00 FFb400 FFbe00 FFc800 FFd200 FFdc00 FFe600 FFf000 FFfa00 ffFF00 f5FF00 ebFF00 e1FF00 d7FF00 cdFF00 c3FF00 b9FF00 afFF00 a5FF00 9bFF00 91FF00 87FF00 7dFF00 73FF00 69FF00 5fFF00 55FF00 4bFF00 41FF00 37FF00 2dFF00 23FF00 19FF00 0fFF00 05FF00 00FF00 00FF0a 00FF14 00FF1e 00FF28 00FF32 00FF3c 00FF46 00FF50 00FF5a 00FF64 00FF6e 00FF78 00FF82 00FF8c 00FF96 00FFa0 00FFaa 00FFb4 00FFbe 00FFc8 00FFd2 00FFdc 00FFe6 00FFf0 00FFfa 00ffFF 00f5FF 00ebFF 00e1FF 00d7FF 00cdFF 00c3FF 00b9FF 00afFF 00a5FF 009bFF 0091FF 0087FF 007dFF 0073FF 0069FF 005fFF 0055FF 004bFF 0041FF 0037FF 002dFF 0023FF 0019FF 000fFF 0005FF 0000FF 0a00FF 1400FF 1e00FF 2800FF 3200FF 3c00FF 4600FF 5000FF 5a00FF 6400FF 6e00FF 7800FF 8200FF 8c00FF 9600FF a000FF aa00FF b400FF be00FF c800FF d200FF dc00FF e600FF f000FF fa00FF FF00ff FF00f5 FF00eb FF00e1 FF00d7 FF00cd FF00c3 FF00b9 FF00af FF00a5 FF009b FF0091 FF0087 FF007d FF0073 FF0069 FF005f FF0055 FF004b FF0041 FF0037 FF002d FF0023 FF0019 FF000f FF0005
2019-01-27 23:19:38 MSwitch led_kette todoanz: 156
2019-01-27 23:19:38 MSwitch led_kette todofirst: 1
2019-01-27 23:19:38 MSwitch led_kette exec_cmd_1 ID 1


Und beim Ausschalten:
Zitat2019-01-27 23:20:37 MSwitch led_kette del_delays
2019-01-27 23:20:37 WifiLight wz.theke brightness: 0
2019-01-27 23:20:37 WifiLight wz.theke RGB: 000000
2019-01-27 23:20:37 WifiLight wz.theke off

Und der Auszug aus dem Logfile dazu:
Zitat2019.01.27 23:22:44 3: wz.theke set HSV 120, 100, 100 with ramp: 0, flags:
2019.01.27 23:22:44 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {$hash->{helper}{RUNNING_PID} = BlockingCall('MSwitch_spektralDurchlauf',$hash->{NAME},'MSwitch_spektralDurchlaufend',10,'','');} 6291
2019.01.27 23:22:44 1: error at id call 1: format must be exec_cmd_1 <ID x,z,y>
2019.01.27 23:22:44 3: wz.theke RGBW LD382A set off 0
2019.01.27 23:22:44 3: wz.theke RGBW LD382A dim 0 0
2019.01.27 23:22:44 3: wz.theke set HSV 120, 100, 0 with ramp: 0, flags:
2019.01.27 23:22:44 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {BlockingKill($hash->{helper}{RUNNING_PID}) if(defined($hash->{helper}{RUNNING_PID}));delete($hash->{helper}{RUNNING_PID});fhem("deletereading led_kette todo");fhem("deletereading led_kette todoanz");fhem("deletereading led_kette todofirst");} 6291
2019.01.27 23:22:44 3: deletereading led_kette todo : Deleted reading todo for device led_kette
2019.01.27 23:22:44 3: deletereading led_kette todoanz : Deleted reading todoanz for device led_kette
2019.01.27 23:22:44 3: deletereading led_kette todofirst : Deleted reading todofirst for device led_kette
2019.01.27 23:22:44 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self del_delays  6291
2019.01.27 23:22:47 3: wz.theke set HSV 120, 100, 100 with ramp: 0, flags:
2019.01.27 23:22:47 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {$hash->{helper}{RUNNING_PID} = BlockingCall('MSwitch_spektralDurchlauf',$hash->{NAME},'MSwitch_spektralDurchlaufend',10,'','');} 6291
2019.01.27 23:22:47 1: error at id call 1: format must be exec_cmd_1 <ID x,z,y>
2019.01.27 23:22:54 3: wz.theke RGBW LD382A set off 0
2019.01.27 23:22:54 3: wz.theke RGBW LD382A dim 0 0
2019.01.27 23:22:54 3: wz.theke set HSV 120, 100, 0 with ramp: 0, flags:
2019.01.27 23:22:54 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {BlockingKill($hash->{helper}{RUNNING_PID}) if(defined($hash->{helper}{RUNNING_PID}));delete($hash->{helper}{RUNNING_PID});fhem("deletereading led_kette todo");fhem("deletereading led_kette todoanz");fhem("deletereading led_kette todofirst");} 6291
2019.01.27 23:22:54 3: deletereading led_kette todo : Deleted reading todo for device led_kette
2019.01.27 23:22:54 3: deletereading led_kette todoanz : Deleted reading todoanz for device led_kette
2019.01.27 23:22:54 3: deletereading led_kette todofirst : Deleted reading todofirst for device led_kette
2019.01.27 23:22:54 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self del_delays  6291
2019.01.27 23:22:55 3: wz.theke set HSV 120, 100, 100 with ramp: 0, flags:
2019.01.27 23:22:55 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {$hash->{helper}{RUNNING_PID} = BlockingCall('MSwitch_spektralDurchlauf',$hash->{NAME},'MSwitch_spektralDurchlaufend',10,'','');} 6291
2019.01.27 23:22:55 1: error at id call 1: format must be exec_cmd_1 <ID x,z,y>
2019.01.27 23:22:57 3: wz.theke RGBW LD382A set off 0
2019.01.27 23:22:57 3: wz.theke RGBW LD382A dim 0 0
2019.01.27 23:22:57 3: wz.theke set HSV 120, 100, 0 with ramp: 0, flags:
2019.01.27 23:22:57 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {BlockingKill($hash->{helper}{RUNNING_PID}) if(defined($hash->{helper}{RUNNING_PID}));delete($hash->{helper}{RUNNING_PID});fhem("deletereading led_kette todo");fhem("deletereading led_kette todoanz");fhem("deletereading led_kette todofirst");} 6291
2019.01.27 23:22:57 3: deletereading led_kette todo : Deleted reading todo for device led_kette
2019.01.27 23:22:57 3: deletereading led_kette todoanz : Deleted reading todoanz for device led_kette
2019.01.27 23:22:57 3: deletereading led_kette todofirst : Deleted reading todofirst for device led_kette
2019.01.27 23:22:57 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self del_delays  6291
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

morgen,

2019.01.27 23:22:55 1: error at id call 1: format must be exec_cmd_1 <ID x,z,y>

... kommt daher, das deine 98:_MSwitch.pm nicht aktuell ist . Daher läuft es auch nicht .Bitte ein Fhemupdate machen , dann sollte es gehen.

Mach das bitte aber erst nach 8 Uhr, ich habe heute Nacht nochmal eine Änderung eingespielt , damit du diese auch mitbekommst.

gruss Byte09

grossmaggul

Morgen,

update habe ich gemacht, jetzt klappt das auch, allerdings wenn die wz.theke eingeschaltet wird, wird auch eine meiner HUEs mit eingeschaltet und hat ebenfalls den Spektraldurchlauf.
Ich komme aber nicht dahinter warum nur die eine.
Gibt es eigentlich eine Doku zu MSwitch?

Das hier steht im Eventmonitor und das wird dann auch ständig mit anderen Werten wiederholt:
2019-01-28 09:51:21 MSwitch led_kette todofirst: 47
2019-01-28 09:51:22 HUEDevice HUEDevice2 xy: 0.054,0.9698
2019-01-28 09:51:22 HUEDevice HUEDevice2 reachable: 1
2019-01-28 09:51:22 HUEDevice HUEDevice2 rgb: 41ff00


Im Logfile wird das hier ausgegeben, die letzten 3 Zeilen werden auch da ständig wiederholt:
2019.01.28 09:43:39 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self exec_cmd_1 ID 1 6702
2019.01.28 09:43:39 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {my $test;my @test1;my $akttodo;my $kommand ;my $kommand1 ;$test = ReadingsVal( 'led_kette', 'todo', '' );$akttodo = ReadingsVal( 'led_kette', 'todofirst', '' );@test1 = split(' ',$test); my $farbe = $test1[$akttodo];$kommand = "set wz.theke RGB ".$farbe;$kommand1 = "set HUEDevice2 rgb ".$farbe;fhem($kommand);fhem($kommand1);;$akttodo++;fhem("setreading led_kette todofirst $akttodo");if (ReadingsVal( 'led_kette', 'todoanz', '' ) < $akttodo){fhem("setreading led_kette todofirst 1");}} 6337
2019.01.28 09:43:39 3: wz.theke set HSV 40, 100, 100 with ramp: 0, flags:
2019.01.28 09:43:40 3: wz.theke RGBW LD382A set off 0
2019.01.28 09:43:40 3: wz.theke RGBW LD382A dim 0 0
2019.01.28 09:43:40 3: wz.theke set HSV 40, 100, 0 with ramp: 0, flags:
2019.01.28 09:43:40 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {BlockingKill($hash->{helper}{RUNNING_PID}) if(defined($hash->{helper}{RUNNING_PID}));delete($hash->{helper}{RUNNING_PID});fhem("deletereading led_kette todo");fhem("deletereading led_kette todoanz");fhem("deletereading led_kette todofirst");} 6337
2019.01.28 09:43:40 3: deletereading led_kette todo : Deleted reading todo for device led_kette
2019.01.28 09:43:40 3: deletereading led_kette todoanz : Deleted reading todoanz for device led_kette
2019.01.28 09:43:40 3: deletereading led_kette todofirst : Deleted reading todofirst for device led_kette
2019.01.28 09:43:40 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self del_delays  6337
2019.01.28 09:43:50 3: wz.theke set HSV 120, 100, 100 with ramp: 0, flags:
2019.01.28 09:43:50 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {$hash->{helper}{RUNNING_PID} = BlockingCall('MSwitch_spektralDurchlauf',$hash->{NAME},'MSwitch_spektralDurchlaufend',10,'','');} 6337
2019.01.28 09:43:50 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {my $test;my @test1;my $akttodo;my $kommand ;my $kommand1 ;$test = ReadingsVal( 'led_kette', 'todo', '' );$akttodo = ReadingsVal( 'led_kette', 'todofirst', '' );@test1 = split(' ',$test); my $farbe = $test1[$akttodo];$kommand = "set wz.theke RGB ".$farbe;$kommand1 = "set HUEDevice2 rgb ".$farbe;fhem($kommand);fhem($kommand1);;$akttodo++;fhem("setreading led_kette todofirst $akttodo");if (ReadingsVal( 'led_kette', 'todoanz', '' ) < $akttodo){fhem("setreading led_kette todofirst 1");}} 6337
2019.01.28 09:43:50 3: wz.theke set HSV 0, 100, 100 with ramp: 0, flags:
2019.01.28 09:43:52 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self exec_cmd_1 ID 1 6702
2019.01.28 09:43:52 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {my $test;my @test1;my $akttodo;my $kommand ;my $kommand1 ;$test = ReadingsVal( 'led_kette', 'todo', '' );$akttodo = ReadingsVal( 'led_kette', 'todofirst', '' );@test1 = split(' ',$test); my $farbe = $test1[$akttodo];$kommand = "set wz.theke RGB ".$farbe;$kommand1 = "set HUEDevice2 rgb ".$farbe;fhem($kommand);fhem($kommand1);;$akttodo++;fhem("setreading led_kette todofirst $akttodo");if (ReadingsVal( 'led_kette', 'todoanz', '' ) < $akttodo){fhem("setreading led_kette todofirst 1");}} 6337
2019.01.28 09:43:52 3: wz.theke set HSV 2, 100, 100 with ramp: 0, flags:
2019.01.28 09:43:54 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self exec_cmd_1 ID 1 6702
2019.01.28 09:43:54 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {my $test;my @test1;my $akttodo;my $kommand ;my $kommand1 ;$test = ReadingsVal( 'led_kette', 'todo', '' );$akttodo = ReadingsVal( 'led_kette', 'todofirst', '' );@test1 = split(' ',$test); my $farbe = $test1[$akttodo];$kommand = "set wz.theke RGB ".$farbe;$kommand1 = "set HUEDevice2 rgb ".$farbe;fhem($kommand);fhem($kommand1);;$akttodo++;fhem("setreading led_kette todofirst $akttodo");if (ReadingsVal( 'led_kette', 'todoanz', '' ) < $akttodo){fhem("setreading led_kette todofirst 1");}} 6337
2019.01.28 09:43:54 3: wz.theke set HSV 5, 100, 100 with ramp: 0, flags:
2019.01.28 09:43:57 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self exec_cmd_1 ID 1 6702
2019.01.28 09:43:57 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {my $test;my @test1;my $akttodo;my $kommand ;my $kommand1 ;$test = ReadingsVal( 'led_kette', 'todo', '' );$akttodo = ReadingsVal( 'led_kette', 'todofirst', '' );@test1 = split(' ',$test); my $farbe = $test1[$akttodo];$kommand = "set wz.theke RGB ".$farbe;$kommand1 = "set HUEDevice2 rgb ".$farbe;fhem($kommand);fhem($kommand1);;$akttodo++;fhem("setreading led_kette todofirst $akttodo");if (ReadingsVal( 'led_kette', 'todoanz', '' ) < $akttodo){fhem("setreading led_kette todofirst 1");}} 6337
2019.01.28 09:43:57 3: wz.theke set HSV 7, 100, 100 with ramp: 0, flags:
2019.01.28 09:43:59 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self exec_cmd_1 ID 1 6702
2019.01.28 09:43:59 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {my $test;my @test1;my $akttodo;my $kommand ;my $kommand1 ;$test = ReadingsVal( 'led_kette', 'todo', '' );$akttodo = ReadingsVal( 'led_kette', 'todofirst', '' );@test1 = split(' ',$test); my $farbe = $test1[$akttodo];$kommand = "set wz.theke RGB ".$farbe;$kommand1 = "set HUEDevice2 rgb ".$farbe;fhem($kommand);fhem($kommand1);;$akttodo++;fhem("setreading led_kette todofirst $akttodo");if (ReadingsVal( 'led_kette', 'todoanz', '' ) < $akttodo){fhem("setreading led_kette todofirst 1");}} 6337
2019.01.28 09:43:59 3: wz.theke set HSV 9, 100, 100 with ramp: 0, flags:
2019.01.28 09:44:01 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung -> set MSwitch_Self exec_cmd_1 ID 1 6702
2019.01.28 09:44:01 3: led_kette MSwitch_Restartcm: Befehlsausfuehrung ->   {my $test;my @test1;my $akttodo;my $kommand ;my $kommand1 ;$test = ReadingsVal( 'led_kette', 'todo', '' );$akttodo = ReadingsVal( 'led_kette', 'todofirst', '' );@test1 = split(' ',$test); my $farbe = $test1[$akttodo];$kommand = "set wz.theke RGB ".$farbe;$kommand1 = "set HUEDevice2 rgb ".$farbe;fhem($kommand);fhem($kommand1);;$akttodo++;fhem("setreading led_kette todofirst $akttodo");if (ReadingsVal( 'led_kette', 'todoanz', '' ) < $akttodo){fhem("setreading led_kette todofirst 1");}} 6337
2019.01.28 09:44:01 3: wz.theke set HSV 12, 100, 100 with ramp: 0, flags:
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

Da ist noch ein Befehl zum testen von mir drinnen .... siehe Bild.  Den Befehl zum schalten der hue kannst du dort rausnehmen.

Kurz da mobil

Gruss Byte09

(https://uploads.tapatalk-cdn.com/20190128/95e6a004fb60db7d2bccada9ae87d398.jpg)

Gesendet von meinem SM-G900F mit Tapatalk

Byte09

Da kommen so sehr viele log ausgaben . Setzt im Device das Attribut verbose mal auf 1 um das etwas einzudämmen.

Mswitch im fhemwiki
https://wiki.fhem.de/wiki/MSwitch



Gesendet von meinem SM-G900F mit Tapatalk