[gelöst] DOIF - Wiederholung eines Unterprogramms

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

Vorheriges Thema - Nächstes Thema

grossmaggul

Hallo,

irgendwie stecke ich fest, ich habe mir ein Unterprogramm gebaut mit dem mein Wifilight RGBW LED Streifen, wenn er eingeschaltet wird, langsam durchs Farbspektrum läuft, das klappt auch.
Allerdings wird das Programm natürlich nur einmal durchlaufen. Setze ich DOIF auf "do always" läuft das Programm zwar dauernd durch, allerdings auch dann, wenn ich den LED Streifen ausschalte.
Das Unterprogramm ist eine Aneinanderreihung von mehreren "for"-Schleifen.

Mein DOIF sieht so aus:

Zitat([wz.theke] eq "on")

{spektralDurchlauf();}

Wie kann ich das Problem lösen, ich habe mich jetzt schon durch's halbe Internet gelesen, aber irgendwie stehe ich heftigst auf dem Schlauch.
Möglicherweise ist DOIF ja auch gar nicht der richtige Ansatz.

Vielleicht kann mir jemand einen Schubser in die richtige Richtung geben.

gm
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

grossmaggul

Here it comes:

Internals:
   DEF        ([wz.theke] eq "on")


{

   spektralDurchlauf();
 
}

   FUUID      5c49b404-f33f-f310-d32a-adc91a1a7ec816d3
   MODEL      FHEM
   NAME       wz.theke_spektral_lauf
   NR         209
   NTFY_ORDER 50-wz.theke_spektral_lauf
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2019-01-24 19:46:52   Device          wz.theke
     2019-01-24 18:24:56   cmd             1
     2019-01-24 18:24:56   cmd_event       wz.theke
     2019-01-24 18:24:56   cmd_nr          1
     2019-01-24 19:46:52   e_wz.theke_STATE on
     2019-01-24 18:21:59   last_cmd        cmd_1
     2019-01-24 18:24:46   mode            enabled
     2019-01-24 18:24:56   state           cmd_1
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'wz.theke','STATE') eq "on"
   devices:
     0           wz.theke
     all         wz.theke
   do:
     0:
       0          {      spektralDurchlauf();    }
     1:
   helper:
     event      programm: colorchange 100
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   wz.theke
     timerevent programm: colorchange 100
     triggerDev wz.theke
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: wz.theke
       state: cmd_1
     timerevents:
       programm: colorchange 100
     timereventsState:
       programm: colorchange 100
     triggerEvents:
       programm: colorchange 100
     triggerEventsState:
       programm: colorchange 100
   internals:
     0           wz.theke:STATE
     all         wz.theke:STATE
   itimer:
   perlblock:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   group      Licht
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Damian

Also, nach dieser Definition kann er im cmd_2-Fall nichts ausführen, weil nichts definiert ist. Und cmd_1 wird nur ausgeführt, wenn die Bedingung wahr ist, das ist so sicher wie das Amen in der Kirche ;)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

grossmaggul

