FHEM Forum

Verschiedenes => Bastelecke => ESP Familie => Thema gestartet von: Pf@nne am 05 März 2016, 00:31:57

Titel: ESP8266_Basic Library
Beitrag von: Pf@nne am 05 März 2016, 00:31:57
Moin,

Mitlerweile gibt es viele sehr nützliche Librarys für den ESP8266. Damit beim Erstellen des eigenen Sketches nicht jedes mal von vorne begonnen werden muss, machte es Sinn alle Grundfunktionen des ESP8266 in einer Library zusammenzufassen.

Die ESP8266_Basic umfasst die folgenden Grundfunktionen:


Der eigene Sketch wird so weitestgehend von den Grundfunktionen entlastet.

ESP8266_template.ino
#include <ESP8266_Basic.h>
ESP8266_Basic espClient;

void setup() {
  Serial.begin(115200);
  Serial.println("");
 
  espClient.start_WiFi_connections();
}

void loop() {
  espClient.handle_connections();
}


(http://www.s6z.de/cms/images/content/test/Homeautomation/Hardware/ESP8266/ESP8266_Basic/ESP8266_Basic_WEB-IF.PNG)
(http://www.s6z.de/cms/images/content/test/Homeautomation/Hardware/ESP8266/ESP8266_Basic/ESP8266_Basic_HTTP-Update.PNG)
(http://www.s6z.de/cms/images/content/test/Homeautomation/Hardware/ESP8266/ESP8266_Basic/ESP8266_Basic_FlowChart.png)

MQTT Topics

Topics::Topics()
{/* MQTT subcribe TopicTree struct !!define TreeDepht in .h!!!
[x] mqttDeviceName
¦
¦-[0] WiFiConfig
¦ ¦-[00] WEBserver
¦ ¦ ¦-[000] Username
¦ ¦ +-[001] Password
¦ ¦-[01] Accesspoint
¦ ¦ ¦-[010] SSID
¦ ¦ +-[011] Password
¦ ¦-[02] WiFi
¦ ¦ ¦-[020] SSID
¦ ¦ ¦-[021] Password
¦ ¦ +-[022] IP
¦ +-[03] MQTT
¦ ¦-[030] Server
¦ ¦-[031] Port
¦ +-[032] Status
¦
¦-[1] Control
¦ ¦-[10] ESP8266
¦ ¦ ¦-[100] Reboot
¦ ¦ +-[101] ShowConfig
*/
sub.E1.count = sub_e1;
sub.E2.count = sub_e2;
sub.E3.count = sub_e3;

sub.E1.item[0] = "WiFiConfig";
sub.E2.item[0][0] = "WEBserver";
sub.E3.item[0][0][0] = "Username";
sub.E3.item[0][0][1] = "Password";
sub.E2.item[0][1] = "Accesspoint";
sub.E3.item[0][1][0] = "SSID";
sub.E3.item[0][1][1] = "Password";
sub.E2.item[0][2] = "WiFi";
sub.E3.item[0][2][0] = "SSID";
sub.E3.item[0][2][1] = "Password";
sub.E3.item[0][2][2] = "IP";
sub.E2.item[0][3] = "MQTT";
sub.E3.item[0][3][0] = "Server";
sub.E3.item[0][3][1] = "Port";
sub.E3.item[0][3][2] = "Status";

sub.E1.item[1] = "Control";
sub.E2.item[1][0] = "ESP8266";
sub.E3.item[1][0][0] = "Reboot";
sub.E3.item[1][0][1] = "ShowConfig";



Durch die Struktirierung des TopicTrees können die ankommenden subscribes einfach wieder ausgefiltert werden.


if (dissectResult.found){
    if (dissectResult.itemPath == "1/0/0"){
      if (strcmp(value, "Reboot") == 0){
        ESP.reset();
      }
    }
    if (dissectResult.itemPath == "1/0/1"){
      pubConfig();
    }
  }



Aktuell ist das Ganze noch in der alphaPhase, läuft jedoch schon recht gut, daher habe ich es für erste Tests schon online gestellt.

https://github.com/Pfannex/ESP8266_Basic.git (https://github.com/Pfannex/ESP8266_Basic.git)
http://www.s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/esp8266/134-esp8266-basic-library (http://www.s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/esp8266/134-esp8266-basic-library)

Noch was wichtiges:
Der ESP-Core hat Probleme mit einem ESP.reset() bzw. ESP.restart() nach dem seriellen Flashen.
Als work around muss direkt nach dem seriellen Flashen der ESP einmal über den Reset-Taster neu gstartet werden, dann läuft der Softwarereset nach dem Flashen über OTA oder dem Aufruf über das WEB-IF fehlerfrei durch. Manchmal muss der ESP aber auch noch durch Wegnahme der Versorgungsspannung resetet werden. Soll ein bekanntes Problem sein.... mal beobachten.



Titel: Antw:ESP8266_Basic Library
Beitrag von: Olly am 05 März 2016, 10:42:58
Hallo,

hört sich gut an und hat alles was man braucht.
Werde ich mir sicher mal anschauen, wenn ich mal wieder etwas Zeit habe. Momentan hab ich alles aus Einzelteilen zusammengebaut.

Gruß

   Olly

Titel: Antw:ESP8266_Basic Library
Beitrag von: carlos am 05 März 2016, 11:00:43
Hallo,
Nur zur Info, so etwas gibt es doch schon mit Espeasy: http://www.esp8266.nu/index.php/Main_Page (http://www.esp8266.nu/index.php/Main_Page).
Damit bin ich eigentlich sehr zufrieden und funktioniert auch mit MQTT zusammen mit FHEM sehr gut.
Gruß
Carlos
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 05 März 2016, 11:23:11
Zitat von: carlos am 05 März 2016, 11:00:43
Hallo,
Nur zur Info, so etwas gibt es doch schon mit Espeasy: http://www.esp8266.nu/index.php/Main_Page (http://www.esp8266.nu/index.php/Main_Page).
Damit bin ich eigentlich sehr zufrieden und funktioniert auch mit MQTT zusammen mit FHEM sehr gut.
Gruß
Carlos

ESPEasy kenne ich, war mir aber ein wenig zu instabil, hat sich aber bestimmt geändert.
ESPEasy ist schon eher etwas fertiges um mal eben ein paar Sensoren ans Netz zu bringen.
Ich wollte aber eine Basis für meine eigenen Sketche haben um immer ein Grundgerüst im Hintergrund zu nutzen.

Z.B. möchte ich dieses für die Steuerung meines RefloOvens nutzen, dafür ist ESPEasy nicht ganz das richtige.
Auch für meinen AktSen soll dies die Basis werden.

Zudem wollte ich gerne auch mal was selber machen..... ;D

EDIT:
alpha V0.101 auf erster Seite hinzugefügt.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 05 März 2016, 17:41:08
Für die MQTT-Anbindung wird noch der pubsubclient von Nick O'Leary benötigt.

Entweder hier downloaden und ins Library-Verzeichnis kopieren oder direkt im Arduino downloaden.
https://github.com/knolleary/pubsubclient (https://github.com/knolleary/pubsubclient)

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2016, 09:27:29
Noch was wichtiges:

Der ESP-Core hat Probleme mit einem ESP.reset() bzw. ESP.restart() nach dem seriellen Flashen.
Als work around muss direkt nach dem seriellen Flashen der ESP einmal über den Reset-Taster neu gstartet werden, dann läuft der Softwarereset nach dem Flashen über OTA oder dem Aufruf über das WEB-IF fehlerfrei durch.
Titel: Antw:ESP8266_Basic Library
Beitrag von: hexenmeister am 06 März 2016, 12:32:21
Klingt sehr gut! Werde unbedingt ausprobieren!
Titel: Antw:ESP8266_Basic Library
Beitrag von: er am 06 März 2016, 17:09:42
Hallo pf@nne,

wollte deine Library zum Testen installieren. Bekomme aber in der arduino ide mit Sketch-Bibliothek-.ZIP-Bibliothek hinzufügen ... eine Fehlermeldung: "angegebener Ordner/ZIP-Datei enthält keine gültige Bibliothek". Muss ich dies anders machen?

Grüße Erich
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2016, 17:59:12
Moin er,

Den Ordner "ESP8266_Basic" kopierst du in dein Arduino Libraryverzeichnis, in der Regel:
C:\Users\DeinUserName\Documents\Arduino\libraries

Den Ordner "ESP8266_template" irgend wo hin wo deine Sketche lagern.....

Zusätzlich musst du noch die "pubsubclient"-Library installieren.

Dann sollte alles durchlaufen........
Titel: Antw:ESP8266_Basic Library
Beitrag von: er am 06 März 2016, 18:30:59
Hallo p@nne,

so hat es funktioniert mit dem Einbinden der Dateien.
Beim compilieren bekomme ich jedoch ganz schön viele Fehlermeldungen.

Hast du da eine Idee wegen was?

Gruß Erich
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2016, 19:26:16
Die Fehlermeldung sagt, dass diverse Functions der ESP8266_Basic bereits deklariert wurden.
Nur warum?

Welche Arduino ESP8266-Board-Version nutzt du?

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2016, 19:30:27
Nimm mal anstatt des "WeMos D1 R2 & mini" das "Generic ESP8266 Module"
Titel: Antw:ESP8266_Basic Library
Beitrag von: er am 06 März 2016, 20:41:26
Hallo pf@nne,

habe meinen Fehler gefunden. Habe in das sketch-Verzeichnis den Inhalt vom Verzeichnis ESP8266_template kopiert. Da ist auch die Datei
ESP8266_BASIC.cpp darin. Diese führte zu den Fehlermeldungen. Datei gelöscht, schon läuft das Kompilieren durch.

Gruß Erich
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2016, 20:48:40
 :o .......

Läuft denn alles soweit, Accesspoint gefunden und neu konfiguriert?
Hast du denn schon einen MQTT-Broker laufen?

Titel: Antw:ESP8266_Basic Library
Beitrag von: er am 06 März 2016, 20:57:01
Broker läuft auf einem Raspberry. Mit einem Nodemcu 0.9 transferiere ich Temperaturwerte von einem 18B20 ins fhem.
Kämpfe gerade mit einem gestern eingetroffenen WeMos D1 Mini. Melde mich bei Fortschritt.

Gruß Erich
Titel: Antw:ESP8266_Basic Library
Beitrag von: er am 06 März 2016, 21:41:49
Hallo pf@nne,

mit meiner bisherigen Hardware Nodemcu laufen deine Funktionen perfekt. Ist kein Anmeldung an WLAN möglich, wird
eigener Accesspoint erstellt. Konfigurationseite aufgerufen, Einstellung gemacht, Anmeldung erledigt. Verbindung zum Broker
läuft. Genial.

Gruß

erich
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2016, 21:45:14
Zitat von: er am 06 März 2016, 21:41:49
läuft. Genial.

freut mich..... ;D

Hast du das Topic-Handling verstanden oder soll ich dazu noch was erklären?
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2016, 22:34:28
Hab gerade gesehen, dass das publishen der Library noch private: war....

--> alpha V0.102
Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 07 März 2016, 11:01:09
Hallo,
bekomme beim kompilieren mit der Arduino IDE 1.65 folgende Fehlermeldung:
C:\Users\Holger\AppData\Roaming\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -IC:\Users\Holger\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0/tools/sdk/include -c -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections -DF_CPU=80000000L -DARDUINO=10605 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 -DESP8266 -IC:\Users\Holger\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\cores\esp8266 -IC:\Users\Holger\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\variants\generic -IC:\Program Files (x86)\Arduino\libraries\ESP8266_Basic C:\Users\Holger\AppData\Local\Temp\build3008159255607046722.tmp\ESP8266_template.cpp -o C:\Users\Holger\AppData\Local\Temp\build3008159255607046722.tmp\ESP8266_template.cpp.o

In file included from ESP8266_template.ino:17:0:
C:\Program Files (x86)\Arduino\libraries\ESP8266_Basic/ESP8266_Basic.h:38:80: fatal error: ArduinoJson.h: No such file or directory
   #include <ArduinoJson.h>           //https://github.com/bblanchon/ArduinoJson
                                                                                ^
compilation terminated.
Fehler beim Kompilieren.


Die libarys habe ich installiert, wo könnte der Fehler liegen ?

Gruß Holgi
Titel: Antw:ESP8266_Basic Library
Beitrag von: Wzut am 07 März 2016, 17:25:43
Zitat von: The-Holgi am 07 März 2016, 11:01:09
Die libarys habe ich installiert, wo könnte der Fehler liegen ?
ja die 1.6.5 ist ein bissel zickig was dieses Projekt betrifft :)
@Holgi, füge ganz oben im Demo Sketch vor #include <ESP8266_Basic.h> folgenden kompletten Block ein :
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <PubSubClient.h>
#include <ESP8266HTTPUpdateServer.h>

k.A, warum die ganzen ESP libs nicht gefunden werden via ESP8266_Basic.h, aber so läuft es auf 1.6.5 mit vielen typedef und anderen Warnings  durch.
Axo noch ein Fallstrick : die PubSubClient lib in der aktuellen Version 2.4 von hier -> https://github.com/knolleary/pubsubclient verwenden.
Ich hatte noch die V2.0 aus einem älteren Thread, damit gibt es auch einen Abruch.
Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 07 März 2016, 17:38:13
Danke für die Hilfe,
werde ich morgen mal testen.

Gruß Holgi
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 07 März 2016, 20:22:07
Ich habe folgende Versionen installiert:


Mit diesen Versionen läuft es bei mir stabil.



Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 08 März 2016, 11:47:22
Hallo,
echt Zickig die Arduino IDE oder ich stelle mich zu blöd an.
Mit der neuen Version von publishclient und den änderungen von Wzut im scatch läuft es jetzt durch.
Leider funktionier jetzt das kompilieren der R078 von Esp-Easy nicht mehr, wenn ich wieder die publishclient version die bei der R078 mitgeliefert wird verwende geht es wieder.

Gruß Holgi
Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 08 März 2016, 12:40:19
Hm,
flashen hat geklappt und der AP des ESP01 taucht auch als ESP8266_10194024 aber wie lautet das Passwort ?
Kann man das vorm flashen irgendwo "setzen".

Gruß Holgi
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 08 März 2016, 14:17:11
Hast du die serielle Ausgabe an?
Da sollte dir doch die komplette Konfiguration angezeigt werden.
Bei neuem Chip wird das PW für den AP mit "ESP8266config" vorgegeben.....
Glaube ich.....ich schaue aber gleich mal rein.

EDIT:
//===> WIFI Manager Config <---------------------------------------------------

void ESP8266_Basic::read_cfg(){


  Serial.println("read config");

  if (read_cfgFile()){

    Serial.println("fsMount OK and File exist");

  

  }else{

    Serial.println("create new config");

    strcpy(cfg.webUser, "ESPuser");

    strcpy(cfg.webPassword, "ESPpass");


    String str = "ESP8266_";

    str += String(ESP.getChipId());

    strcpy(cfg.apName, str.c_str());

    strcpy(cfg.apPassword, "ESP8266config");


    //strcpy(cfg.wifiSSID, "");

    //strcpy(cfg.wifiPSK, "");

    strcpy(cfg.wifiIP, "");


//strcpy( cfg.wifiIP, IPtoString(WiFi.localIP()).c_str() );

strcpy( cfg.wifiSSID, WiFi.SSID().c_str() );

strcpy( cfg.wifiPSK, WiFi.psk().c_str() );


    strcpy(cfg.mqttServer, "");

    strcpy(cfg.mqttPort, "1883");

    strcpy(cfg.mqttDeviceName, cfg.apName);


write_cfgFile();

  }

}

Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 08 März 2016, 14:59:29
Hm, auf der seriellen Konsole kommt nichts an.
Ist ein ESP01 mit dem ich gerade teste.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Bapt. Reverend Magersuppe am 08 März 2016, 15:07:07
Zitat von: The-Holgi am 08 März 2016, 14:59:29
Hm, auf der seriellen Konsole kommt nichts an.
Ist ein ESP01 mit dem ich gerade teste.

RX <-> TX und
TX <> RX
vom USB-Serial-Adapter nicht vergessen. Beim Einschalten sollten ein paar Steuerzeichen kommen.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 08 März 2016, 16:07:05
Zitat von: Bapt. Reverend Magersuppe am 08 März 2016, 15:07:07
RX <-> TX und
TX <> RX
vom USB-Serial-Adapter nicht vergessen. Beim Einschalten sollten ein paar Steuerzeichen kommen.

GND nicht vergessen!

Hat denn die serielle Ausgabe überhauptschonmal funktioniert?
Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 08 März 2016, 16:09:11
Hallo,
mit ESP Easy funktioniert die serielle Ausgabe. Hab ich testweise gerade wieder geflasht. Damit läuft es problemlos.

Gruß Holgi
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 08 März 2016, 16:20:50
115200 Baud?

Kommt denn da garnix raus?
Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 08 März 2016, 16:38:48
Nee, nichts. Sehr komisch warte noch auf eine Lieferung ESP12 irgendwie ist der ESP01 zickiger, werde dann weiter testen und berichten.

Gruß Holgi
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 08 März 2016, 17:47:50
Nutzt du denn mein Template?

Stchwort: Serial.begin(115200);

Der ESP01 hat glaube ich weniger Flash.....
Läuft den ein einfaches Serial.println"Hello World!); ?
Titel: Antw:ESP8266_Basic Library
Beitrag von: The-Holgi am 08 März 2016, 20:50:47
Hallo,
hatte die V 0.102 geflasht.
Werde wenn die neuen ESP 12 da sind nochmal testen und berichten.

Gruß Holgi
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 16 März 2016, 19:36:03
httpUpdate onDemand ergänzt

Ich habe das WEB-IF noch um einen UpdateServer erweitert.
Jetzt ist es möglich einen kompilierten *.bin-File von einem WEB-Server per Anstoß über MQTT zu flashen.

(http://www.s6z.de/cms/images/content/test/Homeautomation/Hardware/ESP8266/ESP8266_Basic/ESP8266_Basic_WEB-IF.PNG)

MQTT_DeviceName/Control/ESP8266/updateFirmware

Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 17 März 2016, 06:50:26
Ich finde deine Homepage sehr informativ.
http://www.s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/esp8266/134-esp8266-basic-library (http://www.s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/esp8266/134-esp8266-basic-library)

Danke dafür.

Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 17 März 2016, 13:10:00
Irgendwas läuft da anders als erwartet:

Nach diversen Versuchen konnte ich über mein Handy die Wlan Konfiguration durchführen.


Im Terminal sehe ich, dass aus dem Netz auch eine IP Adresse zugewiesen wird.
Prinzipiell sollte ich doch damit nun auf die Config-Seite kommen, dachte ich.

Mein Browser erzählt mir, die Seite ist nicht erreichbar
192.168.1.147 hat die Verbindung abgelehnt. (<= diese Adresse hat der ESP von meinem Router bekommen)

Im Terminal steht dauernd:
Connecting WiFi to <meinWlanNetzwerk>
Connecting to MQTT-Broker:  :1883
### MQTT has disconnected

(was logisch ist, ich betreibe im Moment gar keinen)

Kann es sein, dass ohne Broker nach der Erstkonfiguration gar nix mehr geht???


Edit:
Er versucht 5x sich mit einem Broker zu connecten, dann macht der ESP einen Reset)




wdt reset<\r><\n>
load 0x4010f000, len 1264, room 16 <\r><\n>
tail 0<\r><\n>
chksum 0x42<\r><\n>
csum 0x42<\r><\n>
~ld<\n><\r><\n>
<\r><\n>
============================================<\r><\n>
Flash real id:   001640E0<\r><\n>
Flash real size: 4194304<\r><\n>
Flash ide  size: 4194304<\r><\n>
Flash ide speed: 40000000<\r><\n>
Flash ide mode:  DIO<\r><\n>
Flash Chip configuration ok.<\r><\n>
============================================<\r><\n>
<\r><\n>
read config<\r><\n>
<\r><\n>
mounting FS...<\r><\n>
mounted file system<\r><\n>
reading config file<\r><\n>
opened config file<\r><\n>
json success<\r><\n>
fsMount OK and File exist<\r><\n>
<\r><\n>
Connecting WiFi to: Repeater<\r><\n>
....<\r><\n>
<\r><\n>
WiFi connected with IP:    192.168.1.147<\r><\n>
Start WEB-Server<\r><\n>
HTTP server started<\r><\n>
<\r><\n>
<\r><\n>
Config:<\r><\n>
########################################<\r><\n>
WEBcfg Username:  ESPuser<\r><\n>
WEBcfg Password:  ESPpass<\r><\n>
----------------------------------------<\r><\n>
AP SSID:          ESP8266_14321081<\r><\n>
AP Password:      ESP8266config<\r><\n>
----------------------------------------<\r><\n>
WiFi SSID:        Repeater<\r><\n>
WiFi Password:    ******<\r><\n>
DHCP IP:          192.168.1.147<\r><\n>
----------------------------------------<\r><\n>
MQTT-Server IP:   <\r><\n>
MQTT-Server Port: 1883<\r><\n>
MQTT-DeviceName:  ESP8266_14321081<\r><\n>
----------------------------------------<\r><\n>
Update-Server IP: <\r><\n>
FilePath:         <\r><\n>
########################################<\r><\n>
### MQTT has disconnected...<\r><\n>
Connecting to MQTT-Broker: :1883<\r><\n>
### MQTT has disconnected...<\r><\n>
Connecting to MQTT-Broker: :1883<\r><\n>
### MQTT has disconnected...<\r><\n>
Connecting to MQTT-Broker: :1883<\r><\n>



Neu flashen bringt auch nix, er hat die Konfiguration gespeichert :)
Wie bringe ich die wieder los? Muss sich jetzt den ganzen Flash löschen?
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 17 März 2016, 14:54:22
Moin,

hattest du schon eine vorherige Version laufen?
Dann könnte es sein, dass der json File nicht mehr stimmt,  weil der UpdateServer hinzugekommen ist.
In der ESP8266_Basic kannst du in einer json-Routine das Format FS aktivieren.
Damit wird das FS formatiert.
Dann aber gleich wieder auskommentieren.

Sonst schaue ich heute Abend mal.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 17 März 2016, 15:11:29
Zitathattest du schon eine vorherige Version laufen?

Nope :)
War mein erster Versuch mit deiner Basic Library :)
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 17 März 2016, 21:31:55
Ich Dussel hab zwar V0.116 drann geschrieben aber wohl V0.110 rein gepackt.....

