[Gelöst] Schalten mit IR code

Begonnen von Stargrove1, 14 Januar 2018, 10:24:04

Vorheriges Thema - Nächstes Thema

Stargrove1

Ich habe folgendes Problem, ich möchte mit einer IR Fernbedienung zB ein RGB Led schalten. Hardware ist ein D1 Mini mit TSOP4838 Empfänger und einem RGB Treiber, als sw läuft ESP Easy. Die Codes der FB lesen funktioniert, im Log erscheint zB:

2018-01-14 10:18:32 ESPEasy ESPEasy_ESP_Easy_IR_RX IR: 16236607

Nun möchte ich damit zB die angeschlossene RGB Led schalten, dies geht mit dem Befehl:

set ESPEasy_ESP_Easy_TvBeleuchtung rgb ffffff

Nun scheitere ich daran beides zu verknüpfen, ich habe versucht ein notify anzulegen:

ESPEasy_ESP_Easy_IR_RX:IR:16236607 set ESPEasy_ESP_Easy_TvBeleuchtung rgb ffffff

Leider reagiert die RGB Led nicht, ich habe versucht die ":" mit "." und Leerzeichen zu ersetzen da ich mir nicht sicher war ob der Aufbau korrekt ist, allerdings ohne Erfolg.

Die Frage an euch, wie muss der Befehl korrekt aufgebaut werden? Wäre Doif besser geeignet? Und gibt es eine sinnvolle Lösung eine Art Tabelle anzulegen welches Kommando auf welchen ir code ausgelöst werden soll oder müssen für jeden Befehl notifys angelegt werden?

Danke

MadMax-FHEM

Gehe in den EventMonitor warte bis der Event kommt (also drücke die FB), markiere die Zeile, dann create/modify und lass dir das Notify anlegen.
Dann noch den set-Befehl anfügen, fertig...

Ansonsten keinen Auszug aus dem Log, besser aus dem EventMonitor...
...aber wenn du den postest hast du ja eigentl. bereits das Ergebnis... ;)

Kurz, da nur Handy...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Stargrove1

Mit log meinte ich den Event Monitor, allerdings war ich mir der sehr praktischen Funktion "create/modify" noch nicht bewusst, danke für den Hinweis! Damit habe ich den Notify nun korrigiert bekommen (der Punkt hat gefehlt, tu mich noch etwas schwer mit dem Syntax) und kann damit schalten:

ESPEasy_ESP_Easy_IR_RX:IR:.16236607 set ESPEasy_ESP_Easy_TvBeleuchtung rgb ffffff

Zu meinem zweiten Teil der Frage, ich möchte nun verschiedene Tasten der FB drücken, um unterschiedliche Aktionen auszulösen, kann ich dies mit einem notify in dem ich mehrere codes mit entsprechenden Befehlen aufliste? Benötigt man dazu eine art switch case funktion in perl oder geht es auch einfacher?

MadMax-FHEM

Ich sag mal so:

entweder für jeden Code ein passendes Notify, wie das geht weißt du ja jetzt ;)

Oder ein sehr generelles Notify und dann eben per if etc. (switch case sollte in einer Perl-Sub in myUtils auch gehen, noch nicht getestet) die einzelnen Fälle auseinander tüteln und das entsprechende Gerät schalten/Befehl ausführen.

Würde ich aber dann (wie geschrieben) in einer "ausgelagerten" Sub in myUtils tun...

https://wiki.fhem.de/wiki/99_myUtils_anlegen

define nNotify notify regex {myFunction($EVENT)} (oder $EVTPART0, $EVTPART1, ...)

Also praktisch wie du dir gedacht hast ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Stargrove1

Danke für die Info, dann weiß ich jetzt in welche Richtung ich gehen muss, um es vernünftig umzusetzen. Mal schauen ob es ohne Hilfe klappt, sonst meld ich mich hier noch mal  ;)

MadMax-FHEM

Gerne.

Viel Spaß noch!

Dann diesen Thread auf gelöst stellen, umbenennen des ersten Posts in beispielsweise: [gelöst] Schalten mit IR code

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Stargrove1

