Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. E3DC Hauskraftwerk steuern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    E3DC Hauskraftwerk steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • Thomas Braun
      Thomas Braun Most Active @stevie77 last edited by Thomas Braun

      @stevie77 sagte in E3DC Hauskraftwerk steuern:

      lande da eben als root.

      User anlegen, sudo-Rechte vergeben, als User agieren.

      Installation gerade biegen:

      iobroker stop
      iobroker fix
      iobroker start
      

      nodeJS von nodesource richtig anlegen: siehe meine Signatur.

      S 1 Reply Last reply Reply Quote 0
      • S
        stevie77 @Thomas Braun last edited by stevie77

        @thomas-braun Hmmm, da bin ich jetzt etwas ängstlich. Ich habe den Container so übernommen und bisher nie Probleme gehabt. Wenn ich da jetzt anfange Dinge umzustellen, wer weiß, ob ich dann kompatibel bleibe zu weiteren Updates des Docker-Containers. Vielleicht sollte ich mal ein Update auf die 5er-version von https://hub.docker.com/r/buanet/iobroker/ machen, das kann sein.
        Solange nicht 100% sicher ist, dass das die Ursache für das Problem mit promise ist, würde ich da ungerne Hand anlegen.

        Nach einem Node.js-Update mache ich immer folgendes:
        Den ioBroker-Installationsfixer aufrufen, da die Installation von Node.js einige Einstellungen am System verändert haben kann (Sicherheitseinstellungen):

        curl -sL https://iobroker.net/fix.sh | bash -
        
        Thomas Braun 1 Reply Last reply Reply Quote 0
        • Thomas Braun
          Thomas Braun Most Active @stevie77 last edited by

          @stevie77
          Aus meiner Sicht gehst du da mit einem 'Linux'/Debian falsch um.

          S 1 Reply Last reply Reply Quote 0
          • S
            stevie77 @Thomas Braun last edited by stevie77

            @thomas-braun Da kannst du ja durchaus Recht haben, andererseits wurde das buanet-ioBroker-Image mehr als 10 Millionen mal heruntergeladen und erfreut sich ziemlicher Beliebtheit. Der wird dann vermutlich auch ne gewisse Ahnung haben. 😉 Ich kann es nicht beurteilen...
            Aber hat jetzt vermutlich auch nichts mit dem Problem zu tun?!

            Thomas Braun Homoran 2 Replies Last reply Reply Quote 0
            • Thomas Braun
              Thomas Braun Most Active @stevie77 last edited by

              @stevie77

              Ich setze das nicht ein, aber da wurde soweit ich weiß auch ein Standarduser eingerichtet. Zumindest in den letzten Versionen des Containers. Wenn das ganze nicht auf einer Synology laufen sollte jedenfalls.

              S 1 Reply Last reply Reply Quote 0
              • S
                stevie77 @Thomas Braun last edited by

                @thomas-braun Kann natürlich sein, dass das eine der Verbesserungen ist beim Sprung von Version 4.x auf 5.x - wie gesagt, wenn ich mal Zeit haben sollte, müsste ich den Sprung auch mal machen. Aber ist jetzt wohl eher offtopic. 😉

                1 Reply Last reply Reply Quote 0
                • S
                  stevie77 @ArnoD last edited by

                  @arnod sagte in E3DC Hauskraftwerk steuern:

                  @stevie77

                  Versuch mal folgende Änderung.
                  in der Zeile 213 diese beiden Konstanten definieren:
                  const { readFile } = require('fs').promises
                  const { writeFile } = require('fs').promises
                  und die Zeile
                  const fs = require('fs').promises;
                  löschen.

                  Die Zeile 880 in
                  await writeFile(sPfadE3DC , string)
                  ändern und die Zeile 896 in
                  let data = await readFile(sPfadE3DC, { encoding: 'utf8' })
                  ändern.

                  Wenn es bei dir auch funktioniert, würde ich das in meinem Script so übernehmen.

                  Das resultiert dann darin:

                  dcc14514-3f66-4748-a03d-ce69f46abba1-image.png

                  9402da13-015e-44de-8709-28cf19fa7d4f-image.png

                  1 Reply Last reply Reply Quote 0
                  • S
                    stevie77 @ArnoD last edited by

                    @arnod sagte in E3DC Hauskraftwerk steuern:

                    @stevie77
                    Wenn alles nicht funktioniert bleibt nur require('fs').promises gegen require('fs'); zu tauschen oder einfach const fsw verwenden. Dann kann aber await nicht verwendet werden und muss in Zeile 880 gelöscht werden.
                    Die Zeile 880 sieht dann so aus:
                    fsw.writeFile(sPfadE3DC , string)
                    Das gleiche in Zeile 896:
                    let data = fsw.readFile(sPfadE3DC, 'utf8')

                    Das resultiert dann (falls ich es richtig gemacht habe) in:

                    f79bdff0-893a-4fc0-b6ba-f8fd093fd25d-image.png

                    Zeile 281 ist hier dann eh überflüssig, da später nur fsw verwendet wird?! Aber schadet ja auch nicht im Test...

                    21517dcd-7e1c-46fd-80f1-3d42643472bd-image.png

                    ae3ea929-3db6-488e-bed3-faef2b4d5fd4-image.png

                    Glasfaser 1 Reply Last reply Reply Quote 0
                    • Glasfaser
                      Glasfaser @stevie77 last edited by Glasfaser

                      @stevie77

                      4f91e3f0-9d45-45bd-8331-a0f10ccfcb57-grafik.png

                      Ich kenne das ganze hier nicht ,
                      aber ich sehe das in deinem Script der read bei dir falsch ist :

                      let data = await readFile(sPfadE3DC, 'utf8')
                      

                      so sollte es sein :

                      let data = await fs.readFile(sPfadE3DC, 'utf8')
                      

                      Auf Github:

                      // Einlesen der Werte e3dc.config.txt
                      async function e3dcConfigRead()  
                      {
                          let StateParameter = ['Einspeiselimit','UntererLadekorridor','ObererLadekorridor',
                          'MinimumLadeleistung','MaximumLadeleistung','Wrleistung','Ladeschwelle','Ladeende',
                          'Ladeende2','Winterminimum','Sommermaximum','Sommerladeende','Speichergroesse','Unload',
                          'HTmin','HTsockel','HTon','HToff','HTsat','HTsun','Debug','Wallbox','WBmode','WBminLade','Peakshave']
                          try{
                              let data = await fs.readFile(sPfadE3DC, 'utf8')
                      

                      Hast du eine falsche Version !?

                      Schau mal auf GitHub , dort habe ich das Script mit deinen Screenshot verglichen !

                      S 1 Reply Last reply Reply Quote 0
                      • S
                        stevie77 @Glasfaser last edited by stevie77

                        @glasfaser sagte in E3DC Hauskraftwerk steuern:

                        let data = await readFile(sPfadE3DC, 'utf8')

                        Ich versuche ja gerade diese Varianten von Arno umzusetzen, die abweichend vom Original bei Github sind...

                        1 Reply Last reply Reply Quote 0
                        • Glasfaser
                          Glasfaser @ArnoD last edited by

                          @arnod

                          liegt es eventuell an dem

                          const fs = require('fs').promises;

                          hier war so ein ähliches Problem :

                          https://forum.iobroker.net/topic/42638/überführung-funktionierendes-node-js-script/

                          A 1 Reply Last reply Reply Quote 0
                          • S
                            stevie77 @ArnoD last edited by

                            @arnod sagte in E3DC Hauskraftwerk steuern:

                            Wenn alles nicht funktioniert bleibt nur require('fs').promises gegen require('fs'); zu tauschen oder einfach const fsw verwenden. Dann kann aber await nicht verwendet werden und muss in Zeile 880 gelöscht werden.
                            Die Zeile 880 sieht dann so aus:
                            fsw.writeFile(sPfadE3DC , string)
                            Das gleiche in Zeile 896:
                            let data = fsw.readFile(sPfadE3DC, 'utf8')

                            Jetzt habe ich eine Variante gefunden, die durchläuft:

                            //***************************************************************************************************
                            //************************************ Deklaration Variablen ****************************************
                            //***************************************************************************************************
                            const fsw = require('fs');
                            
                            	// String in Datei e3dc.config.txt schreiben
                                try{
                                    fsw.writeFileSync(sPfadE3DC, string)
                                    console.log('-==== E3DC Config Datei gespeichert! ====-');
                            
                                try{
                                    let data = fsw.readFileSync(sPfadE3DC, 'utf8')
                                    data = data.replace(/\n/g, " ");
                            

                            Das hatte ich jetzt eher zufällig bei der Funktion writelog() abgeguckt, dort wird auch die synchronisierte Variante aufgerufen: fsw.writeFileSync(sLogPath, string );
                            Laufe ich damit in irgendwelche Probleme? Werde gleich mal testen, ob auch die richtigen Werte geschrieben und gelesen werden...

                            S 1 Reply Last reply Reply Quote 0
                            • S
                              stevie77 @stevie77 last edited by

                              @stevie77 sagte in E3DC Hauskraftwerk steuern:

                              Laufe ich damit in irgendwelche Probleme? Werde gleich mal testen, ob auch die richtigen Werte geschrieben und gelesen werden...

                              Werte schreiben und lesen klappt so. Yippiehh, endlich läuft das wieder. 🙂 Bei zukünftigen Updates muss ich dann halt diese drei Code-Stellen immer mergen, aber das geht ja...

                              A 1 Reply Last reply Reply Quote 0
                              • A
                                ArnoD @stevie77 last edited by

                                @stevie77

                                Mich würde nur interessieren, warum es bei dir nicht funktioniert.
                                Was mir noch eingefallen ist, hast du nach dem Update von Node.js einmal den Befehl "npm rebuild" ausgeführt?

                                Probleme wirst du ohne fs promises nicht haben.

                                S 1 Reply Last reply Reply Quote 0
                                • A
                                  ArnoD @Glasfaser last edited by

                                  @glasfaser
                                  Wenn es nicht bei allen anderen funktionieren würde, hätte ich das auch vermutet.
                                  Es funktioniert bei mir einwandfrei, kann es aber natürlich auch ohne Promises programmieren.
                                  Werde mir das ganze für die nächste Version mal ansehen, da gibt es ja verschiedene Möglichkeiten dasselbe Ergebnis zu erreichen. fs promises war halt nur die einfachste. 🙂

                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    stevie77 @ArnoD last edited by

                                    @arnod sagte in E3DC Hauskraftwerk steuern:

                                    npm rebuild

                                    Habe ich jetzt mal ausgeführt (hat einiges kompiliert), den originalen Skriptstand eingeführt: Hilft leider nichts.

                                    1 Reply Last reply Reply Quote 0
                                    • TbsJah
                                      TbsJah last edited by TbsJah

                                      Hallo zusammen,
                                      eventuell hat jemand Interesse daran.

                                      RSCPGui bietet die Möglichkeit die Daten per MQTT per Gui und per Console zu liefern
                                      Mit der nachstehenden Möglichkeit werden die Daten per MQTT per Service vom E3DC an den MQTT Adapter von iobroker geliefert.
                                      Letztendlich ähnlich zu dem Autostart von dem Prog von Eba

                                      @smartboart hatte (sehr) viel weiter oben schon erklärt wie der Autostart mit Screen von der Gui Version möglich ist
                                      Hier die Consolen Variante

                                      RSCPGui von hier laden github
                                      Wichtig ist das Ihr den Branch testin3 verwendet. Der Master Branch scheint einen Bug zu haben.

                                      Entpacken und auf /home/pi ablegen
                                      Ich nutze hierfür Filezilla -kann aber natürlich auch mit der git clone - make Variante erfolgen

                                      per Console in das erstellte RSCPGui Verzeichnis navigieren und die requirements installieren

                                      cd RSCPGui
                                      pip3 install -r requirements.txt
                                      

                                      Danach die rscpe3dc.conf.ini anpassen . Was so aussehen könnte

                                      [Login]
                                      username = email@gmail.com
                                      password = @245245245234524352345234524352345
                                      address = 192.xxx.xxx.xxx
                                      rscppassword = @KJHSKFBÖKJBEF
                                      seriennummer = S10-123456789
                                      websocketaddr = wss://s10.e3dc.com/ws
                                      connectiontype = direkt
                                      autoupdate = 30
                                      
                                      [Export]
                                      csv = False
                                      csvfile = 
                                      json = False
                                      jsonfile = 
                                      mqtt = True
                                      mqttbroker = 192.xxx.xxx.xxx
                                      mqttport = 1883
                                      mqttqos = 0
                                      mqttretain = False
                                      mqttsub = False
                                      mqttusername = 
                                      mqttpassword = @
                                      mqttzertifikat = 
                                      mqttinsecure = False
                                      influx = False
                                      influxhost = localhost
                                      influxport = 8086
                                      influxdatenbank = 
                                      influxtimeout = 1
                                      influxname = rscpgui
                                      http = False
                                      httpurl = https://pv.pincrushers.de/rscpgui
                                      intervall = 30
                                      paths = E3DC/INFO_DATA/INFO_SERIAL_NUMBER
                                      pathnames = E3DC/INFO_DATA/INFO_SERIAL_NUMBER|E3DC/INFO_DATA/INFO_SERIAL_NUMBER
                                      

                                      Natürlich könnte ihr auch die Ini von der Exe verwenden. Dann ist es aber wichtig das die Segmente nach [Export] gelöscht werden.

                                      Somit wäre das Programm bereits manuell per console startbar.

                                      python3 main.py -c -e -v INFO
                                      

                                      Um das Prog automatisch im Hintergrund laufen zu lassen müsst ihr noch folgendes einstellen
                                      Config Datei für systemd erstellen

                                      sudo nano /lib/systemd/system/myscript.service
                                      

                                      Nachstehenden Text eingeben

                                      [Unit]
                                      Description=My Script Service
                                      After=multi-user.target
                                      
                                      [Service]
                                      Type=idle
                                      ExecStart=/usr/bin/python3 /home/pi/RSCP/main.py -c -e
                                      WorkingDirectory=/home/pi/RSCP
                                      
                                      User=pi
                                      
                                      [Install]
                                      WantedBy=multi-user.target
                                      

                                      Berechtigung setzen

                                      sudo chmod 644 /lib/systemd/system/myscript.service
                                      

                                      systemd aktualisieren

                                      sudo systemctl daemon-reload
                                      sudo systemctl enable myscript.service
                                      

                                      Neustarten

                                      sudo reboot
                                      

                                      Ergebnis sollte dann, wenn alle Adapter gestartet sind, so aussehen

                                      ad5b7940-2954-4224-b1cb-f078c4a0e214-image.png

                                      1 Reply Last reply Reply Quote 1
                                      • TbsJah
                                        TbsJah last edited by TbsJah

                                        Anstelle des services ist es einfacher es analog zu dem Aufruf von Eba zu machen

                                        Console öffnen
                                        In das RSCP Verzeichnis navigieren und eine RSCP.sh erstellen

                                        pi@raspberrypi:~ $ cd RSCP
                                        pi@raspberrypi:~/RSCP $ sudo nano RSCP.sh
                                        

                                        Aufruf eingeben

                                        
                                        #!/bin/bash
                                        cd /home/pi/RSCP
                                        echo "RSCP wird gestartet"
                                        while true;
                                        do
                                        python3 main.py -c -e -v INFO
                                        sleep 30
                                        done
                                        

                                        Ausführbar machen

                                        chmod +x RSCP.sh
                                        

                                        Autostarteintrag

                                        sudo nano /etc/rc.local
                                        
                                        

                                        Text ergänzen

                                        su pi -c "screen -dmS E3DC /home/pi/E3DC-Control/E3DC.sh" &
                                        su pi /home/pi/RSCP/RSCP.sh &
                                        

                                        Neustart und freuen

                                        A 1 Reply Last reply Reply Quote 0
                                        • A
                                          ArnoD @TbsJah last edited by

                                          @tbsjah
                                          Super Anleitung, Danke.
                                          Wenn das auch mit einer iobroker Installation auf der Synology im Docker Container funktioniert, wäre das super 🙂

                                          Werde das am Wochenende mal testen.
                                          Hatte es bereits einmal versucht, jedoch ohne Erfolg.

                                          M 1 Reply Last reply Reply Quote 0
                                          • TbsJah
                                            TbsJah last edited by TbsJah

                                            Kleine Aktualisierung
                                            Aufruf per rc.local oder service war recht instabil über längere Laufzeit.

                                            crontab hat sich für mich als am stabilsten erwiesen.

                                            die RSCP.sh sieht dadurch etwas anders aus

                                            #!/bin/bash
                                            cd /home/pi/RSCP/
                                            echo "RSCP wird gestartet" 
                                            #while true;
                                            #do
                                            python3 /home/pi/RSCP/main.py -c -e &
                                            sleep 15
                                            PID=$!
                                            kill $PID
                                            exit 0
                                            

                                            Einrichten cron

                                            sudo crontab -e
                                            

                                            Aufruf RSCP.sh jede Minute

                                            */1 * * * * cd /home/pi/RSCP/ && /home/pi/RSCP/RSCP.sh &
                                            
                                            C 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            314
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            70
                                            3331
                                            1362961
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo