Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlermeldungen im Log durch eingenen LBS

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

    Fehlermeldungen im Log durch eingenen LBS

    Servus Leute,

    da ich noch relativ neu bei EDOMI und PHP bin brauch ich etwas Hilfe. Ich bin gerade dabei einen LBS zu erstellen der einen Json-Sting meines Dataloggers der PV-Anlage aufschlüsselt und übergibt. Die Grundfunktionen funktionieren. Doch manchmal fehlen scheinbar im Json-String einige Teile, dann meckert er ins Log.Fehler im LOG.JPG
    (Die LBS-Nummer ist noch nicht final, werd mich noch regestrieren)
    Die JSON-Abfrage ist wie man sieht (noch) kein Bestandteil meines LBS.

    LBS.JPG

    Code:
    ###[DEF]###
    [name        =SolarWorld (v0.3)            ]
    
    [e#1 TRIGGER    = Trigger (optional)                ]
    [e#2 IMPORTANT    = Json-String    ]
    
    [a#1    = Aktueller Verbrauch (Haus/Batterie)                ]
    [a#2    = Aktueller Verbrauch (Haus)                    ]
    [a#3    = Einspeisung                    ]
    [a#4    = Batterie-Ladung Wh                    ]
    [a#5    = Batterie-Zustand                    ]
    [a#6    = Batterie-Ladung %                    ]
    [a#7    = Erzeugung PV                    ]
    [a#8    = Maximale Leistung PV                    ]
    [a#9    = Eigenstromversorgung                ]
    [a#10    = Bezug EVU                ]
    [a#11    = Ladestrom Batterie                ]
    
    ###[/DEF]###
    
    
    ###[HELP]###
    
    <h2>Ein- und Ausg�nge</h2>
    <h3>Eing�ne</h3>
    
    
    <h3>Ausg�nge</h3>    
    
    ###[/HELP]###
    
    
    ###[LBS]###
    <?
    function LB_LBSID($id) {
        if ($E=getLogicEingangDataAll($id)) {  
            if ($E[1]['refresh']==1 || $E[2]['refresh']==1) {    
                $json = (string)$E[2]['value'];
                //Json-Beispiel '{"PowerSelfConsumption":1379.4603809075945,"PowerConsumption":2596.748567966797,"PowerOut":0,"StatesOfCharge":{"WorkCharge":60,"ModeConverter":"DISCHARGING","StateOfCharge":1},"PowerTotalPV":1379.4603809075945,"PowerPVPeak":9900,"PowerSelfSupply":2575.2943900307573,"PowerIn":21.45417793603974,"PowerConsumptionMax":{"2017-09-24":4327.874227078623,"2017-09-23":5706.109233114997,"2017-09-22":5097.137145880682,"2017-09-18":5003.694712464589,"2017-09-21":5837.091378738959,"2017-09-19":7958.92557146933,"2017-09-20":5060.969388313184}}';
                $array = json_decode($json, true);
                $PowerSelfConsumption = $array["PowerSelfConsumption"];
                $PowerConsumption = $array["PowerConsumption"];
                $PowerOut = $array["PowerOut"];
                if (in_array("StatesOfCharge", $array)) {
                    $WorkCharge = $array["StatesOfCharge"] ["WorkCharge"];
                    $ModeConverter = $array["StatesOfCharge"] ["ModeConverter"];
                    $StateOfCharge = $array["StatesOfCharge"] ["StateOfCharge"];
                    setLogicLinkAusgang($id,4,$WorkCharge);
                    setLogicLinkAusgang($id,5,$ModeConverter);
                    setLogicLinkAusgang($id,6,$StateOfCharge);
                } else {
                    setLogicLinkAusgang($id,4,"0");
                    setLogicLinkAusgang($id,5,"0");
                    setLogicLinkAusgang($id,6,"0");
                }
    
                $PowerTotalPV = $array["PowerTotalPV"];
                $PowerPVPeak = $array["PowerPVPeak"];
                $PowerSelfSupply = $array["PowerSelfSupply"];
                $PowerIn = $array["PowerIn"];    
    
                setLogicLinkAusgang($id,1,$PowerSelfConsumption);
                setLogicLinkAusgang($id,2,$PowerConsumption);
                setLogicLinkAusgang($id,3,$PowerOut);
                setLogicLinkAusgang($id,7,$PowerTotalPV);
                setLogicLinkAusgang($id,8,$PowerPVPeak);
                setLogicLinkAusgang($id,9,$PowerSelfSupply);
                setLogicLinkAusgang($id,10,$PowerIn);
                // Ladestrom der Batterie berechnen
                $Ladestrom = $PowerTotalPV - $PowerConsumption;
                if ($Ladestrom > 0) {
                    setLogicLinkAusgang($id,11,$Ladestrom);
                } else {
                    setLogicLinkAusgang($id,11,"0");
                }
            }
        }
    }
    ?>
    ###[/LBS]###
    
    
    ###[EXEC]###
    <?
    
    ?>
    ###[/EXEC]###
    Der Teil mit dem "StatesOfCharge" ist scheinbar nicht immer im Sting dann gibts zig Fehler. Als gestern mein Wechselrichter keine Verbindung zum Datenlogger hatte lief der Log regelrecht über, da noch mehr im String fehlte.

    Ich hab schon versucht mit einer If-Abrage zu arbeiten aber das hat keine Verbesserung gebracht.

    Schon mal vielen Dank für eure Geduld und Hilfe.

    lg

    Jürgen

    #2
    Wenn nicht sicher ist, dass alle Array-Keys im JSON enthalten sind musst du jeden auch seine Existens prüfen bevor du ihn zuweist (mit is_set oder in_array).

    Kommentar


      #3
      Code:
        
      [FONT=arial]if (in_array("StatesOfCharge", $array) [/FONT]
      Ist das also nicht richtig? So ist so bei mir im Code. Werde mir mal den is_set Befehl anschauen....
      Danke


      Edit:

      Bin mir nach dem lesen der Beschreibung des isset-Befehls nicht sicher ob dieser was bringt. werde aber meinen Code mal anpassen und testen.
      Zuletzt geändert von Jue; 07.10.2017, 19:19.

      Kommentar


        #4
        Zitat von Jue Beitrag anzeigen
        Code:
        [FONT=arial]if (in_array("StatesOfCharge", $array) [/FONT]
        Ist das also nicht richtig?
        Doch aber du musst auch die Keys im Multiarray prüfen also z.B.
        PHP-Code:
        if (isset ($array["StatesOfCharge"]["WorkCharge"]) )   $WorkCharge $array["StatesOfCharge"]["WorkCharge]; 

        Kommentar


          #5
          Danke hx5,

          dank deinen Tip hab ich meinen Code nochmal grundlegend geändert und er läuft. Jetzt muss er noch ohne Fehler die Nacht überstehen.

          Dann ist wieder ein Schritt geschafft.

          Jürgen

          Code:
          ###[DEF]###
          [name        =SolarWorld (v0.5)            ]
          
          [e#1 TRIGGER    = Trigger (optional)                ]
          [e#2 IMPORTANT    = Json-String    ]
          
          [a#1    = Aktueller Verbrauch (Haus/Batterie)                ]
          [a#2    = Aktueller Verbrauch (Haus)                    ]
          [a#3    = Einspeisung                    ]
          [a#4    = Batterie-Ladung Wh                    ]
          [a#5    = Batterie-Zustand                    ]
          [a#6    = Batterie-Ladung %                    ]
          [a#7    = Erzeugung PV                    ]
          [a#8    = Maximale Leistung PV                    ]
          [a#9    = Eigenstromversorgung                ]
          [a#10    = Bezug EVU                ]
          [a#11    = Ladestrom Batterie                ]
          
          ###[/DEF]###
          
          
          ###[HELP]###
          
          <h2>Ein- und Ausg�nge</h2>
          <h3>Eing�ne</h3>
          
          
          <h3>Ausg�nge</h3>    
          
          ###[/HELP]###
          
          
          ###[LBS]###
          <?
          function LB_LBSID($id) {
              if ($E=getLogicEingangDataAll($id)) {  
                  if ($E[1]['refresh']==1 || $E[2]['refresh']==1) {    
                      $json = (string)$E[2]['value'];
                      //$json = $E[1]['value'];
                      //$json = '{"PowerSelfConsumption":1379.4603809075945,"PowerConsumption":2596.748567966797,"PowerOut":0,"StatesOfCharge":{"WorkCharge":60,"ModeConverter":"DISCHARGING","StateOfCharge":1},"PowerTotalPV":1379.4603809075945,"PowerPVPeak":9900,"PowerSelfSupply":2575.2943900307573,"PowerIn":21.45417793603974,"PowerConsumptionMax":{"2017-09-24":4327.874227078623,"2017-09-23":5706.109233114997,"2017-09-22":5097.137145880682,"2017-09-18":5003.694712464589,"2017-09-21":5837.091378738959,"2017-09-19":7958.92557146933,"2017-09-20":5060.969388313184}}';
                      $array = json_decode($json, true);
          
                      //Verbrauch Gesamt
                      if (isset ($array["PowerSelfConsumption"])) {
                          setLogicLinkAusgang($id,1,$array["PowerSelfConsumption"]);
                      } else {   
                          setLogicLinkAusgang($id,1,"0");            
                      }
          
                      //Verbrauch
                      if (isset ($array["PowerConsumption"])) {
                          setLogicLinkAusgang($id,2,$array["PowerConsumption"]);
                      } else {   
                          setLogicLinkAusgang($id,2,"0");            
                      }
          
                      //Einspeisung
                      if (isset ($array["PowerOut"])) {
                          setLogicLinkAusgang($id,3,$array["PowerOut"]);
                      } else {   
                          setLogicLinkAusgang($id,3,"0");               
                      }
          
                      //Ladung kWh
                      if (isset ($array["StatesOfCharge"]["WorkCharge"])) {
                          setLogicLinkAusgang($id,4,$array["StatesOfCharge"] ["WorkCharge"]);
                      } else {   
                          setLogicLinkAusgang($id,4,"0");                
                      }
          
                      //Zustand Batterie
                      if (isset ($array["StatesOfCharge"] ["ModeConverter"])) {
                          setLogicLinkAusgang($id,5,$array["StatesOfCharge"] ["ModeConverter"]);           
                      } else {   
                          setLogicLinkAusgang($id,5,"0");                
                      }
          
                      //Ladung %
                      if (isset ($array["StatesOfCharge"] ["StateOfCharge"])) {
                          setLogicLinkAusgang($id,6,$array["StatesOfCharge"] ["StateOfCharge"]);          
                      } else {   
                          setLogicLinkAusgang($id,6,"0");             
                      }            
          
                      //Erzeugung PV
                      if (isset ($array["PowerTotalPV"])) {
                      setLogicLinkAusgang($id,7,$array["PowerTotalPV"]);          
                      } else {   
                          setLogicLinkAusgang($id,7,"0");             
                      }
          
                      //Maximale PV Leistung
                      if (isset ($array["PowerPVPeak"])) {
                          setLogicLinkAusgang($id,8,$array["PowerPVPeak"]);          
                      } else {   
                          setLogicLinkAusgang($id,8,"0");             
                      }             
          
                      //Eigenversorgung
                      if (isset ($array["PowerSelfSupply"])) {
                          setLogicLinkAusgang($id,9,$array["PowerSelfSupply"]);          
                      } else {   
                          setLogicLinkAusgang($id,9,"0");             
                      }            
          
                      //Strombezug
                      if (isset ($array["PowerIn"])) {
                          setLogicLinkAusgang($id,10,$array["PowerIn"]);           
                      } else {   
                          setLogicLinkAusgang($id,10,"0");             
                      }             
          
                      // Ladestrom der Batterie berechnen            
                      if (isset ($array["PowerTotalPV"]) && ($array["PowerConsumption"])) {
                          $ladestrom = $array["PowerTotalPV"] - ($array["PowerConsumption"]);
                          if ($ladestrom > 0) {
                              setLogicLinkAusgang($id,11,$ladestrom);    
          
                          } else {   
                              setLogicLinkAusgang($id,11,"0");             
                          }              
          
          
                      }
          
          
          
                  }
              }
          }
          ?>
          ###[/LBS]###
          
          
          ###[EXEC]###
          <?
          
          ?>
          ###[/EXEC]###

          Kommentar


            #6
            Guten Morgen,

            über Nacht keine Fehler im Log, perfekt. Danke für die Unterstützung.

            Jürgen

            Kommentar


              #7
              Was mir noch eingefallen ist: "isset" gibt auch FLASE zurück wenn der Wert des Keys "0" ist. Das kann man dann mit
              PHP-Code:
              else $WorkCharge 
              lösen oder du machst es mit:
              PHP-Code:
              if (array_key_exists(["WorkCharge"],$array["StatesOfCharge"]) )   $WorkCharge $array["StatesOfCharge"]["WorkCharge]; 
              anstatt "isset".

              Kommentar

              Lädt...
              X