SVs Update per XML nur in bestimmten Intervallen möglch?

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

jp112sdl
Beiträge: 2682
Registriert: 20.11.2016, 20:01
Kontaktdaten:

Re: SVs Update per XML nur in bestimmten Intervallen möglch?

Beitrag von jp112sdl » 31.12.2018, 20:09

Es läuft soweit?
In dem Code liegt noch wesentlich mehr im Argen, als die vergessene } am Ende der loop()...

VG,
Jérôme

mafa
Beiträge: 64
Registriert: 23.04.2018, 19:27

Re: SVs Update per XML nur in bestimmten Intervallen möglch?

Beitrag von mafa » 01.01.2019, 19:19

Danke. Ja das kann gut das da noch mehr im argen ist :| . Aber es funktioniert :) . Die Anzahl der Lichtimpulse werden an die CCU als SV übertragen.
Zwar nicht immer bei jeden Sendeversuch, aber es geht dann halt beim z.b. 5 Versuch.
Deswegen will ich jetzt noch die Qualität verbessern.

Ok, deine Funktion gehört gar nicht zum Loop! Hab daher die letzte Klammer nach oben verschoben. Passt.
Ist mein erster Sketch, daher kannte ich eigentlich nur den Setup und Loop Teil.

Bisschen was hab ich noch angepasst. Aber er stört sich noch an der Definition von httpcode und DEBUG. Ich finde nicht wo/wie Du das definiert hast.
Wobei für httpcode schon: int httpCode = http.GET(); ...aber das wird vom IDE nicht akzeptiert. Generell wäre es natürlich toll und würde für meine Zwecke reichen, wenn der check ob der wert übertragen wurde iwie schlanker geht. Aber vermutlich nicht?

Hab den Code im letzten Post aktualisiert.

jp112sdl
Beiträge: 2682
Registriert: 20.11.2016, 20:01
Kontaktdaten:

Re: SVs Update per XML nur in bestimmten Intervallen möglch?

Beitrag von jp112sdl » 01.01.2019, 19:22

mafa hat geschrieben:
01.01.2019, 19:19
Danke. Ja das kann gut das da noch mehr im argen ist :| . Aber es funktioniert :) . Die Anzahl der Lichtimpulse werden an die CCU als SV übertragen.
Zwar nicht immer bei jeden Sendeversuch, aber es geht dann halt beim z.b. 5 Versuch.

...

Aber er stört sich noch an der Definition von httpcode und DEBUG. Ich finde nicht wo/wie Du das definiert hast.
Ich verstehe den Zusammenhang nicht. Wie kann der Sketch funktionieren, wenn er sich nicht mal kompilieren lässt :?:

VG,
Jérôme

jp112sdl
Beiträge: 2682
Registriert: 20.11.2016, 20:01
Kontaktdaten:

Re: SVs Update per XML nur in bestimmten Intervallen möglch?

Beitrag von jp112sdl » 01.01.2019, 19:52

mafa hat geschrieben:
01.01.2019, 19:19
Wobei für httpcode schon: int httpCode = http.GET(); ...aber das wird vom IDE nicht akzeptiert.
Ist nur lokal innerhalb der if() {...} deklariert und kann außerhalb nicht verwendet werden.
mafa hat geschrieben:
01.01.2019, 19:19
Aber er stört sich noch an ... DEBUG.
Das habe ich in einer anderen Datei deklariert.
Ersetze es durch Serial.println()

Hiermit solltest du erstmal weiterkommen...

Code: Alles auswählen

#include <ESP8266HTTPClient.h>


#include <ESP8266WiFi.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>

boolean reading = false;
boolean connected = false;

String HomematicIP = "192.168.178.65";  // Homematic IP-Adresse

#define             HTTPTIMEOUT   1500

WiFiClient client;


