ESP266 Alexa ohne Skill :-)

Begonnen von rr725, 02 April 2017, 12:18:29

Vorheriges Thema - Nächstes Thema

rr725

Geiles Teil ESP8266 - ESP1  WLAN, frisst kaum Strom. Sketch draufbrezeln und Alexa Suchlauf starten. Schon kann Alexa ohne Skill über HTTP Requests alles schalten was in FHEM- Homematic- Broadlink exisiert.

Lohnt sich- kann ich nur empfehlen.


tklein

Hi,

welchen Sketch genau?

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

rr725

Zitat von: tklein am 02 April 2017, 12:21:29
welchen Sketch genau?

hier mein bei"spiel" sketch .....

#include <ESP8266WiFi.h>

#include "WemoSwitch.h"
#include "WemoManager.h"
#include "CallbackFunction.h"
#include "ESP8266HTTPClient.h"
boolean connectWifi();

//on/off callbacks
void kinoOn();
void kinoOff();
void secondOn();
void secondOff();

char ssid[] = "SSID";     
char password[] = "Passwort"; 
WemoManager wemoManager;
WemoSwitch *kino = NULL;
WemoSwitch *second = NULL;

const int ledPin = BUILTIN_LED;

void setup()
{
  Serial.begin(115200);

  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

    Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);

  wemoManager.begin();
  kino= new WemoSwitch("kino", 80, kinoOn, kinoOff);
  second = new WemoSwitch("second kinos", 81, secondOn, secondOff);
  wemoManager.addDevice(*kino);
  wemoManager.addDevice(*second);

  pinMode(ledPin, OUTPUT);
  delay(10);
  digitalWrite(ledPin, HIGH);
}

void loop()
{
  wemoManager.serverLoop();
}

void kinoOn() {
    Serial.print("Switch 1 turn on ...");
  HTTPClient http; 

    http.begin("http://192.168.22.88:7474/?cmd=%7B%22api_id%22:1004,%22command%22:%22send_code%22,%22mac%22:%2234:ea:34:f4:37:3b%22,%22data%22:%22b20038010b29290e0e2b2a0d0e282a100e282a0d0e292c0d0e290e290e282c0d0e29290e0e2b2a0d0e280e291128290e0e292c0d0e0001ad0e282c0d0e29290e0e292c0d0e29290d0e2b2a0d0e290e291029290d0e292c0e0e282a0d0e290e2b0e29290d0e2c290d0e0001ad0e2b290e0e29290d1128290e0e292c0d0e29290d0e2910290e29290d0e292c0e0e282a0d11280e290e292c0d0e29290d0e0001b00d292a0d0e2b2a0d0e29290d0e292c0d0e29290d0e2c0e280e292c0e0d29290e0e282c0e0e280e290e292b0e0e29290d0f0001ae0f28290e0e2b290e0e282a100e282a0d0e2c290d0e290e280e292c0e0d292a0d0e2b290e0e290d2c0e282a0d0e292c0d0e0001ad0e282c0e0e29290d0e292c0d0e29290d0e2c290d0e290e2b0e29290e0e282c0d0e29290e0e280e2c0e282a0d0e2c290d0e0005dc%22%7D");

   int httpCode = http.GET();                                                                 


    if (httpCode > 0) { //Check the returning code

      String payload = http.getString();   
      Serial.println(payload);                   

    }
    http.end();   //Close connection
{
   Serial.println("Error in HTTP request");
}
http.end();
}

void kinoOff() {
    Serial.print("Switch 1 turn off ...");
     HTTPClient http; 

    http.begin("http://192.168.22.88:7474/?cmd=%7B%22api_id%22:1004,%22command%22:%22send_code%22,%22mac%22:%2234:ea:34:f4:37:3b%22,%22data%22:%22b20038010b29290e1029290e0e282a100e282a0d0e292c0d0e290e280e2c290d0e29290e0e2b290e0e280e2911280e290e280e2c0e0001ac0e292c0e0e28290e0e2b290e0e282a100e29290d0e290e281129290d0e292c0d0e29290e0e2b0e280e290e2911290d290e0001af0e29290d0e29290e11282a0d0e292c0d0e29290d0e2b0e290e29290d1129290d0e29290e0d2c0e290e280e2c0e280e290e0001af0e29290e0e2b290e0e28290e11282a0d0e282a0d11280e290e2929100e29290e0d292c0e0e280e290e2b0e290e280e290e0001b00d2929110e28290d0e292a100e282a0d0e282c0e0e290e280e2b2a0d0e29290d1129290d0e290e2b0e290e290e290e2b0e0001ac0e292c0e0d29290e0e2b290e0d292a100e282a0d0e290e2b0e29290d0e292c0e0d292a0c0e2c0e280e290e2c0e290e280e0005dc%22%7D");  //Specify request destination
    int httpCode = http.GET();                                                                 
 
    if (httpCode > 0) {

      String payload = http.getString();   
      Serial.println(payload);                   

    }
    http.end();   
{
   Serial.println("Error in HTTP request");
}
http.end();
}

