Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung ESP mit ESPEasy-Firmware

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Sisamiwe ich habe zur diskussion gebracht, ob wir evtl ein blogartiges format für solche themen haben wollen. dann könnten auch externe beitragen. cool wäre auch bilder der schaltung usw dabeizuhaben. ich weiss, dass ist aufwand, aber kommt mit sicherheit cool an und der eigene name / nickname steht ja auch prominent dabei..

    dass er den ersten teil des kontextpfads "vergisst" ist strange. aber gut wenn es schonmal mit Generic geht.. ich muss mal schauen, evtl muss man den wert beim REST interface JSON konform angeben, als {%val1%} oder sowas. ist aber schon länger her.. ich teste das mal mit firefox addon heute abend, wo man POST daten händisch setzen kann

    Kommentar


      #17
      Halt: ich sehe gerade beim ADVANCED Deinen Fehler: du setzt GET, bei REST musst du aber PUT oder POST setzen!

      Get ruft nur die URL auf, da stehen aber beim REST konformen Aufruf keine Daten drin, der Body wird nur über die o.g. HTTP Operationen mitgeschickt.

      Alternativ kannst Du mit ADVANCED natürlich auch das "simple webservice interface" nutzen, wo der Wert in der URL steht. Musst Du halt dementsprechend anpassen.

      Die beiden unterschiedlichen Interfaces habe ich nur gebaut, was das mit POST/PUT vermutlich für viele ein Problem ist und die Werteübergabe via URL simpler ist, ich aber auch den "echten" REST Standard anbieten wollte.

      Ich weiss zudem nicht 100%, wie gut es geht, in STR Items via URL bspw komplexe HTML Inhalte zu schreiben. Da ist PUT/POST mit Sicherheit einfacher
      Zuletzt geändert von psilo; 21.03.2018, 07:58.

      Kommentar


        #18
        Zu ESPEasy: kann das überhaupt mit verschiedenen Werten umgehen? Alternative wäre sonst halt mein C Code und direkte Programmierung. Dürfte mit Grundkenntnissen nachvollziehbar und anpassbar sein. Aber für komplette Programmier-Laien sicher keine Lösung.

        Kommentar


          #19
          Hallo,

          hier möchte ich beschreiben, wie ein ESP8266 (bspw. WEMOS D1 mini) mit ESPesay Firmware über das Webservice Interface (von psilo) mit shNG kommuniziert.

          Teil 0: Allg Informationen
          • ESPEasy arbeitet auch im Github.
          • Bei ESPEasy wird jede Nacht automatisch ein Release erzeugt. Diese sind hier zu finden. Es gibt 2 Ausführungen der ESPEasy: A) Normal aktuell in der Version 2.0 und B) Mega. Mega ist die Version mit mehr Plugins aber auch noch in der Testphase.
          Teil 1: Flashen der Firmware
          • Download des letzten (Pre-)Releases der V2.0 von hier als zip (heute wäre das Release v2.0-20180321)
          • Entpacken des ZIP. Darin sind diverse Binarys und das Flashtool selbst.
            Zu den Binarys: Hier gibt es 3 Ausbaustufen und das ganze für 2 SpeicherGrößen: normal - enthält nur die getesteten und freigegebenen Teile von ESPeasy; test - enthält zusätzlich noch die getesteten; dev - enthält zusätzlich noch die sich in Entwicklung befindlichen; Die Speichergrößen sind 1MB und 4MB. Der erwähnte WEMOS D1 mini hat 4MB Speicher
          • Verbinde den ESP via USB mit einem Windows PC
          • Firmware mit Hilfe des Flashtools auf dem ESP schreiben (USB bzw. COM und das entsprechende Binary auswählen)
          • Neustart des ESP (Reset Taste).
          • Der ESP öffnet einen WLAN AccessPoint "ESP_Easy_0"; Passwort: configesp
            Wenn man nicht automatisch zur Anmeldeseite kommt, dann nach 192.168.4.1 browsen
          • In der Config seine eigenen WLAN-Daten eingeben und den ESP wieder neu starten. Nun sollte er sich in eigenen Netzwerk anmelden.
          • Eine detaillierte Beschreibung ist hier
          • Nun ist der ESP vorbereitet und kann konfiguriert werden
          Teil 2: Konfiguration
          • Mit dem Aufruf der IP des ESP kommt man zur Konfigurationsseite
          • Die Möglichkeiten der Konfiguration sind hier beschrieben
          Weiters folgt!

          Kommentar


            #20
            Zitat von psilo Beitrag anzeigen
            Zu ESPEasy: kann das überhaupt mit verschiedenen Werten umgehen? Alternative wäre sonst halt mein C Code und direkte Programmierung. Dürfte mit Grundkenntnissen nachvollziehbar und anpassbar sein. Aber für komplette Programmier-Laien sicher keine Lösung.
            Ja, man kann bei jedem Device (Sensor) angeben, über welchen Controller/Schnittstelle/Protokoll er kommunizieren soll. Man konfiguriert also ESP --> Sensor --> Wertename --> Wert (Im Advanced sind bis zu 4 Werte pro Device möglich).

            Kommentar


              #21
              Zitat von psilo Beitrag anzeigen
              Halt: ich sehe gerade beim ADVANCED Deinen Fehler: du setzt GET, bei REST musst du aber PUT oder POST setzen!
              Ich habe auch auf PUT umgestellt und auch den HTTP Body JSON konform gemacht. Trotzdem kommt nichts an.
              esp.JPG

              Kommentar


                #22
                jetzt lass die {} doch wieder weg - im README Beispiel hatte ich die auch nicht ;-) oder probiere mal POST

                ich muss gerade mal ein neues browser plugin zum test suchen.. das alte geht im neuen firefox nicht mehr

                mit dem chrome plugin postman kriege ich derzeit auch noch einen
                <h2>415 Unsupported Media Type</h2>
                <p>Expected an entity of content type application/json, text/javascript</p>

                wirft er den bei dir auch? ggf noch ein bug im plugin... bisher hat das leider keiner ausser mir getestet. ich schaue über den tag...
                Zuletzt geändert von psilo; 21.03.2018, 08:35.

                Kommentar


                  #23
                  Jetzt habe ichs, Du musst bei REST als header noch
                  Code:
                  Content-Type: application/json
                  setzen. Und den Wert ohne {}

                  Nehme ich im DEV ins README auf

                  Ausserdem geht derzeit nur PUT, POST nehme ich noch dazu.

                  Habe es gerade in den DEV gepusht.. Für das DEV Webservices Plugin brauchst Du aber den DEV Core (wegen der WebGUI, die mitkommt).

                  Mit PUT und meinen Anmerkungen sollte es aber auch auf dem Master gehen.
                  Zuletzt geändert von psilo; 21.03.2018, 08:41.

                  Kommentar


                    #24
                    Test erfolgreich!

                    Mit folgenden Einstellungen klappt es:
                    esp.JPG

                    Im Log kommt trotzdem ein Error:
                    Code:
                    2018-03-21  08:54:47 ERROR    CP Server Thread-19 167.72
                    2018-03-21  08:54:47 INFO     CP Server Thread-19 192.168.2.25 - - [21/Mar/2018:08:54:47] "PUT /rest/items/ESP_Easy.Abstand.Distance HTTP/1.1" 200 4 "" ""

                    Um den vollen Umfang zu nutzen, müssen wir es schaffen, dass von einem Sensor mehre Werte mit Wertnamen übergeben und in shNG verarbeitet/empfangen werden. Somit müsste der %vname1% auch in den Body.

                    Wie gesagt, bspw ein DHT22 misst Temp und Hum, was bedeutet, 1 Device, 2 Wertnamen und 2 Werte.
                    Ich möchte bspw eine Wetterstation an einem ESP8266 betrieben. Da kommen 4 Werte an einem Device zusammen.

                    Bei FHEM gibt es schon ein funktionierendes Modul. Kann man sich da anlehnen?

                    Kommentar


                      #25
                      Naja die Frage ist, ob Du im ESPEASY eine Fallunterscheidung einbauen und mehrere Requests auslösen kannst. Schon klar, dass der Sensor 2 Werte liefert.. Kannst Du nicht 2 Controller konfigurieren?
                      Ich muss da halt jetzt erstmal warten, bis ich damit loslegen kann.

                      Ansonsten müsste ich überlegen das Setzen mehrerer Items in einem Request zu unterstützen, bspw wie ich das bei Itemsets derzeit mit dem Auslesen mache.
                      Ich weiß aber nicht, ob das sinnig ist in ein REST Interface einzubauen. Der Clou ist ja die Items einzeln anzusprechen. Außer ich verstehe REST hier falsch

                      Halbwegs konform könnte sein, die Anfrage auf das Itemset zu schicken und im Body die zu setzenden Items mit Werten zu übergeben. Wenn da ein Item des Itemsets fehlt, wird es nicht gesetzt... Aber dazu mag ich erstmal rumprobieren, ein Request pro Item wäre mir lieber, wenn das technisch geht.

                      Wie unterscheidest Du eigentlich die Zielitems, das müsstest Du doch in jedem Fall tun?! Wenn das nicht geht verstehe ich nicht was oben genannter Implementierungsvorschlag bringen soll?! Ob Du im Body andere Itemids einträgst oder in der URL sollte in dem Fall doch das gleiche Problem sein.
                      Zuletzt geändert von psilo; 21.03.2018, 09:08.

                      Kommentar


                        #26
                        Mir ist noch eine Idee gekommen: bau Dir doch ein Hilfsitem, in das Du diverse Strings reinschreibst, die über ein EVAL ausgewertet werden. Je nachdem was Du reinschreibst, verteilt er dann die Werte auf abhängige Items.
                        In Ausbaustufe 2 würde ich auch via Werbservices Plugin erlauben, Logiken bzw. Plugin APIs aufzurufen. Damit ginge das dann ggf. auch.

                        Kommentar


                          #27
                          Ich habe noch einen Test-Sensor DHT22. Damit werde ich heute abend nochmal testen.
                          Ich glaube, dass es bei HTTP Generic geht, denn dort wird nicht der Wertname spezifisch angesprochen, sonder nur allgemein. Somit (denke ich) werden aus allen definierten Wertenamen eigene URLs gebildet.

                          Besteht eigentlich ein qualitativer Unterschied zwischen den einfachen Interface und dem REST?

                          Zum How-To: Passt mein Anfang (Post 19) so?

                          Kommentar


                            #28
                            Sisamiwe grundlegend besteht der nicht, ist halt nur ne leicht andere weise das interface zu nutzen. ein drittes mögliches wäre SOAP, da hat man dann riesige xmls...

                            einzige sache, wie gesagt, ich weiss nicht so genau wie und ob es geht, dass man via url bspw. riesige strings mit html daten in ein item schreibt. das ist via rest mit post und put einfacher..

                            Zum How-To schreibe ich was, wenn ich soweit bin (Wochenende) und das mal ausprobiere..
                            Zuletzt geändert von psilo; 21.03.2018, 14:41.

                            Kommentar


                              #29
                              psilo

                              Ich wieder ein Stückchen weiter.
                              Ich habe nun 2 Sensoren an den WEMOS angeschlossen, einer davon sendet 2 Werte. Mit den Generic HTTP Interface funktioniert das gut.

                              In den Devices sieht es in der Überblickseite so aus:

                              Die Werte die Sensorwerte werden mit Gerätename (Wemos_1).Name (Abstand/Umwelt).Value (Distance/Temperature/Humidity) abgeholt.
                              Die Namen sind in den Config-Pages selbst definierbar.

                              Damit die Daten auch richtig in snNG ankommen, musst Du bei Controllers / HTTP Generic unter Controller Publish folgenden Eintrag setzen:
                              /shNG/ws/items/ESP_Easy.%sysname%.%tskname%.%valname%/%valname%
                              • shNG - Platzhalter, den ESPeasy verschluckt
                              • ws/items - Anbindung an Webservice Plugin (das weißt Du besser als ich)
                              • ESP-Easy - ein von mir verwendeter, fester Teil des Item-Pfades, damit diese Geräteart alle im Backend zusammengefasst werden
                              • %sysname% - Gerätename (Wemos_1)
                              • %tskname% - Devicename bzw. Sensorname (Abstand/Umwelt)
                              • %valname% - Wertename (Distance/Temperature/Humidity)
                              • %value% - Wert selbst (35.43 / 20 / 35)
                              Im snNG Log steht dann auch der Itempfad, auf den geschrieben werden soll. So kann man querprüfen.
                              2018-03-21 19:28:31 INFO CP Server Thread-19 192.168.2.25 - - [21/Mar/2018:19:28:31] "GET /ws/items/ESP_Easy.Wemos_1.Umwelt.Humidity/36 HTTP/1.1" 200 75 "" ""
                              2018-03-21 19:28:34 INFO CP Server Thread-21 192.168.2.25 - - [21/Mar/2018:19:28:34] "GET /ws/items/ESP_Easy.Wemos_1.Umwelt.Temperature/20 HTTP/1.1" 200 78 "" ""
                              2018-03-21 19:28:36 INFO CP Server Thread-22 192.168.2.25 - - [21/Mar/2018:19:28:36] "GET /ws/items/ESP_Easy.Wemos_1.Umwelt.Humidity/36 HTTP/1.1" 200 75 "" ""
                              2018-03-21 19:28:39 INFO CP Server Thread-23 192.168.2.25 - - [21/Mar/2018:19:28:39] "GET /ws/items/ESP_Easy.Wemos_1.Abstand.Distance/314.71 HTTP/1.1" 200 76 "" ""
                              Klappt also erstmal.
                              Was meinst Du?

                              PS: Laut dem Beitrag und dem Beitrag nutzen FHEM als auch Domoticz den IDX als Index für Sensorwerte bei der Übertragung, um die Werte später den Items zu zuweisen.
                              Zuletzt geändert von Sisamiwe; 21.03.2018, 21:48.

                              Kommentar


                                #30
                                Sisamiwe sieht erstmal gut aus. Bitte gib mir die Zeit dass dann an einem echten Setting nachzustellen. Ich glaube aber Du hast es damit gelöst. Die Lösung muss ja nicht zwingend wie bei den Kollegen sein Die haben auch was anderes als wir mit unseren Itempfaden.

                                Kommentar

                                Lädt...
                                X