Jetzt müsste ich nur noch verstehen, was Du mir damit sagen willst. :(

Ich habe mir die DOIF Commandref jetzt schon einige Male durchgelesen, ich fürchte mein "Intellekt" reicht nicht aus um da durchzusteigen. :-\
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Frank_Huber

stochwort: repeatcmd.

Aber: wie machst es wieder aus? Dieses doif macht das nicht.

Gesendet von meinem Doogee S60 mit Tapatalk


Damian

Zitat von: grossmaggul am 24 Januar 2019, 22:30:47
Jetzt müsste ich nur noch verstehen, was Du mir damit sagen willst. :(

Ich habe mir die DOIF Commandref jetzt schon einige Male durchgelesen, ich fürchte mein "Intellekt" reicht nicht aus um da durchzusteigen. :-\

Wenn [wz.theke] eq "off" ist, dann kann dieses DOIF deine Funktion nicht ausführen.

Was du noch machen kannst, ist ([wz.theke:state] eq "on") definieren. Dann wird die Bedingung nur geprüft, wenn sich der Status ändert.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

grossmaggul

ZitatAber: wie machst es wieder aus? Dieses doif macht das nicht.
Ja, das ist ja mein Problem.

Könnte man denn repeatcmd auch ([wz.theke:state] eq "on") übergeben, zumindest habe ich das so verstanden.

ZitatWas du noch machen kannst, ist ([wz.theke:state] eq "on") definieren. Dann wird die Bedingung nur geprüft, wenn sich der Status ändert.
O.K., aber wie sage ich dann dem Unterprogramm es soll seinen Dienst einstellen, das ist doch das Problem, oder?
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Damian

Also, wenn spektralDurchlauf() aufgerufen wird, dann läuft es durch und beendet sich doch von selbst - hoffe ich.

Du musst nur schauen, dass es nur dann aufgerufen wird, wenn du es willst und sonst nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

grossmaggul

ZitatAlso, wenn spektralDurchlauf() aufgerufen wird, dann läuft es durch und beendet sich doch von selbst - hoffe ich.
Ja, das tut es und ist eigentlich auch Teil des Problems, es soll ja ständig durchlaufen, bis ich den LED Streifen ausschalte.

ZitatDu musst nur schauen, dass es nur dann aufgerufen wird, wenn du es willst und sonst nicht.
Ja, schon klar, das ist ja mein Problem, ich habe bisher keine Lösung gefunden.:-(
Ich werde es wohl jetzt erstmal so machen, daß ich das Programm über ein at starte alle paar Minuten starte, mal sehen ob ich das wenigstens hinbekomme.
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

moin,

bevor ich mich damit beschäftige , soll es in jedem fall per DOIF gelöst werden ?

falls nicht , zieg mir doch bitt mal das aufzurufende Unterprogramm 'spektralDurchlauf();'

gruss Byte09

grossmaggul

Zitatsoll es in jedem fall per DOIF gelöst werden ?
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.:-)
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

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.:-)

hmm, ich habe das gerade mal mit dummys nachgestellt. der aufruf der sub blockiert bei mir bei einmaligem anruf fhem schon für ca. 9 sekunden.

ich schaue mal , wie ich das umsetzen würde. dauert aber einen moment

gruss Byte09

grossmaggul

Zitatder aufruf der sub blockiert bei mir bei einmaligem anruf fhem schon für ca. 9 sekunden.
Bei mir nicht, wenn ich es direkt per DOIF starte.

Zitatdauert aber einen moment
Macht nix, ich hab Zeit.;)
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

Zitat von: grossmaggul am 25 Januar 2019, 11:56:18
Bei mir nicht, wenn ich es direkt per DOIF starte.
Macht nix, ich hab Zeit.;)


also, kann sein , dass ich das jetzt auch nicht optimal angehe, wäre aber mein ansatz - diesen habe ich auch getestet.

die ganze unterroutine würde ich erstmal nonblocking aufrufen. https://wiki.fhem.de/wiki/Blocking_Call

( edit :

ZitatBei mir nicht, wenn ich es direkt per DOIF starte.

dann tut DIOF das wohl sowieso schon )


in meinem hilfsmodul ( welches auch immer )  würde ich den rückgabewert nutzen , um die routine erneut zu starten , aber nur dann , wenn der state von wz.theke noch on ist.

wie das konkret in einem DOIF umzusetzen ist weiss ich leider nicht , da ich es nicht nutze. wenn du es versuchen willst könnte ich dir das aber in einem MSwitch bauen . Da könntest du in der Ansicht des MSwitches selber relativ gut einsehen , wie es funktioniert.

gruss Byte09


Frank_Huber

#15
wie wäre es mit:

defmod wz.theke.doif DOIF ([wz.theke] eq "on") {spektralDurchlauf();} DOELSEIF ([wz.theke] eq "off") ()
attr wz.theke.doif DOIF repeatcmd 120


https://fhem.de/commandref_DE.html#DOIF_repeatcmd

Der Spektraldurclauf wird alle 2 min wiederholt bis wz.theke auf off geht.

rischbiter123

Moin,

nur mal dumm gefragt. Sollte dann nicht off im DOELSEIF stehen?

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Frank_Huber

Zitat von: rischbiter123 am 25 Januar 2019, 12:30:48
nur mal dumm gefragt. Sollte dann nicht off im DOELSEIF stehen?
natürlich. copy&paste plus ein klinnelndes Telefon. ist korrigiert. ;)

grossmaggul

Zitatwie wäre es mit:
Ja, das ist gut, damit klappt's, vielen Dank!
Hätte ich aber eigentlich auch selber drauf kommen können, grummel. :D

