Seite 1 von 2

MQTT2 IR-Codes senden

Verfasst: 13. Sep 2019 15:13
von PJH
Hallo miteinander,

ich benutze openHAB2, 2.5.0.M2 mit eingebautem MQTT-Binding (David Graeff).

Wer kann mir wohl sagen, wie ich IR-Codes direkt zu einem Gerät (YTF IR Bridge Modul, mit Tasmota als Sonoff geflasht (von Pearl)) senden kann.

Mit MQTT.fx bekomme ich das hin, weiß aber nicht wie mit openHAB.

Vielen Dank und einen schönen Gruß.

PJH

Re: MQTT2 IR-Codes senden

Verfasst: 29. Sep 2019 18:30
von PJH
Kann mir denn niemand eine Hinweis geben?

Re: MQTT2 IR-Codes senden

Verfasst: 29. Sep 2019 19:27
von sihui
PJH hat geschrieben: 29. Sep 2019 18:30 Kann mir denn niemand eine Hinweis geben?
https://community.openhab.org/t/solved- ... v2-5/64419

Re: MQTT2 IR-Codes senden

Verfasst: 4. Okt 2019 19:59
von PJH
Danke.

Ich schließe aus den Beiträgen, dass man den IR-Code mit Openhab-MQTT(2) nicht direkt senden kann?

Schöne Grüße. PJH

Re: MQTT2 IR-Codes senden

Verfasst: 5. Okt 2019 03:14
von eiGelbGeek
PJH hat geschrieben: 4. Okt 2019 19:59 Danke.

Ich schließe aus den Beiträgen, dass man den IR-Code mit Openhab-MQTT(2) nicht direkt senden kann?

Schöne Grüße. PJH
Ja aber die Lösung steht doch direkt im 2ten Post des Links .... ;-)

Wenn du ein Lötkolben hast, kannst du dir das Dingen aber auch sehr einfach selbst bauen ..... WeMos Mini D1 und eine IR Diode und paar Zeilen Arduino Code :-) Man könnte auch gucken ob man den Code nicht sogar direkt auf dein vorhandenes Gerät flashen kann.... müsste man sich mal genauer anschauen ... denke schon das das gehen würde.

Hier mal ein Beispiel (für einen Teufel Subwoofer) Den Code kann man ganz bestimmt noch optimieren und besser schreiben :ugeek:
Ich habe einen WeMos direkt in den Subwoofer eingebaut und die IR Diode vor dem IR Empfänger geklebt (Heißkleber und natürlich direkt im Gehäuse) und schon ist der Subwoofer "Smart"

Code: Alles auswählen

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>

const char* ssid = "DEINE-WLAN-SSID";
const char* password = "WLAN-PASSWORT";

const char* mqtt_server = "192.168.1.200";

#define IR_LED 4  // (D2)

IRsend irsend(IR_LED);

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {

  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.println();
  //Message
  byte* p = (byte*)malloc(length);
  std::string message ( reinterpret_cast<char const*>(payload), length ) ;
  if (strcmp(topic,"/mqtt_topic/wohnzimmer/subwoofer/ir/Volume_Up/command")==0){
    if (message == "1") {
      irsend.sendNEC(IRCODE, 32);
      client.publish("/mqtt_topic/wohnzimmer/subwoofer/ir/Volume_Up/state","0");
      Serial.println("Volume_Up");
    }
  }
  if (strcmp(topic,"/mqtt_topic/wohnzimmer/subwoofer/ir/Volume_Down/command")==0){
    if (message == "1") {
      irsend.sendNEC(IRCODE, 32);
      client.publish("/mqtt_topic/wohnzimmer/subwoofer/ir/Volume_Down/state","0");
      Serial.println("Volume_Down");
    }
  }
  if (strcmp(topic,"/mqtt_topic/wohnzimmer/subwoofer/ir/140Hz/command")==0){
    if (message == "1") {
      irsend.sendNEC(IRCODE, 32);
      client.publish("/mqtt_topic/wohnzimmer/subwoofer/ir/140Hz/state","0");
      Serial.println("140Hz");
    }
  }
  if (strcmp(topic,"/mqtt_topic/wohnzimmer/subwoofer/ir/110Hz/command")==0){
    if (message == "1") {
      irsend.sendNEC(IRCODE, 32);
      client.publish("/mqtt_topic/wohnzimmer/subwoofer/ir/110Hz/state","0");
      Serial.println("110Hz");
    }
  }
  if (strcmp(topic,"/mqtt_topic/wohnzimmer/subwoofer/ir/80Hz/command")==0){
    if (message == "1") {
      irsend.sendNEC(IRCODE, 32);
      client.publish("/mqtt_topic/wohnzimmer/subwoofer/ir/80Hz/state","0");
      Serial.println("80Hz");
    }
  }
  if (strcmp(topic,"/mqtt_topic/wohnzimmer/subwoofer/ir/50Hz/command")==0){
    if (message == "1") {
      irsend.sendNEC(IRCODE, 32);
      client.publish("/mqtt_topic/wohnzimmer/subwoofer/ir/50Hz/state","0");
      Serial.println("50Hz");
    }
  }
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "WeMos_TeufelSubwoofer_IR";
    // Attempt to connect
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      client.subscribe("/mqtt_topic/wohnzimmer/subwoofer/ir/Volume_Up/command");
      client.subscribe("/mqtt_topic/wohnzimmer/subwoofer/ir/Volume_Down/command");
      client.subscribe("/mqtt_topic/wohnzimmer/subwoofer/ir/140Hz/command");
      client.subscribe("/mqtt_topic/wohnzimmer/subwoofer/ir/110Hz/command");
      client.subscribe("/mqtt_topic/wohnzimmer/subwoofer/ir/80Hz/command");
      client.subscribe("/mqtt_topic/wohnzimmer/subwoofer/ir/50Hz/command");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  irsend.begin();
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
      setup_wifi();
  }
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

