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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    E3DC Hauskraftwerk steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      ArnoD last edited by

      @smartboart
      Habe mal eine Frage zu folgendem Code:

      const Winterminimum = instanz + PfadEbene1 + PfadEbene2[0] + 'Winterminimum';
      const Sommermaximum = instanz + PfadEbene1 + PfadEbene2[0] + 'Sommermaximum';
      const Sommerladeende = instanz + PfadEbene1 + PfadEbene2[0] + 'Sommerladeende';
      const HTon = instanz + PfadEbene1 + PfadEbene2[0] + 'HTon';
      const HToff = instanz + PfadEbene1 + PfadEbene2[0] + 'HToff';
      
      
      function Test_MEZ(){
          
          let UTC_Dez = [getState(Winterminimum).val, getState(Sommermaximum).val, getState(Sommerladeende).val, getState(HTon).val, getState(HToff).val]
          
          for (let i in UTC_Dez) {
              log("i ="+i+' Zeit=' + UTC_Dez[i]);
              if (UTC_Dez[i].includes('.')){
                   log("i ="+i+' Zeit MEZ=' + UTC_Dez[i]);
              }else{
                   log("i ="+i+' Zeit MEZ=' + UTC_Dez[i]);
              }
          }
         
      }
      
      
      on({id: instanz + PfadEbene1 + PfadEbene2[0] + 'HToff', change: "ne"}, function (){Test_MEZ();});
      
      

      Wenn ich das Script manuell starte funktioniert alles, aber wenn ich einen Wert z.B HTon in Vis ändere kommen immer folgende Fehlermeldungen:

      avascript.1	2020-08-11 10:20:25.093	error	(8936) at process.topLevelDomainCallback (domain.js:126:23)
      javascript.1	2020-08-11 10:20:25.093	error	(8936) at processImmediate (timers.js:658:5)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) at tryOnImmediate (timers.js:676:5)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) at runCallback (timers.js:705:18)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:457:25)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1042:38)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) at Object.<anonymous> (script.js.common.E3DC_Control:1408:84)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) at Test_MEZ (script.js.common.E3DC_Control:1299:24)
      javascript.1	2020-08-11 10:20:25.092	error	(8936) Error in callback: TypeError: UTC_Dez[i].includes is not a function
      

      Übersehe ich da was ?

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

        @smartboart
        Ok habe den Fehler gefunden.
        Man muss die Zeile:
        for (let i in UTC_Dez) {

        gegen diese Tauschen:
        for (let i = 0; i < 4 ; i++){

        Dann funktioniert es.
        Verstehe ich zwar nicht aber gut.

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

          @smartboart
          Zu früh gefreut, wenn man die Länge richtigerweise auf 5 erhöht dann kommt wieder der Fehler, also bei
          for (let i = 0; i < 5 ; i++){

          Drehe mich hier im Kreis und weiß nicht woran es liegt. 😖

          smartboart 2 Replies Last reply Reply Quote 0
          • smartboart
            smartboart @ArnoD last edited by smartboart

            ne war quatsch

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

              @ArnoD
              ich probier auch mal...

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

                @smartboart
                Habe schon einiges probiert, das Problem ist immer der Wert der sich zur Laufzeit ändert.
                Dieser geänderte Wert scheitert dann an dieser Abfrage:
                if (UTC_Dez[i].includes('.')){

                Warum verstehe ich nur nicht.

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

                  @ArnoD

                          if (UTC_Dez/*[i]*/.includes('.')){
                  

                  warum parsed du das in eine Nummer, ist das nicht schon eine...
                  hab das [i] mal ausgeklammert, dann kommt zumindes kein Fehler..

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

                    @smartboart
                    Ich durchsuche das Array nach dem '.' und will je nach dem ob dieser vorhanden ist oder nicht unterschiedlich verzweigen.
                    Wenn ich [i] ausklammere geht das nicht.

                    function Test_MEZ(){
                        let Test1 = getState(Winterminimum).val
                        let Test2 = getState(Sommermaximum).val
                        let Test3 = getState(Sommerladeende).val
                        let Test4 = getState(HTon).val
                        let Test5 = getState(HToff).val
                        log('Test1 bis 5='+Test1+'/'+Test2+'/'+Test3+'/'+Test4+'/'+Test5)
                        let UTC_Dez = [''];
                        UTC_Dez = [Test1,Test2,Test3,Test4,Test5];
                        log('Array Länge ='+UTC_Dez.length);
                        
                        for (let i = 0; i < 5 ; i++){
                            
                            log("i ="+i+' UTC_Dez=' + UTC_Dez[i]);
                            
                            if (UTC_Dez.includes('.')){
                                         
                                log("i ="+i+' Zeit MEZ mit Punkt=' + UTC_Dez[i]);
                            }else{
                               log("i ="+i+' Zeit MEZ ohne Punkt=' + UTC_Dez[i]);
                            }
                        }
                    }
                    
                    A 1 Reply Last reply Reply Quote 0
                    • S
                      stevie77 @ArnoD last edited by

                      @ArnoD sagte in E3DC Hauskraftwerk steuern:

                      Um Platz auf einer Seite zu bekommen, muss man den Parameter den man ändern will einmal oben in der Liste anwählen, dann wird das entsprechende hqwidget unten links angezeigt mit dem man den Wert ändern kann. Ich muss noch die Funktion zur Berechnung von Regelbeginn und Ende fertigstellen und die manuelle Anwahl der verschiedenen Einstellungen von 1-5. Die Zeiten werden dann daneben in MEZ Zeit angezeigt.
                      Wenn ich alles fertig habe werde ich es natürlich wieder hier veröffentlichen.

                      Wir sind gespannt. 🙂 Ich persönlich werde für ein paar Wochen wegen Urlaub aussetzen. Habe auch erst vor kurzem die erste View endgültig fertig adaptiert, jetzt will ich nicht schon wieder basteln.

                      Das alte View wird aber deswegen auch noch funktionieren, falls jemand nicht umstellen will.

                      Ja, das ist gut, das wäre dann wahrscheinlich (erstmal) ich.
                      Ich verstehe nicht so ganz, warum man die fünf Presets selbst noch an der Oberfläche manuell verändern will? @smartboart ? Bei mir sehen 3-5 sowieso relativ ähnlich aus. Davon abgesehen ist bei mir noch nie ne andere Einstellung als die 2 gewählt worden seit ich die Automatik seit mehreren Wochen verwende. Wird sich im Herbst dann wahrscheinlich ändern, aber ich sehe da trotzdem nicht die Notwendigkeit die Voreinstellungen manuell zu ändern. Ich hab' die Werte einmal mühsam recherchiert und im Skript hinterlegt, mir reicht das.

                      Gibt's dann wenigstens nen Button, der die fünf Einstellungen wieder auf den Standard wie im Skript hinterlegt zurücksetzt? Das fände ich wichtig, sonst muss man nach etwas rumspielen mühsam Code und Vis-Einstellungen vergleichen und anpassen...

                      Auf Dauer wird man aber umstellen müssen um alle Parameter von E3DC-Control einstellen zu können. Es kommen noch einige für die Wallbox dazu.

                      Du sprichst den im PV-Forum erwähnten Fork an, ne? Der hat dort ja bisher irgendwie gar keine Reaktion ausgelöst. Auch wurde meine Frage von eba nicht beantwortet, ob (und wann) der Fork irgendwann ins offizielle E3DC-Control zurück geht. Wenn das mal offiziell wird (und ich meine Wallbox habe), dann sehe ich auch eher da die Einstellungsnotwendigkeit, da ne WB eben ein großer Verbraucher ist und nicht immer zur gleichen Zeit benötigt wird.

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

                        @smartboart
                        Ein andere Lösungsansatz wäre die unterschiedlichen Formate in ein einheitliches Format umzuwandeln dann müsste ich nicht mehr unterscheiden.
                        Also Werte wie 14, 13.75, 1.3 immer in 14.00, 13.75, 01.30 vorher umzuwandeln.
                        Verstehe nur nicht warum das so funktioniert.

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

                          @stevie77 sagte in E3DC Hauskraftwerk steuern:

                          Ich verstehe nicht so ganz, warum man die fünf Presets selbst noch an der Oberfläche manuell verändern will?

                          Man kann diese nicht ändern sondern nur manuell anwählen wenn man die Automatik ausschaltet.
                          Das würde bedeuten das du deinen Shietwetter-Panik Button nicht mehr benötigst, da du einfach Einstellung1 anwählen kannst.

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

                            @ArnoD Aso, das ist gut. Hatte ich dann missverstanden... 🙂

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

                              @ArnoD sagte in E3DC Hauskraftwerk steuern:

                              @smartboart
                              Ein andere Lösungsansatz wäre die unterschiedlichen Formate in ein einheitliches Format umzuwandeln dann müsste ich nicht mehr unterscheiden.
                              Also Werte wie 14, 13.75, 1.3 immer in 14.00, 13.75, 01.30 vorher umzuwandeln.
                              Verstehe nur nicht warum das so funktioniert.

                              ich kenne das halt nur wenn man eine Gruppe mittels variable definiert und dann in dieser variable nach Informationen sucht. z. B.

                              if (UTC_Dez[i].UTC_Dez==="0")){
                              
                              if (UTC_Dez[i].includes(".")){
                              

                              Fürchte ich kann hier nicht wirklich helfen...

                              smartboart 1 Reply Last reply Reply Quote 0
                              • smartboart
                                smartboart @smartboart last edited by smartboart

                                @ArnoD
                                Hallo Arno,

                                mal ne weitere Frage...

                                Im Script lässt du ja die Prognosen öfter aktualisieren...
                                Macht es nicht auch Sinn die Funktion main nach einer Aktualisierug nochmal durch zu führen?

                                
                                schedule({hour: 5, minute: 45}, function(){main();});
                                
                                

                                Du legst dich um 5 : 45 Uhr mit der Prognose fest, wie du die anlage fahren willst.

                                Heute hatte ich den Fall, dass Programm 1 aktiv war und als ich an das Einspeiselimit kam war die Batterie schon voll...
                                Ist nicht schlimm , weil ich das in nem separaten Script abfange und dann die Klimaanlage loslaufen lasse.

                                Macht es nicht Sinn mehrmals am Tag zu prüfen ob die Prognose noch richtig ist?
                                Vlt kurz vor Regelbeginn und zwischen maximum und Ladeende nochmal?
                                oder immer dann wenn du nen erfolgreicheien Datenabruf der Wetterdaten gemacht hast?

                                smartboart S A 3 Replies Last reply Reply Quote 0
                                • smartboart
                                  smartboart @smartboart last edited by smartboart

                                  und noch ne Idee.
                                  Die function main würde ich gerne bei Umschaltung auf manuell nachdem ein zusätzlicher manueller programmwahl state aktiviert wurde erneut durchlaufen lassen um dann die Programmvorwahl manuell einzuleiten...
                                  Beispiel am Programm 5

                                  on(idProgrammwahl, function(dp) {
                                  setState(idAutomatikVorwahl,false,true);
                                  main();
                                  if(logging)log("Trigger manuelle Programmvorwahl");
                                  });
                                  
                                  // 5Prognose PV-Leistung höher als benötigter Eigenverbrauch,Batterie laden und Überschuss ins Netz einspeisen.
                                  
                                  	// ab 15:00 - 18:00 Uhr Bewölkung > 90%
                                  var Programmwahl= getState(idProgrammwahl).val;
                                  if( (Ueberschuss > 0 && Bedeckungsgrad12<90 && Bedeckungsgrad15>=90 && AutomatikAnwahl )|| (AutomatikAnwahl === false && Programmwahl ===5)){
                                  if (LogAusgabe){log('Einstellung 5 aktiv');}
                                  
                                  		setState(instanz + PfadEbene1 + PfadEbene2[1] + 'Einstellung',5);
                                  
                                          StateRead();
                                  
                                  		e3dcConfigWrite(5);
                                  
                                  		setTimeout(e3dcConfigRead, 1000);
                                  
                                  
                                  A 1 Reply Last reply Reply Quote 0
                                  • S
                                    stevie77 @smartboart last edited by

                                    @smartboart sagte in E3DC Hauskraftwerk steuern:

                                    Heute hatte ich den Fall, dass Programm 1 aktiv war und als ich an das Einspeiselimit kam war die Batterie schon voll...

                                    Wo gab's denn heute in Deutschland einen Regentag? Einstellung 1 ist doch Winter/Regen/fast keine Erzeugung/Erzeugung geringer als Eigenverbrauch den ganzen Tag über?! Wetterprognose bei Hamburg war heute 92-103 für meine Anlage, Berechnungsgrundlage 85 kWh, was dann mit tatsächlichen 83 kWh ganz gut hin kam... 🙂

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

                                      @stevie77 ja ich hatte schon zum 2. x die 1 aktiv..
                                      es war Gewitter vorhergesagt , hat sich aber gegen 12 wieder aufgehellt und dann sonne den Rest des tages bis Abends wieder Wolken aufzogen... Demnach wäre eine Neubewertung gegen mittag vorteilhaft gewesen...
                                      EDIT:
                                      Ich denke die Prognosen sind auch generell sehr unterschiedlich was die Genauigkeit je nach Region betrifft....

                                      Wäre vlt. noch ein dritter Wetterdienst vorteilhaft um daraus zu mitteln...

                                      die Beiden Prognosen liegen oft ganz schön auseinander...

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

                                        @smartboart sagte in E3DC Hauskraftwerk steuern:

                                        @stevie77 ja ich hatte schon zum 2. x die 1 aktiv..
                                        es war Gewitter vorhergesagt , hat sich aber gegen 12 wieder aufgehellt und dann sonne den Rest des tages bis Abends wieder Wolken aufzogen... Demnach wäre eine Neubewertung gegen mittag vorteilhaft gewesen...

                                        Das würde ja eher zu Einstellung 5 passen: Ab 12:00 - 15 Uhr Bewölkung < 90 %, ab 15:00 - 18:00 Uhr Bewölkung >= 90 %. Aber wenn ich dich jetzt richtig verstehe, war die Prognose so schlecht, dass sie meinte es würde den ganzen Tag regnen?!
                                        Dann isses natürlich blöd...

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

                                          @smartboart sagte in E3DC Hauskraftwerk steuern:

                                          Macht es nicht auch Sinn die Funktion main nach einer Aktualisierug nochmal durch zu führen?

                                          Wird in der neuen Version so gemacht, hatte es bei der Umstellung der automatischen Abfrage Proplanta übersehen, das die Funktion main() nicht noch mal aufgerufen wird.

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

                                            @smartboart sagte in E3DC Hauskraftwerk steuern:

                                            und noch ne Idee.
                                            Die function main würde ich gerne bei Umschaltung auf manuell nachdem ein zusätzlicher manueller programmwahl state aktiviert wurde erneut durchlaufen lassen um dann die Programmvorwahl manuell einzuleiten...
                                            Beispiel am Programm 5

                                            on(idProgrammwahl, function(dp) {
                                            setState(idAutomatikVorwahl,false,true);
                                            main();
                                            if(logging)log("Trigger manuelle Programmvorwahl");
                                            });
                                            
                                            // 5Prognose PV-Leistung höher als benötigter Eigenverbrauch,Batterie laden und Überschuss ins Netz einspeisen.
                                            
                                            	// ab 15:00 - 18:00 Uhr Bewölkung > 90%
                                            var Programmwahl= getState(idProgrammwahl).val;
                                            if( (Ueberschuss > 0 && Bedeckungsgrad12<90 && Bedeckungsgrad15>=90 && AutomatikAnwahl )|| (AutomatikAnwahl === false && Programmwahl ===5)){
                                            if (LogAusgabe){log('Einstellung 5 aktiv');}
                                            
                                            		setState(instanz + PfadEbene1 + PfadEbene2[1] + 'Einstellung',5);
                                            
                                                    StateRead();
                                            
                                            		e3dcConfigWrite(5);
                                            
                                            		setTimeout(e3dcConfigRead, 1000);
                                            
                                            

                                            Gute Idee, bin noch nicht dazu gekommen mir über die manuelle Anwahl gedanken zu machen. Kann ich ja jetzt so übernehmen, Danke. 🙂

                                            Bin noch mit der Formel von eba zur berechnung der Uhrzeit von Start und Ende des Regelzeitraum beschäftigt.
                                            Würde gerne diese Zeiten gleich in MEZ bzw. MESZ anzeigen, da mit UTC ständig überlegt werden muss, wann der Regelbeginn ist.

                                            A smartboart 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            873
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            70
                                            3333
                                            1368588
                                            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