Einziger Wermutstropfen, das Licht geht natürlich erst aus, wenn die Schleifen durchgelaufen sind, aber damit kann ich leben.
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Frank_Huber

Kannst ja im DOELSEIF Zweig einen Befehl einbauen der direkt abschaltet.
Einfach in die letzte leere Klammer einfügen.

Gesendet von meinem Doogee S60 mit Tapatalk


grossmaggul

ZitatEinfach in die letzte leere Klammer einfügen.
Das habe ich gerade probiert, ich habe da (wz.theke set off) eingesetzt, funktioniert aber nicht, die Schleifen werden bis zum Ende durchlaufen und erst dann wird der LED Streifen abgeschaltet.
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Frank_Huber

#21
Ja das kann ja auch nicht gehen. Dachte eher an einen Befehl der die Schleife abbricht.
Oben hast ja den Code gepostet. Da gibt's keinen Weg. Müsstest einbauen.

Poste mal bitte ein list von wz.theke
Was ist es denn für ein Controller?

Gesendet von meinem Doogee S60 mit Tapatalk

grossmaggul

ZitatDachte eher an einen Befehl der die Schleife abbricht.
Habe ich mir auch schon Gedanken drüber gemacht, bin da aber zu keinem Ergebnis gekommen. Man müßte ja von FHEM aus in die Schleife eingreifen, da ist mir aber kein Weg bekannt, wie das gehen soll. Man müßte praktisch in jeder for-Schleife einen "Notausgang" haben.

ZitatPoste mal bitte ein list von wz.theke
Was ist es denn für ein Controller?
Ist ein LD382A Controller, ein sogenanntes "Magic UFO".

