[vz-dev] Interessantes ESP8266-Projekt - nur leider reichen meine Arduino-Kenntnisse nicht

Klaus Reichenecker kr at kr123.de
Fri Nov 20 13:43:30 CET 2015


Hallo Andreas,

hier gibt es was einfacheres:
http://iot-playground.com/2-uncategorised/41-esp8266-ds18b20-temperature-sensor-arduino-ide.
Denke das wäre sehr einfach auf VZ umzustricken?

Allerdings muss dann auch wieder manuell SSID, Passwort, VZ-UUID usw einkompiliert werden, genau das finde ich das Schöne bei esp8266.nu.

Zitat:" Ich überlege mir seit einiger Zeit etwas ähnliches, hatte allerdings eher daran gedacht Sensor und ESP in einem Gehäuse zu verbauen und damit WLAN-fähige Sensoren zu fabrizieren."

Wie meinst Du das ? Eigentlich ist esp8266.nu doch schon genau das, nur halt noch ohne Gehäuse ?
Die loggen bereits direkt, allerdings momentan nur zu bestimmter Hardware, man müsste nur die richtigen Syntax für VZ einbauen ?
Ich habe momentan 2 am laufen, die mit DHT22 und 1Wire die Daten per MQTT zu FHEM schicken, über diesen Umweg schreibe ich in VZ.

Denke es gibt einige hier, die innerhalb einer Stunde den Code bei esp8266.nu so ändern könnten, das direkt auf VZ geloggt wird.
 
Falls es was zum löten und mitentwickeln gibt, gerne immer her damit.