void secondOn() {
    Serial.print("Schalter 2 an ...");
    digitalWrite(ledPin, LOW);
}

void secondOff() {
    Serial.print("Schalter 2 aus ...");
    digitalWrite(ledPin, HIGH);
}

Pythonf

Mehr als on/off lässt sich damit aber doch auch nicht schalten, oder? Gibt es irgendeinen Vorteil gegenüber der HA-Bridge?

rr725

Zitat von: Pythonf am 03 April 2017, 11:04:05
Mehr als on/off lässt sich damit aber doch auch nicht schalten, oder? Gibt es irgendeinen Vorteil gegenüber der HA-Bridge?
vorteil...ich brauche keinen rechner mehr auf dem ha bridge läuft.
da dieses kleine teil auch zwei gpio´s hat ist es also auch ein wlan sensor/schalter/taster. welche als input/output zu definieren sind.
da auf meinem raspberry, auf welchem fhem installiert ist, ebenfalls ein apache server läuft, kann ich die php scripte welche dort abgelegt sind
via url aufruf mit dem teil die scripte starten. damit ist quasi alles machbar was programmierbar ist.
hab gerade noch ein wenig an dem sketch geschraubt... es läßt sich grundsätzlich alles damit machen was ich in fhem/homematic definiert habe, da- wie mit einem http client halt http requests abgeschickt werden können.
hab gerade mit so einem chip meinen briefkasten beglückt, welcher mir nun eine nachricht auf´s handy schickt wenn jemand die klappe geöffnet hat.

Pythonf

Zitat von: rr725 am 03 April 2017, 13:59:28
vorteil...ich brauche keinen rechner mehr auf dem ha bridge läuft.
Läuft nicht sowieso die ganze Zeit ein Rechner für FHEM? Versteh mich nicht falsch ich habe etliche ESP8266 im Einsatz mit unter anderem ESPEasy und RGBWWCW-Controller aber ich seh die Vorteile immernoch nicht. Eine Frage hab ich aber noch. Hast du in deinem Briefkasten einen Stromanschluss? Oder betreibst du den ESP im deep-sleep mit Akkus?

Gruß
Fabian

rr725

Zitat von: Pythonf am 03 April 2017, 14:26:22
deep-sleep mit Akkus?

yes....mal sehen wie lange das teil reibungslos mit einer ladung auskommt.

Frank_Huber

Zitat von: rr725 am 03 April 2017, 13:59:28
da dieses kleine teil auch zwei gpio´s hat ist es also auch ein wlan sensor/schalter/taster. welche als input/output zu definieren sindpe geöffnet hat.
wenn du den Wemos wählst hatt er sogar 11 GPIOs. :-)

rr725

Zitat von: Frank_Huber am 03 April 2017, 14:57:11
wenn du den Wemos wählst hatt er sogar 11 GPIOs. :-)

wird wohl kommen..... den kleinen hatte ich im zehner pack beim günstigen chinamann bestellt, um mich langsam ran zu tasten.  schöne neue welt. :-)

sbiermann

Zitat von: rr725 am 03 April 2017, 14:54:53
yes....mal sehen wie lange das teil reibungslos mit einer ladung auskommt.
Laut dem Beispielcode wird der ESP vermutlich nur wenige Tage durch halten... Denn da ist nichts mit Deep Sleep. Ansonsten ist der ESP auch nicht für Akku Betrieb gedacht, ich hab das jetzt fast ein Jahr lang getestet in verschiedenen Szenarien.

rr725

Zitat von: sbiermann am 03 April 2017, 15:31:44
Laut dem Beispielcode wird der ESP vermutlich nur wenige Tage durch halten... Denn da ist nichts mit Deep Sleep. Ansonsten ist der ESP auch nicht für Akku Betrieb gedacht, ich hab das jetzt fast ein Jahr lang getestet in verschiedenen Szenarien.

sorry...o. g. sketch war mein erstversuch.   für meinen briefkasten hab ich was anderes "gebaut"
> Ansonsten ist der ESP auch nicht für Akku Betrieb gedacht
hm... im netz hab ich dazu div. andere gelesen. ebenso die brücke, welche gelötet werden muss für "Deep Sleep"
ob das teil nun für akkubetrieb gedacht ist, oder nicht..mir egal, wenn die rein rechnerische betriebsdauer erreicht wird bin ich zufrieden.

