« Antwort #4 am: 12 Januar 2021, 21:31:08 »
Hi Leute...
wieder ein Update dazu:
1. Auf dem Arduino Nano Läuft das hier:#include <Wire.h>
#include <RBDdimmer.h>//
//#define USE_SERIAL SerialUSB //Serial for boards whith USB serial port
#define USE_SERIAL Serial#include <RBDdimmer.h>//
//#define USE_SERIAL SerialUSB //Serial for boards whith USB serial port
#define USE_SERIAL Serial
#define outputPin 4
#define zerocross 2 // for boards with CHANGEBLE input pins (in my case Nano)
dimmerLamp dimmer(outputPin); //initialase port for dimmer for MEGA, Leonardo, UNO, Arduino M0, Arduino Zero
char DimmerStartValue = 50;
char DimmerValue;
void setup() {
Wire.begin(8); // join i2c bus with address #8
Wire.onReceive(receiveEvent); // register event
USE_SERIAL.begin(9600); // start serial for output
dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE)
dimmer.setPower(DimmerStartValue);
USE_SERIAL.println("Dimmer Program is starting...");
}
void receiveEvent(int howMany) {
DimmerValue = Wire.read(); // receive byte as a character
dimmer.setPower(DimmerValue); // setPower(0-100%);
Serial.println(DimmerValue); // print the integer
}
void loop() {
// nur zum schauen ob es läuft
//USE_SERIAL.println("Dimmer value %d", DimmerValue);
USE_SERIAL.print(dimmer.getPower());
USE_SERIAL.println("%");
delay(1000);
// nur zum schauen ob es läuft
}
2. In FHEM habe ich ein <readingsProxy> device mit dem Namen <Ardu_dim>defmod Ardu_dim readingsProxy myI2C:writeByte
attr Ardu_dim room Entwicklung
attr Ardu_dim setFn {($CMD eq "100")?"writeByte 08 64":"writeByte 08 ". sprintf("%.0f",(64/100 * $CMD))}
attr Ardu_dim setList state:slider,0,5,100
attr Ardu_dim webCmd state
Damit kann ich die "Birne" dimmen 
Die setFn habe ich aus diesem Tread gestohlen und angepasst:
https://forum.fhem.de/index.php?topic=89444.0sowohl das funktioniert:
attr Ardu_dim setFn {($CMD eq "100")?"writeByte 08 64":"writeByte 08 ". sprintf("%.0f",(64/100 * $CMD))}
als auch das:
{ if ($CMD eq "100") {
fhem ("set $DEVICE writeByte 08 64");
} elsif ($CMD =~ /^[1-9]\d*$/) {
fhem ("set $DEVICE writeByte 08 " . $CMD);
} else {
fhem ("set $DEVICE writeByte 08 00");
}
return undef
}
Es werden zwar nicht genau die Werte von device <Ardu_dim> 1:1 übergeben weil ich die Umrechnung bestimmt stümperhaft umgesetzt habe (64/100 * $CMD) aber es reicht mir.
Frage: Weiss Jemand wo + wie ich später ein realistisch ansprechendes dimmen abstimmen kann? Über die Formel oder gibt es Attribute oder besser doch im Arduino Code?Ich mache jetzt erst mal mit dem Arduino Code weiter um alle 4 Ausgänge ansteuern zu können.
VG
Alex

Gespeichert
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,