Re: MQTT2 IR-Codes senden

Verfasst: 5. Okt 2019 03:21
von eiGelbGeek
Sollte gehen... letzter Satz in diesen Artikel xD

https://www.heise.de/ct/artikel/Pearls- ... 05906.html

Kostet derzeit 19,95 bei Pearl ... ist mir aber zu teuer um es nur für dich zu testen... ich habe ja kein Anwendungsfall dafür. :mrgreen:

Re: MQTT2 IR-Codes senden

Verfasst: 6. Okt 2019 21:11
von madmike
Ich nutze den Broadlink black bean, der ist super und läßt sich wunderbar in Openhab intrigieren.
https://www.amazon.de/gp/product/B07DPH ... UTF8&psc=1
mfg
Madmike

Re: MQTT2 IR-Codes senden

Verfasst: 8. Okt 2019 11:43
von Mowgli
Hallo,

ich habe das in 2 Post vorher erwähnte Pearl Teil. Habe Tasmota auf den ESP 8266 gepackt und sende jetzt damit beliebige IR Codes per MQTT raus.
Funktionert perfekt.

Grüße

Mowgli

Re: MQTT2 IR-Codes senden

Verfasst: 8. Okt 2019 12:07
von PJH
Hallo, danke erst einmal für die nun regen Antworten.
Ich bin noch nicht dazu gekommen, mir alles anzuschauen oder gar auszuprobieren.
Aber @Mowgli, per MQTT(.fx) aussenden kann ich die Codes auch, aber wie aus openHAB2?

Mein Problems ist folgendes. Ich möchte die batteriebetriebenen Krinner-Kerzen gerne per openHab2 an- und ausschalten.

Ebenso möchte ich meine (ältere) Revox Anlage über openHAB steuern.

Daran hat sich bereits Logitec (mit der Fernbedienung Harmony Elite) die Zähne ausgebissen. Sie bekommen die Codes nicht auf ihre Fernbedienung, da der Krinner-Kerzenhersteller (China), als auch Revox ein unbekanntes Protokoll verwendet.

Ich habe mir nun gedacht, das mit der Pearl-IR-Fernbedienung zu realisieren, da ich darüber in der c'T gelesen habe (habe auch Kontakt aufgenommen, aber viel kommt da auch nicht), aber auch die erkennt die verwendeten Protokolle nicht.

@eiGelbGeek, @madmike: Ich muss mir eure Vorschläge erst noch anschauen, bin noch nicht dazu gekommen.

Danke nochmals und schöne Grüße. PJH

Re: MQTT2 IR-Codes senden

Verfasst: 8. Okt 2019 18:19
von udo1toni
Eine kurze Recherche im Internet bringt den Begriff ITT-Protokoll für Revox zutage, weiterhin die Information, dass auch andere Systeme damit Probleme haben :)

Es gäbe eine pragmatische Bastellösung, nämlich (z.B. über ebay) eine Zweitfernbedienung zu kaufen und diese so zu ertüchtigen, dass sie z.B. mittels MQTT alle Befehle per Hardware senden kann.
Zumindest für die Krinner Weihnachtsbeleuchtung wird das auf jeden Fall funktionieren, da dort nur eine Taste "gedrückt" werden muss, es reicht ein ESP8266 plus evtl. noch ein paar Transistoren und Widerstände.

Bei Revox wird es vermutlich aufwändig werden, diesen Weg zu gehen, dort sind es ja erheblich mehr Tasten.
Früher (TM) gab es bei Revox oftmals auch eine Schnittstelle, um die Geräte mit Kabel zu steuern. Falls Deine Anlage entsprechende Anschlüsse bietet, wäre das vielleicht leichter zu realisieren.