Rince

Mal unabhängig von dieser Variante, mit on/off lässt sich schon einiges schalten.
Ein Dummy, der ein DOIF triggert, welches z.B. ein Hörbuch resumed und pausiert über den LMS. Hab ich zwar noch nicht probiert, aber steht auf meiner ToDo Liste.
Für so ein 10 Stunden Teil sicherlich nicht unspannend.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

rr725

da ja hier auch geballtes wissen in sachen ccu vorhanden ist...

mal eine frage:
es gibt ja dieses projekt esp8266 mit alexa, funktioniert auch tagellos.
es ist eine wahnsinnig günstige alternative auf 433mhz basis.
nun würde ich gerne direkt vom esp einen http request an die ccu schicken.
hat da schon jemand was "gebaut" ?!
vielen dank im voraus......

rr725

Hab mich noch einmal intensiv damit befasst und nutze nun wemos d1 Minis. Hab meine Sketch dahingehend erstellt, dass die damit erstellten devices in Alexa erkannt und gesteuert werden können. (Auch 2 te generation)
Auch http requests werden damit via Alexa verschickt. Im Prinzip nun eine eierlegende wollmilchsau. 433mhz und jegliches über http steuerbaren Gerät ist damit nun ansprechbar. Also eine Bridge für 5€.  Und bisher hatte ich nicht das Problem, welches ich öfters mit na Bridge hatte ( das Gerät befindet sich nicht in ihrem Profil.)

pc1246

Moin
Magst Du Deinen Sketch noch einmal posten? Ich finde das sehr interessant! Steige aber noch nicht so ganz dahinter!
Danke und Gruss
Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

rr725

Mach ich, wenn ich mit meinem Laptop online bin.....

rr725

wie versprochen......

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <functional>
#include "switch.h"
#include "UpnpBroadcastResponder.h"
#include "CallbackFunction.h"

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

const char* fhem = "192.168.1.40";    //   fuer http request

boolean connectWifi();

//on/off callbacks
bool VentilatorOn();
bool VentilatorOff();
bool nachttisch_lampeOn();
bool nachttisch_lampeOff();
bool WohnzimmerlampeOn();
bool WohnzimmerlampeOff();
bool BadezimmerlampeOn();
bool BadezimmerlampeOn();
bool SchlafzimmerlampeOn();
bool SchlafzimmerlampeOff();
bool SternenhimmelOn();
bool SternenhimmelOff();
bool GutenMorgenOn();
bool GutenMorgenOff();
bool SchlafzimmerrolloOn();
bool SchlafzimmerrolloOff();

// vor dem flashen ändern
const char* ssid = "xxxxxxxx";
const char* password = "xxxxxxxx";

boolean wifiConnected = false;

UpnpBroadcastResponder upnpBroadcastResponder;

Switch *Buero = NULL;
Switch *Kueche = NULL;
Switch *WZ_Lampe = NULL;
Switch *Bad_Lampe = NULL;
Switch *Schlaf_Lampe = NULL;
Switch *Sternenh = NULL;
Switch *Gutenmorgen = NULL;
Switch *Schlafrollo = NULL;

bool isVentilatorOn = false;
bool isnachttisch_lampeOn = false;
bool isWohnzimmerlampeOn = false;
bool isBadezimmerlampeOn = false;
bool isSchlafzimmerlampeOn = false;
bool isSternenhimmelOn = false;
bool isGutenMorgenOn = false;
bool isSchlafzimmerrolloOn = false;