Ich hab den ZIP im ersten Beitrag aktualisiert.....Sorry

Jetzt kann es aber sein, das du einen nicht passenden json_configFile in deinem FS hast.
Daher formatiere dein FS mal......

ESP8266_Basic.cpp
//===============================================================================
//  FileSystem
//===============================================================================

//===> read Config from File <-------------------------------------------------
bool ESP8266_Basic::read_cfgFile(){
  bool readOK = false;
  //clean FS, for testing
  //SPIFFS.format();                               <<---- zum Formatieren aktivieren


Nach dem Formatieren aber gleich wieder mit auskommentiertem Format neu flashen.

Auch drann denken, nach dem Flashen manuell per Resettaster neu zu booten, sonst klappt das httpUpdate nicht.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 18 März 2016, 02:58:44
 ;D
Kann passieren.

Danke schön. Werde es später ausprobieren :)
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 18 März 2016, 12:08:58
Irgendwie hat es das nicht gebracht :(
Habe auch mit dem Flash Tool gemäß deiner HP versucht den Speicher zu leeren, alles wieder da  :o

Ich wünschte mein Rechner würde so gut auf meine Dateien aufpassen wie der ESP auf die Konfiguration  ;D


Jetzt ist erst mal Urlaub, dann sehen wir weiter :)
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 18 März 2016, 12:52:21
Hast du denn formatiert?

Wenn er verbunden ist, muss auch der Webserver laufen.
Hast du den ESP mal angepingt?

MQTT spielt keine Rolle, das sollte nichts blockieren.
Der schaut nur jede Sekunde ob Verbindung möglich ist, wenn nicht dann loopt er weiter.

Genau dafür ist das WebIF ja da, MQTT Server eintragen und er sollte sich verbinden.

Hat noch jemand das gleiche Problem?
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 28 März 2016, 19:56:43
Hi,

einen Verbesserungsvorschlag:
Wenn du die normale Ordner-Struktur nehmen würdest, mit examples und so, dann bräuchte man das ZIP Archiv nicht in zwei verschiedene Ordner kopieren :)

Hinweis:
Läuft unter IDE 1.6.8 fehlerfrei durch  :)

Upload hab ich noch nicht versucht
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 28 März 2016, 21:33:23
Hab es jetzt erfolgreich auf einen neuen ESP hochgeladen.

Klappt. Bekomme eine Adresse per DHCP, kann mich nun lokal anmelden :)


Frage:
Ich hab es aus deinem Git gezogen
Da steht unten:
Zitat von: WebInterface© by Pf@nne/16 | alpha V0.001

Allerdings habe ich sehr wohl die Konfiguration für Update Server und Pfad. Hast du vergessen die Versionsnummer anzupassen?

Im Programmcode steht es wohl richtig:

ProjectName: ESP8266 Basic                      ***** *****
  SubTitle   : Basic template                    *     *     ************
                                                *   **   **   *           *
  Copyright by Pf@nne                          *   *   *   *   *   ****    *
                                               *   *       *   *   *   *   *
  Last modification by:                        *   *       *   *   ****    *
  - Pf@nne (pf@nne-mail.de)                     *   *     *****           *
                                                 *   *        *   *******
  Date    : 16.03.2016                            *****      *   *
  Version : alpha 0.116         
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 29 März 2016, 10:26:15
Ich glaube da habe ich gepennt..... :-)
Ich habe zwischenzeitlich eine Version für meinen ReflowOfen hochgeladen, vielleicht hab ich da was durcheinander gebracht.....

Läuft denn soweit alles?
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 29 März 2016, 11:36:17
Ja und nein :)

Ja:
DHCP
Konnte mich an meinem Netzwerk anmelden (Meine Dusseligkeit sorgte erst dafür, dass sich der ESP mit meiner Verbindungsfreigabe am Handy gekoppelt hat, gleiches Netz, gleiches Passwort ;) => dann bekommt man logischerweise eine IP aus dem falschen Netz ;) )

MQTT
Hat sich connected => passt

UpdateServer
Habe ich noch nicht ausprobiert

Prinzipiell muss ich nur die kompilierte Datei (so ich sie finde) auf einen WebServer werfen und in der Konfiguration den Dateinamen eintragen, oder?


Ergo:
Alles von dir läuft perfekt soweit :)


Was nicht läuft:
Im Moment habe ich noch keinen Plan, was ich mit dem Framework anstellen muss :)
Ich bräuchte eine Art Kurzworkshop für Noobs, um mal auf das richtige Gleis zu kommen:

Meine Probleme gehen da los:
1. Wie Subscribe / Publishe ich ein Topic?
Fange ich da in meinem Programm an, oder modifiziere ich deine ESP8266_Basic_data.cpp ??? Oder muss / sollte ich es in eine Art myESP8266_Basic_data auslagern ???

Subscribe:
In der Schreibweise von der ESP8266_Basic_data.cpp etwa so:

¦-[2] User
    ¦-[20] UserNumber [1-6]
    +-[21] Time [1-12]
    +-[23] QRUploaded [true / false]
 



Publish

¦-[20] User
    ¦-[22] UserLocationRequest [UserNumber]



Ich brauch es nicht zwangsläufig im Webinterface, ich möchte nur abhängig davon was in der Payload steht Dinge tun...

Also bei UserNumber = 1 Servo1 auf [Time] setzen
Oder einen UserLocationRequest publishen, und bei einem [QRUploaded] = true das gerade übertragene Bild anzeigen

2. Wie bekomme ich auf den Webserver eine Datei (Bild) geschoben, welches auf den SPIFFs gespeichert wird (muss nicht per MQTT sein) ???

3. Wie greife ich mit SPIFFs auf eine Datei zu (ok, das könnte ich selber im ESP Forum nachlesen, nehme ich an) ;)


:)

Du siehst, es fehlt noch ziemlich an den Basics :)
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 29 März 2016, 15:47:24
ZitatErgo:
Alles von dir läuft perfekt soweit :)

Das freut mich doch erstmal...... 8)
Das Arbeiten muss natürlich ein wenig erläutert werden, frei nach dem Motto "was hat sich der Dichter wohl dabei gedacht!?".
Das habe ich leider zeitlich noch nicht geschafft, zumal ich selber noch nicht so ganz weiß, ob ESP_Basic eine Library oder vielleicht doch eher ein Template ist.
Momentan würde ich sagen, dass es sich hierbei um ein Template handelt, also das Framework selber als Basis dient und modifiziert wird.
Das habe ich jetzt schon bei zwei eigenen Projekten so gemacht, das hat auch sehr gut geklappt.

Da ich mit ProgrammerNotepad arbeite habe ich die ESP8266_Basic-Files im Library-Pfad abgelegt.
Diese können aber auch im Sketch-Pfad liegen, dann müsste man nur die #includes von <> auf "" ändern.

Kurzworkshop für Noobs   8)

MQTT-Topics definieren


Diese sind in der ESP8266_Basic_data.cpp zu definieren.
Hier können einfach die vorhandenen TopicTrees für subscribe und publish erweitert werden.
Wichtig ist hier die manuelle Anpassung der array[] indizes, diese müssen natürlich schlüssig sein.

