obeis
13.02.2018, 22:37
Moin Moin und Hallo zusammen.
Ich habe seit einigen Tagen ein NodeMCU v1 zuhause und programmiere (copy paste) mit der Arduino IDE. Ich möchte über ein paar schalter (gerne 4) per HTTP Request meine Haussteuerung beeinflussen.
Bisher bin ich mit Hilfe der Beispiele soweit gekommen das ich einen Eingangsstatus übertragen kann.
// die Kommandos kommen immer (Mehrfach pro Sec in den Bus
// Input Pin 5 mit Hardware Pulldown, "BUSrelais" aus wenn Input HIGH
// LED ausgang Pin 4 LED an wenn Input LOW
//
#include <ESP8266WiFi.h>
const char* ssid = "SSID";
const char* password = "strenggeheim";
const char* host = "192.168.175.10";
const int ledPin = 4;
const int buttonPin = 5;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(5);
}
}
int value = 0;
void loop() {
int buttondown = 0;
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
buttondown = 1;
digitalWrite (ledPin, HIGH);
}else{
digitalWrite (ledPin, LOW);
}
++value;
WiFiClient client;
const int httpPort = 8000;
if (!client.connect(host, httpPort)) {
}
if (buttondown == 1) {
client.print(String("GET ") + "/pck?c=%3R2-0" + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
} else {
client.print(String("GET ") + "/pck?c=%3R2-1" + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
}
}
Dieser Code sendet mehrfach die sekunde den aktuellen Status in den Hausbus. Das macht mir leider nur Stress. Ausserdem werden kurze Impulse oft garnicht zeitnah übertragen.
Ich denke ich müsste irgendwie nur auf die entsprechende Flanke reagieren oder den letzten Status des jeweiligen Eingangs speichern und dan im nächsten Durchgang auswerten. Kann mir da jemand helfen? Ich habe leider zu wenig Programierkenntnisse für diese Aufgabe.
Ich verstehe auch nicht was die "\r\n" Befehle im "client.print" Abschnitt aussagen.
Ich bin für jeden Tip dankbar.
Mit freundlichen Grüßen
Siebo
Ich habe seit einigen Tagen ein NodeMCU v1 zuhause und programmiere (copy paste) mit der Arduino IDE. Ich möchte über ein paar schalter (gerne 4) per HTTP Request meine Haussteuerung beeinflussen.
Bisher bin ich mit Hilfe der Beispiele soweit gekommen das ich einen Eingangsstatus übertragen kann.
// die Kommandos kommen immer (Mehrfach pro Sec in den Bus
// Input Pin 5 mit Hardware Pulldown, "BUSrelais" aus wenn Input HIGH
// LED ausgang Pin 4 LED an wenn Input LOW
//
#include <ESP8266WiFi.h>
const char* ssid = "SSID";
const char* password = "strenggeheim";
const char* host = "192.168.175.10";
const int ledPin = 4;
const int buttonPin = 5;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(5);
}
}
int value = 0;
void loop() {
int buttondown = 0;
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
buttondown = 1;
digitalWrite (ledPin, HIGH);
}else{
digitalWrite (ledPin, LOW);
}
++value;
WiFiClient client;
const int httpPort = 8000;
if (!client.connect(host, httpPort)) {
}
if (buttondown == 1) {
client.print(String("GET ") + "/pck?c=%3R2-0" + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
} else {
client.print(String("GET ") + "/pck?c=%3R2-1" + " HTTP/1.1\r\n" +"Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
}
}
Dieser Code sendet mehrfach die sekunde den aktuellen Status in den Hausbus. Das macht mir leider nur Stress. Ausserdem werden kurze Impulse oft garnicht zeitnah übertragen.
Ich denke ich müsste irgendwie nur auf die entsprechende Flanke reagieren oder den letzten Status des jeweiligen Eingangs speichern und dan im nächsten Durchgang auswerten. Kann mir da jemand helfen? Ich habe leider zu wenig Programierkenntnisse für diese Aufgabe.
Ich verstehe auch nicht was die "\r\n" Befehle im "client.print" Abschnitt aussagen.
Ich bin für jeden Tip dankbar.
Mit freundlichen Grüßen
Siebo