void setup()
{
  Serial.begin(115200);
   mySwitch.enableTransmit(16);
  // Initialise wifi connection
  wifiConnected = connectWifi();
 
  if(wifiConnected){
    upnpBroadcastResponder.beginUdpMulticast();
   
    // Define your switches here. Max 10
    // Format: Alexa invocation name, local port no, on callback, off callback
    Buero = new Switch("Ventilator", 80, VentilatorOn, VentilatorOff);
    Kueche = new Switch("nachttisch_lampe", 81,   nachttisch_lampeOn,   nachttisch_lampeOff);
    WZ_Lampe = new Switch("Wohnzimmerlampe", 82, WohnzimmerlampeOn, WohnzimmerlampeOff);
    Sternenh = new Switch("Sternenhimmel", 83, SternenhimmelOn, SternenhimmelOff);
    Gutenmorgen = new Switch("guten_morgen", 84, GutenMorgenOn, GutenMorgenOff);
    Bad_Lampe = new Switch("Badezimmerlampe", 85, BadezimmerlampeOn, BadezimmerlampeOff);
    Schlaf_Lampe = new Switch("Schlafzimmerlampe", 86, SchlafzimmerlampeOn, SchlafzimmerlampeOff);
    Schlafrollo = new Switch("Schlafzimmerrollo", 87, SchlafzimmerrolloOn, SchlafzimmerrolloOff);

   

    Serial.println("Adding switches upnp broadcast responder");
    upnpBroadcastResponder.addDevice(*Buero);
    upnpBroadcastResponder.addDevice(*Kueche);
    upnpBroadcastResponder.addDevice(*WZ_Lampe);
    upnpBroadcastResponder.addDevice(*Sternenh);
    upnpBroadcastResponder.addDevice(*Gutenmorgen);
    upnpBroadcastResponder.addDevice(*Bad_Lampe);
    upnpBroadcastResponder.addDevice(*Schlaf_Lampe);
    upnpBroadcastResponder.addDevice(*Schlafrollo);
  }
}

void loop()
{
if(wifiConnected){
      upnpBroadcastResponder.serverLoop();
     
      Kueche->serverLoop();
      Buero->serverLoop();
      WZ_Lampe->serverLoop();
      Sternenh->serverLoop();
      Gutenmorgen->serverLoop();
      Bad_Lampe->serverLoop();
      Schlaf_Lampe->serverLoop();
      Schlafrollo->serverLoop();
     
}
}

bool VentilatorOn() {
    Serial.println("Switch 1 turn on ...");
    mySwitch.sendTriState("F0F000FFFF0F");
    isVentilatorOn = true;   

      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(fhem, httpPort)) {
    Serial.println("connection failed");

  }
client.print(String("GET /Ventilator_an.php") + " HTTP/1.1\r\n" + "Host: " + fhem + "\r\n" "Connection: close\r\n\r\n");

return isVentilatorOn;
}

bool VentilatorOff() {
    Serial.println("Switch 1 turn off ...");
    mySwitch.sendTriState("F0F000FFFFF0");
    isVentilatorOn = false;
    return isVentilatorOn;
}

bool   nachttisch_lampeOn() {
    Serial.println("Switch 2 turn on ...");
    mySwitch.sendTriState("00000FF0FF11");
    isnachttisch_lampeOn = true;
    return isnachttisch_lampeOn;
}

bool   nachttisch_lampeOff() {
  Serial.println("Switch 2 turn off ...");
  mySwitch.sendTriState("00000FF0FFF0");

  isnachttisch_lampeOn = false;
  return isnachttisch_lampeOn;
}

bool WohnzimmerlampeOn() {
    Serial.println("Switch 2 turn on ...");
    mySwitch.sendTriState("F10000FF00F0");
    isWohnzimmerlampeOn = true;
    return isWohnzimmerlampeOn;
}

bool WohnzimmerlampeOff() {
  Serial.println("Switch 2 turn off ...");
  mySwitch.sendTriState("F10000FF00F0");

  isWohnzimmerlampeOn = false;
  return isWohnzimmerlampeOn;
}

bool SternenhimmelOn() {
    Serial.println("Switch 1 turn on ...");
    mySwitch.sendTriState("0F000FF0FF11");
    isSternenhimmelOn = true;   


      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(fhem, httpPort)) {
    Serial.println("connection failed");

  }
client.print(String("GET /Sternenhimmel_an.php") + " HTTP/1.1\r\n" + "Host: " + fhem + "\r\n" "Connection: close\r\n\r\n");

  return isSternenhimmelOn;
}

bool SternenhimmelOff() {
    Serial.println("Switch 1 turn off ...");
    mySwitch.sendTriState("0F000FF0FFF0");
    isSternenhimmelOn = false;

      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(fhem, httpPort)) {
    Serial.println("connection failed");

  }
client.print(String("GET /Sternenhimmel_aus.php") + " HTTP/1.1\r\n" + "Host: " + fhem + "\r\n" "Connection: close\r\n\r\n");

     return isSternenhimmelOn;
}

bool GutenMorgenOn() {
    Serial.println("Switch 1 turn on ...");
    isGutenMorgenOn = true;   
    WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(fhem, httpPort)) {
    Serial.println("connection failed");

  }
client.print(String("GET /guten_morgen.php") + " HTTP/1.1\r\n" + "Host: " + fhem + "\r\n" "Connection: close\r\n\r\n");

  return isGutenMorgenOn;
}

bool GutenMorgenOff() {
       isGutenMorgenOn = false;
    return isGutenMorgenOn;
}