Topics::Topics(){

...
...
  sub.E1.item[3] = "user";
  sub.E2.item[3][0] = "public";
  sub.E3.item[3][0][0] = "name";
  sub.E3.item[3][0][1] = "userName";
  sub.E2.item[3][1] = "private";
  sub.E3.item[3][1][0] = "age";
  sub.E3.item[3][1][1] = "weight";

...
...

  pub.E1.item[3] = "Control";
  pub.E2.item[3][0] = "User";
  pub.E3.item[3][0][0] = "machDies";
  pub.E3.item[3][0][1] = "machDas";


Die maximale Tiefe der Trees ist in der ESP8266_Basic_data.h ggf. anzupassen.


//publish struct
  const int pub_e1 = 4; //define TreeDepht here!!!
  const int pub_e2 = 5;
  const int pub_e3 = 5;
  const int pub_e4 = 0;

...
...

//subscribe struct
  const int sub_e1 = 4; //define TreeDepht here!!!
  const int sub_e2 = 5;
  const int sub_e3 = 4;
  const int sub_e4 = 0;


Ein publish ist jetz denkbar einfach!

  bool pub(int e1, char* Payload);
  bool pub(int e1, int e2, char* Payload);
  bool pub(int e1, int e2, int e3, char* Payload);


Diese functions sind public, d.h. auch aus dem Sketch herraus kann jetz eines der definierten Topics "gepublisht" werden:

ESP8266_template.ino

#include "ESP8266_Basic.h"
ESP8266_Basic espClient;

void setup() { 
  Serial.begin(115200);
  Serial.println("");
 
  espClient.start_WiFi_connections();

  espClient.pub(3,0,1, "ValueData");    //  hier wird Topic <ESPDeviceName/Control/User/machDas "ValueData">  an den Broker gesendet.


void loop() {
  espClient.handle_connections();
}


Als subscribe ist das Topic <ESPDeviceName/#> fest vorgegeben, d.h. alle Topics die für diesen ESP sind kommen pauschal an und werden auch seriell angezeigt.
Um auf ein definiertes Topic zu reagieren muss das ankommende Topic erstmal auseinander genommen werden.

Definierte Topics können sehr einfach in der ESP8266_Basic.cpp abgefangen werden.


//===> incomming subscribe <---------------------------------------------------
void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) {

...
...

  if (dissectResult.found){
    if (dissectResult.itemPath == "3/0/0"){   //  Hier wird nach dem definierten Topic <ESPDeviceName/user/public/name> gefiltert.
  if (strcmp(value, "Walter") == 0){     //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Walter war es!");
  }
  if (strcmp(value, "Klaus") == 0){      //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Klaus war es!");
  }
}

  }


Jetzt wir klar, dass es mehr Sinn macht dies im Template zu machen, anderenfalls müssen alle Filterergebnisse als Callback in den Sketch geholt werden oder das "dissecten" im Sketch selber stattfinden.


SPIFFs FileUpload


Dazu gibt es hier ein Java-Tool
https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip (https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip)
Das Tool einfach in C:\Program Files (x86)\Arduino\tools\ESP8266FS\tool\esp8266fs.jar entpacken und Arduino neu starten.
Unter Werkzeuge findet man jetzt "ESP8266 Sketch Data Upload"
Die zugehörige Beschreibung über das SPIFFs FS finde ich ganz gut.
http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html (http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html)

Damit können die Files im "/Sktech/data" DIR aus der ArduinioIDE herraus hochgeladen werden.


Zugriff auf SPIFFs Files


Momentan ist nur das Lesen/Schreiben von *.json-Files implementiert.
Es ist aber auch möglich andere Files zu nutzen, nur habe ich da momentan noch keinen Plan von..... :-)
Wenn du es raus hast, poste es doch einfach...... 8)


FirmwareUpload von *.bin Files über einen WEB-Server


Hierzu "einfach" den kompilierten *.bin Sketch-File auf den WEB-Server kopieren.
Bei mir liegen die *.bin-Files nach dem Kompilieren unter:

C:\Users\Pfanne\AppData\Local\Temp\build73b7b65d2a159c2828c1f5395d13bde9.tmp

Weil TEMP, wird das DIR erst beim Kompilieren angelegt.
Jetzt nur noch den Server auf der ConfigPage angeben und los......

Ganz wichtig!!!
Nach dem ersten seriellen Flashen unbeding ein RESET ausführen, entweder über den RESET-Eingang oder Wegnahme der Hilfsspannung.
Der Arduino-Core hat hier noch Probleme mit dem erste Start nach einem seriellen Flash.


Damit sollte man erstmal weiter kommen, falls nicht einfach kurz melden.


Probleme kann es noch geben wenn der Umfang der *.json-Files im Code geändert wird.
Da die Datei bereits existiert und das neue Feld nicht kennt, kann es dann zu Abstürzen kommen.
Das muss noch abgefangen werden, ist eben noch alpha...... ::)

Es müsste aber auch funktionieren, wenn man über das SPIFFs-Tool einfach die geänderte *.json uploadet.
Werde ich ma testen......


Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 29 März 2016, 19:30:00
Update  --> alpha V0.200

https://forum.fhem.de/index.php/topic,50238.msg419846.html#msg419846 (https://forum.fhem.de/index.php/topic,50238.msg419846.html#msg419846)
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 29 März 2016, 19:51:48
Respekt.
Danke :)

Das war vermutlich eine der ausführlicheren Antworten im fhem Forum ;)

Ich versuche später mal die 0.200 per Http upzudaten.

Dann werde ich mal versuchen zu Publishen und zu Subscriben.

Nochmal Danke schön :)
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 31 März 2016, 09:06:32
ZitatProbleme kann es noch geben wenn der Umfang der *.json-Files im Code geändert wird.
Schreibe doch in die Json Datei die Versionsnummer mit rein.
"Version":        "0.200",

Dann kannst du abfangen, ob Basic und Json Config zusammen passen.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 01 April 2016, 10:59:51
Schon wieder ich...

Zitat
Arduino: 1.6.8 (Windows 7), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Serial, 115200, 4M (3M SPIFFS)"

In file included from C:\Users\Andi\Documents\Arduino\libraries\ESP8266_Basic/ESP8266_Basic.h:53:0,

                 from C:\Users\Andi\Documents\Arduino\Sketche\ESP8266_template\ESP8266_template.ino:17:

C:\Users\Andi\Documents\Arduino\libraries\OneWire/OneWire.h:108:2: error: #error "Please define I/O register types here"

#error "Please define I/O register types here"

  ^

exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).


Zuerst fehlte OneWire ibliotek. Habe eine gefunden und installiert


Dann fehlte eine DS Bibliothek:
Habe es mit dieser versucht:
https://github.com/milesburton/Arduino-Temperature-Control-Library


Was fehlt jetzt???
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 01 April 2016, 12:50:40
In der alpha V0.200 sind schon DS18B20 Routinen mit drin, schau mal in die ESP8266_Basic.h

//Sensoren
  //1Wire direct
  #include "OneWire.h"
  #include <DallasTemperature.h>


Ich glaube die kannst du auch über den Arduino LibraryManager installieren.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 01 April 2016, 13:05:43
Danke, die hatte ich schon. Der Fehler der jetzt stört ist der:
Zitat
C:\Users\Andi\Documents\Arduino\libraries\OneWire/OneWire.h:108:2: error: #error "Please define I/O register types here"

Bin einstweilen wieder auf die 0.116 zurück

Übrigens hab ich nen Bug gefunden :)

Sort of:
Der Updatemechanismus akzeptiert keine Portangaben.

So funktioniert es:

UpdateServer
Server IP 192.168.5.21
FilePath /ESP8266_template.ino.bin



So nicht:

Server IP 192.168.5.21:8000



Noch ne Frage für Deppen:
Sag mal, das ganze Menü ist ja auf mit MQTT aufgebaut wenn ich das richtig sehe.

Könnte man dann mit MQTT-Spy eine Nachricht publishen, die den ESP zum Download und Update bringt?


Für den Fall, dass ich es noch nicht gesagt habe:
Vielen Dank für deine prompte Hilfe  :D
Titel: Antw:ESP8266_Basic Library
Beitrag von: tiwo85 am 01 April 2016, 13:36:10
Hallo,
Ich habe mich auch als hier ein. Erstmal riesen Respekt an Pfanne.
Mich interessiert, ob Holgi es geschafft hat die Library auf dem ESP-01 zum laufen zu kriegen.
Ich habe Arduino 1.6.7 sowie Esp package 2.1 und pubsub 2.6 als Protable "installiert" und die fehlenden Librarys über den Library Manager nach installiert.
Als Board habe ich General Esp Modul und als Speicher 1M(64kSpiffs)
Das Template würde einwandfrei kompiliert und hochgeladen. Nach dem Boot kommt Mounting FS, danach war's das. Entweder wdt Reset oder aber Fatal E.... Am laufenden Bande.


Gesendet von meinem D5803 mit Tapatalk
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 01 April 2016, 14:44:26
Zitat von: Rince am 01 April 2016, 13:05:43
Danke, die hatte ich schon. Der Fehler der jetzt stört ist der:

Komisch, mit der Arduino 1.67 und der ESP8266 V2.1.0 - rc2  läuft es bei mir durch.
Ich habe "meine" Libraries mal drann gehängt.

Zitat von: Rince am 01 April 2016, 13:05:43
Der Updatemechanismus akzeptiert keine Portangaben.
Stimmt, könnte man nachpflegen, momentan wir wohl von Port 80 ausgegangen.
Hab ich noch garnicht drüber nachgedacht......

Zitat von: Rince am 01 April 2016, 13:05:43
Sag mal, das ganze Menü ist ja auf mit MQTT aufgebaut wenn ich das richtig sehe.
Könnte man dann mit MQTT-Spy eine Nachricht publishen, die den ESP zum Download und Update bringt?

Logo, ist schon drinn.... musst du nur antoßen...
Machst du kukiluki....
 
  sub.E1.item[1] = "Control";
  sub.E2.item[1][0] = "ESP8266";
  sub.E3.item[1][0][0] = "Reboot";
  sub.E3.item[1][0][1] = "ShowConfig";
  sub.E3.item[1][0][2] = "updateFirmware";        //  <------- publish DeviceName/Control/ESP8266/updateFirmware
  sub.E3.item[1][0][3] = "MeasureTime";

...
...
...

    if (dissectResult.itemPath == "1/0/2"){
  //UpdateFirmware()
  webServer.updateFirmware();
}


Das war ja Sinn der Übung....


Zitat von: tiwo85 am 01 April 2016, 13:36:10
Das Template würde einwandfrei kompiliert und hochgeladen. Nach dem Boot kommt Mounting FS, danach war's das. Entweder wdt Reset oder aber Fatal E.... Am laufenden Bande.

Hört sich an wie das Problem mit den unterschiedlichen Config-Files.
Lass mal beim Start das FS neu formatieren, dann werden die aktuellen Files neu angelegt.

//My File
//===> read from MyFile <-------------------------------------------------
bool ESP8266_Basic::read_MyFile(){
  bool readOK = false;
  File MyFile;
  //clean FS, for testing
  //SPIFFS.format();            //   <---- das mal aktivieren und starten, danach wieder auskommentieren und wieder neu flashen.


oder die aktuellen Files manuell auf das FS-Laden:

SPIFFs FileUpload

Dazu gibt es hier ein Java-Tool
https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip (https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip)
Das Tool einfach in C:\Program Files (x86)\Arduino\tools\ESP8266FS\tool\esp8266fs.jar entpacken und Arduino neu starten.
Unter Werkzeuge findet man jetzt "ESP8266 Sketch Data Upload"
Die zugehörige Beschreibung über das SPIFFs FS finde ich ganz gut.
http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html (http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html)

Damit können die Files im "/Sktech/data" DIR aus der ArduinioIDE herraus hochgeladen werden.

Ich hab die FS-Files auch nochmal drann gehängt.


Ich hoffe, ihr bekommt das zum laufen....
Ist ja alles noch alpha, da ändert sich immer noch ne Menge.

Gruß
Pf@nne







Titel: Antw:ESP8266_Basic Library
Beitrag von: tiwo85 am 01 April 2016, 15:01:09
Ich werde es mal versuchen.

Gehe ich richtig in der Annahme, das das Filesystem vom Flashen unberührt bleibt? Weil wenn ja, macht es Sinn, das FS zu formatieren. Ist nur noch die Frage offen, welche Einstellungen sollte man in der IDE verwenden, bezüglich FS? Gibt es festgelegte Spezifikationen für die Module oder kann man selber wählen? Frei nach dem Motto, mehr FS weniger Flashspeicher?

Gesendet von meinem D5803 mit Tapatalk

Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 01 April 2016, 15:16:08
Danke Pf@nne, werde mir das nochmal ansehen :)

Zur Zeit baue ich grade das Display ein.

Ein "Hello World" bekomme ich schon beim initialisieren.

Zitat
Gehe ich richtig in der Annahme, das das Filesystem vom Flashen unberührt bleibt? Weil wenn ja, macht es Sinn, das FS zu formatieren.
Ja. Neu flashen läßt das Filesystem am Leben. Es wird formatiert, wenn noch kein FS da ist. Pf@nne hat dir den Code gepostet, den du ändern musst, wenn du immer formatiert haben willst.

ZitatIst nur noch die Frage offen, welche Einstellungen sollte man in der IDE verwenden, bezüglich FS? Gibt es festgelegte Spezifikationen für die Module oder kann man selber wählen? Frei nach dem Motto, mehr FS weniger Flashspeicher?
Jein.
Du solltest eine Einstellung verwenden, die du auch hast.

Stelle es dir vor, als würdest du eine Festplatte in 2 Partitionen aufteilen:
1xBetriebssystem/Programme und 1xPartition für deine Daten

Wie viel du jetzt jeweils wovon brauchst, bleibt im wesentlichen dir überlassen.


Hier ist das aber ausführlich dokumentiert:
http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html

Allerdings weiß ich nicht, was passiert wenn du vorher 1MB / 3MB hattest, und dann 2 MB / 2MB nimmst. Soweit ich Pf@nnes Code gelesen habe, ist das Filesystem dann korrupt und wird neu formatiert.