void setup() {


  Serial.begin(9600);
  Serial.println();

  WiFi.begin("xxxxx", "111111");

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)  //LOOP solange verbindung aufgebaut wird. stoppt erst wenn wifi verbindung erfolgeich
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected to WIFI!, IP address: ");
  Serial.println(WiFi.localIP());


  Serial.println("Connecting to Homematic..."); //Verbindung zu CCU Homematic

  if (client.connect(HomematicIP, 80)) {
    Serial.println("Connected to Homematic!");
  } else {
    Serial.println("Connection to Homematic failed");
  }
}


void loop() {
  int sensorValue = analogRead(A0);   // read the input on analog pin 0
  static unsigned int impulse = 0;

  if (sensorValue < 100 ) {
    impulse++;
    delay(500);
    Serial.println(sensorValue);
    Serial.println(impulse);
    setStateCCUCUxD(String(impulse));
  }
}
///////

bool setStateCCUCUxD(String value) {
  if (WiFi.status() == WL_CONNECTED)
  {
    HTTPClient http;
    http.setTimeout(HTTPTIMEOUT);
    String url = "http://" + String(HomematicIP) + ":8181/rega.exe?ret=dom.GetObject('Stromverbrauch').State(" + value + ")";
    http.begin(url);
    int httpCode = http.GET();
    String payload = "";


    if (httpCode != 200) {   //prüft ob in der rückgabe kein null steht
      Serial.println("HTTP " + value + " fail (" + String(httpCode) + ")");
    } else {
      Serial.println("HTTP " + value + " success");
      payload = http.getString();
    }

    http.end();

    payload = payload.substring(payload.indexOf("<ret>"));
    payload = payload.substring(5, payload.indexOf("</ret>"));

    return (payload != "null" && httpCode == 200);

  } else ESP.restart();
}

VG,
Jérôme

mafa
Beiträge: 64
Registriert: 23.04.2018, 19:27

Re: SVs Update per XML nur in bestimmten Intervallen möglch?

Beitrag von mafa » 01.01.2019, 23:23

1000 Dank! Das hilft mir sehr mein Verständnis auszubauen und es bleibt hoffentlich nicht mein einziger Sketch :-).
zu deiner 1. frage. Ich hatte bis jetzt nur den reinen schreibvorgang im einsatz. Die ganze prüflogik für den fehlerfall hatte ich erst mal weg gelassen.
Dann konnte ich es kompilieren und ausführen. So läuft es aber die qualit is naja. Das ändert sich jetzt dann bald :-)

mafa
Beiträge: 64
Registriert: 23.04.2018, 19:27

Re: SVs Update per XML nur in bestimmten Intervallen möglch?

Beitrag von mafa » 05.01.2019, 11:48

also das wegschreiben und die Fehlerprüfung klappt jetzt.
Der counter fängt nur immer wieder bei 0 an. Weiss noch nicht warum. Kann ein Sketch sich aufhängen und er startet neu?
Am PC konnte ich den Fehler leider noch nicht reproduzieren :-(.

jp112sdl
Beiträge: 2682
Registriert: 20.11.2016, 20:01
Kontaktdaten:

Re: SVs Update per XML nur in bestimmten Intervallen möglch?

Beitrag von jp112sdl » 05.01.2019, 11:56

Hi,

evtl. ist es zielführender, wenn du dich zunächst mehr mit der Programmierung / -sprache befasst. :/
Wenn du Sketche nur zusammenkopierst, ohne den Inhalt zu verstehen, wirst immer und immer wieder wegen kleinster Dinge um Hilfe fragen müssen...
mafa hat geschrieben:
05.01.2019, 11:48
Der counter fängt nur immer wieder bei 0 an. Weiss noch nicht warum. Kann ein Sketch sich aufhängen und er startet neu?
Z.B. wenn die WLAN Verbindung verloren geht. Vorletzte Zeile:

Code: Alles auswählen

  } else ESP.restart();

VG,
Jérôme

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“