Hauptmenü

mit DOIF langsam Dimmen

Begonnen von rieders, 31 Juli 2018, 10:00:42

Vorheriges Thema - Nächstes Thema

rieders

Hallo

Ich habe mehrere LED-Strips die per Sunrise und Sunset gesteuert werden.
Angeschlossen sind die LED´s an einem PCA9685 Modul.
Das funktioniert soweit ganz gut.

Jetzt möchte ich das die LED´s nicht gleich auf den eingestellten Wert an gehen, sonder schön langsam.
Per DOIF soll das möglich sein das schrittweise über eine Art Schleife bis zum gewünschten Wert sich erhöht.

Ich habe schon in der Wiki zu DOIF nachgesehen aber bin nicht auf die Lösung gekommen.
Vielleicht könnte mir jemand ein Ansatz geben wie ich die Kanäle dimmen kann.


Mit freundlichen Grüßen

André

Damian

Ich gehe davon aus, dass du den Controller nicht per Funk angebunden hast und dass der Controller selbst kein Dimmen beherrscht, dann würde ich es heute im DOIF-Perl Modus realisieren.
z. B.

subs {
sub dimmdown {
  my ($value)=@_;
  if ($value > 0 ) {
    $value--;
    fhem"set led $value";
    set_Exec("dimm",1,"dimmdown",$value);
  }
}

sub dimmup {
  my ($value)=@_;
  if ($value < 10 ) {
    $value++;
    fhem"set led $value";
    set_Exec("dimm",1,"dimmup",$value);
  }
}
}

main {
  if ([FS] eq "on") {
    dimmup(0);
  } else {
    dimmdown(10);
  }
}


Das ist besonders effizient, da es in Perl gegossen ist. siehe: https://forum.fhem.de/index.php/topic,84969.msg822560.html#msg822560

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

rieders

Hallo Damian

Vielen Dank für die Antwort.
Das Modul hängt am I2C vom Raspberry Pi.

Leider bin ich bei FHEM oder DOIF noch nicht so bewandert.
Wie kann ich den Code einem LED-Stripe zuordnen ?


Grüße
André

Damian

Zitat von: rieders am 31 Juli 2018, 11:17:56
Hallo Damian

Vielen Dank für die Antwort.
Das Modul hängt am I2C vom Raspberry Pi.

Leider bin ich bei FHEM oder DOIF noch nicht so bewandert.
Wie kann ich den Code einem LED-Stripe zuordnen ?


Grüße
André


Den FHEM-Befehl: set led $value musst du für deine led anpassen. $value ist eine Variable die eine Zahl im Bereich von bis annimmt (siehe unten). Im Beispiel wird im Sekundentakt, angegeben mit set_Exec("dimm",1,"dimmdown",$value);, der set-Befehl ausgeführt.

Bei Hochdimmen habe ich für $value 0-10 und beim Runderdimmen 10-0 programmiert. Die Größen kann man im Sourcecode anpassen.



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

Heimweh

Zitat von: Damian am 31 Juli 2018, 11:13:44
Ich gehe davon aus, dass du den Controller nicht per Funk angebunden hast und dass der Controller selbst kein Dimmen beherrscht, dann würde ich es heute im DOIF-Perl Modus realisieren.
z. B.

subs {
sub dimmdown {
  my ($value)=@_;
  if ($value > 0 ) {
    $value--;
    fhem"set led $value";
    set_Exec("dimm",1,"dimmdown",$value);
  }
}

sub dimmup {
  my ($value)=@_;
  if ($value < 10 ) {
    $value++;
    fhem"set led $value";
    set_Exec("dimm",1,"dimmup",$value);
  }
}
}

main {
  if ([FS] eq "on") {
    dimmup(0);
  } else {
    dimmdown(10);
  }
}


Das ist besonders effizient, da es in Perl gegossen ist. siehe: https://forum.fhem.de/index.php/topic,84969.msg822560.html#msg822560

Hallo Damian, ich wärme diesen Tread mal wieder auf, ich wollte Deine Dimm Routine in meine myUtils kopieren aber er meckert
wegen dem [FS]. Was hat es damit auf sich?

