Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigenen Stromzähler (eHZ) ?

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

    Hi keiner99 ,

    Guy Weiler schreibt auf seiner seite von Problemen mit dem ESP32 und der Spannungsversorgung via Smart meter. Wenn Du Dir da nicht selbst was basteln & programmieren willst ist vielleicht das da besser geeignet: http://weigu.lu/microcontroller/smar..._P1/index.html
    Da gibt es einen funktionierenden Arduino Sketch und das Board wird direkt via P1 versorgt.

    Den hab ich aktuell auch am Smartmeter (MQTT -> Home Assistant), funktioniert einwandfrei (Ich habe 25 EUR + 4 EUR Versand bezahlt).


    lg

    ps: ich bin jetzt schon eine zeitlang in Thal
    pps: das Teil funktioniert auch mit einem W5100 Ethernet Board, da muss man aber den Code etwas anpassen

    Kommentar


      Hi,
      danke für die schnelle Antwort. Werde mir deinen Link mal genauer anschauen. Ist meine Annahme richtig, dass ich die Spannungsversorgung vom SmartMeter ja gar nicht benötige mit dem ESP32-POE, da dieser ja über POE versorgt wird?

      LG
      Franz

      PS: Thal ist ja auch nicht allzuweit weg von Graz - bin da im Sommer auch öfters mim Rad unterwegs


      EDIT: Hab mir den Link angeschaut und nen 'Schaltplan' mit dem ESP32-POE gemacht. glaubst du, dass es so funktionieren könnte? (Beim EN1 bzw. 5V Pin bin ich mir nicht sicher... )

      verdrahtung_ESP32_smartMeter.jpg
      Angehängte Dateien
      Zuletzt geändert von keiner99; 25.01.2022, 12:37.

      Kommentar


        Zitat von keiner99 Beitrag anzeigen
        Hi,
        danke für die schnelle Antwort. Werde mir deinen Link mal genauer anschauen. Ist meine Annahme richtig, dass ich die Spannungsversorgung vom SmartMeter ja gar nicht benötige mit dem ESP32-POE, da dieser ja über POE versorgt wird?
        Wenn Du den ESP via PoE versorgst brauchst Du die 5V vom Meter nicht.

        EDIT: Hab mir den Link angeschaut und nen 'Schaltplan' mit dem ESP32-POE gemacht. glaubst du, dass es so funktionieren könnte? (Beim EN1 bzw. 5V Pin bin ich mir nicht sicher... )
        HTB1C8PMa8WD3KVjSZFsq6AqkpXaW.jpg

        Wenn Du 'Data_Request' auf High ziehst, dann kommen die Daten daher (TTL Serial inverted, daher nutzen viele Arduino implementierungen SoftwareSerial weil man da leicht invertieren kann. Ansonsten gibt es einige Beispielschaltungen im Netz [Transistor, ..]). Ob man die Hardware serial am ESP32 invertieren kann weiss ich nicht.

        Kommentar


          Hier gibts ein Design von einem LevelShifter & Inverter: https://githubhelp.com/CelliesProjec...erReader-esp32
          githubhelp.com.png

          Kommentar


            Hi.
            danke für deine Hilfe (Y) Ich habe mir nun einmal den Code (https://github.com/weigu1/SmartyRead..._Ethernet_v1_0) soweit durchgeschaut und hab da noch ein paar Unklarheiten - denke aber, dass ich es soweit schaffen würde den Code für den ESP32-POE zu modifizieren.

            Zu meinen Fragen:
            1.) Im Code wird folgende Variable angelegt:
            Code:
            const byte DATA_REQUEST_SM = D3; //active Low! D3 for LOLIN/WEMOS D1 mini pro
            . Laut der Schaltung (http://weigu.lu/microcontroller/smar..._P1/index.html) ist der D3 Pin gar nicht verbunden?! (oder ich verstehe die Schaltung einfach nicht 😅) Ich hätte es so verstanden, dass ich einen beliebigen GPIO am ESP32 definiere, mit dem ich dann den EN1 Pin am smartmeter 'schalte' um Daten vom smartmeter zu empfangen (also Low --> keine Daten, high --> Daten)
            2.) Wieso wird der Pin 15 im Code auf high gezogen? Wird es nur fürs W5100 Lan Interface benötigt ?
            Code:
            pinMode(15, OUTPUT); // Initialize outputs
            digitalWrite(15,HIGH); // On
            3.) Wieso wird die Debug Serial Verbindung auf Pin 21 / 22 aufgebaut und eine zweite auf Pin 1 / 3?
            Code:
            #ifdef DEBUG
            #ifdef ESP32MK
            Debug_Serial.begin(115200,SERIAL_8N1, 21, 22); //TxD1 on 22
            ...
            #ifdef ESP32MK
            SR_Serial.begin(115200,SERIAL_8N1, 1, 3); // change reversed pins of ESP32
            Soweit einmal zu meinen Softwarefragen 😋 werde nochmal eine Schaltung skizzieren und später hier posten - nur um sicherzugehen, alles richtig verstanden zu haben...

            EDIT: So habe die Schaltung soweit fertig: (DataRequest und LevelShifter SChaltung hab ich vom Link, den Hari gepostet hat: (https://willem-aandewiel-nl.translat..._x_tr_pto=wapp)
            verdrahtung_ESP32_smartMeter_neu.jpg
            Im Code müsste ich dann folgendes ändern:
            Code:
            const byte DATA_REQUEST_SM = 15;
            ...
            #ifdef ESP32POE
            SR_Serial.begin(115200,SERIAL_8N1, 32, 33);
            .
            Wobei Frage 2 und 3 dann immer noch immer offen sind... Siehst du hierbei einen Fehler?

            EDIT2: Hab jetzt nochmal den Code durchgeschaut und bin auf folgende Funktion gestoßen:
            Code:
            void get_smarty_and_publish() {
            ...
            // P1 port is activated by setting “Data Request” line high (+5V).
            // While receiving data, “Data Request” line stays activated (+5V).
            digitalWrite(DATA_REQUEST_SM,LOW);
            delay(10);
            digitalWrite(DATA_REQUEST_SM,HIGH); // Request serial data
            Also kann ich soweit ich es verstanden habe den GPIO15 (laut meiner Skizze) mit dem EN1 pin vom P1 Konnector direkt verbinden und die DataRequest Schaltung einfach weglassen, oder?


            LG
            Franz
            Angehängte Dateien
            Zuletzt geändert von keiner99; 26.01.2022, 19:52.

            Kommentar


              Zu dem Sketch kann ich Dir leider nichts sagen, ich verwende den da: https://github.com/weigu1/SmartyRead...rtyReader_v1_5
              Hab da ein paar sachen fuer das W5100 shield anpassen muessen. Das war die erste Version mit parameter fuer AAD. Die aktuellen Enwicklungen hab ich nicht im Blick.
              Die aktuelle Schaltung zieht das Enable direkt auf 5V. Es gibt eine alte Schaltung da wurde das noch per Pin gemacht (auf der seite runter scrollen)
              Zuletzt geändert von hari2; 26.01.2022, 20:05.

              Kommentar


                Danke für die Infos! Ich werd jetzt einfach mal einen ESP32-POE bestellen und schauen wie weit ich komme Melde mich wenn es Neuigkeiten gibt

                LG

                PS: Teile sind schon bestellt 😁
                Zuletzt geändert von keiner99; 26.01.2022, 22:35.

                Kommentar


                  Zitat von hari2 Beitrag anzeigen
                  Zu dem Sketch kann ich Dir leider nichts sagen, ich verwende den da: https://github.com/weigu1/SmartyRead...rtyReader_v1_5
                  Hab da ein paar sachen fuer das W5100 shield anpassen muessen. Das war die erste Version mit parameter fuer AAD. Die aktuellen Enwicklungen hab ich nicht im Blick.
                  Die aktuelle Schaltung zieht das Enable direkt auf 5V. Es gibt eine alte Schaltung da wurde das noch per Pin gemacht (auf der seite runter scrollen)
                  Hi,
                  ich bins nochmal... Kannst du mir da genauere Infos zu deinen Anpassungen geben bzw. vll den Sketch zukommen lassen?

                  Danke!

                  LG


                  Kommentar


                    Hallo,
                    Hardware habe ich soweit alles bekommen und ist bereits soweit zusammengelötet
                    ESP32-POE_1.jpg ESP32-POE_3.jpg

                    Habe nun die Software von Haris post (#156) als Grundlage verwendet und also erstes mal über WLAN mit meinem Netzwerk verbunden (alle Netzwerk und MGTT Daten habe ich im Code angepasst und dann auf den ESP32 geflasht.) Der ESP bootete und nach einer gewissen Zeit fing die LED 10mal zum blinken an --> laut Code passiert dies wenn die max. Datenlänge des Serial Streams erreicht ist. Ich vermute, dass dies der Fall war, da kein Smartmeter angeschlossen war? (Habe leider den Key noch nicht erhalten - kann es also noch nicht richtig testen...)

                    Danach probierte ich das ganze auf den Ethernetport umzubasteln. Dazu habe ich in der setup() anstelle der init_wifi() function die init.Eth() function aufgerufen und danach ein 5 maliges blinken hinzugefügt.

                    Code:
                    void setup() {
                    B.set_led_log(true); // use builtin LED for debugging
                    B.set_serial_log(true,0); // 2 parameter = interface (1 = Serial1)
                    B.set_udp_log(true, UDP_LOG_PC_IP, UDP_LOG_PORT); // use "nc -kulw 0 6666"
                    //init_wifi();
                    init_eth();
                    B.blink_led_x_times(5); // blink 5x to show Ethernet is initialised
                    ...
                    }
                    Code:
                    // initialise ethernet
                    void init_eth () {
                    #ifdef STATIC
                    Ethernet.begin(NET_MAC,NET_LOCAL_IP,NET_DNS,NET_GA TEWAY,NET_MASK); //Ethernet.begin(mac, ip, dns, gateway, subnet);
                    #else
                    Ethernet.begin(NET_MAC);
                    #endif // STATIC
                    delay(200);
                    WiFi.mode(WIFI_OFF);
                    #ifdef ESP32MK
                    WiFi.setHostname(NET_HOSTNAME);
                    #else
                    WiFi.hostname(NET_HOSTNAME);
                    #endif // ifdef ESP32MK
                    
                    Serial.println("");
                    Serial.println("Ethernet connected");
                    Serial.println("IP address: ");
                    Serial.println(Ethernet.localIP());
                    
                    randomSeed(micros());
                    }
                    Nach erfolgreichem Flashen scheint es so, als würde er das Ethernet nicht richtig starten - die LED blinkt 5mal, dann gibt es eine kurze Pause und dann blinkt sie erneut 5mal... Auch kann ich den ESP32 nicht anpingen... Was könnte hierbei mein Fehler sein?

                    EDIT: Laut dem Serial log scheint es so, als ob der ESP32 als IP adresse 255.255.255.255 bekommt - warum?!

                    18:00:23.180 -> Logging initialised!
                    18:00:24.016 ->
                    18:00:24.016 -> Ethernet connected
                    18:00:24.016 -> IP address:
                    18:00:24.016 -> 255.255.255.255
                    Hier noch die defines und network settings:

                    Code:
                    #define STATIC // if static IP needed (no DHCP)
                    #define ETHERNET // if Ethernet with Funduino (W5100) instead of WiFi
                    
                    // network settings
                    const char *NET_MDNSNAME = "SmartyReader"; // optional (access with mdnsname.local)
                    const char *NET_HOSTNAME = "SmartyReader"; // optional
                    
                    #ifdef STATIC
                    IPAddress NET_LOCAL_IP (192,168,0,81); // 4x optional for static IP
                    IPAddress NET_DNS (192,168,0,1);
                    IPAddress NET_GATEWAY (192,168,0,1);
                    IPAddress NET_MASK (255,255,255,0);
                    #endif // ifdef STATIC*/
                    #ifdef ETHERNET
                    uint8_t NET_MAC[] = { 0x08, 0x3A, 0xF2, 0x3E, 0x76, 0x0C }; //only for ethernet
                    #endif //#ifdef ETHERNET*/
                    LG

                    Kommentar


                      ich hab den sketch grad nicht zur Hand, der ist auf einem anderen Rechner. In der Version die ich nutze kann man zwar Ethernet ueber das define aktivieren, der MQTT client ist aber per hard-coding auf den Wificlient verbunden (und nicht auf den Ethernetclient). Ich habe das ganze wlan zeug deaktiviert, MQTT auf Ethernet umgebogen, und in den helper files noch das UDP logging auf Ethernet abgeaendert.
                      Die IP Zuweisung hat aber immer funktioniert. Ist die von Dir verwendete Ethernet library mit dem Chip auf deinem Board kompatibel? Sind die pins korrekt?

                      Kommentar


                        Zitat von hari2 Beitrag anzeigen
                        ich hab den sketch grad nicht zur Hand, der ist auf einem anderen Rechner. In der Version die ich nutze kann man zwar Ethernet ueber das define aktivieren, der MQTT client ist aber per hard-coding auf den Wificlient verbunden (und nicht auf den Ethernetclient). Ich habe das ganze wlan zeug deaktiviert, MQTT auf Ethernet umgebogen, und in den helper files noch das UDP logging auf Ethernet abgeaendert.
                        Die IP Zuweisung hat aber immer funktioniert. Ist die von Dir verwendete Ethernet library mit dem Chip auf deinem Board kompatibel? Sind die pins korrekt?
                        Hatte in der Tat eine inkompatible Ethernet Library verwendet... jetzt bin ich auch über Ethernet mit meinem Netzwerk verbunden 👌 Led blinkt nun wieder 10 mal (wie beim originalen Sketch über WLAN und den angepassen Netzwerkdaten)

                        Beim MQTT habe ich bislang nichts gefunden, was hardcoded wäre?! Und das UDP Logging funktionierte bei mir auch ohne Anpassungsarbeiten (hab da nur den bool enable_udp_log = true; gesetzt und es ging 😅 )

                        Jetzt heißt es für mich mal abwarten, bis ich den Key bekomme und dann kann ich mal testen, ob die SerialConnection zum SmartMeter funktioniert und das Entschlüsseln...

                        In der Zwischenzeit werd ich mir mal ein Hutschienengehäuse fürn ESP32-POE konstruieren und 3d-drucken :P

                        Kommentar


                          Zeile 156:
                          Code:
                          WiFiClient espClient;
                          #endif
                          
                          ESPBacker B;
                          PubSubClient mqttClient(espClient);
                          Das musst eich auf `EthernetClient` aendern.

                          Kommentar


                            Grüss euch

                            Bin durch Zufall auf den Beitrag hier gestossen und habe gehofft, dass mir hier vielleicht jemand helfen kann mit meinem Problem.
                            Ich wohne in Graz und habe ein SAGEMCOM Smartmeter bekommen. Nach langem hin und her habe ich nun auch die beiden Schlüssel
                            bekommen (GUEK und GAK). Ich lese die Daten mit einem ESP8266 aus den ich in meine selbstentwickelte Umgebung (php, mysql DB etc..)
                            integriert habe. Leider bekomme ich die Daten aber nicht richtig entschlüsselt.
                            Ich habe versucht die Daten von Hand mit dem python Tool zum DLMS decodieren zu entschlüsseln. Ich bekomme immer den gleichen Ausgabestring wie in meinem Sketch d.h. mein Code dort sollte richtig sein. Allerdings ergibt der Ausgabestring keinen Sinn.

                            Hier ein Beispiel:

                            RohDaten:
                            DB0853414735000382428201F230000710409344D45FB5C353 4E579A87CDC6A03662765EEEA873B9FD0C51476E20291FC0F1 B6AFC99009B6D196C55E594B1FF457EF5B109891C63D1E9C11 F129419AD53A8B40279F8EFE315E12A617708623D2F8FE3669 17F76345B106AF3989FE41E81EFDF0E9974C8978904E5E0CCE 326F1AEB7055376DDB205FF37501FA300463ACA69D86A7C7DE 5D8D6B9EB86E9FA290684E99DFF6245E570584E5EC72CEB26E 0408FCE5DF9BD8176B88FE661F5F213CD761989D9ABF5FE487 97AC4AF9F2C524CC0DEF0A29451BFCB4B1530477E98E99F0E7 FBBA7442F666D7150FEC50F514BFA3AEF4302D777E5F9DF0FB 9FF4FE08101CF19CE2DD0769961BDB0AB72AE67E33031CECBA 03888D38AE75C55D9919908DADA2D9442D6A73B2AF5C39450B 2EE0723B0AC9DF7008D5B5F96308F28D7B67D0443FF0F84D03 863600BC37427D4971EE300F1AC7FE2AADA1C5FDA9043375A8 3BBB3B63DEA1FD180F251636233B10AB8E5C9B9F742C006A20 AE256C1711AC2F9F9717BCFDE528D5C9B9D76197A3E365564E A50AF601C8D109E41CF5A67CA756E86B6D4F389766CF453954 0D2DEFBD8BE716CC86BFFD9A95A76EA212CE71092232BA5D31 C46D2B91461DF5447EC2434B62172B99BC428D403A58F36323 ACB42154D8EB1BF9659BAC4630EA4A5A9AB1D993183EBC2CD9 641F18724E3CD718BE1A29

                            Die Rohdaten sind immer 511 bytes lang und beginnen mit DB08, das sollte also denke ich passen.

                            Aufgetrennt wäre das dann:
                            DB
                            08
                            5341473500038242 -> SystemTitle
                            82
                            01F2 -> Länge 498 Bytes
                            30 - > Encryption und Auth
                            00071040 -> Framecounter

                            9344...1A29 -> verschlüsselte Daten

                            Ich kann die Schlüssel gerne bereitstellen, falls es jemand selbst probieren möchte, man kann ja damit eh nicht viel anfangen, wenn man nicht am Smartmeter hängt.
                            Oder gibts noch eine andere Variante wie ich die Daten verarbeiten bzw. entschlüsseln muss?

                            Habe ich hier wo einen Denkfehler im Ablauf ?
                            Dank euch schon mal für eure Hilfe.

                            lg
                            Erich
                            You do not have permission to view this gallery.
                            This gallery has 1 photos.
                            Zuletzt geändert von hundsmiachn; 07.02.2022, 18:55.

                            Kommentar


                              hundsmiachn hast Du mal den smarty_dsmr_proxy von github probiert?
                              Die Daten schauen an sich gut aus.

                              Kommentar


                                Hi,
                                habe nun endlich auch den encryption key und authentification key erhalten, jedoch sind bei mir beide 16 byte lang... sollte der authentification key nicht 17 byte lang sein?

                                LG

                                Kommentar

                                Lädt...
                                X