Internals:
   CHANGED   
   CONNECTION LD382A
   DEF        RGBW LD382A:192.168.1.203
   FUUID      5c45c63f-f33f-f310-d25d-21647dcf6d95fd3d
   IP         192.168.1.203
   LEDTYPE    RGBW
   NAME       wz.theke
   NR         38
   NTFY_ORDER 50-wz.theke
   PORT       5577
   PROTO      1
   SLOT       0
   STATE      on
   TYPE       WifiLight
   READINGS:
     2019-01-25 21:13:46   RGB             FF0000
     2019-01-25 21:13:46   brightness      100
     2019-01-25 21:13:46   hue             0
     2019-01-25 21:13:46   saturation      100
     2019-01-25 21:13:46   state           on
   helper:
     COMMANDSET on off dim dimup dimdown HSV RGB
     llLock     0
     targetHue  0
     targetSat  100
     targetTime 1548447226.36354
     targetVal  100
     COLORMAP:
       0
       1
       2
       2
       3
       4
       5
       5
       6
       7
       8
       8
       9
       10
       11
       11
       12
       13
       14
       14
       15
       16
       17
       17
       18
       19
       20
       20
       21
       22
       23
       23
       24
       25
       26
       26
       27
       28
       29
       29
       30
       31
       32
       32
       33
       34
       35
       35
       36
       37
       38
       38
       39
       40
       41
       41
       42
       43
       44
       44
       45
       46
       47
       47
       48
       49
       50
       50
       51
       52
       53
       53
       54
       55
       56
       57
       57
       58
       59
       60
       60
       61
       62
       63
       63
       64
       65
       66
       66
       67
       68
       69
       70
       70
       71
       72
       73
       73
       74
       75
       76
       76
       77
       78
       79
       80
       80
       81
       82
       83
       83
       84
       85
       86
       86
       87
       88
       89
       89
       90
       91
       92
       93
       94
       95
       96
       97
       98
       99
       100
       101
       102
       103
       104
       105
       106
       107
       108
       109
       110
       111
       112
       113
       114
       115
       116
       117
       118
       119
       120
       121
       122
       123
       124
       125
       126
       127
       128
       129
       130
       131
       132
       133
       134
       135
       136
       137
       138
       139
       140
       141
       142
       143
       144
       145
       146
       147
       148
       149
       150
       151
       152
       154
       155
       157
       158
       160
       161
       163
       164
       166
       167
       169
       170
       172
       173
       175
       176
       178
       179
       181
       182
       184
       185
       187
       188
       190
       191
       193
       194
       196
       197
       198
       200
       201
       203
       204
       206
       207
       209
       210
       212
       213
       215
       216
       218
       219
       221
       222
       224
       225
       227
       228
       230
       231
       233
       234
       236
       237
       239
       240
       241
       241
       242
       243
       243
       244
       245
       245
       246
       247
       247
       248
       249
       249
       250
       251
       251
       252
       253
       253
       254
       255
       255
       256
       257
       257
       258
       259
       259
       260
       261
       261
       262
       263
       263
       264
       265
       265
       266
       267
       267
       268
       269
       269
       270
       271
       271
       272
       273
       273
       274
       275
       275
       276
       277
       277
       278
       279
       279
       280
       281
       283
       284
       285
       287
       288
       289
       291
       292
       293
       295
       296
       297
       299
       300
       301
       303
       304
       305
       307
       308
       309
       311
       312
       313
       315
       316
       317
       319
       320
       321
       323
       324
       325
       327
       328
       329
       331
       332
       333
       335
       336
       337
       339
       340
       341
       343
       344
       345
       347
       348
       349
       351
       352
       353
       355
       356
       357
       359
       0
     GAMMAMAP:
       0
       0.0837677640068292
       0.243332430098219
       0.45405621299892
       0.70684316621699
       0.996357952001595
       1.31896324344069
       1.67196720192944
       2.05327034060355
       2.46117402090514
       2.89426612471675
       3.35134791378444
       3.83138472229589
       4.33347131986342
       4.85680675751166
       5.4006755921087
       5.96443354494847
       6.54749632988109
       7.14933080167485
       7.76944783828119
       8.40739654243209
       9.06275946322968
       9.73514861754315
       10.4242021465521
       11.1295814824596
       11.8509689292396
       12.5880655825711
       13.3405895300298
       14.1082742846809
       14.8908674144572
       15.6881293368749
       16.499832254239
       17.3257592089163
       18.1657032417713
       19.0194666396879
       19.8868602603794
       20.7677029245494
       21.6618208669846
       22.5690472394153
       23.4892216590168
       24.4221897972898
       25.3678030047821
       26.3259179677223
       27.2963963931522
       28.2791047195789
       29.2739138505435
       30.2806989088167
       31.2993390092098
       32.329717048222
       33.3717195089492
       34.4252362798567
       35.4901604861718
       36.5663883327847
       37.6538189576659
       38.7523542949095
       39.8618989466026
       40.982360062801
       42.1136472289627
       43.2556723602513
       44.4083496021795
       45.5715952371095
       46.7453275961738
       47.9294669762181
       49.1239355614018
       50.3286573491265
       51.5435580799885
       52.7685651714775
       54.0036076551689
       55.2486161171733
       56.5035226416311
       57.7682607570534
       59.0427653853271
       60.3269727932157
       61.6208205462015
       62.9242474645252
       64.237193581289
       65.5596001025013
       66.8914093689478
       68.2325648197832
       69.583010957744
       70.9426933158916
       72.3115584257991
       73.6895537871024
       75.0766278383415
       76.4727299290214
       77.8778102928286
       79.2918200219416
       80.7147110423796
       82.1464360903337
       83.5869486894341
       85.0362031289022
       86.4941544425471
       87.9607583885629
       89.4359714300888
       90.9197507164941
       92.4120540653557
       93.9128399450933
       95.4220674582326
       96.9396963252683
       98.4656868690975
       100
     hlCmdQueue:
     llCmdQueue:
Attributes:
   DbLogExclude .*
   colorCast  0, -15, -29, -29, 0, -20
   event-on-change-reading .*
   group      Licht
   icon       light_led_stripe_rgb
   room       1.1_Wohnzimmer,6.1_Licht
   sortby     7
   verbose    0
   webCmd     RGB:on:off
   whitePoint 1, 1, 1
   widgetOverride RGB:colorpicker,RGB
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Frank_Huber

Ah, OK. Der kann das Spektrum nicht direkt.
Der rgbww hier ausm forum kann das selbst. Da geht das mit dem off dann auch.

Möglichkeit:
In deiner Sub so oft wie möglich abfragen ob das wz.theke off ist und wenn ja dann abbrechen, ausschalten.

Gesendet von meinem Doogee S60 mit Tapatalk


grossmaggul