Aber ich bin auch nur ein Blinder mit dem ESP bis jetz ;)
Titel: Antw:ESP8266_Basic Library
Beitrag von: tiwo85 am 01 April 2016, 15:46:56
Ich steh grad echt auf dem Schlauch.
Das mit dem FS habe ich verstanden.
Mit einem Esp01 bleib ich immer hängen. Nach dem ich jetzt am "Anfang" das FS formatiert habe, kam danach wieder "Fatal exception".
Nun lässt sich der ESP nicht mehr Flashen :-(

Gesendet von meinem D5803 mit Tapatalk

Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 01 April 2016, 15:58:27
Das habe ich in der Arbeit auch mit einem ESP.

Zu Hause bis jetzt noch nicht.

Der augenscheinlichste Unterschied ist, dass mein ESP zu Hause an einem aktiven USB Hub hängt, der in der Arbeit hingegen nicht.


Könnte es ein Stromversorgungsproblem sein?



@Pf@nne
Habe das mit dem FS ausprobiert.
Merkwürdig.

Zuerst schien es, als würde er das ganze FS neu schreiben.
Dauert gefühlt eine Ewigkeit.

Dann macht er einen Reset

Anschließend waren aber die Einstellungen bis incl. WIFI noch da, alles abwärts war weg

Verstehe ich grade nicht.

Titel: Antw:ESP8266_Basic Library
Beitrag von: tiwo85 am 01 April 2016, 16:02:00
Ich habe das Problem heute früh schonmal gehabt, nachdem ich den ESP mit dem ESP flasher neu geflasht hatte, ging es wieder.

Gesendet von meinem D5803 mit Tapatalk

Titel: Antw:ESP8266_Basic Library
Beitrag von: Ranseyer am 01 April 2016, 16:07:28
Hi, mein ESP* ist gerade mit der Post gekommen. Prinzipiell ist das hier ein sehr hilfreiches Projekt.

Trotzdem mal ne blöde Frage...

Ich kann den ESP nicht mit dem normalen WLAN verbinden.
Grund: Das Eingabefeld für das Passwort ist zu kurz, Wäre es möglich das Feld ~ 10 Zeichen länger zu machen ? (Ich will mein WLAN Passwort nicht ändern, nur wegen dem ESP...)
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 01 April 2016, 20:51:12
Erstmal die Nachlieferung der Libraries, die hatt ich vergessen anzuhängen.

Zitat von: Rince am 01 April 2016, 15:58:27
Zuerst schien es, als würde er das ganze FS neu schreiben.
Dauert gefühlt eine Ewigkeit.
Dann macht er einen Reset
Anschließend waren aber die Einstellungen bis incl. WIFI noch da, alles abwärts war weg
Verstehe ich grade nicht.

Die letzte SSID / Password sind nicht im FS gespeichert, das macht der ESP in seiner internen Hardwarestruktur!
Da ist der kleine Bursche sehr hartnäckig!

Beim Start prüfe ich ob er eine SSID hat, falls ja wird diese in die CFG im FS übernommen.

Zitat von: ranseyer am 01 April 2016, 16:07:28
Grund: Das Eingabefeld für das Passwort ist zu kurz, Wäre es möglich das Feld ~ 10 Zeichen länger zu machen ? (Ich will mein WLAN Passwort nicht ändern, nur wegen dem ESP...)

Klar, dazu musst du nur die länge der Variablen und die länge des Inputfeldes im Webinterface ändern.

ESP8266_Basic_data.h

// Config struct
  typedef struct CFG{
    char version[40] = Version;
    char webUser[40];
    char webPassword[40];
    char apName[40];
    char apPassword[40];
    char wifiSSID[40];
    char wifiPSK[40];                     //  <--
    char wifiIP[20];
    char mqttServer[20];
    char mqttPort[6];
    char mqttDeviceName[20];
    char mqttStatus[20];
    char updateServer[20];
    char filePath[40];
  };


ESP8266_Basic_webserver.cpp

Hier die maxlength='40' anpassen.
  " <tr>"
  "  <td><b><font size='+1'>WiFi</font></b></td>"
  "  <td></td>"
  " </tr>"
  "  <td>SSID</td>"
  "  <td><input type='text' id='wifiSSID' name='wifiSSID' value='" + String(cfg->wifiSSID) + "' size='30' maxlength='40' placeholder='SSID'></td>"
  " </tr>"
  " <tr>"
  " <tr>"
  "  <td>Password</td>"
  "  <td><input type='text' id='wifiPSK' name='wifiPSK' value='" + String(cfg->wifiPSK) + "' size='30' maxlength='40' placeholder='Password'></td>"
  " </tr>"
  " <tr>"


P.S.
mehr als 40 Zeichen, Respect, ist dass das gleiche Passwort wie für die Abschusscodes der amerikanischen Nuklearraketen?  8)




Titel: Antw:ESP8266_Basic Library
Beitrag von: Omega am 01 April 2016, 22:31:49
WPA2 lässt 63 Zeichen zu  ;D
Von dieser Maximallänge sollte man ausgehen. Ansonsten kommt morgen der Nächste und möchte von 40 auf 41 erweitern. Usw....

LG
Holger
Titel: Antw:ESP8266_Basic Library
Beitrag von: Ranseyer am 01 April 2016, 22:54:18
Zitatmehr als 40 Zeichen, Respect, ist dass das gleiche Passwort wie für die Abschusscodes der amerikanischen Nuklearraketen?
Das ist das Passwort das erst in 5 Jahren* geknackt wird, während deins schon in 4 Jahren geknackt ist.   8)

ZitatWPA2 lässt 63 Zeichen
Macht Sinn das so zu definieren...

Danke für die sehr konkreten Hinweise,
Nun bin ich im ganz normalen WLAN ohne Klimmzüge.

Username/Passwort in der "ESP8266 Configuration" habe ich zwar konfiguriert, will er aber auch jetzt nicht wissen...

Ansonsten werde ich Morgen mal auf der Basis mal etwas HW dranhängen.



*Hoffe ich
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 03 April 2016, 23:23:08
ZitatDie letzte SSID / Password sind nicht im FS gespeichert, das macht der ESP in seiner internen Hardwarestruktur!
Da ist der kleine Bursche sehr hartnäckig!

