ESP(Easy) IRSEND RAW

Begonnen von Pythonf, 01 Mai 2017, 22:16:41

Vorheriges Thema - Nächstes Thema

Pythonf

Hallo FHEM-Freunde,

Ich wollte fragen ob es eine Anleitung gibt, wie man einen IR-Befehl aufzeichnen und per ESP8266 und IR-LED verwenden kann. Ich habe mich schon ein wenig informiert IRrecvDumpV2 bereits erfolgreich verwendet um einen Befehl aufzuzeichnen. Es handelt sich um eine Dunstabzugshaube.
Encoding  : UNKNOWN
Code      : DBC8CB72 (32 bits)
Timing[7]:
     +1250, -1750     +1250, -1750     +1200, -1800     +1200
unsigned int  rawData[7] = {1250,1750, 1250,1750, 1200,1800, 1200};  // UNKNOWN DBC8CB72

Im ESPEasy Forum gibt es bereits Ansätze RAW Code zu verschicken, nur leider bin ich nicht ganz dahinter gekommen, wie das ganze funkioniert:
Ein Beispiel lautet hier
http://192.168.1.180/control?cmd=IRSEND,RAW,VS58KA58L25AMKA5AH2KAHAH2K8L,38,400,400
Funktioniert dies bereits auf FHEM herraus mit dem irsend?
Ich würde mich sehr freuen, wenn mir jemand weiter helfen kann.

Beste Grüße
Fabian

dev0

Zitat von: Pythonf am 01 Mai 2017, 22:16:41
Ein Beispiel lautet hier
http://192.168.1.180/control?cmd=IRSEND,RAW,VS58KA58L25AMKA5AH2KAHAH2K8L,38,400,400
Funktioniert dies bereits auf FHEM herraus mit dem irsend?
Wenn das verwendete Irsend Plugin die gezeigte Syntax unterstützt, dann kannst Du die URL natürlich auch mit FHEM nutzen/aufrufen: ESPEasy Bridge, MQTT(?), httpUtils, curl/wget via system call, ...

tklein

ist der RAW-Code richtig codiert? Ich habe mir einen eigenen Sketch dafür gebastelt. Vorher die Codes mit/ohne Protokoll aufgenommen. Da ich einen Code allerdings ncht senden konnte, bin ich auf den Broadlink RM3 umgestiegen. Wenn ich von dem eher gewusst hätte, hätte ich mir viel Zeit/Geld gespart. Da gibt es ein sogar ein Modul für, welches wir gerade am testen sind. So sieht das ganze doch um einiges besser aus.

Hier einige Infos: https://forum.fhem.de/index.php/topic,38231.0.html

Falls du Interesse an dem Sketch hast, gib einfach Info.

Gruß
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

marko67

Guten Morgen,

Mein Ziel war es meine Klimaanlage von Mitsubishi über FHEM mit IR und EspEasy zu steuern. Ich habe bereits vor Jahren mit dem Raspberry meine Anlage gesteuert (Codes damals über Lirc) später wollte ich es mit Mysensors versuchen, nun wollte ich es einfach über Wifi tun.


Problem war und ist, dass die Fernbedienung (FB) nur diese RAW Codes ausgibt. Es gibt verschiedene Ansätze hier und auch im EspEasy Forum, allerdings kam ich damit nicht weiter bzw. zum Ziel. Meine FB ,,merkt" sich die alten Einstellungen. D. h. ich benötige eigentlich nur den On oder Off Button. Mit On startet sie mit 22°-AutoSpeedFan-3DLuftrichtung.


Da ich nur Hobby-Bastler bin, benötige ich einen Weg (Code) dies einfach und nachvollziehbar umzusetzen. Dies möchte ich hier kurz vorstellen für alle die einen Weg suchen RAW Code zu senden. Vielleicht könnt ihr es auch für Euch anwenden.


Mein Code, den ich zuerst von Raspberry auf Mysensors übertragen hatte, sah wie folgt aus:

#include <IRremote.h>

