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.
Hi,
welchen Sketch genau?
Gruß
Thomas
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);
}
Mehr als on/off lässt sich damit aber doch auch nicht schalten, oder? Gibt es irgendeinen Vorteil gegenüber der HA-Bridge?
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.
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
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.
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. :-)
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. :-)
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.
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.
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.
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......
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.)
Moin
Magst Du Deinen Sketch noch einmal posten? Ich finde das sehr interessant! Steige aber noch nicht so ganz dahinter!
Danke und Gruss
Christoph
Mach ich, wenn ich mit meinem Laptop online bin.....
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;
}
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
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
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