Hallo nochmal,

ich habe ein notify angelegt wie beschrieben

define IR_notify notify ESPEasy_ESP_Easy_IR_RX:.* {Ir2cmd($EVENT)}

Dieses beinhaltet somit den empfangenen IR code, zum Test habe ich es an einen dummy gesendet und konnte dort die code Änderung sehen.

In der 99_myUtils habe ich folgende Funktion erstellt
sub Ir2cmd($) {

my $IrCode = @_;

my %command = (
"16236607", "set ESPEasy_ESP_Easy_TvBeleuchtung rgb ffffff",
"16203967", "set ESPEasy_ESP_Easy_TvBeleuchtung rgb 000000",
);

fhem ("$command{$IrCode}");
}


Leider tut sich nichts, wo liegt hier mein denkfehler? Kann mir jemand mit dem Syntax helfen?

MadMax-FHEM

#7
Ich würde zunächst mal Logausgaben machen:

Log3(undef, 3, "Das ist die Logausgabe");

Dann siehst du, ob das Notify getriggert wird und wenn du ausgibst was "rein kommt" (mache ich immer so, also erst mal "nur" eine Logausgabe mit den Parametern), dann auch "was dir zur Verfügung steht".

Ab und an mache ich dann weitere Logausgaben mit "errechneten" oder "abgefragten" Werten, ob auch die passen.
Wenn dann alles läuft kommentiere ich die wieder aus oder lösche sie.

D.h. du könntest auch:

Log3(undef, 3, "Ir2cmd Command: $command{$IrCode}");

ausgeben (hoffe das geht so), dann siehst du auch was an die "Funktion" fhem übergeben wird.

Und dann warum nicht ein (oder mehrere) "einfaches" if:


sub Ir2cmd($)
{
  my ($IrCode) = @_;

  Log3(undef, 3, "Ir2cmd IrCode $IrCode);

  if($IrCode eq "16236607")
  {
    fhem("set ESPEasy_ESP_Easy_TvBeleuchtung rgb ffffff");
  }

  if($IrCode eq "16203967")
  {
    fhem("set ESPEasy_ESP_Easy_TvBeleuchtung rgb 000000");
  }
}


und ob das 'my ($IrCode) = @_;' oder so wie bei dir auch geht 'my $IrCode = @_;' dazu kenne ich perl noch zu wenig.

Ich mache es wie in meinem Code-Schnipsel und das geht...

Ich benenne meine Subs auch immer my_Irgendwas damit ist (weitestgehend) ausgeschlossen, dass es die Funktion/Sub bereits gibt und somit "überschrieben" wird bzw. unklar ist was/welche ausgeführt wird...

Wie gesagt: so mache ich das. Aber ich bin bei weitem kein perl oder fhem "Guru"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Stargrove1

Danke Joachim, ich hatte die Klammer vergessen bei "my ($Ir2cmd)=@_;"

Nun funktioniert es wie erwartet mit:

sub Ir2cmd($) {

my ($IrCode) = @_;

# Debug Logausgabe
# Log3(undef, 3, "Ir2cmd IrCode $IrCode");

my %command = (
"16236607", "set ESPEasy_ESP_Easy_TvBeleuchtung rgb ffffff",
"16203967", "set ESPEasy_ESP_Easy_TvBeleuchtung rgb 000000",
"16195807", "set ESPEasy_ESP_Easy_TvBeleuchtung rgb ff0000",
"16228447", "set ESPEasy_ESP_Easy_TvBeleuchtung rgb 00ff00",
"16212127", "set ESPEasy_ESP_Easy_TvBeleuchtung rgb 0000ff",
);

fhem ("$command{$IrCode}");
}


Hier siehst du auch warum ich lieber die Liste nehmen wollte, ein weiteres Kommando lässt sich sehr übersichtlich aufnehmen. Lässt sich bestimmt auch noch weiter reduzieren durch herausnehmen des "set" und "device".

Danke für die Hilfe

MadMax-FHEM

Dachte ich mir schon ;)
Also das mit der Liste...

Dann viel Spaß noch, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)