Ankündigung

Einklappen
Keine Ankündigung bisher.

Edomi-Komplettabsturz

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

    Edomi-Komplettabsturz

    Ich habe bei durch meinen ersten LBS offensichtlich meine Edomi-Installation zerschossen.

    Edomi geht schon nach wenigen sec. durch riesige Fehlermengen in die Knie und startet neu.

    Zuerst habe ich versucht, den LBS wieder zu löschen- Fehler und Absturz weiterhin unverändert.
    Live-Projekt löschen - keine Änderung.
    Projekt löschen- keine Änderung.

    Backup - bricht ab ("Die Wiederherstellung ist gescheitert !")

    Was kann ich noch tun ? Projekt ist jetzt bis auf neues Testprojekt leer, dieses kann aber nicht aktiviert werden (Edomi nicht bereit !?)

    Wie kann ich mein Projekt retten (Edomi-Datensicherung von heute 00:01 eigentlich vorhanden/ liegt zusätzlich "extern" vor!) Wie kann ich dies wieder einspielen ???

    Scheinbar läuft außerdem das Live-Projetzt trotz Löschen etc. weiter, produziert Fehler (vgl. Fehlerlog-2), und geht dann lässt dann sehr schnell die Ediomi-Installation komplett abstürzen und Neustarten- bis zum nächsten Absturz !!! Wohl auch daher ist ein Wiedereinspielen der Datensicherung NICHT möglich.

    Gibt es eine Lösung, das Liveprojekt manuell zu löschen (per Firezilla/ Putty ?)

    Ich bin am Verzweifeln und bitte um Eu´re Hilfe
    Andreas
    Angehängte Dateien
    Zuletzt geändert von ak68; 19.02.2017, 14:35.

    #2
    Beim starten auf der Konsole den Edomi-Start abbrechen

    Dann unter /usr/local/edomi/main
    das restore script mit sh restore.sh /pfad_zu_deinem_backup aufrufen

    Kommentar


      #3
      Hallo Andreas,

      schau mal da

      https://knx-user-forum.de/forum/proj...34#post1042434

      In diesem Beitrag steht aber auch, dass manchmal nur eine Neuinstallation und Backup einspielen hilft

      gruß simone
      Zuletzt geändert von Simone; 19.02.2017, 14:38. Grund: edit: ich war zu langsam :-(

      Kommentar


        #4
        Zitat von wintermute Beitrag anzeigen
        /usr/local/edomi/www/data/liveproject/lbs/
        Da gibts jeweils LBS12345678.php und (eventuell) EXE12345678.php, beide loeschen. Das andere File haette dableiben koennen.
        Dieser Vorschlag von Wintermute (https://knx-user-forum.de/forum/proj...38-fatal-error) hat geholfen ... lbs in Liveprojects löschen, dann ist Wiederhochfahren möglich, dann Datensicherung wiedereinspielen


        ... gerettet !!!!!!! Danke auch für Euere Hilfe
        Andreas
        Zuletzt geändert von ak68; 19.02.2017, 15:00.

        Kommentar


          #5
          Wer kann mir helfen, den Fehler in dem für diese Drama verantwortlichen Baustein(-entwurfes) zu finden- ich tue mich etwas schwer als python-Umsteiger !

          Die 3 Variablen in Zeile 97 (function LBS_Ladepumpe): LBS_Regelbetrieb, LBS-Notabschaltung und LBS-Kollektor_Speicher werden von Edomi als nicht-definiert angezeigt (alle 3 sind eigentlich weiter oben definiert)- warum ???

          PHP-Sandbox kritisiert die Syntax NICHT !

          Danke Andreas


          PHP-Code:
          ###[DEF]###
          [name =    Solarsteuerung V0.1]

          [e#1 IMPORTANT = T. Kollektor (°C)]
          [e#2 IMPORTANT = T. Speicher unten (°C)]
          [e#3 IMPORTANT = T. Speicher oben (°C)]
          [e#4 = T. Hysterese alle (K) #init=1.5]
          [e#5 = dT min. Kollektor/Speicher (°C) #init=5]
          [e#6 = dTR min. - Rückkühlung (°C) #init=-6]
          [e#7 = T. Koll. min. (°C) #init=25]
          [e#8 = T. Koll. max.(°C) #init=120]
          [e#9 = T. Koll. Not (°C) #init=150]
          [e#10 = T. Speicher max. (°C) #init=90]
          [e#11 = T. Speicher Not (°C) #init=95]
          [e#12 = Freigabe Heizung I (0/1) #init=0]
          [e#13 = Freigabe Heizung II (0/1) #init=0]
          [e#14 = Freigabe Heizung III (0/1) #init=0]
          [e#15 = T. Heizung EIN (°C) #init=43]
          [e#16 = - AUS (°C) #init=52]
          [e#17 = Legionellen (0/1) #init=1]
          [e#18 = - Temp (°C) #init=60]
          [e#19 = - Zeit (Tage) #init=7]
          [e#20 = - Synchr. mit Heizung (0/1) #init=1]

          [a#1 = T.-Differenz (°C)]
          [a#2 = Solar: Ladepumpe (0/1)]
          [a#3 = Status (Text)]
          [a#4 = Heizung (0/1)]
          [a#5 = Betriebstage Legion.]
          [a#6 = Legion.-Schwelle überschritten (0/1)]
          [a#7 = DEBUG]

          [v#1 = ....]

          ###[/DEF]###

          ###[HELP]###
          ###[/HELP]###

          ###[LBS]###
          <?
          function LB_LBSID($id) {
              if ($E=logic_getInputs($id)) {
                      if ($E[1]['refresh']=1 or $E[2]['refresh']=1)    {                        //neues Telegramm
                      setLogicLinkAusgang($id,1,LBS_TEMP_Diff ($E));
                      setLogicLinkAusgang($id,2,LBS_Ladepumpe($E));
                  }
              }
          }

          // Zwischenwerte

          // Berechnung Temperaturdifferenz (Kollektor - Boiler Unten)
          function LBS_TEMP_Diff ($E) {                                    
              return($E[1]['value']-$E[2]['value']);
          }

          // Temperaturdifferenz Heizbetrieb/ Notkühlung Kollektor
          function LBS_TEMP_Diff_Heizbetrieb($E) {                                        
              if (LBS_Temp_Diff>=($E[5]['value']+$E[4]['value']))
                  return LBS_TEMP_Diff_Heizbetrieb ($E);
          }

          // Temperaturdifferenz Rückkühlung (dT<=dt.min+/-H)
          function LBS_TEMP_Diff_Rückkühlung($E) {                                        
              if (LBS_Temp_Diff<=($E[6]['value']-$E[4]['value']))
                  return LBS_TEMP_Diff_Rückkühlung ($E);
          }

          // Hysterese Minimalbegrenzung Kollektor (T.Koll > T.Koll.min.)
          function LBS_TEMP_Min_Kollektor($E) {                                        
              if ($E[1]['value']>=($E[7]['value']+$E[4]['value']))
                  return LBS_TEMP_Min_Kollektor ($E);
          }

          // Hysterese Maximaltemp. Kollektor (T.Koll > T. Koll. max.)
          function LBS_TEMP_Max_Kollektor($E) {                                        
              if ($E[1]['value']>=($E[8]['value']+$E[4]['value']))
                  return LBS_TEMP_Max_Kollektor ($E);
          }

          // Hysterese Nottemp. Kollektor (T.Koll > T. Not.)
          function LBS_TEMP_Not_Kollektor($E) {                                        
              if ($E[1]['value']>=($E[9]['value']+$E[4]['value']))
                  return LBS_TEMP_Not_Kollektor ($E);
          }

          // Hysterese Maximaltemp. Speicher (T.Speicher > T. Speicher max.)
          function LBS_TEMP_Max_Speicher($E) {                                        
              if ($E[2]['value']>=($E[10]['value']+$E[4]['value']))
                  return LBS_TEMP_Max_Speicher ($E);
          }

          // Hysteres Nottemp. Speicher (T.Speicher > T. Speicher Not.)
          function LBS_TEMP_Not_Speicher($E) {                                        
              if ($E[2]['value']>=($E[11]['value']+$E[4]['value']))
                  return LBS_TEMP_Not_Speicher ($E);
          }

          // Betriebsarten

          // Notabschaltung
          function LBS_Notabschaltung($E) {                                        
              if (LBS_TEMP_Not_Kollektor and LBS_TEMP_Not_Speicher)
                  return LBS_Notabschaltung ($E);
          }

          // Regelbetrieb
          function LBS_Regelbetrieb($E) {                                        
              if (LBS_TEMP_Diff_Heizbetrieb and LBS_TEMP_Min_Kollektor and (LBS_TEMP_Max_Kollektor == 0) and (LBS_TEMP_Max_Speicher == 0))
                  return LBS_Regelbetrieb ($E);
          }

          // Rückkühlung Kollektor
          function LBS_Rückkühlung_Kollektor($E) {                                        
              if (LBS_TEMP_Max_Kollektor and (LBS_TEMP_Not_Speicher == 0) and LBS_TEMP_Diff_Heizbetrieb and (LBS_Notabschaltung == 0))
                  return LBS_Rückkühlung_Kollektor ($E);
          }

          // Rückkühlung Speicher
          function LBS_Rückkühlung_Speicher($E) {                                        
              if (LBS_TEMP_Max_Speicher and LBS_TEMP_Diff_Rückkühlung and (LBS_Notabschaltung == 0))
                  return LBS_Rückkühlung_Speicher ($E);
          }

          // Koll.-Speicher (S.Max - Notabschaltung - Td.Rück)
          function LBS_Kollektor_Speicher($E) {                                        
              if (LBS_TEMP_Max_Speicher and (LBS_TEMP_Diff_Rückkühlung == 0) and (LBS_Notabschaltung == 0))
                  return LBS_Kollektor_Speicher ($E);        
          }

          // Betriebsanzeige

          // Steuerung Ladepumpe

          function LBS_Ladepumpe ($E) {                                    
              if ((LBS_Regelbetrieb or LBS_Rückkühlung_Kollektor or LBS_Rückkühlung_Speicher) and (LBS_Notabschaltung == 0) and (LBS_Kollektor_Speicher == 0))
                  return LBS_Ladepumpe ($E);
          }

          // Nachheizung

          // Legionellenschutz

          // Thermostat

          // Ansteuerung Heizung

          // Statustext

          ?>
          ###[/LBS]###


          ###[EXEC]###
          <?
          ?>
          ###[/EXEC]###
          Zuletzt geändert von ak68; 19.02.2017, 14:59.

          Kommentar


            #6
            warum ist [LBS] und [\LBS] aus kommentiert?
            Gruß Hartwig

            Kommentar


              #7
              Das gehört doch so.

              Kommentar


                #8
                Da für mich dein Code mehr wie Python als wie php aussieht und ich nicht auf die Schnelle das Rätsel function und ($E) -Array lösen kann, habe ich Dir mal meinen LBS für meine Solaranlage angehängt. Ist nur auf meine Bedürfnisse gestrickt, aber vielleicht eine Grundlage ...

                Code:
                ###[DEF]###
                [name        =    Solaranlage                    ]
                
                [e#1        =    T_Diff EIN         #init=13    ]
                [e#2        =    T_Diff AUS      #init=8        ]
                [e#3        =    T_Kollektor                    ]
                [e#4        =    T_Speicher_unten            ]
                [e#5        =    Sonne Süd            #init=0    ]
                [e#6        =    Diff-Erhöhung um    #init=0 ]
                [e#7        =    Restwärme Trigger            ]
                [e#8        =    Frostschutz    EIN/AUS            ]
                [e#9        =    Frostschutz ab Temperatur    ]
                
                
                [a#1        =    Pumpe            ]
                [a#2        =    Status T_Diff    ]
                [a#3        =    Diff_EIN         ]
                [a#4        =    Frostschutz        ]
                
                [v#1        =0                        ]
                [v#2        =0                        ]
                
                ###[/DEF]###
                
                
                ###[HELP]###
                ###[/HELP]###
                
                
                ###[LBS]###
                <?
                function LB_LBSID($id) {
                    if ($E=getLogicEingangDataAll($id)) {
                        If ($E[3]['refresh']==1 || $E[4]['refresh']==1) {
                            If ($E[5]['value']>=3 || $E[8]['value']==1) {
                                setLogicLinkAusgang($id,4,1);
                                If ($E[5]['value']>=90) {
                                    $v2= $E[1]['value'];
                                }else{     $v2= $E[1]['value'] +  $E[6]['value'];}                    //Wenn Sonne Süd <90 -> Diff erhöhen um Wert von E[6]
                
                                $v1 = $E[3]['value'] - $E[4]['value'];
                                setLogicLinkAusgang($id,2,$v1);                                     //Status Temperaturdelta
                
                                If ($v1 > $v2)  {setLogicLinkAusgang($id,1,1);}                 //Pumpe EIN
                
                                If ($v1 <= $E[2]['value']) {setLogicLinkAusgang($id,1,0);}         //Pumpe AUS
                                setLogicLinkAusgang($id,3,$v2);
                
                                If ($E[3]['value']<=$E[9]['value'] && $E[8]['value']==1) {setLogicLinkAusgang($id,4,1);
                                }else{setLogicLinkAusgang($id,4,0);}
                
                            }else{setLogicLinkAusgang($id,1,0);}
                        }
                    }
                
                }
                ?>
                ###[/LBS]###
                
                
                ###[EXEC]###
                <?
                ?>
                ###[/EXEC]###
                >>Smelly One<<
                >> BURLI <<
                Grüße Armin

                Kommentar


                  #9
                  Danke für Dein "Mitleid". Auf den Code habe ich schon heimlich gehofft.
                  Kaum ist man in Python einigermaßen sicher, muss man sich wieder ungewoehnen- mit Deiner Vorlage habe ich jetzt ein Grundgeruest
                  Andreas
                  Zuletzt geändert von ak68; 19.02.2017, 17:28.

                  Kommentar


                    #10
                    Aaalso:

                    1. Die Funktionen sind falsch benannt - siehe Hilfe (Funktionen müssen immer mit LB_LBSID... beginnen)

                    2. Die rekursiven Funktionen wie z.B. LBS_Notabschaltung($E) sind das Hauptproblem:
                    Die Rekursion wird niemals beendet, dadurch läuft vermutlich der Speicher über. Zwar werden die Rückgaben der entsprechenden Funktionen per IF... geprüft, nur leider ändert sich das Array $E niemals
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #11
                      Zitat von ak68 Beitrag anzeigen
                      Danke für Dein "Mitleid". Auf den Code habe ich schon heimlich gehofft.
                      Kaum ist man in Python einigermaßen sicher, muss man sich wieder ungewoehnen- mit Deiner Vorlage habe ich jetzt ein Grundgeruest
                      Andreas
                      Also "Mitleid" kann ich so nicht stehen lassen, ich wollte dir nur helfen. Das Problem in deinem Code habe ich auch nicht zielsicher erkannt, ich war nur "nah" dran. Siehe Punkt 2 von gaert .
                      Glaub mir, mir ging es am Anfang nicht anders nach den ersten Bausteinen für smarthome.py. Ich habe nur einen Vorsprung von einem Jahr.
                      >>Smelly One<<
                      >> BURLI <<
                      Grüße Armin

                      Kommentar


                        #12
                        Zitat von gaert Beitrag anzeigen
                        Aaalso:

                        1. Die Funktionen sind falsch benannt - siehe Hilfe (Funktionen müssen immer mit LB_LBSID... beginnen)

                        2. Die rekursiven Funktionen wie z.B. LBS_Notabschaltung($E) sind das Hauptproblem:
                        Die Rekursion wird niemals beendet, dadurch läuft vermutlich der Speicher über. Zwar werden die Rückgaben der entsprechenden Funktionen per IF... geprüft, nur leider ändert sich das Array $E niemals
                        Hab´s schon verstanden- Schuster bleib bei Deinen Leisten !
                        - Aber sooo schnell gebe ich nicht auf !!!

                        Kommentar


                          #13
                          Zitat von WagoKlemme Beitrag anzeigen

                          Also "Mitleid" kann ich so nicht stehen lassen, ich wollte dir nur helfen.
                          So war da auch gar nicht gemeint- Im Gegenteil: Ich bedanke mich ganz herzlich für Deine Hilfe und bin sehr sehr sehr dankbar für den Baustein !!!

                          Aller Anfang mit einer neuen Programmiersprache (und einem neuen System) ist nicht so ganz einfach- daher bin ich über jede Hilfe froh !

                          Andreas

                          ... hast ein Bier gut- wir sind ja nicht weit voneinander entfernt !!!
                          Zuletzt geändert von ak68; 19.02.2017, 21:06.

                          Kommentar


                            #14
                            Hallo miteinander

                            Zitat von gaert Beitrag anzeigen
                            1. Die Funktionen sind falsch benannt - siehe Hilfe (Funktionen müssen immer mit LB_LBSID... beginnen)
                            Dieser Punkt ist in der Tat essentiell wichtig! Ich hatte bei der LBS-Entwicklung auch schonmal das Problem, dass ein Baustein in meiner Dev-Umgebung problemlos lief, das Produktiv-System dann aber gründlich zerlegt hat.

                            Ich habe damals schon an mir gezweifelt und es hat eine Weile gedauert, bis ich das Problem gefunden habe: Buchstabendreher im ersten Teil des Funktionsnamen! Der springende Punkt an dieser Stelle war, dass das funktioniert hat, solange ich nur einen solchen LBS in Verwendung hatte. Das war auf dem Dev-System der Fall. Auf dem Prod-System hat es dann effektiv zu Problemen geführt, als ich mehrere LBS instanziiert habe...
                            Kind regards,
                            Yves

                            Kommentar


                              #15
                              Richtig Hintergrund ist folgender: Die LBS-Funktionen (also im Abschnitt [LBS]) werden direkt in den Code der Logic-Engine included. Bei mehreren LBSen mit den (zufällig oder durch mehrere Instanzen) gleichen Funktionsnamen führen daher zu "Problemen"... Außerdem ist durch das Präfix LB_LBSID sichergestellt, dass ein Funktionsname nicht zufällig mit einer Werks-Funktion übereinstimmt. LB_LBSID wird nämlich intern in die Instanz-ID des LBS übersetzt, so dass z.B. LB_1234_Funktionsname() resultiert.
                              EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                              Kommentar

                              Lädt...
                              X