ZitatIn deiner Sub so oft wie möglich abfragen ob das wz.theke off ist und wenn ja dann abbrechen, ausschalten.
Ja, so hatte ich mir das auch gedacht, ich muß mich da aber erstmal schlau machen, wie das genau geht. Ich habe immer ein wenig Schwierigkeiten aus den Perlprogrammen heraus fhem anzusteuern. Wird schon schief gehen.;)
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

grossmaggul

Und natürlich geht es schief...

Ich habe jetzt die sub Routine so umgebaut (die Log Befehle sind nur zum testen), daß in jeder For-Schleife eine if Abfrage auf (wz.theke off) testet und dann soll die Schleife verlassen werden.

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

sub spektralDurchlauf()
{

  my $rot;
  my $gruen;
  my $blau;
 
  my $rgb;
  my $count;
 
  my $theke_status = ReadingsVal("wz.theke","state","");

   # 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");

if ($theke_status eq "off")
  {
Log 1, "gelb";
last;


}

    }
   
   # 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");

if ($theke_status eq "off")
  {
Log 3, "gruen";
last;

}
 
   }
   
   
   # 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");

if ($theke_status eq "off")
  {
Log 3, "cyan";
last;

}
 
   
   }
   
   # 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");

if ($theke_status eq "off")
  {
Log 3, "blau";
last;


}
 
   
   }


   # 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");

if ($theke_status eq "off")
  {
Log 3, "magenta";
last;


}
 
   }

# 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");

if ($theke_status eq "off")
  {
Log 3, "rot";
last;

}
 
   }
}
   


Leider funktioniert das aber so nicht, warum ist mir schleierhaft.
Das Programm verlässt weder die Schleife noch kommt irgendeine Logausgabe.
Wenn ich aber in der zugefügten if Abfrage auf "on" teste, dann wird die Schleife verlassen und ich habe einen Logeintrag.
Könnte es damit zusammenhängen, daß die DOIF Abfrage bei "off" in der DOELSEIF Abfrage ist und das Unterprogramm da nicht aufgerufen wird?
Oder was ist der Grund dafür?
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Damian

Zitat von: grossmaggul am 26 Januar 2019, 01:17:04
Könnte es damit zusammenhängen, daß die DOIF Abfrage bei "off" in der DOELSEIF Abfrage ist und das Unterprogramm da nicht aufgerufen wird?
Oder was ist der Grund dafür?

Natürlich hängt es damit zusammen, DOIF prüft ja nicht ständig seine Bedingungen, sondern nur wenn es durch einen Trigger aufgefordert wird. Rekursionen durch Selbsttriggerung werden zusätzlich vom DOIF unterbunden.

Was ist denn der Sinn des Spektraldurchlaufs?

Wenn der Controller keine "Transitions" beherrscht (das wäre die eleganteste Lösung), dann wären solche Aufgaben eher in einem Modul besser untergebracht, welches nach jedem Befehl die Kontrolle ans FHEM abgibt, sonst, wie schon geschrieben, muss man mit Blocking-Calls arbeiten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Byte09

hi ,

ich habe mich jetzt doch nochmal damit beschäftigt. Läuft soweit auch ( auch jederzeit abbrechbar ) , aber ... !

...ich kann es drehen und wenden wie ich will, da werden ja pro durchlauf 765 set-Befehle ausgeführt und das blockiert mein Fhem in jedem Fall spürbar. Aus der BlockingCall  direkt kann ich keine set befehle ausführen , denke ich zumindest ( bitte korrigier mich jemand, wenn ich hier falsch liege ) .

d.h - abgesehen davon , das das sowieso - naja zumindest fragwürdig ist - konnte ich es nur halbwegs vernünftig lösen , indem ich zwischen den einzelnen set befehlen mit einer pause von 1 sekunde arbeite - um fhem zumindest die gelegenheit zu geben , andere aktionen auszuführen.

wenn diese pause zwischen den befehlen für dich akzeptabel ist , kann ich dir meine Lösung heute mittag posten.


ich kann auch irgendwie nicht nachvollziehen , wie du es anstellst, das dein fhem bei der sub  nicht blockiert?!
ich kann es anstellen wie ich will, ich habe immer entsprechende aussetzer gehabt, auch mit der DOIF-Lösung.

gruss Byte09

grossmaggul