bool   BadezimmerlampeOn() {
    Serial.println("Switch 2 turn on ...");
    mySwitch.send("001101110101111001000100");
    isBadezimmerlampeOn = true;
    return isBadezimmerlampeOn;
}

bool  BadezimmerlampeOff() {
  Serial.println("Switch 2 turn off ...");
  mySwitch.send("001101110101111001000100");

  isBadezimmerlampeOn = false;
  return isBadezimmerlampeOn;
}


bool   SchlafzimmerlampeOn() {
    Serial.println("Switch 2 turn on ...");
    mySwitch.send("001001000011111001000100");
    isSchlafzimmerlampeOn = true;
    return isSchlafzimmerlampeOn;
}

bool  SchlafzimmerlampeOff() {
  Serial.println("Switch 2 turn off ...");
  mySwitch.send("001001000011111001000100");

  isSchlafzimmerlampeOn = false;
  return isSchlafzimmerlampeOn;
}


bool   SchlafzimmerrolloOn() {
    Serial.println("Switch 2 turn on ...");
    mySwitch.sendTriState("F00F0F000FFF");
    isSchlafzimmerrolloOn = true;
    return isSchlafzimmerrolloOn;
}

bool   SchlafzimmerrolloOff() {
  Serial.println("Switch 2 turn off ...");
  mySwitch.sendTriState("F00F0F000FF0");

  isSchlafzimmerrolloOn = false;
  return isSchlafzimmerrolloOn;
}


boolean connectWifi(){
  boolean state = true;
  int i = 0;
 
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");
  Serial.println("Connecting to WiFi");

  Serial.print("Connecting ...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (i > 10){
      state = false;
      break;
    }
    i++;
  }
 
  if (state){
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  }
  else {
    Serial.println("");
    Serial.println("Connection failed.");
  }
 
  return state;
}

pc1246

Moin
Vielen Dank. Dann kann ich mir das naechste Woche mal ansehen! Bin derzeit verdienstreist in Italien, und am Wochenende ist Schuetzenfest, da wird es nichts mit fhem!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

pc1246

Hallo
Jetzt hatte ich kurz mal Zeit den Code anzusehen. Da ist mir einiges unklar, aber vielleicht sollte ich es zu Hause erstmal probieren!?
bool VentilatorOn() {
    Serial.println("Switch 1 turn on ...");
    mySwitch.sendTriState("F0F000FFFF0F");
    isVentilatorOn = true;   

      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(fhem, httpPort)) {
    Serial.println("connection failed");

  }
client.print(String("GET /Ventilator_an.php") + " HTTP/1.1\r\n" + "Host: " + fhem + "\r\n" "Connection: close\r\n\r\n");

return isVentilatorOn;
}

Das sieht irgendwie verwurschtelt aus, kommt spaeter noch einmal.
Das mit den ports erschliesst sich mir auch nicht, zudem die dann bei den verwurschtelten stumpf auf 80 sind!?
Und was hat es mit dem code bei send tristate auf sich? Woher kommt der?
Danke und Gruss
Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

rr725

Zitat von: pc1246 am 20 Juni 2018, 15:38:41
Hallo
Jetzt hatte ich kurz mal Zeit den Code anzusehen. Da ist mir einiges unklar, aber vielleicht sollte ich es zu Hause erstmal probieren!?
bool VentilatorOn() {
    Serial.println("Switch 1 turn on ...");
    mySwitch.sendTriState("F0F000FFFF0F");
    isVentilatorOn = true;   

      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(fhem, httpPort)) {
    Serial.println("connection failed");

  }
client.print(String("GET /Ventilator_an.php") + " HTTP/1.1\r\n" + "Host: " + fhem + "\r\n" "Connection: close\r\n\r\n");

return isVentilatorOn;
}

Das sieht irgendwie verwurschtelt aus, kommt spaeter noch einmal.
Das mit den ports erschliesst sich mir auch nicht, zudem die dann bei den verwurschtelten stumpf auf 80 sind!?
Und was hat es mit dem code bei send tristate auf sich? Woher kommt der?
Danke und Gruss
Christoph
Keine Ahnung was du mit verwurschtelt meinst- kannst es ja nach deinem Geschmack ordnen.  Und mit den Ports stumpf auc 80 trifft nicht zu, hier in dem Beispiel,aufsteigend bis 87. Wäre es falsch würde Alexa die Geräte nicht finden und wären auch nicht funktional. Bei mir zumindest funzt es einwandfrei
Send tristate ist die antwort des jeweiligen 433mhz Senders.Und