Gut. Dann ist das Rätsel gelöst. Das Filesystem wird völlig gebügelt.
Damit erübrigt sich auch das formatieren bei einer ungültigen Json Config Datei. Leeres Image, fertig (hab das nicht getestet. Ggfs. muss man eine Alibi-Datei in den Upload Ordner werfen.


Cool wäre jetzt, wenn man die Json Datei downloaden könnte.

Dann könnte man beim erstellen neuer Geräte gleich die Konfiguration mit hochladen.


Ich werde die nächsten Tage mal versuchen, eine Library zu schreiben, die BMPs vom SPIFF auf nem Display anzeigt. Das lesen von SD und SPIFFS scheint recht ähnlich zu sein.

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 04 April 2016, 19:40:04
Zitat von: Rince am 03 April 2016, 23:23:08
Cool wäre jetzt, wenn man die Json Datei downloaden könnte.
Dann könnte man beim erstellen neuer Geräte gleich die Konfiguration mit hochladen.

Die Files sind doch jetzt im data-DIR vohanden, die kannst du doch anpassen und hochladen. Warum musst du die Downloaden?

Zitat von: Rince am 03 April 2016, 23:23:08
Ich werde die nächsten Tage mal versuchen, eine Library zu schreiben, die BMPs vom SPIFF auf nem Display anzeigt. Das lesen von SD und SPIFFS scheint recht ähnlich zu sein.

Das sollte gehen, beim BMP brauchst du ja "nur" Byteweise lesen und 1:1 in das Display schieben.
Freue mich auf die ersten Bilder.......
Titel: Antw:ESP8266_Basic Library
Beitrag von: Rince am 04 April 2016, 20:33:03
ZitatDie Files sind doch jetzt im data-DIR vohanden

Die Konfigurationsdatei nicht :(
Deshalb würde ich sie gerne runterladen  ;)
Titel: Antw:ESP8266_Basic Library
Beitrag von: tiwo85 am 04 April 2016, 20:34:39


Zitat von: Rince am 01 April 2016, 15:58:27
...
Könnte es ein Stromversorgungsproblem sein?...

Eigentlich nicht, denn die 2 Nodemcu Dev Kits laufen astrein über den gleichen Usb-port. Evtl ist es nicht die Stromversorgung, sondern ggf. der Querschnitt der Versorgungsleitungen. Aber das ist auch eher unwahrscheinlich. Zur Zeit läuft der "Prototyp" auf einer Lochrasterplatine. Gespeist direkt über USB 5V  - > LD1117v-33  -> ESP-01
Vor und hinter dem LD1117v sind jeweils 10 uF Elko. Und direkt am ESP noch ein 220uF Elko. Vielleicht ne kalte Lötstelle vor dem großen Elko.
Andere Möglichkeit wäre, das der Flash der ESP Module ne Macke hat.

Gesendet von meinem D5803 mit Tapatalk

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 04 April 2016, 22:26:12
Zitat von: Rince am 04 April 2016, 20:33:03
Die Konfigurationsdatei nicht :(
Deshalb würde ich sie gerne runterladen  ;)

Ist doch nur ein json-File
config.json
{
  "webUser":        "ESPuser",
  "webPassword":    "ESPpass",
  "apName":         "ESP8266_402658",
  "apPassword":     "ESP8266config",
  "wifiSSID":       "Pf@nne-NET",
  "wifiPSK":        "xxxx",
  "wifiIP":         "",
  "mqttServer":     "192.168.1.203",
  "mqttPort":       "1883",
  "mqttDeviceName": "ESP8266_402658",
  "updateServer":   "192.168.1.3",
  "filePath":       "/bin/ESP8266_AktSen.ino.bin"
}


Editor uns los.....  oder reden wir hier aneinander vorbei?
Titel: Antw:ESP8266_Basic Library
Beitrag von: wingfighter am 05 April 2016, 23:36:37
Hallo Pf@nne

Ich habe Deine Bibliothek in das NHD-1.69-... Sketch erfolgreich eingebunden. Ich musste bezüglich WiFiUDP für NTP  ein paar Anpassungen vornehmen und habe den TopicTree für die Temperaturen bzw Luftfeuchtigkeits-Sensoren etwas erweitert.
Mir ist noch nicht ganz klar, wie Du Dir das mit den subscribe TopicTree gedacht hast.
In der Library ist ja die subscribe-TopicTree-Struktur definiert, auf die ich aus dem Programm gut zugreifen könnte, so wie ich es mit den Publish's auch mache.
So wie ich das sehe, sind die Strings, die den einzelnen Feldern zugewiesen werden (Username, Password, Server, Port etc.)  reine Informationen und würden evtl. durch eine Auswertung des Payloads in der mqttCallback-Funktion mit dem empfangenden Inhalt überschrieben werden, so dieses dort programmiert wird.
In dieser Funktion hast Du im Moment ein paar Spezialfälle abgefangen (Reboot, pubConfig(), updateFirmware etc.), die allerdings keinen Payload speichern, sondern direkt aktiv werden.
Wäre es für eine einheitliche Abfrage über eine Funktion char* sub(x, y, z); nicht sinnvoll, auf jedes einzelne Feld der Struktur zuzugreifen, um den in der mqttCallback-Funktion in die Felder geschrieben Payload wieder auszulesen und z.B. auf das OLED zu schreiben?

Es wäre natürlich für die Display-Anwendung im Speziellen auch hilfreich, wenn man zu dem eigentlichen Payload noch z.B. über die WebOberfläche konfigurierbare Namen für den gerade angezeigten Inhalt auf dem Display (Zeile 1 im OLED) und evtl. auch die Maßeinheit speichern könnte. Denn - so habe ich es in einem meiner letzten Posts im OLED im Blinddeckel-Thread geschrieben - es wäre nach jetzigem Entwicklungsstand eine Addition von Messwert, Einheit und Displayzeile 1 im Reading des FHEM-Attributes nötig um alle drei benötigten Informationen dynamisch an das Display übertragen zu bekommen. Das scheint mir auch nicht trivial zu sein - zumindest nicht ohne py-Script.

So wie es ich die mqttCallback-Funktion im Moment verstanden habe, würde ich je nach Topic den Payload direkt meinen Variablen bzw Arrays zuweisen müssen. Aber das würde den Sinn einer Library widersprechen. Besser wäre eben eine Funktion, die auf Daten zugreift, die in der Library empfangen, verarbeitet und in einer Struktur gespeichert worden sind.

Viele Grüße
wingfighter

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 07 April 2016, 14:58:13
Moin wingfighter,

Zur Topic-Behandlung:

Es gibt je einen TopicTree für publish und subscribe diese werden in der ESP8266_Basic_data.cpp angelegt.
Die bereits vorhandenen Topics sind nur exemplarisch, und können auch komplett frei definiert werden!
Einige Topics sind allerdings schon in Betrieb (Reset, Update, ect.....).

Schau doch bitte hier nochmal rein:
https://forum.fhem.de/index.php/topic,50238.msg431833.html#msg431833 (https://forum.fhem.de/index.php/topic,50238.msg431833.html#msg431833)

Zitatdie allerdings keinen Payload speichern, sondern direkt aktiv werden.
Das ist ja optional, wenn du nur auf ein Ereignis Triggern möchtest, ist ein Payload ja nicht unbedingt erforderlich.
Wenn du unterschiedliche Payloads hast kannst du sie einfach abfragen:

//===> incomming subscribe <---------------------------------------------------
void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) {

...
...

  if (dissectResult.found){
    if (dissectResult.itemPath == "3/0/0"){   //  Hier wird nach dem definierten Topic <ESPDeviceName/user/public/name> gefiltert.
  if (strcmp(value, "Walter") == 0){     //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Walter war es!");
  }
  if (strcmp(value, "Klaus") == 0){      //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Klaus war es!");
  }
}


In deinem Fall ändere doch den subcribe-Tree:

Topics::Topics(){

...
...
  sub.E1.item[3] = "Hardware";
  sub.E2.item[3][0] = "Display";
  sub.E3.item[3][0][0] = "Zeile1";
  sub.E3.item[3][0][1] = "Zeile2";
  sub.E2.item[3][1] = "Servos";
  sub.E3.item[3][1][0] = "Servo1";
  sub.E3.item[3][1][1] = "Servo2";

...


und filtere:


//===> incomming subscribe <---------------------------------------------------
void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) {

...
...

  if (dissectResult.found){
    if (dissectResult.itemPath == "3/0/0"){   //Zeile1
      Serial.println(value); 
    }
    if (dissectResult.itemPath == "3/0/1"){   //Zeile2
      Serial.println(value); 
    }


ZitatAber das würde den Sinn einer Library widersprechen
Daher würde ich das auch eher als Template bezeichnen, Library ist vielleicht an dieser Stelle nicht mehr ganz passend.
Mann nimmt sich ein ESP8266_Basic und schreibt dieses Template auf seine Bedürfnisse um.

Ich hoffe, dass hilft dir weiter.....

Gruß
Pf@nne

Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 30 April 2016, 01:32:02
Hallo zusammen,

springe hier mal auf den Zug auf....

Bekomme beim Kompilieren (habe zuerst IDE 1.6.5 probiert, nun 1.6.8):

Arduino: 1.6.8 (Windows 8.1), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

WARNUNG: Kategorie '' in der Bibliothek OneWire ist ungültig und wird auf 'Uncategorized' festgelegt
WARNUNG: Kategorie '' in der Bibliothek UIPEthernet ist ungültig und wird auf 'Uncategorized' festgelegt
In file included from C:\Users\neodymyag\Documents\Arduino\libraries\ESP8266_Basic/ESP8266_Basic.h:53:0,

                 from C:\Users\neodymyag\Documents\Arduino\Sketches\ESP8266_template\ESP8266_template.ino:26:

C:\Users\neodymyag\Documents\Arduino\libraries\OneWire/OneWire.h:108:2: error: #error "Please define I/O register types here"

#error "Please define I/O register types here"

  ^

exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.


kann mir einer auf die Sprünge helfen?


Danke

W
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 30 April 2016, 10:40:47
Moin Will,

hast du die 1Wire Libraries installiert?
Schaue bitte mal in die ESP8266_Basic.h

//Sensoren
  //1Wire direct
  #include "OneWire.h"
  #include <DallasTemperature.h>


Die kannst du über den Arduino-Library-Manager nachinstallieren.
Dann sollte es laufen....

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 30 April 2016, 22:29:49
wer lesen kann ist im Vorteil.....OneWire.h war installiert, nach Update einiger libraries läuft das durch.

Danke. Sollte das nicht immer in der Nacht machen....



Gruss



W
Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 30 April 2016, 22:51:19
also läuft offensichtlich wie gedacht....prima.

Frage: wie komme ich auf die konfig Seite im laufenden Betrieb, nur die IP geht bei mir nicht...
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 30 April 2016, 22:57:41
Welche IP nimmst du denn?
Bist du mit WLAN auf dem AP?

192.168.4.1?

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 30 April 2016, 23:11:48
Nein er hat sich schon in mein wlan Netz eingelogged. Ich habe die nun zugeordnete IP versucht. Ich dachte der AP springt nur an, wenn er sich nicht einloggen kann...

Sent from my SGP611 using Tapatalk

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 01 Mai 2016, 04:32:01
Das ist richtig, der AP ist nur an, wenn er sich nicht verbinden konnte.
Hast du die Zugangsdaten denn über den AP konfiguriert oder waren die schon drinn?

Was sagt denn die serielle Ausgabe?

Die IP sollte reichen, die configseite ist die root page.

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 01 Mai 2016, 21:29:55
Hi Pf@nne,



geht alles - musste den ESP nochnal booten, dann alles gut.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 01 Mai 2016, 21:34:26
bin jetzt aber nicht schlau genug um das Thema publish und subscribe ganz zu verstehen...

sagen wir mal ich will auf die Topics

home/temperature und

home/humidity

reagieren bzw. einlesen weil ich die übertragenen Werte im SKetch verabeiten will.

Wiie mache ich dann den Topic tree?



Danke.

W
Titel: Antw:ESP8266_Basic Library
Beitrag von: wingfighter am 02 Mai 2016, 00:24:00
Hallo Will

Schau mal hier, da habe ich das mal für meinen Sketch beschrieben:
https://forum.fhem.de/index.php/topic,50697.msg440863.html#msg440863 (https://forum.fhem.de/index.php/topic,50697.msg440863.html#msg440863)

Gruß wingfighter
Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 02 Mai 2016, 07:32:11
Prima. Ein Beispiel ist immer gut. Hast du für Temp 20 Sensoren, oder warum legst du so viele an?

Sent from my SGP611 using Tapatalk

Titel: Antw:ESP8266_Basic Library
Beitrag von: wingfighter am 02 Mai 2016, 15:35:32
Die MQTT-Struktur stammt von Pf@nne.
Ich hatte aber bei meinem Display-Projekt auch 10 vorgesehen.
Der Gedanke ist, dass man mit anderen im Haus verteilten ESP8266 diverse Raumtemperaturen per MQTT übertragen und auf dem Display anzeigen kann.
In der WebConfig habe ich im Moment aber nicht aller "verdrahtet".

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 02 Mai 2016, 22:30:11
Hatten wir doch alles schonmal..... ::)

Zitat von: Pf@nne am 07 April 2016, 14:58:13
Moin wingfighter,

Zur Topic-Behandlung:

Es gibt je einen TopicTree für publish und subscribe diese werden in der ESP8266_Basic_data.cpp angelegt.
Die bereits vorhandenen Topics sind nur exemplarisch, und können auch komplett frei definiert werden!
Einige Topics sind allerdings schon in Betrieb (Reset, Update, ect.....).

Schau doch bitte hier nochmal rein:
https://forum.fhem.de/index.php/topic,50238.msg431833.html#msg431833 (https://forum.fhem.de/index.php/topic,50238.msg431833.html#msg431833)
Das ist ja optional, wenn du nur auf ein Ereignis Triggern möchtest, ist ein Payload ja nicht unbedingt erforderlich.
Wenn du unterschiedliche Payloads hast kannst du sie einfach abfragen:

//===> incomming subscribe <---------------------------------------------------
void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) {

...
...

  if (dissectResult.found){
    if (dissectResult.itemPath == "3/0/0"){   //  Hier wird nach dem definierten Topic <ESPDeviceName/user/public/name> gefiltert.
  if (strcmp(value, "Walter") == 0){     //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Walter war es!");
  }
  if (strcmp(value, "Klaus") == 0){      //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Klaus war es!");
  }
}


In deinem Fall ändere doch den subcribe-Tree:

Topics::Topics(){

...
...
  sub.E1.item[3] = "Hardware";
  sub.E2.item[3][0] = "Display";
  sub.E3.item[3][0][0] = "Zeile1";
  sub.E3.item[3][0][1] = "Zeile2";
  sub.E2.item[3][1] = "Servos";
  sub.E3.item[3][1][0] = "Servo1";
  sub.E3.item[3][1][1] = "Servo2";

...


und filtere:


//===> incomming subscribe <---------------------------------------------------
void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) {

...
...

  if (dissectResult.found){
    if (dissectResult.itemPath == "3/0/0"){   //Zeile1
      Serial.println(value); 
    }
    if (dissectResult.itemPath == "3/0/1"){   //Zeile2
      Serial.println(value); 
    }

Daher würde ich das auch eher als Template bezeichnen, Library ist vielleicht an dieser Stelle nicht mehr ganz passend.
Mann nimmt sich ein ESP8266_Basic und schreibt dieses Template auf seine Bedürfnisse um.

Ich hoffe, dass hilft dir weiter.....

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 02 Mai 2016, 22:31:55
Oder hier.... 8)

Zitat von: Pf@nne am 29 März 2016, 15:47:24
Das freut mich doch erstmal...... 8)
Das Arbeiten muss natürlich ein wenig erläutert werden, frei nach dem Motto "was hat sich der Dichter wohl dabei gedacht!?".
Das habe ich leider zeitlich noch nicht geschafft, zumal ich selber noch nicht so ganz weiß, ob ESP_Basic eine Library oder vielleicht doch eher ein Template ist.
Momentan würde ich sagen, dass es sich hierbei um ein Template handelt, also das Framework selber als Basis dient und modifiziert wird.
Das habe ich jetzt schon bei zwei eigenen Projekten so gemacht, das hat auch sehr gut geklappt.

Da ich mit ProgrammerNotepad arbeite habe ich die ESP8266_Basic-Files im Library-Pfad abgelegt.
Diese können aber auch im Sketch-Pfad liegen, dann müsste man nur die #includes von <> auf "" ändern.

Kurzworkshop für Noobs   8)

MQTT-Topics definieren


Diese sind in der ESP8266_Basic_data.cpp zu definieren.
Hier können einfach die vorhandenen TopicTrees für subscribe und publish erweitert werden.
Wichtig ist hier die manuelle Anpassung der array[] indizes, diese müssen natürlich schlüssig sein.

Topics::Topics(){

...
...
  sub.E1.item[3] = "user";
  sub.E2.item[3][0] = "public";
  sub.E3.item[3][0][0] = "name";
  sub.E3.item[3][0][1] = "userName";
  sub.E2.item[3][1] = "private";
  sub.E3.item[3][1][0] = "age";
  sub.E3.item[3][1][1] = "weight";

...
...

  pub.E1.item[3] = "Control";
  pub.E2.item[3][0] = "User";
  pub.E3.item[3][0][0] = "machDies";
  pub.E3.item[3][0][1] = "machDas";


Die maximale Tiefe der Trees ist in der ESP8266_Basic_data.h ggf. anzupassen.


//publish struct
  const int pub_e1 = 4; //define TreeDepht here!!!
  const int pub_e2 = 5;
  const int pub_e3 = 5;
  const int pub_e4 = 0;

...
...

//subscribe struct
  const int sub_e1 = 4; //define TreeDepht here!!!
  const int sub_e2 = 5;
  const int sub_e3 = 4;
  const int sub_e4 = 0;


Ein publish ist jetz denkbar einfach!

  bool pub(int e1, char* Payload);
  bool pub(int e1, int e2, char* Payload);
  bool pub(int e1, int e2, int e3, char* Payload);


Diese functions sind public, d.h. auch aus dem Sketch herraus kann jetz eines der definierten Topics "gepublisht" werden:

ESP8266_template.ino

#include "ESP8266_Basic.h"
ESP8266_Basic espClient;

void setup() { 
  Serial.begin(115200);
  Serial.println("");
 
  espClient.start_WiFi_connections();

  espClient.pub(3,0,1, "ValueData");    //  hier wird Topic <ESPDeviceName/Control/User/machDas "ValueData">  an den Broker gesendet.


void loop() {
  espClient.handle_connections();
}


Als subscribe ist das Topic <ESPDeviceName/#> fest vorgegeben, d.h. alle Topics die für diesen ESP sind kommen pauschal an und werden auch seriell angezeigt.
Um auf ein definiertes Topic zu reagieren muss das ankommende Topic erstmal auseinander genommen werden.

Definierte Topics können sehr einfach in der ESP8266_Basic.cpp abgefangen werden.


//===> incomming subscribe <---------------------------------------------------
void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) {

...
...

  if (dissectResult.found){
    if (dissectResult.itemPath == "3/0/0"){   //  Hier wird nach dem definierten Topic <ESPDeviceName/user/public/name> gefiltert.
  if (strcmp(value, "Walter") == 0){     //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Walter war es!");
  }
  if (strcmp(value, "Klaus") == 0){      //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Klaus war es!");
  }
}

  }


Jetzt wir klar, dass es mehr Sinn macht dies im Template zu machen, anderenfalls müssen alle Filterergebnisse als Callback in den Sketch geholt werden oder das "dissecten" im Sketch selber stattfinden.


SPIFFs FileUpload


Dazu gibt es hier ein Java-Tool
https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip (https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip)
Das Tool einfach in C:\Program Files (x86)\Arduino\tools\ESP8266FS\tool\esp8266fs.jar entpacken und Arduino neu starten.
Unter Werkzeuge findet man jetzt "ESP8266 Sketch Data Upload"
Die zugehörige Beschreibung über das SPIFFs FS finde ich ganz gut.
http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html (http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html)

Damit können die Files im "/Sktech/data" DIR aus der ArduinioIDE herraus hochgeladen werden.


Zugriff auf SPIFFs Files


Momentan ist nur das Lesen/Schreiben von *.json-Files implementiert.
Es ist aber auch möglich andere Files zu nutzen, nur habe ich da momentan noch keinen Plan von..... :-)
Wenn du es raus hast, poste es doch einfach...... 8)


FirmwareUpload von *.bin Files über einen WEB-Server


Hierzu "einfach" den kompilierten *.bin Sketch-File auf den WEB-Server kopieren.
Bei mir liegen die *.bin-Files nach dem Kompilieren unter:

C:\Users\Pfanne\AppData\Local\Temp\build73b7b65d2a159c2828c1f5395d13bde9.tmp

Weil TEMP, wird das DIR erst beim Kompilieren angelegt.
Jetzt nur noch den Server auf der ConfigPage angeben und los......

Ganz wichtig!!!
Nach dem ersten seriellen Flashen unbeding ein RESET ausführen, entweder über den RESET-Eingang oder Wegnahme der Hilfsspannung.
Der Arduino-Core hat hier noch Probleme mit dem erste Start nach einem seriellen Flash.


Damit sollte man erstmal weiter kommen, falls nicht einfach kurz melden.


Probleme kann es noch geben wenn der Umfang der *.json-Files im Code geändert wird.
Da die Datei bereits existiert und das neue Feld nicht kennt, kann es dann zu Abstürzen kommen.
Das muss noch abgefangen werden, ist eben noch alpha...... ::)

Es müsste aber auch funktionieren, wenn man über das SPIFFs-Tool einfach die geänderte *.json uploadet.
Werde ich ma testen......


Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Will am 05 Mai 2016, 22:05:56
Hallo Pf@nne,

funktioniert alles wie es soll.....Danke!
Titel: Antw:ESP8266_Basic Library
Beitrag von: regenbieger am 26 Juni 2016, 18:39:52
Hi,
ich nutze die Library für einen ESP mit DHT22, 2xRelais, 1xPIR und LUX-Meter BH1750.
Publishen klappt super, subscribe in der ESP8266_Basic.cpp auch:

    if (dissectResult.itemPath == "2/0/0"){
  if (strcmp(value, "1") == 0){
    digitalWrite(12, LOW);
  }
  else {
        digitalWrite(12, HIGH);
      }
}
.....

Als nächstes wollte ich auf angeschlossenen LiquidCrystal_I2C Informationen ausgeben. Aus dem Sketch kein Problem, aber per Callback aus dem subscribe bekomme ich es einfach nicht hin. Meine dürftiges Wissen bezüglich der Pointer, Handels und was auch immer benutzt werden muß um im Sketch die Werte aus dem ESP8266_Basic.cpp subscribe zu kriegen, reicht einfach nicht.  :-[
Bitte kann mir jemand ein einfaches Beispiel geben wie ich im Sketch eine Funktion aufrufe die als Parameter dissectResult.itemPath und value übergeben bekommt. Also etwa so:
ESP8266_Basic.cpp
  if (dissectResult.found){
  mqttsub_Callback(dissectResult.itemPath,value);

und im Sketch aufruft:
void mqttsub_Callback(char* topic,  char* msgtext) {
//wenn Topic für LCD dann schieb es drauf
}


vielen Dank schonmal
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 27 Juni 2016, 20:48:34
Moin,

für die Ansteuerung deines Displays musst du doch nur den subscribe-Tree um deine Topics erweitern:


  sub.E1.item[3] = "LCD";
  sub.E2.item[3][0] = "CMD";
  sub.E3.item[3][0][0] = "Clear";
  sub.E3.item[3][0][1] = "Reset";
  sub.E2.item[3][1] = "print";
  sub.E3.item[3][1][0] = "row1";
  sub.E3.item[3][1][1] = "row2";


und dann einfach nach dem dissector wieder einfangen:

  if (dissectResult.itemPath == "3/1/0"){
     LCD.writeText.row1(value);
  }


Ich weiß nicht so genau, warum du das in einem Callback verarbeiten möchtest.

Gruß
Pf@nne

Titel: Antw:ESP8266_Basic Library
Beitrag von: regenbieger am 27 Juni 2016, 22:30:57
Ich vermute mal ich wollte dem ursprünglichen Gedanken hinter einer Library hinterher jagen und alles im Arduino ino sketch erledigen. Da wäre das eben genau das Puzzelteil gewesen was mir das ermöglicht hätte. Wenn ich das, wie von dir vorgeschlagen mache (also als modifizierbares Template nehme) klappt das alles prima. Ich hatte einfach nur nicht aufgeben wollen und wie ein irrer dem Syntax hinterher gejagt. Vielleicht hast du ja doch ein Beispiel wie ich das Callback im Sketch umsetzen kann. Unterm Strich ist die ESP8266_Basic Library ein sehr gut gelungenes Stück Software und ich bin dir schon jetzt für diese Lösung sehr dankbar.
Titel: Antw:ESP8266_Basic Library
Beitrag von: schka17 am 13 Oktober 2016, 22:22:35
Hallo Pf@nne,

ist jetzt zwar nicht direkt eine Frage zu deinem Template aber vielleicht kannst du trotzdem einen Tip geben.
Ich verwende dein Template um mein Milight Gateway zu erweitern, und zwar um Kommunikation über MQTT anstatt UDP.

Ich schaffe es aber einfach nicht die gesnifften Werte unit_8 in Hex Werte und in ein format umzuwandeln um den das publish KOmmando abzusetzen:

Zitat#include "ESP8266_Basic.h"
ESP8266_Basic espClient;

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

  espClient.start_WiFi_connections();

  espClient.pub(3,0,1, "ValueData");    //  hier wird Topic <ESPDeviceName/Control/User/machDas "ValueData">  an den Broker gesendet.
}

void loop() {
  espClient.handle_connections();
}

Welches Format muss die Variable haben die hier durch "ValuData" dargestellt wird? bzw. wie kann ich die aus einer unit_8 convertieren? ich verzweifle schön langsam, alles suche hat bis jetzt auch nichts gebracht.

vg

Karl

Edit:  Hat sich erledigt, habs herausgefunden.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Kuzl am 19 Oktober 2016, 11:15:01
Hallo Pf@nne,

ich hab ein paar fragen zu deinem Template:

wie muss ich alles anpassen, dass ich das Template im Sketch-Ordner verwenden kann?
Mir gefällt das im Lib-Ordner nicht, da ich Probleme bekomme, sobald ich das bei mehr als einem Projekt verwenden will.

Ist es möglich, alle Topics, die subscribed werden am Anfang einmal bekannt zu machen (ohne inhalt publishen), damit man weiß, was man überhaupt alles über MQTT steuern kann?
Ich will nicht in einem Jahr im Code schauen müssen, wie nochmal der MQTT-Pfad für einen reset war.

Wird der Passwortschutz bei der Webconfiguration nicht verwendet?
Ich konnte jedenfalls ohne eingabe von Benutzer und Passwort den MQTT-Server ändern.

Ist irgendwo beschrieben, wie die OneWire-Bibliothek, die du ja irgendwie verwendest, bedient wird?

Schon mal vielen Dank und viele Grüße,
Kuzl
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 19 Oktober 2016, 11:38:16
Moin Kuzl,

Zitat von: Kuzl am 19 Oktober 2016, 11:15:01
wie muss ich alles anpassen, dass ich das Template im Sketch-Ordner verwenden kann?
Mir gefällt das im Lib-Ordner nicht, da ich Probleme bekomme, sobald ich das bei mehr als einem Projekt verwenden will.

Gedacht war das mal als Library, ich sehe es mittlerweile aber auch eher als Template.
Du brauchst die zusätzlichen Files (*.h, *.cpp) nur in deinen Sketch-Ordner verschieben.
Das ist bei diesem Template schon gemacht:
https://github.com/Pfannex/ESP8266_AktSen (https://github.com/Pfannex/ESP8266_AktSen)

Zitat von: Kuzl am 19 Oktober 2016, 11:15:01
Ist es möglich, alle Topics, die subscribed werden am Anfang einmal bekannt zu machen (ohne inhalt publishen), damit man weiß, was man überhaupt alles über MQTT steuern kann?
Ich will nicht in einem Jahr im Code schauen müssen, wie nochmal der MQTT-Pfad für einen reset war.

Klar, du kannst den ganzen subscribe Topic-Tree beim Start einmal ohne Values publishen.
Auf der Gegenseite kannst du dann ja den ganzen Schwung mit ESP_ID/# einfangen.
Besser wäre es vielleicht wenn man diesen Vorgang über ein eigenes Topic anstoßen könnte z.B. ESP_ID/CMD/showAllTopics.
Dann weiß die Gegenseite ja was sie will.

Ich habe auch schon eine Version (halbfertig) wo die Topics aus externen JSON-Files eingelesen werden.
Dann sind die Topics nicht mehr "hardgecodet".


Zitat von: Kuzl am 19 Oktober 2016, 11:15:01
Wird der Passwortschutz bei der Webconfiguration nicht verwendet?
Ich konnte jedenfalls ohne eingabe von Benutzer und Passwort den MQTT-Server ändern.
Passwortschutz ist noch nicht implementiert.
Ist auch die Frage wie weit man da gehen will......

Ungeschützt ist man ja auch nur bei der ersten Einschaltung.
Wenn die SSID deines Netzwerkes einmal eingegeben worden ist,
sollte der AP ja zu bleiben.

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Kuzl am 20 Oktober 2016, 07:48:38
Hallo Pf@nne,

danke für deine umfangreiche Anwort, werde ich heute gleich probieren :)
Hast recht, eigentlich muss ich ja nur über das Komplette Array loopen, dann hab ich alles gepublisht :)

Wie ist das eigentlich bei den subscribes, wenn ich eine Funktion oder Variable aus meinem Sketch verwenden will?
Muss ich da irgendwie ein Headerfile oder so machen? Hab das bei Arduino bisher noch nie gebraucht  ::)