Ich will damit ebenfalls einen "Softstart" realisieren....
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

Damian

#5
Zitat von: Heimweh am 06 Juni 2019, 12:21:49
Hallo Damian, ich wärme diesen Tread mal wieder auf, ich wollte Deine Dimm Routine in meine myUtils kopieren aber er meckert
wegen dem [FS]. Was hat es damit auf sich?

Ich will damit ebenfalls einen "Softstart" realisieren....

Die Ereignisblöcke, hier z. B. main, darf man nicht auslagern, da dort für die Triggererkennung eigene DOIF-Syntax erforderlich ist (hier z. B.  [FS]), diese gibt es in myutils nicht.

Also, du kannst nur die Funktionsdefinitionen aus dem Bereich subs auslagern, allerdings im Ereignisblock musst du dann deine in myutils ausgelagerten Funktionen beim Aufruf mit :: vor deren Namen angeben (DOIF benutzt einen eigenen Namensraum).


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

Heimbastler

Hallo Damian,


ich versuche das DOIF für mein Aquariumlicht zu nutzen. Komme aber nicht weiter. Irgendwas mache ich falsch. Evt liegt es am ESP8266 / Tasmota DEVICE. Muss ich in den Code "pct" eintragen? Aktuell wird bei FS=on der pct auf 1% gesetzt und bei FS=off der pct auf 99% gesetzt. (Die 3sec Timer sind vorerst so klein gesetzt um etwas erkennen zu können. Später soll das auf 600sec o.ä. gesetzt werden um das sehr langsam zu dimmen. Dann macht das auch Sinn wenn man einen Funkdimmer nutzt denke ich)
Hier die passenden Raw Definition:

DOIF
defmod AquariumDimmen DOIF subs {\
sub dimmdown {\
  my ($value)=@_;;\
  if ($value > 0 ) {\
    $value--;;\
    fhem"set MQTT2_DVES_00388B pct $value";;\
    set_Exec("dimm",3,"dimmdown",$value);;\
  }\
}\
\
sub dimmup {\
  my ($value)=@_;;\
  if ($value < 100 ) {\
    $value++;;\
    fhem"set MQTT2_DVES_00388B pct $value";;\
    set_Exec("dimm",3,"dimmup",$value);;\
  }\
}\
}\
\
main {\
  if ([FS] eq "on") {\
    dimmup(0);;\
  } else {\
    dimmdown(100);;\
  }\
}
attr AquariumDimmen disable 0
attr AquariumDimmen room Entwicklung

setstate AquariumDimmen initialized
setstate AquariumDimmen 2021-04-13 22:51:54 mode enabled
setstate AquariumDimmen 2021-04-13 22:51:54 state initialized


DEVICE
defmod MQTT2_DVES_00388B MQTT2_DEVICE DVES_00388B
attr MQTT2_DVES_00388B IODev MQTT2_FHEM_Server
attr MQTT2_DVES_00388B alias Schrank
attr MQTT2_DVES_00388B autocreate 0
attr MQTT2_DVES_00388B comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10;; 'cmnd/SmartHome/Wohnzimmer/Schrank/cmnd/Backlog POWER1 1;; delay '.$duration.';; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
attr MQTT2_DVES_00388B devStateIcon {Color::devStateIcon($name,"dimmer",'',"pct","state")}
attr MQTT2_DVES_00388B genericDeviceType light
attr MQTT2_DVES_00388B group Licht
attr MQTT2_DVES_00388B icon light_led
attr MQTT2_DVES_00388B jsonMap POWER1:0 Dimmer:pct Channel_4:0 Channel_1:0 Channel_2:0 Channel_3:0 HSBColor:0
attr MQTT2_DVES_00388B model tasmota_cct_led
attr MQTT2_DVES_00388B readingList SmartHome/Wohnzimmer/Schrank/tele/LWT:.* LWT\
  SmartHome/Wohnzimmer/Schrank/tele/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  SmartHome/Wohnzimmer/Schrank/tele/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  SmartHome/Wohnzimmer/Schrank/tele/INFO.:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  SmartHome/Wohnzimmer/Schrank/tele/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  SmartHome/Wohnzimmer/Schrank/stat/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  SmartHome/Wohnzimmer/Schrank/stat/POWER1:.* state
