Hallo FHEM-Community,
nachdem ich jetzt lange einfach nur Nutzer war, wollte ich auch mal etwas versuchen und habe jetzt schon viel Zeit investiert und freu mich das es bisher ganz gut lief.
Meine Lüftungsanlage die Danfoss Lüftung AirUnit konnte bereits mit einem Modul von Marcus42 über ZWAVE angesteuert werden, allerdings nicht alle Funktionen.
Mir war das jetzt nicht genug und ich habe geschaut, was kann man noch machen.
Im OpenHab Forum bin ich dann fündig geworden. Die Jungs da haben die Netzwerkkommunikation rausgefunden und dann ein Modul in Java geschrieben.
Ich habe mich dann bei mir umgehört und keinen gefunden, der JAVA in PERL umschreiben kann... also 1 Woche PERL lesen und "verstehen" und ich hatte ein PERL-Script, welches über div. sub()´s die Funktionen ansteuern kann.
Jetzt möchte ich das gern in einem FHEM Modul haben. Das ist meine nächste große Herausforderung. Ich kann zwar den meisten Code lesen und halbwegs verstehen, aber ich bin nicht so tief in der Programmierung zu Hause, dass ich mir größeres zutraue...
Anbei habe ich aber durch viel c+p aus dem LUXTRONIK und CofoAir Modulen mein eigenes gestrickt...
Aber ich habe viele Fragen und vor allem versteh ich nicht alle Bereiche des FHEM Modules...
Und ich weiß auch nicht ob überall das ExceptionHandling richtig ist...
Meine bitte wäre, ob erfahrene PERL/FHEM-Modulprogrammierer mir an der Stelle jetzt weiterhelfen könnten, damit das Modul fertig wird.
Ich bin mir nicht sicher ob das alles so funktionieren könnte und ob das Intervall richtig laufen würde und noch ein paar allgemeinere Frage...
viele habe ich auch im Code markiert...
allgemeine Fragen:
- Methodenaufrufe in Luxtronic.pm ohne "&" davor, geht das auch?
- Kann man einfach in seiner Prod-Instanz das Modul zum Testen reinwerfen? Nachteile wegen den globalen Hashwerten?
- gibt es eine Möglichkeit einen Block an Code nur bei verbose 5 auszuführen, speziell für get und set Methoden, die da ein paar Zeilen haben, fürs adv. Logging.
#Log3 $name, 5, "set $name $cmd $val";
#Log3 $name, 5, "recvData in AirUnit_setFanSpeed(): $tempresponse\n";
#my $tempresponse2 = unpack("H*" , substr($tempresponse,0,1)); #### Kann man das nur bei verbose = 5 ausführen?
#Log3 $name, 5, "recvunpackData in AirUnit_setFanSpeed(): $tempresponse2\n";
- Ist das intervallbasierte einlesen Einlesen der Werte, so korrekt... ist das Einlesen der READINGS überhaupt korrekt?!
- Sind die Rückgabewerte in den FHEM Sub´s korrekt?
- Wo sollte ich diese globalen Variablen speichern!? Ist das ok am Anfang des Moduls?
my @W_DISABLE_BOOST_AUTOMATIC = (0x01, 0x06, 0x17, 0x02); #### REGISTER_1_WRITE, BOOST_AUTOMATIC ON/OFF
Theoretisch könnten sie mittlerweile auch direkt in die sub()´s...
Folgende Sektionen haben ich gebaut:
$hash->{DefFn} = "AirUnit_Define"; # nur kopiert und angepasst
$hash->{UndefFn} = "AirUnit_Undefine"; # nur kopiert
$hash->{GetFn} = "AirUnit_Get"; # kopiert und angepasst, aber nicht wirklich benötigt, eher ein TEST
$hash->{SetFn} = "AirUnit_Set"; # selber erstellt
$hash->{AttrFn} = "AirUnit_Attr"; # nur kopiert und angepasst
$hash->{ReadFn} = "AirUnit_Read"; # selber erstellt, da werden die Readings erstellt
GET ist nur so zum testen von GET.. aktuell habe ich noch nichts außer evtl. einem manuellen Update der READINGS, was ich/man da bräuchte...
Es wäre toll, wenn ihr mir helfen könntet. Leider konnte ich das nicht im Developer-Bereich posten, daher hier.
VG
René
PS: PERLCRITIC habt ich auch mal genutzt, da sagt nur "Subroutine prototypes used" und "return" statement with explicit "undef"