Den Passwortschutz sehe ich ähnlich wie du - ist im Privaten Netzwerk nicht unbedingt nötig. War nur weils mir aufgefallen ist.

Viele Grüße,
Kuzl
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 20 Oktober 2016, 11:08:50
Moin Kuzl,

Zitat von: Kuzl am 20 Oktober 2016, 07:48:38
Wie ist das eigentlich bei den subscribes, wenn ich eine Funktion oder Variable aus meinem Sketch verwenden will?
Muss ich da irgendwie ein Headerfile oder so machen? Hab das bei Arduino bisher noch nie gebraucht  ::)

Ich habe das hier mal weitestgehend zusammengefasst....
https://forum.fhem.de/index.php/topic,50238.msg431833.html#msg431833 (https://forum.fhem.de/index.php/topic,50238.msg431833.html#msg431833)


Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Kuzl am 20 Oktober 2016, 14:33:07
Hi,

das kannte ich schon ...  ich muss quasi die subs in ESP8266_Basic.cpp verarbeiten. Ich würde allerdings gerne damit eine Variable aus meinem Sketch (.ino-Datei) setzen. Genauer gesagt gehts dabei um ein Messinterval, das du ja auch bei deinem AktSen-Projekt über MQTT setzen kannst. Für die 1-Wire-Sensoren kann ich das ja einfach so verwenden, nur für den DHT22 nicht, weil ich da die Auswertung im Sketch mache.

vg
Kuzl
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 20 Oktober 2016, 15:02:48
Du sprichst von subscribes, möchtest du denn die Abfrage des DHT22 Messwertes aktiv anstoßen oder sollen die DHT22-Messwerte z.B. alle 30 Sekunden automatisch gepublisht werden?
Titel: Antw:ESP8266_Basic Library
Beitrag von: Kuzl am 21 Oktober 2016, 07:30:07
Habs mitlerweile hinbekommen :)

Ich wollte, dass eine Messung in einem Einstellbaren Zeitabstand gemacht wird.
Hab gefunden, dass du so was für die Temperatursensoren schon hast - habs auf public gesetzt und dann im Sketch für den DHT22 verwendet.
Funktioniert alles wunderbar - genial was du da gemacht hast.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 21 Oktober 2016, 08:50:20
Freut mich..!
Titel: Antw:ESP8266_Basic Library
Beitrag von: mifh am 29 Januar 2017, 15:41:56
Moin,

ich bin zufällig über diese Library gestolpert und habe sie gleich mal genutzt.

Natürlich kommen einem da gleich ein paar Verbesserungsvorschläge, nur mal als Anregung...
Zitat von: Pf@nne am 19 Oktober 2016, 11:38:16
Passwortschutz ist noch nicht implementiert.
Ist auch die Frage wie weit man da gehen will......

Ungeschützt ist man ja auch nur bei der ersten Einschaltung.
Wenn die SSID deines Netzwerkes einmal eingegeben worden ist,
sollte der AP ja zu bleiben.

Solange der Webserver unter der IP des esp8266 aktiv ist (und zumindest in meiner Konfiguration ist er das), kann sich jeder das WLAN PWD anschauen. Das lasse zumindest ich nicht so in mein Netz, muss natürlich jeder für sich entscheiden.
Auf der anderen Seite ist das schnell korrigiert, einfach in ESP8266_Basic_webServer::rootPageHandler() aus den entsprechenden type text ein type password machen.

Weiterhin soll es Menschen geben, die ihren MQTT-Server mit einem password absichern. Wäre schick, wenn man das konfiguieren könnte.

Ok, genug der Anregungen. Das ist Meckern auf hohem Niveau  ;)
Wenn ich die Library schon vor einem halben Jahr gesehen hätte, hätte ich eine Menge Zeit sparen können, Kompliment!
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 29 Januar 2017, 16:12:38
Moin,

ich sitze gerade an der V1.00, die bisherige ist ja eher alpha-Stadium.
In der nächsten Version kommen diese features natürlich mit rein.
Das war jetzt ja nur mal so zum Kennenlernen um zu schauen was so alles geht.

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 06 März 2017, 20:23:42
Hallo Pf@nne,

ich bin über den 1Wire Thread https://forum.fhem.de/index.php/topic,67427.0.html auf das ganze Thema ESP, MQTT und deiner Library gestoßen. Mein Ziel ist es, meine labile configurable firmata durch etwas stabileres zu ersetzen. Ich habe mich am Wochenende in deine Library eingelesen und konnte auch schon trotz geringer Programmierkenntnisse Erfolge erzielen (iButtons IDs lesen und Tastendrücke von einem Keypad mit I2C und PCF8574 per mqtt auf fhem weitergeben). Jetzt fehlt doch das LCD (I2C) Display und eventuell eine direkte Übergabe des Keypads ans LCD.
Allerdings habe ich den kompletten Code in die AktSen Control eingebunden und somit ist alles in der Loop was  nicht so optimal ist. Dies hat z.B. jetzt den Nachteil, dass sich der Tastendruck des Keypads im Takt der updateMeasure_time wiederholt (soll jedoch nur einmal pro Tastendruck ausgegeben werden).  Wo platziert man in deinem Template am besten den setup Teil?

Auszug der ESP8266_Basic.cpp
//===============================================================================
//  AktSen Control
//===============================================================================
//===> updateMeasurement <-----------------------------------------------------
void ESP8266_Basic::handle_Measurement(){
  if (mqtt_client.connected()){
    long now = millis();
    if (now - lastMeasure_time > updateMeasure_time) {
      lastMeasure_time = now;
      run_oneWire();
      run_I2C();
    }
  }
}
//===> run 1Wire <-----------------------------------------------------
void ESP8266_Basic::run_oneWire(){
  byte addr[8];
  char Key[50];
  OneWire oneWire(2);                   //GPIO2
if ( !oneWire.search(addr)) {
    oneWire.reset_search();
    delay(250);
    return;
  }
sprintf (Key, "%02x%02x%02x%02x%02x%02x%02x%02x",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7]);
// Serial.println(Key);
// client.publish("outTopic", Key);
pub(3,1,0, Key);

}

//===============================================================================
//  Keypad Control
//===============================================================================
void ESP8266_Basic::run_I2C(){

#define I2CADDR 0x20


const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
   {'1','2','3'},
   {'4','5','6'},
   {'7','8','9'},
   {'*','0','#'}
  };

// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = {0, 1, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 6}; //connect to the column pinouts of the keypad

  Keypad_I2C kpd( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR, PCF8574 );

  Wire.begin(I2C_SDA, I2C_SCL);
  kpd.begin(makeKeymap(keys));
// Serial.begin(9600);

   
    char key_temp = kpd.getKey();
    if (key_temp){
    String str_key = String(key_temp);
    char key[7];
    strcpy(key, str_key.c_str());
    pub(4,1,0, key);
    }

}


original Codeschnipsel als Vorlage:
// I2C Keypad for Arduino
// Venkateswara Rao.E
// 19-oct-2015
// Credits to  @author Alexander Brevig

#include <Wire.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#define I2CADDR 0x38

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = {0, 1, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 6}; //connect to the column pinouts of the keypad

Keypad_I2C kpd( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR, PCF8574 );

void setup(){
  Wire.begin( );
  kpd.begin( makeKeymap(keys) );
  Serial.begin(9600);
  Serial.println( "start" );
}

void loop(){
  char key = kpd.getKey();
 
  if (key){
Serial.println(key);
  }
}

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 06 März 2017, 22:04:47
Moin,

was passiert den in der Vorlage hier, wenn der Taster dauerhaft gedrückt ist?
void loop(){
  char key = kpd.getKey();

  if (key){
Serial.println(key);
  }
}
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 06 März 2017, 22:28:55
Hallo Pf@nne,
dann wird nur ein Zeichen ausgegeben. Erst ein erneutes Drücken des Tastern gibt ein weiteres Zeichen aus. Ich habe den original Code mit diesen Sketsch zunächst getestet:


#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#define I2CADDR 0x20


const char* ssid = "spnet";
const char* password = "12345678901234567890";
const char* mqtt_server = "192.168.178.026";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char Key[50];
int value = 0;