IRsend irsend;
unsigned int an[180] = {3250,1450,500,300,450,1100,500,300,450,350,450,1100,500,300,450,1100,500,300,500,300,450,1100,500,1050,500,1100,500,300,450,1100,450,350,500,1050,500,1100,450,1100,500,300,450,300,500,300,500,300,450,1100,500,1100,450,300,500,1100,450,1100,450,350,500,300,450,1100,500,300,500,300,450,1100,450,350,450,300,500,1100,450,1100,500,300,500,1050,500,1100,450,1100,450,1150,450,1100,450,1150,450,1100,500,1050,500,1100,450,300,500,300,500,300,450,350,450,300,500,300,450,350,450,300,500,1100,500,1050,500,1100,450,1100,500,300,450,350,450,1100,450,1100,500,1100,500,300,450,300,450,350,500,1050,500,1100,500,300,450,300,500,300,450,350,450,1100,500,1050,500,300,500,300,450,1100,500,1100,500,1050,450,1150,450,300,500,300,500,1050,500,1100,500,300,450,300,500,300,500,};
unsigned int aus[180] = {3200,1500,450,300,500,1100,450,300,500,300,500,1050,500,300,500,1100,450,300,500,300,500,1050,500,1100,450,1100,500,300,500,1050,500,300,450,1150,450,1100,450,1100,500,300,500,300,500,300,450,300,500,1100,450,1100,500,300,500,1050,450,1150,450,300,500,300,450,1150,450,300,500,300,450,1100,500,300,450,350,450,1100,500,1100,450,300,500,1100,450,1100,450,1150,450,1100,450,1100,500,1100,500,1050,500,1100,450,1100,500,300,500,300,450,300,500,300,450,350,450,300,500,300,450,350,450,1100,500,1100,450,1100,450,1150,450,300,500,300,500,1050,500,1100,450,1100,500,300,450,350,450,300,500,1100,450,1100,500,300,500,300,450,300,500,300,500,1050,500,1100,450,1100,500,300,500,1050,500,1100,450,1100,500,1100,450,300,500,300,450,350,500,1050,500,300,500,300,450,300,500,};
void setup()
{
  Serial.begin(9600);
}

void loop() {
  //if (Serial.read() != -1) //{
    for (int i = 0; i < 3; i++) {
      irsend.sendRaw(an,180,38);
      delay(1000);
      irsend.sendRaw(aus,180,38);
      delay(5000);
    //}
  }
}






Ich habe in EspEasy im "Plugin_035" folgendes abgeändert:

//#######################################################################################################
//#################################### Plugin 035: Output IR ############################################
//#######################################################################################################

#include <IRremoteESP8266.h>
IRsend *Plugin_035_irSender;

#define PLUGIN_035
#define PLUGIN_ID_035         35
#define PLUGIN_NAME_035       "Infrared Transmit"