attr MQTT2_DVES_00388B room EG,Homekit
attr MQTT2_DVES_00388B setList off:noArg SmartHome/Wohnzimmer/Schrank/cmnd/POWER1 0\
  on:noArg SmartHome/Wohnzimmer/Schrank/cmnd/POWER1 1\
  toggle:noArg SmartHome/Wohnzimmer/Schrank/cmnd/POWER1 2\
  CT:colorpicker,CT,153,5,500 SmartHome/Wohnzimmer/Schrank/cmnd/CT\
  pct:colorpicker,BRI,0,5,100 SmartHome/Wohnzimmer/Schrank/cmnd/DIMMER\
  dimup:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+4)/10)*10+10;; return qq {SmartHome/Wohnzimmer/Schrank/cmnd/Dimmer $num};; }\
  dimdown:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+7)/10)*10-10;; return qq {SmartHome/Wohnzimmer/Schrank/cmnd/Dimmer $num};; }
attr MQTT2_DVES_00388B setStateList on off toggle
attr MQTT2_DVES_00388B siriName Schrank
attr MQTT2_DVES_00388B webCmd pct

setstate MQTT2_DVES_00388B off
setstate MQTT2_DVES_00388B 2021-02-23 22:29:23 CT set
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Fade off
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Heap 27
setstate MQTT2_DVES_00388B 2021-04-13 21:23:50 Hostname Schrank-***
setstate MQTT2_DVES_00388B 2021-04-13 21:23:50 IPAddress ***
setstate MQTT2_DVES_00388B 2021-04-13 23:34:37 LWT Online
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 LedTable on
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 LoadAvg 19
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 MqttCount 2
setstate MQTT2_DVES_00388B 2021-04-13 21:23:50 RestartReason External System
setstate MQTT2_DVES_00388B 2021-01-24 20:03:56 SaveData on
setstate MQTT2_DVES_00388B 2021-02-23 22:41:44 SetOption20 on
setstate MQTT2_DVES_00388B 2021-01-24 20:03:56 SetOption26 on
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Sleep 50
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 SleepMode Dynamic
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Speed 1
setstate MQTT2_DVES_00388B 2021-01-24 20:03:55 StateText1 off
setstate MQTT2_DVES_00388B 2021-01-24 20:03:55 StateText2 on
setstate MQTT2_DVES_00388B 2021-01-24 20:03:55 StateText3 toggle
setstate MQTT2_DVES_00388B 2021-01-24 20:03:56 StateText4 hold
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Time 2021-04-19T13:24:02
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Uptime 5T17:00:21
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 UptimeSec 493221
setstate MQTT2_DVES_00388B 2021-04-13 21:23:50 WebServerMode ***
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_AP 1
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_BSSId ***
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_Channel **
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_Downtime 0T00:00:03
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_LinkCount 1
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_RSSI 90
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_SSId ***
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 Wifi_Signal -55
setstate MQTT2_DVES_00388B 2021-01-24 20:03:55 attrTemplateVersion 20200522 or prior
setstate MQTT2_DVES_00388B 2021-04-19 14:24:02 pct 39
setstate MQTT2_DVES_00388B 2021-04-19 00:11:11 state off
setstate MQTT2_DVES_00388B 2021-04-13 23:35:25 subscriptions SmartHome/Wohnzimmer/Schrank/cmnd/# SmartHome/Wohnzimmer/tasmotas/cmnd/# cmnd/DVES_00388B_fb/#



Danke + VG
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Damian

Die Beispiele stammen aus der Zeit als set_Exec keine Wiederholung konnte. Heute ist es besser die Wiederholung (Schleife) dem set_Exec-Befehl zu überlassen.

Schau dir die Beispiele mit Wiederholung hier an: https://fhem.de/commandref_DE.html#DOIF_set_Exec

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