Viele Grüße
Klaus





  ----- Original Message ----- 
  From: Andreas Goetz 
  To: volkszaehler.org 
  Sent: Thursday, November 19, 2015 4:07 PM
  Subject: Re: [vz-dev] Interessantes ESP8266-Projekt - nur leider reichen meine Arduino-Kenntnisse nicht


  Hallo Klaus,



  2015-11-15 20:35 GMT+01:00 Klaus Reichenecker <kr at kr123.de>:

    Zufällig habe ich dieses Projekt hier gefunden:
    http://www.esp8266.nu/index.php/Main_Page

    Dort wird über ein ESP-WIFI-Modul Daten an verschiedene Heimautomatisierungs-Software geschickt.
    Vorteil ist, das die Interfaces über eine Weboberfläche programmiert werden können, also nicht jedes mal wenns ein zusätzlicher Sensor ist oder sich die IP ändert wieder Änderungen am Code nötig sind.


  In der Tat ziemlich charmant!
   

    Ich denke das wäre ein sehr einfacher Weg, Sensoren für VZ zu realisieren ?

    Platinen gibts z.B. hier für 7 €:
    http://www.ebay.de/itm/WIFI-ESP8266-Seriell-Dev-Modul-Drahtlos-Test-Board-Full-IO-Leads-ESP-12-TE301/311484720899?_trksid=p2047675.c100011.m1850&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20140107083420%26meid%3D1d203b50fed94739822dba52b6ed0b3e%26pid%3D100011%26rk%3D1%26rkt%3D10%26sd%3D201464921200&tfrom=201464921200&tpos=unknow&ttype=price&talgo=origal


    Leider unterstützt die Software momentan nur verschiedene vorgegeben Heimautomatisierungs-Zentralen oder ThingSpeak
    http://www.esp8266.nu/index.php/EasyProtocols

    Es müsste ein rel. einfaches sein, die Software so zu ändern, das sie auch in VZ loggt ?
    Mir fehlen aber leider die detailierten Arduino-Programmierkenntnisse, um das zu ändern.


  Ich überlege mir seit einiger Zeit etwas ähnliches, hatte allerdings eher daran gedacht Sensor und ESP in einem Gehäuse zu verbauen und damit WLAN-fähige Sensoren zu fabrizieren.


  Entscheidender Knackpunkt für ESPeasy aus meiner Sicht ist die wirklich kleine Community. Sicher gut für Anregungen, vmtl aber nicht dauerhaft als tragfähige Basis. 


  Mit meinen Experimenten bin ich leider noch nicht sehr weit da die ESPs relativ zickig sind und einiges an Infrastruktur brauchen. Ich melde mich mit Update wenns was berichtenswertes gibt.


  Wer programmieren oder löten kann und gerne mitmachen möchte kann sich gerne melden!




    Als, falls jemand Lust hat ?

    Viele Grüße

    Klaus


  Viele Grüße,

  Andreas
   



    Hier noch ein Beispiel wie Daten momentan geschickt werden:

    //#######################################################################################################
    //########################### Controller Plugin 001: Domoticz HTTP ######################################
    //#######################################################################################################

    #define CPLUGIN_001
    #define CPLUGIN_ID_001         1
    #define CPLUGIN_NAME_001       "Domoticz HTTP"

    boolean CPlugin_001(byte function, struct EventStruct *event)
    {
      boolean success = false;

      switch (function)
      {
        case CPLUGIN_PROTOCOL_ADD:
          {
            Protocol[++protocolCount].Number = CPLUGIN_ID_001;
            strcpy_P(Protocol[protocolCount].Name, PSTR(CPLUGIN_NAME_001));
            Protocol[protocolCount].usesMQTT = false;
            Protocol[protocolCount].usesAccount = false;
            Protocol[protocolCount].usesPassword = false;
            break;
          }

        case CPLUGIN_PROTOCOL_SEND:
          {
            char log[80];
            boolean success = false;
            char host[20];
            sprintf_P(host, PSTR("%u.%u.%u.%u"), Settings.Controller_IP[0], Settings.Controller_IP[1], Settings.Controller_IP[2], Settings.Controller_IP[3]);

            sprintf_P(log, PSTR("%s%s"), "HTTP : connecting to ", host);
            addLog(LOG_LEVEL_DEBUG, log);
            if (printToWeb)
            {
              printWebString += log;
              printWebString += "<BR>";
            }
            // Use WiFiClient class to create TCP connections
            WiFiClient client;
            if (!client.connect(host, Settings.ControllerPort))
            {
              connectionFailures++;
              strcpy_P(log, PSTR("HTTP : connection failed"));
              addLog(LOG_LEVEL_ERROR, log);
              if (printToWeb)
                printWebString += F("connection failed<BR>");
              return false;
            }
            if (connectionFailures)
              connectionFailures--;

            // We now create a URI for the request
            String url = F("/json.htm?type=command&param=udevice&idx=");
            url += event->idx;

            switch (event->sensorType)
            {
              case SENSOR_TYPE_SINGLE:                      // single value sensor, used for Dallas, BH1750, etc
                url += F("&svalue=");
                url += UserVar[event->BaseVarIndex];
                break;
              case SENSOR_TYPE_TEMP_HUM:                      // temp + hum + hum_stat, used for DHT11
                url += F("&svalue=");
                url += UserVar[event->BaseVarIndex];
                url += ";";
                url += UserVar[event->BaseVarIndex + 1];
                url += ";0";
                break;
              case SENSOR_TYPE_TEMP_BARO:                      // temp + hum + hum_stat + bar + bar_fore, used for BMP085
                url += F("&svalue=");
                url += UserVar[event->BaseVarIndex];
                url += ";0;0;";
                url += UserVar[event->BaseVarIndex + 1];
                url += ";0";
                break;
              case SENSOR_TYPE_SWITCH:
                url = F("/json.htm?type=command&param=switchlight&idx=");
                url += event->idx;
                url += F("&switchcmd=");
                if (UserVar[event->BaseVarIndex] == 0)
                  url += "Off";
                else
                  url += "On";
                break;
              case SENSOR_TYPE_DIMMER:
                url = F("/json.htm?type=command&param=switchlight&idx=");
                url += event->idx;
                url += F("&switchcmd=");
                if (UserVar[event->BaseVarIndex] == 0)
                  url += "Off";
                else
                {
                  url += F("Set%20Level&level=");
                  url += UserVar[event->BaseVarIndex];
                }
                break;
            }

            url.toCharArray(log, 80);
            addLog(LOG_LEVEL_DEBUG_MORE, log);
            if (printToWeb)
            {
              printWebString += log;
              printWebString += "<BR>";
            }

            // This will send the request to the server
            client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                         "Host: " + host + "\r\n" +
                         "Connection: close\r\n\r\n");

            unsigned long timer = millis() + 200;
            while (!client.available() && millis() < timer)
              delay(1);

            // Read all the lines of the reply from server and print them to Serial
            while (client.available()) {
              String line = client.readStringUntil('\n');
              line.toCharArray(log, 80);
              addLog(LOG_LEVEL_DEBUG_MORE, log);
              if (line.substring(0, 15) == "HTTP/1.1 200 OK")
              {
                strcpy_P(log, PSTR("HTTP : Succes!"));
                addLog(LOG_LEVEL_DEBUG, log);
                if (printToWeb)
                  printWebString += F("Success<BR>");
                success = true;
              }
              delay(1);
            }
            strcpy_P(log, PSTR("HTTP : closing connection"));
            addLog(LOG_LEVEL_DEBUG, log);
            if (printToWeb)
              printWebString += F("closing connection<BR>");

            client.flush();
            client.stop();

            break;
          }

      }
      return success;
    }

    boolean Domoticz_getData(int idx, float *data)
    {
      boolean success = false;
      char host[20];
      sprintf_P(host, PSTR("%u.%u.%u.%u"), Settings.Controller_IP[0], Settings.Controller_IP[1], Settings.Controller_IP[2], Settings.Controller_IP[3]);

      // Use WiFiClient class to create TCP connections
      WiFiClient client;
      if (!client.connect(host, Settings.ControllerPort))
      {
        connectionFailures++;
        return false;
      }
      if (connectionFailures)
        connectionFailures--;

      // We now create a URI for the request
      String url = F("/json.htm?type=devices&rid=");
      url += idx;

      // This will send the request to the server
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                   "Host: " + host + "\r\n" +
                   "Connection: close\r\n\r\n");

      unsigned long timer = millis() + 200;
      while (!client.available() && millis() < timer)
        delay(1);

      // Read all the lines of the reply from server and print them to Serial

      while (client.available()) {
        String line = client.readStringUntil('\n');
        if (line.substring(10, 14) == "Data")
        {
          String strValue = line.substring(19);
          byte pos = strValue.indexOf(' ');
          strValue = strValue.substring(0, pos);
          strValue.trim();
          float value = strValue.toFloat();
          *data = value;
          success = true;
        }
      }
      return success;
    }




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-dev/attachments/20151120/1e5aa1ce/attachment-0001.html>


More information about the volkszaehler-dev mailing list