boolean Plugin_035(byte function, struct EventStruct *event, String& string)
{
  boolean success = false;

  switch (function)
  {
    case PLUGIN_DEVICE_ADD:
      {
        Device[++deviceCount].Number = PLUGIN_ID_035;
        Device[deviceCount].Type = DEVICE_TYPE_SINGLE;
        Device[deviceCount].SendDataOption = false;
        break;
      }

    case PLUGIN_GET_DEVICENAME:
      {
        string = F(PLUGIN_NAME_035);
        break;
      }

    case PLUGIN_GET_DEVICEVALUENAMES:
      {
        break;
      }

    case PLUGIN_INIT:
      {
        int irPin = Settings.TaskDevicePin1[event->TaskIndex];
        if (Plugin_035_irSender == 0 && irPin != -1)
        {
          addLog(LOG_LEVEL_INFO, "INIT: IR TX");
          Plugin_035_irSender = new IRsend(irPin);
          Plugin_035_irSender->begin(); // Start the sender
        }
        if (Plugin_035_irSender != 0 && irPin == -1)
        {
          addLog(LOG_LEVEL_INFO, "INIT: IR TX Removed");
          delete Plugin_035_irSender;
          Plugin_035_irSender = 0;
        }
        success = true;
        break;
      }

    case PLUGIN_WRITE:
      {
        String IrType;
        unsigned long IrCode;
        unsigned int IrBits;
        char command[80];
        command[0] = 0;
        char TmpStr1[80];
        TmpStr1[0] = 0;
        string.toCharArray(command, 80);

        [color=red]unsigned int an[180] = {3250,1450,500,300,450,1100,500,300,450,350,450,1100,500,300,450,1100,500,300,500,300,450,1100,500,1050,500,1100,500,300,450,1100,450,350,500,1050,500,1100,450,1100,500,300,450,300,500,300,500,300,450,1100,500,1100,450,300,500,1100,450,1100,450,350,500,300,450,1100,500,300,500,300,450,1100,450,350,450,300,500,1100,450,1100,500,300,500,1050,500,1100,450,1100,450,1150,450,1100,450,1150,450,1100,500,1050,500,1100,450,300,500,300,500,300,450,350,450,300,500,300,450,350,450,300,500,1100,500,1050,500,1100,450,1100,500,300,450,350,450,1100,450,1100,500,1100,500,300,450,300,450,350,500,1050,500,1100,500,300,450,300,500,300,450,350,450,1100,500,1050,500,300,500,300,450,1100,500,1100,500,1050,450,1150,450,300,500,300,500,1050,500,1100,500,300,450,300,500,300,500,};
        unsigned int aus[180] = {3200,1500,450,300,500,1100,450,300,500,300,500,1050,500,300,500,1100,450,300,500,300,500,1050,500,1100,450,1100,500,300,500,1050,500,300,450,1150,450,1100,450,1100,500,300,500,300,500,300,450,300,500,1100,450,1100,500,300,500,1050,450,1150,450,300,500,300,450,1150,450,300,500,300,450,1100,500,300,450,350,450,1100,500,1100,450,300,500,1100,450,1100,450,1150,450,1100,450,1100,500,1100,500,1050,500,1100,450,1100,500,300,500,300,450,300,500,300,450,350,450,300,500,300,450,350,450,1100,500,1100,450,1100,450,1150,450,300,500,300,500,1050,500,1100,450,1100,500,300,450,350,450,300,500,1100,450,1100,500,300,500,300,450,300,500,300,500,1050,500,1100,450,1100,500,300,500,1050,500,1100,450,1100,500,1100,450,300,500,300,450,350,500,1050,500,300,500,300,450,300,500,};
[/color]

        String tmpString = string;
        int argIndex = tmpString.indexOf(',');
        if (argIndex) tmpString = tmpString.substring(0, argIndex);

        if (GetArgv(command, TmpStr1, 2)) IrType = TmpStr1;
        if (GetArgv(command, TmpStr1, 3)) IrCode = strtoul(TmpStr1, NULL, 16); //(long) TmpStr1
        if (GetArgv(command, TmpStr1, 4)) IrBits = str2int(TmpStr1);

        if (tmpString.equalsIgnoreCase("IRSEND") && Plugin_035_irSender != 0)
        {
          success = true;
         

          if (IrType.equalsIgnoreCase("NEC")) Plugin_035_irSender->sendNEC(IrCode, IrBits);
          if (IrType.equalsIgnoreCase("JVC")) Plugin_035_irSender->sendJVC(IrCode, IrBits, 2);
          if (IrType.equalsIgnoreCase("RC5")) Plugin_035_irSender->sendRC5(IrCode, IrBits);
          if (IrType.equalsIgnoreCase("RC6")) Plugin_035_irSender->sendRC6(IrCode, IrBits);
          if (IrType.equalsIgnoreCase("SAMSUNG")) Plugin_035_irSender->sendSAMSUNG(IrCode, IrBits);
          if (IrType.equalsIgnoreCase("SONY")) Plugin_035_irSender->sendSony(IrCode, IrBits);
          if (IrType.equalsIgnoreCase("PANASONIC")) Plugin_035_irSender->sendPanasonic(IrBits, IrCode);

          [color=red]if (IrType.equalsIgnoreCase("Kliman")) Plugin_035_irSender->sendRaw(an,180,38);
          if (IrType.equalsIgnoreCase("Klimaus")) Plugin_035_irSender->sendRaw(aus,180,38);[/color]

          addLog(LOG_LEVEL_INFO, "IR Code Sent");
          if (printToWeb)
          {
            printWebString += F("IR Code Sent ");
            printWebString += IrType;
            printWebString += F("<BR>");
          }

         
        }
        break;
      }
  }
  return success;
}






Nun kann ich über: http://IP/control?cmd=IRSEND,Kliman oder http://IP/control?cmd=IRSEND,Klimaus entsprechend steuern.

Ich weiß das ist nicht die große Lösung aber für mich ein ausreichender Erfolg, da wir mehr Einstellungen auch nicht über die FB tätigen.





Gruß Marko

tschimi

Hi,
hat das noch mal jemand weiter verfolgt? ;-)
Lg, tschimi

Pythonf

Zitat von: tschimi am 14 Januar 2019, 13:13:26
Hi,
hat das noch mal jemand weiter verfolgt? ;-)
Lg, tschimi
Ich hab mich dazu entschieden, einen Broadlink RM mini 3 zu kaufen, dieser hat die Funktionsweise schon implementiert und ist entsprechend auch noch kostengünstig.

Lg
Fabian