void setup_wifi() {

  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  // Switch on the LED if an 1 was received as first character
  if ((char)payload[0] == '1') {
    digitalWrite(16, LOW);   // Turn the LED on (Note that LOW is the voltage level
    // but actually the LED is on; this is because
    // it is acive low on the ESP-01)
  } else {
    digitalWrite(16, HIGH);  // Turn the LED off by making the voltage HIGH
  }

}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      client.publish("outTopic", "iButton Reader connected");
      // ... and resubscribe
      client.subscribe("inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = {0, 1, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 6}; //connect to the column pinouts of the keypad

Keypad_I2C kpd( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR, PCF8574 );

void setup(){
    Wire.begin(0,4 );
    kpd.begin( makeKeymap(keys) );
    Serial.begin(115200);
    Serial.println( "start" );
}

void loop(){
    char key_temp = kpd.getKey();
    if (key_temp){
   
    Serial.println(key_temp);

   
}
}


Hier sind die Funktionen erklärt:
http://playground.arduino.cc/Code/Keypad

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 07 März 2017, 07:41:10
Moin Spielmann,

schreibe doch deine Routinen wie gewohnt in den MainLoop der ESP8266_Basic.cpp.
Jetzt würde ja ein Tastendruck nur "eingefangen" wenn die updateMeasure_time abgelaufen ist.

Du kannst dann im MainLoop ja auch ein publish absetzen.
Auch das Initialisieren der I2C-Komponenten kannst du in der ESP8266_Basic.cpp durchführen.

Das Template war ja so gedacht, dass der MainSketch leer ist um deine eigenen Routinen hier zu platzieren.
Das Template soll die quasi "unsichtbar" im Hintergrund Arbeit abnehmen und weitere Funktionen (z.B. MQTT) zur Verfügung stellen.

Gruß
Pf@nne

Titel: Antw:ESP8266_Basic Library
Beitrag von: sn0000py am 07 März 2017, 07:54:11
Hallo :D

Mal ne blöde Frage, schaffe ich es mit dieser Library, das ich auch die main loop als erstes ausführe, und der WLAN Connect dann im Hintergrund läuft?

Möchte auch die Zeit die versucht wird ins WLAN einzuloggen anstatt eines neuen AP aufzumachen eigentlich auf unendlich oder so geben .... (wenn einmal ein WLAN definiert ist sollte immer das verwendet werden, auch wenn der WLAN Router mal ne zeitlang weg ist ... )
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 07 März 2017, 12:42:09
Hallo Pf@nne,
danke für den Tipp. Normalerweise hätte ich das intuitiv auch so getan. Allerdings habe ich mich von dem bereits vorhandenen Onewire und I2C (aus dem 1W-I2C-Gateway) im handle_Measurement() verleiten lassen die Routinen hier einzufügen. Das macht zudem auch mehr Sinn, da ich den iButton und die Tastendrücke schnellstmöglich publishen möchte. Ich werde das mal so umsetzen.
Was auch schon angesprochen wurde ist das sichtbare Passwort im Web-Server. Ich fühle mich da auch ein bisschen unwohl (obwohl es ja nur im eigenen Netzwerk ist). Kann man das auf die Schnelle ändern bzw. wann kommt deine V1.0 heraus?

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 07 März 2017, 18:49:11
Zitat von: sn0000py am 07 März 2017, 07:54:11
Möchte auch die Zeit die versucht wird ins WLAN einzuloggen anstatt eines neuen AP aufzumachen eigentlich auf unendlich oder so geben .... (wenn einmal ein WLAN definiert ist sollte immer das verwendet werden, auch wenn der WLAN Router mal ne zeitlang weg ist ... )

Die wartezeit auf die konfigurierte WiFi-Verbindung kannst du in der "ESP8266_Basic.cpp" beeinflussen:
//===> WIFI SETUP <------------------------------------------------------------
bool ESP8266_Basic::start_WiFi(){
bool WiFiOK = false;

  delay(10);
  Serial.println();
  Serial.print("Connecting WiFi to: ");
  Serial.println(cfg.wifiSSID);
   
  WiFi.begin(cfg.wifiSSID, cfg.wifiPSK);

  int i = 0;
  while (WiFi.status() != WL_CONNECTED and i < 31) {
    delay(500);
    Serial.print(".");
i++;
  }
Serial.println("");


Du könntest die while-Schleife ohne das "and i < 31" laufen lassen, dann wartet er bis zur Verbindung.
Vorher müsstest du aber abfragen ob bereits eine WiFi-SSID und ein Passwort vorhanden sind,
sonst bekommst du beim ersten mal Probleme.






Zitat von: Spielmann am 07 März 2017, 12:42:09
Was auch schon angesprochen wurde ist das sichtbare Passwort im Web-Server. Ich fühle mich da auch ein bisschen unwohl (obwohl es ja nur im eigenen Netzwerk ist). Kann man das auf die Schnelle ändern bzw. wann kommt deine V1.0 heraus?

An der V1.0 sitze ich immer mal so nebenbei, es fehlt einfach die Zeit.....
Ich möchte da so einiges ummodeln.... z.B. frisst das Topic-Array einfach zu viel Speicher.
Die Topics wollte ich in einen json-File ins FS auslagern.

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: sn0000py am 08 März 2017, 07:03:37
ich hab schon den WIFI TEil bei mir selber gebaut, und glaube das es auch so funktioniert (also im prinzip nur den start im setup machen und dann die setup sofort verlassen)
glaub das müsste für meine Zwecke reichen.
Nur wie gesagt den rest das OTA und MQTT müsste ich auch alles neu und selber machen ...
Aber das würde bedeuten, das ich einiges umbauen muss ...
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 09 März 2017, 11:08:08
Hallo Pf@nne,
langsam macht mir die Programmiererei an deinem Template Spaß. Dein Template ist ein guter Einstieg für Anfänger. Dein Tipp mit der Main-Loop zu arbeiten funktioniert. Inzwischen wird:
- ein iButton im 500ms Takt ausgelesen und gepublisht
- Das I2C Keypad übergibt die einzelnen Tastendrücke ohne prellen oder Verzögerung direkt an die mqtt Schnittstelle
- Ein I2C LCD bildet die Tastendrücke ab.
- Parallel bilde ich einen String der Tastendrücke. Dieser wird bei Tastendruck "*" zur Korrekturmöglichkeit geleert (auch das LCD) und bei "#" gepublisht. (z.B. um mein kmStand bzw. Geheimpin am Stück zu übergeben)

Jetzt möchte ich einen DS2423 Counter anschließen. Allerdings möchte ich möglichst einen zweiten Onewire-Bus anlegen, da der Bus des iButton Reader zum Bediener nach außen geführt wird und ich Bedenken vor einer Überspannung/ESD habe. Ich habe zwar Klemm-, Z- und Supressordioden eingebaut, aber bei einem ,,stärkeren" ESD/Überspannungsereignis würde es evtl. ,,nur" den ESP und nicht den teuren und seltenen DS2423 zerschießen. Ist das mit der bestehenden oneWire Library einfach so möglich und wenn ja wie könnte man da ansetzen?

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 09 März 2017, 13:51:04
Moin,

als ersten Ansatz würde ich einen 1W-ESD-Protection-Chip empfehlen (z.B. DS9503).
Ich nutze hierfür ein eigenes Board mit Gehäuse.
https://forum.fhem.de/index.php/topic,63898.0.html (https://forum.fhem.de/index.php/topic,63898.0.html)

Natürlich kannst auch einen freien GPIO mit einem zweiten 1W-Bus belegen.

ESP8266_Basic.h

//===> GPIO <--------------------------------------------------------------
//1Wire
  #define oneW   2     //GPIO 2
  #define oneW2 x     //freier GPIO


ESP8266_Basic.cpp

//===> run 1Wire <-----------------------------------------------------
void ESP8266_Basic::run_oneWire(){
  OneWire oneWire(oneW);                   //GPIO 2
  DallasTemperature DS18B20(&oneWire);

  OneWire oneWire2(oneW2);                   
  DallasTemperature DS18B20(&oneWire2);



Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 11 März 2017, 09:19:04
Hallo ich noch mal,
eigentlich wollte ich schon viel weiter sein. Jetzt bin ich über ein (Anfänger)problem gestolpert, dass mich (wieder mal) die ganze Nacht gekostet hat.

Beim Erstellen von subscribes bin ich auf das Problem gestoßen, dass beim Einbinden des lcd in der ESP8266_Basic.cpp:


if (dissectResult.itemPath == "4/1/0"){
    if (strcmp(value, "Walter") == 0){
        lcd.print("Walter war es!");
    }
    Serial.println("Jeder war es!");     
    }
}


die Fehlermeldung erhalte:
exit status 1
'lcd' was not declared in this scope

Wie muss ich im Code erklären, dass dies zur LiquidCrystal_I2C Library gehört? Mit Serial.println funktioniert es.

Gruß
Spielmann

PS: Ist ein WEMOS kompaibel zum ESP-12e (ausser natürlich den Pins)? Dann wäre deine PCB für mein Projekt interessant. Ich müsste dann nur noch ein Levelshifter fürs LCD einbauen und zwei Relais reinpfrimeln.

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 11 März 2017, 20:18:55
Moin,

du hast das LCD sicherlich in deinem Hauptsketch deklariert, dann weiß die ESP8266_Basic doch nichts von dessen Existenz.
Deklariere doch das LCD in der ESP8266_Basic.h / .cpp dann kannst du es sowohl in der ESP8266_Basic als auch in deinem Hauptsketch nutzen.

Auf dem WeMos ist ein ESP12e verbaut, also alles kompatibel.
Wie wird denn das Display angesteuert? I2C?

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 13 März 2017, 17:10:30
Hallo,
Wochenende ist vorbei und bin leider nicht viel weitergekommen. Jetzt habe ich das LCD in der ESP8266_Basic.h / .cpp deklariert und kann es auch direkt aus der incoming subscribe Funktion ansteuern. Leider funktioniert dann das LCD nicht mehr im .ino Hauptsketch. Auch bei zukünftigen Variablen werde ich vermutlich immer auf das Problem der Deklarationen stoßen. Ich meine "regenbieger" hat im Topic #86ff das gleiche Problem gehabt.
Ich benötige einfach(?) eine gemeinsame Verbindung der Deklarationen zwischen den Hauptsketch und der void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) Funktion. Dann kann ich wie im Kurzworkshop für Noobs beschrieben mein Code im Hauptsketch schreiben und im incomming subscribe meine Topics einfach abfangen.

Andere Thema: Ja. Das ist ein Standard 20 x 4 LCD mit aufgesetztem PCF8574 (Adr. 0x3F) und benötigt 5V. Die Pull-up Widerstände aus dem PCF8574 auslöten und diese an die 3,3V anbinden reicht lt. Datenblatt des PCF8574 nicht aus bzw. ist knapp (3,3/5=0,66 -> Soll min 0.7 VDD sein).  Aktuell ist bei mir noch alles fliegend verlötet/verdrahtet. Ich denke, ich werde so ein Board die nächsten Tage bei dir bestellen (falls noch vorhanden).

Gruß
Spielmann

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 13 März 2017, 17:26:18
Moin,

wenn du es in der ESP8266_Basic.h deklarierst und die ESP8266_Basic.h im Hauptsketch enthalten ist, dann sollte alles was in der ESP8266_Basic.h steht auch im Hauptsketch laufen.
Hänge mal deinen Code als ZIP an.

Die Callback-Routine ist ein "Rückruf" der MQTT-Routinen und hat damit erstmal nichts zu tun.

Das LCD sollte mit einem Levelshifter 3V3 <-> 5V problemlos am I2C-Bus laufen.
Boards sind noch welche da, einen 4-Kanal-Level-Shifter habe ich auch da.

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 13 März 2017, 23:50:11
Hallo Pf@nne,
alles was ich in der ESP8266_Basic.h an LCD Deklarationen einfüge, wird vom Compiler mit einem Fehler quittiert. Deswegen habe ich an allen möglichen Stellen in der ESP8266_Basic.cpp mit dem LCD herumgespielt (habe halt noch nicht die Syntax mit den Deklarationen und dem #include so ganz begriffen).
Im zip habe ich in Zeile 20,303-306 der ESP8266_Basic.cpp aus Verzweiflung die Deklarationen eingefügt (ich dachte halt die Funktion  ESP8266_Basic::start_WiFi_connections() wird im setup des Hauptsketsh aufgerufen).
In fhem habe ich folgende Definitionen zum Ansteuern (was auch funktioniert). Mit dem Notify key_echo kann ich die Tastendrücke ans LCD weitergeben, bzw. unterdrücken (beim derzeitigen Software Stand des ESP ist mir nichts eleganteres eingefallen).


defmod mqtt_LCD MQTT_DEVICE
attr mqtt_LCD IODev mqtt
attr mqtt_LCD publishSet_blight Zapfsaeule/I2C/LCD/backlight
attr mqtt_LCD publishSet_clear Zapfsaeule/I2C/LCD/clear
attr mqtt_LCD publishSet_delrow Zapfsaeule/I2C/LCD/delrow
attr mqtt_LCD publishSet_print Zapfsaeule/I2C/LCD/print
attr mqtt_LCD room MQTT
attr mqtt_LCD stateFormat print

defmod mqtt_Key MQTT_DEVICE
attr mqtt_Key IODev mqtt
attr mqtt_Key event-on-update-reading Key
attr mqtt_Key room MQTT
attr mqtt_Key stateFormat Key
attr mqtt_Key subscribeReading_Key Zapfsaeule/I2C/Keypad/Key

defmod Key_echo notify mqtt_Key:Key:.*[0-9] set mqtt_LCD print $EVTPART1
attr Key_echo room MQTT


Der Levelshifter funktioniert auch aktuell am Testaufbau. Das war nur so ein Gedanke den Levelshifter (zwecks Optik / zusätzliche Verdrahtung) einzusparen. Notfalls kommt dieser dann rein. Du bekommst eine PM.

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 14 März 2017, 21:42:41
Schaue ich am WE mal rein.

Als erste Idee würde ich vielleicht dein Display einfach in die Class ESP8266_Basic integrieren.

class ESP8266_Basic{

public:
  ESP8266_Basic();
  void start_WiFi_connections();
  void handle_connections();
  void cfgChange_Callback();
  void mqttBroker_Callback(char* topic, byte* payload, unsigned int length);

  bool pub(int e1, char* Payload);
  bool pub(int e1, int e2, char* Payload);
  bool pub(int e1, int e2, int e3, char* Payload);
 
  //AktSen
  void handle_Measurement();
  //Display
  LiquidCrystal_I2C lcd( LCD_ADR, LCD_CHRS, LCD_LINS );

private:


In der .ino kommst du dann mit espClient.lcd an das Display, vielleicht hilft das ja schon.

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: regenbieger am 15 März 2017, 23:32:27
Ich habe für mich vor einiger Zeit eine Lösung gefunden, ich verwende nun DHT22,2X16 LCD mit I2C, 4X WS2812B mit FastLED, 'n bischen NTP, BH1750FVI LightSensor, 2 Kanal Relaisplatine und 1XPIR.
Bestimmt schmunzelt der ein oder andere über meine Lösung (ich tue es jeden Tag). Läuft auch nicht völlig rund. Aber mir reicht es. Also wer's brauchen kann, aber bitte nicht fragen was und wie, ist schon 3 Monate her und ich habe das schon wieder verdrängt.

mfg Regenbieger
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 16 März 2017, 12:42:52
Hallo regenbieger,
danke für dein sketch. Ich schmunzle bei deinem sketch bestimmt nicht - ich bin dankbar über solche Beispiele. Ich habe mal auf die Schnelle (auf der Arbeit) dein sketch mit dem original Template per Winmerge verglichen und interessante Ansätze gesehen um weiterzukommen.
So wie ich das sehe kopierst du dein incomming subscribe in ein string, der im class field definiert ist. Dann wird dieser string mit espClient.string im Hauptsketch verwendet.
Das könnte meine Lösung sein. Mal schauen, wie weit ich heute Abend komme.

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 11 April 2017, 00:04:15
Hallo,
nach fast einem Monat fast täglichen Probieren und Testen habe ich mit Hilfe von Pf@nnes Basic Template und regenbiegers sketch es tatsächlich geschafft, meinen Arduino Mega mit configurable firmata durch einen Aufbau mit ESP8266 und mqtt zu ersetzen. Meine Hardware/sketch hat folgende Funktionen und steuert eine Diesel-Zapfsäule:
-   Kommunikation per mqtt
-   I2C LCD Display (4 x 20) ansteuerbar
-    ein iButton im 500ms Takt auslesen und gepublisht
-    Das I2C Keypad (0-9,+,#) übergibt die einzelnen Tastendrücke ohne prellen oder Verzögerung direkt an die mqtt Schnittstelle
-    Ein I2C LCD bildet die Tastendrücke ab (wobei ein ,,*" für Pinabfrage oder sichtbar für km-Stand einstellbar ist)
-    Parallel bilde ich einen String der Tastendrücke. Dieser wird bei Tastendruck "*" zur Korrekturmöglichkeit geleert (auch das LCD) und bei "#" gepublisht.
-   1Wire DS2423 Zähler angeschlossen
-   Fünf Ausgänge
-   Zwei  Eingänge (davon ein analoger Eingang)

Ich stelle hier mal meinen laienhaften sketch Anderen zur Verfügung - vielleicht kann der eine oder andere etwas für sich finden. Wahrscheinlich schmunzeln manche noch mehr wie bei regenbiegers sketch -  jedoch funktioniert alles zuverlässig wie gewünscht.
Jetzt stehe ich fast vor dem produktiven Einsatz. Ich werde noch einen Watchdog bzw. Fehleranzeige für die FHEM – ESP8266 Verbindung einbauen und einen DS18B20 als Temperatur-Info einbauen (falls ich es umsetzen kann).

Jetzt habe ich noch ein Problem:
Schließe ich ein DS18B20 an, wird nur noch die ID des DS18B20 am 1-Wire Bus gefunden. Ein angelegter iButton (ID "01") wird nicht mehr erkannt. Ab Zeile 65 in der Basic.cpp wird die ID "1d" (DS2423 Counter) und "28" (DS18B20 Temp) ausgeblendet und nicht gepublisht. Hat jemand eine Idee die iButons zu finden, wenn auch der 18B20 auf dem Bus liegt?

Gruß
Spielmann


@Marco Pf@nne: Ich habe den DS2423 bei deiner Leiterplatte hinter dem 1W-ESD-Protection-Chip angeschlossen um diesen besser vor ESD Events am IButton Reader zu schützen. 
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 11 April 2017, 05:59:20
Moin Spielmann,

freut mich, dass es läuft!
Wenn du zeitkritische I2C-Geräte angeschlossen hast, wie z.B. dein Keypad,
dann würde ich möglichst auf 1W verzichten.
1W ist ziemlich langsam und "blockiert" dir während des Auslesen den Controller.
Nimm doch für Temperaturmessung lieber einen I2C-Chip.
Auch der Zähler könnte doch über I2C laufen.
Hängt natürlich auch von der Länge des Buses ab.

Ist denn ein iButton ein reiner "echter" 1W-Device?
Werden denn mehrere DS18B20 richtig erkannt?

Der Anschluss hinter dem ESD-Chip ist natürlich richtig, dafür ist er ja da.
Auf dem Board stehen ja genügend 1W-Anschlüsse zur Verfügung.

Gruß
Pf@nne

Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 11 April 2017, 12:33:12
Hallo Pf@nne,
ich habe derzeit 20 iButtons im Einsatz. Diese Teile sind reine "echte" Dallas 1W-Devices und ich benutze den DS1990R (einmalige und unveränderbare 64bit SN). Diese haben natürlich gegenüber den RFID-Chips den Nachteil, dass diese Teile einen Kontakt benötigen. Da diese Teile doch sehr robust und bewährt sind (das Teil wird auch Kellnerschlüssel wg. den häufigen Einsatz an Registrierkassen genannt) und sich damals am Arduino Mega mit configurablen firmata optimal einbinden lies, habe ich mich damals dafür entschieden. Deswegen auch der sündhaft teurere DS2423 1W-Zähler von eservice
Ich wollte eigentlich den von dir bestückten DS18B20 in mein Skript einbinden und soll nur informativ beim Tanken auf dem Display angezeigt werden. Da bei mir alles sequentiell abgearbeitet wird (iButton erkennen - > km-Stand -> Freigabe....) könnte ich bei der Keypad-Eingabe das Pollen des 1w-Bus zwischenzeitlich abschalten. Aber ich habe bis jetzt keine zeitkritischen Probleme (mehr).
Ich weis nicht, wie die onwire.h genau funktioniert. Ich vermute, dass die Bussuche so lange erfolgt, bis ein Device gefunden wurde. Dann fängt er von vorne an. Weitere Devices werden dann nicht mehr gefunden.

Das mit dem ESD-Chip hast du falsch verstanden. Ich habe den DS2423 zwischen Levelshifter und ESD-Chip eingebracht. Somit schütze ich auch den DS2423 vor der bösen Außenwelt.

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 11 April 2017, 16:59:14
OK, dann würde ich erstmal auf einen einfachen 1W-Scan-Sketch wechseln um HW Probleme auszuschließen.
Wenn das läuft, dann wieder schrittweise zurück in deinen Tank-Sketch wechseln.
Eine bessere Idee habe ich auch nicht.

ZitatDas mit dem ESD-Chip hast du falsch verstanden. Ich habe den DS2423 zwischen Levelshifter und ESD-Chip eingebracht. Somit schütze ich auch den DS2423 vor der bösen Außenwelt.
OK, geht natrürlich auch.....

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 08 Mai 2017, 16:06:32
Hallo Pf@nne,
inzwischen läuft (fast) alles wie gewünscht. Habe sogar noch ein Topic "RSSI Scan" zur Überprüfung der Verbindung eingebaut (wäre auch im WebServer ein tolles Gimmick).
Jetzt muss ich allerdings noch einen Access-Point in meine Tankstelle einbauen, da durch die ganze Blechverkleidung nichts mehr geht ( Lan ist in der Zapfsäule vorhanden). Ich habe sogar ein ESP-07 mit ext Antenne auf dem Wemos gelötet (hat es jedoch nicht viel gebracht).
Danke für die Hilfe.

Ich habe gesehen, dass du dein Template gewaltig umgebaut hast - gibt es noch dazu noch eine Anleitung?

Gruß
Spielmann

Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 08 Mai 2017, 18:53:45
Moin Spielmann,

freut mich, dass alles läuft!

Du kannst den ESP auch einfach nur als Controller laufen lassen und die Netzwerkanbindung z.B. über einen WizNet W5200 realisieren. Der größte Teil des Codes sollte ohne Änderung laufen.
Ich habe das mal mit einem einfachen Beispiel getestet und war erstaunt, wie einfach das war.
Hier spielt die Arduino-Umgebung ihre Vorteile voll aus.

Das neue Template ist nur eine Zwischensicherung an der ich von Zeit zu Zeit mal sitze.
Ich wollte das Template ein wenig weiter vereinzeln, damit sollte das Ergänzen des eigentlichen Sketches erleichtert werden und so ein "echtes" Template entstehen.
Bis das fertig ist dauert es wohl noch ein wenig.
Die Auswahl zwischen WLAN und LAN könnte dann ggf. auch mit implementiert werden..... 8)

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: regenbieger am 08 Mai 2017, 23:19:07
Go Pf@nne, go!  ;D
Ich habe sehnlich auf weitere Tüfteleien an deinem ESP_Basic Template gewartet. Bitte nimm Rücksicht auf solche Bekloppten wie mich und hau an Neuigkeiten raus was geht. Kannst gerne auch die Zwischenstände ins Git schubsen. Ich werde mir schon krallen was ich brauche und verworschteln.

Und nur damit das klar ist:
Danke für das super ESP_Basic Template und natürlich auch deine ganzen anderen tollen Projekte.
Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 09 Mai 2017, 05:57:13
Freut mich, wenn es was hilft. ... 8)

Zur Zeit sitze ich am WattMeter danach sind die SensorenBoards drann, das Template läuft so nebenbei.
Hinzukommt jetzt auch noch der Sommer, da soll man lieber vor die Tür gehen....
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 03 Juli 2017, 12:30:02
Hallo Pf@nne,
inzwischen gibt es ja dieses Template in der ursprünglichen Form nicht mehr. Um die ganze mqtt Kommunikation etwas zuverlässiger zu gestalten möchte ich die Funktionen QOS/Retain einbauen.  Die Last Will Testament mqtt Funktion habe ich bereits eingebaut (wird ja nur einmal beim Verbinden gesendet). Funktionierte in diesem Template bereits die MQTT Funktionen QOS/Retain (wobei sich die Frage stellt, ob FHEM seitig das funktioniert)?
Ich finde es etwas schade, dass in einigen Threads auf dein nicht mehr vorhandenes ESP8266 BasicTemplate aufmerksam gemacht/verlinkt wird. Wirst du weiter an einem Template für die Allgemeinheit arbeiten oder sollte ich mich eher an das Projekt ADE7953-PowerSocket als "Vorlage" orientieren?

Gruß
Spielmann


Titel: Antw:ESP8266_Basic Library
Beitrag von: Pf@nne am 04 Juli 2017, 09:16:27
Moin Spielmann,

Zitat von: Spielmann am 03 Juli 2017, 12:30:02
inzwischen gibt es ja dieses Template in der ursprünglichen Form nicht mehr.

Doch, das steht als tag weiterhin zur Verfügung.
Werde ich mal in den ersten Beitrag verlinken.
https://github.com/Pfannex/ADE7953-PowerSocket/tree/alpha_V0.200 (https://github.com/Pfannex/ADE7953-PowerSocket/tree/alpha_V0.200)

ZitatFunktionierte in diesem Template bereits die MQTT Funktionen QOS/Retain (wobei sich die Frage stellt, ob FHEM seitig das funktioniert)?
Das ist ja im Grunde nur eine Zeile.
FHEM-Seitig kannst du auch QOS/Retain nutzen.
Wobei das ja weniger mit FHEM als mit dem MQTT-Broker an sich zu tun hat.

ZitatWirst du weiter an einem Template für die Allgemeinheit arbeiten oder sollte ich mich eher an das Projekt ADE7953-PowerSocket als "Vorlage" orientieren?
Boris und ich sitzen gerade an der Überarbeitung der ADE-Firmware, ziel ist hierbei aber auch, dass es ein neues Template entsteht.
Das neue Template wird dann alle Grundfunktionen nebst einem neuen WebIf für die Konfiguration und die Anzeige von Sketchdaten.
Das zieht sich aber sicher noch ein wenig.....

Gruß
Pf@nne
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 04 Juli 2017, 12:27:50
Hallo Pf@nne,
danke für die Infos.
ZitatDas ist ja im Grunde nur eine Zeile.
wenn man Pauschal für alle Topics diese Flags setzen möchte. Ich meinte ob man das für jedes Topic im TopicTree individuell festlegen kann - wobei das pauschale Festlegen der Retain/QOS-Flags für meine Anwendung reichen würde. Zudem habe ich inzwischen auch gelesen, dass fhem unterschiedliche Flags pro Device (noch) nicht verarbeiten kann (https://forum.fhem.de/index.php/topic,73279.0.html (https://forum.fhem.de/index.php/topic,73279.0.html)).
Ich werde mich auch noch etwas mit mqtt beschäftigen müssen (Rince leistet hier ja tolle Pionierarbeit).

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Markus. am 22 Oktober 2017, 18:53:54
Hallo Zusammen,

bin mich gerade mal in ESP am einarbeiten und wollte was testen.
Beim kompilieren bekomme ich immer folgenden Fehler
ESP8266_Basic.h: No such file or directory

Glaube ich stehe im Moment ein wenig auf dem Schlauch welche Libs ich haben muss. Verwende die IDE 1.8.1.
Kann mir da eventuell einer weiterhelfen?

Gruß

Markus
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 22 Oktober 2017, 21:25:41
Hallo Markus,
ich nehme an, dass du das Template von Pfanne kompilieren möchtest.
So eine Fehlermeldung erhält du wenn der Reiter "ESP8266_Basic.h" fehlt. Ich denke nicht, dass es an der Arduino Version liegt. Evtl. fehlen dann ein paar ESP-Librarys, die noch eingebunden werden müssen. Im Anhang ist ein Screenshot des alten ursprünglichen Template von Pfanne, bei dem man die benötigten Reiter sieht.

Gruß
Spielmann
Titel: Antw:ESP8266_Basic Library
Beitrag von: Markus. am 22 Oktober 2017, 21:47:20
Hallo Spielmann,

Mir fehlt die komplette esp_basic lib so wie es aussieht. Die links aif aif diese libary scheinen acuh nicht die richtigen zu sein. Blöd wenn die Festplatte die Krätsche macht und man kein backup hat :-(
Hast du zufälig die libary als zip?

Gruss

Markus
Titel: Antw:ESP8266_Basic Library
Beitrag von: Spielmann am 22 Oktober 2017, 22:20:49
Hallo Markus,
im ersten Beitrag ist doch die ESP8266_Basic V0.2 angehängt. Zudem ist im Beitrag #127 auch noch mal ein Link zum Github (alpha V0.200). Vermutlich musst du noch über den Bibliotheksverwalter ESP8266 und PubSubClient Librarys installieren (war bei mir schon länger her). An besten liest du dich in den ersten Beiträgen ein.

Gruß
Holger
Titel: Antw:ESP8266_Basic Library
Beitrag von: Markus. am 23 Oktober 2017, 08:04:01
Hallo Holger,

hab wohl gestern Zuviel versucht und den Wald vor lauter Bäumen nicht gesehen.. ;-)
Klappt jetzt. Hatte auch durcheinander mit meinen IDE Verzeichnissen. Hab mal ein neues angelegt und die Libs neu in Bibliothek importiert. Nun geht's :-)


Danke Dir !!

Gruß

Markus