Zitat von: DamianNatürlich hängt es damit zusammen,
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.

Zitat von: DamianWenn der Controller keine "Transitions" beherrscht (das wäre die eleganteste Lösung), dann wären solche Aufgaben eher in einem Modul besser untergebracht, welches nach jedem Befehl die Kontrolle ans FHEM abgibt, sonst, wie schon geschrieben, muss man mit Blocking-Calls arbeiten.
Keine Ahnung, ob der Transitions beherrscht, ich weiß ja nicht mal was das ist, geschweige denn wie man die aufruft...

Zitat von: DamianWas ist denn der Sinn des Spektraldurchlaufs?
Muß immer alles einen Sinn haben?  ;)
Das ist ein rein optisches Ding, ich habe hier eine Wohnzimmerküche, mit einer Kochinsel und auf der Rückseite der Kochinsel ist hinter Milchplexiglasscheiben die LED Kette angebracht, da mir das zu langweilig war immer nur eine Farbe zu haben, bzw. die hin und wieder zu wechseln hatte ich mir diesen Spektraldurchlauf überlegt, daß das Ganze so schwierig sein würde, hatte ich nicht gedacht. :-[

Zitat von: Byte09ich kann auch irgendwie nicht nachvollziehen , wie du es anstellst, das dein fhem bei der sub  nicht blockiert?!
Vielleicht weil bei mir fhem auf potenterer Hardware läuft und nicht auf einem Rapsberry oder ähnlich.
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

#29
ZitatZitat von: Byte09

    ich kann auch irgendwie nicht nachvollziehen , wie du es anstellst, das dein fhem bei der sub  nicht blockiert?!

Vielleicht weil bei mir fhem auf potenterer Hardware läuft und nicht auf einem Rapsberry oder ähnlich.

was aber mE nichts daran ändert , das er aus der routine nicht rauskommt. das bedeutet , das er (bildlich) erst alle Befehle der routine auf einen Stapel legt ( somit letztendlich 'blocking' ) und erst dann befehle die von ausserhalb der routine kommen ganz oben auf den stapel legt. abgearbeitet werden die befehle von unten nach oben.

ich denke ganz vereinfacht ausgedrückt - erklärt aber das nun vorhandene problem da der off befehl erst nach ablauf der routine auf den stapel gelegt wird, auch wenn du es ggf. aufgrund potenter hardware optisch so nicht nachvollziehen kannst.

( ich hoffe ich erzähle hier keinen unssinn  ;) )



gruss Byte09

edit: ich konnte die pausen auf 0.1 sekunden reduzieren, somit sollte es fließend sein.
das MSwitch ist noch im 'unreinen' und deine subs müssten angepasst werden.

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


grossmaggul

Ah, funktioniert jetzt!

Eine dumme Frage noch, was bedeutet "Takt" und "Änderung" genau bzw. was bewirken die?
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

Zitat von: grossmaggul am 28 Januar 2019, 13:06:53
Ah, funktioniert jetzt!

Eine dumme Frage noch, was bedeutet "Takt" und "Änderung" genau bzw. was bewirken die?
Takt habe ich einfach mal den Abstand zwischen den befehlen benannt .  Alle x Sekunden eine farbänderung.


Änderung sind die Schritte in deiner sub , die er immer beim hoch oder runterzählen der farbcodes nimmt . Kannst du im Attribut webcmd laben umbenennen.

"Änderung" greift immer nur einmal beim Start des mswitch es,  die Sekunden kannst du während des Laufes ändern.

Gruss Byte09


Gesendet von meinem SM-G900F mit Tapatalk


grossmaggul

O.K., alles klar, vielen Dank für Deinen Einsatz!!
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1

Byte09

Freut mich. In das mswitch einfach mal rein arbeiten falls du es anderweitig nutzt. ( dieses hier ist schon sehr speziell )

Bei Fragen gerne im entsprechenden the melden.

Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk

grossmaggul

ZitatIn das mswitch einfach mal rein arbeiten falls du es anderweitig nutzt.
Bisher kannte ich das ja noch gar nicht, im Moment fällt mir auch nix ein wofür ich das nocht gebrauchen könnte, aber ich halte es auf jeden Fall mal im Hinterkopf.
FHEM auf Debian Buster Server, 2 x nanoCUL868, 1xnanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1