Ankündigung

Einklappen
Keine Ankündigung bisher.

Auslesen eines EHZ-Zählers

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

    #31
    Du könntest den Wetterstations-LBS als Vorlage nehmen und den an deine Bedürfnisse anpassen. Die Funktion ist ähnlich, denn die WS liefert jede Sekunde ihre Daten und der Baustein schreibt sie entsprechend auf die Ausgänge.

    Am besten den Baustein kopieren, dann die Eingänge anpassen (d.h. statt IP und Port nur einen Eingang für das device aus dem du liest) und die Ausgäneg entsprechend deiner Werte die dein Leser liefert. Der LBS-Teil kann vermutlich unverändert bleiben. den EXEC-Teil passt du dann an, dass du alles rauswirfst, was mit der Wetterauswertung zu tun hat und machst erstmal eine Minimal While-Schleife, die nicht mehr macht als das php Skript oben und zusätzlich die Raw Daten auf einen Ausang zu geben. Danach kann man dann die Logik ergänzen, um den String (das was alle 2 Sekunden empfangen wird) in die Einzelteile zu zerlegen.

    Hoffe das hilft weiter...

    VG
    André

    Kommentar


      #32
      Hallo André,

      vielen Dank für Deine Hinweise bis hierher

      ​​​​​​​Ich habe mich jetzt mal daran versucht, allerdings ohne dass ich wirklich weiss was ich da tue...
      Es passiert absolut nichts, nichtmal im Log...

      PHP-Code:
      ###[DEF]###
      [name = Easymeter Q3D ]

      [e#1 = Autostart ]
      [e#2 = debug ]
      [e#3 = Interface ]

      [a#1 = RAW-Daten ]

      [v#1 = 0]
      [v#2 = 0.1]

      ###[/DEF]###


      ###[HELP]###
      Dieser LBS liest die Daten eines Easymeter Q3D über einen an USB angeschlossenen Lesekopf von Volkszähler.org aus und gibt die Werte zurück.

      E1: Autostart (1=Autostart mit EDOMI, 0=Kein Autostart, benötigt ein Trigger-KO)
      E2: Debug (0=aus, 1=ein)
      E3: Interface über das der Zähler angesprochen wird (z.B. /dev/ttyUSB0)

      A1: RAW-Daten

      V1: ensures that only one instance of this LBS is running
      V2: contains the version of the LBS and is used when writing to the tracelog

      Changelog:
      ==========
      v0.1: Initial version

      ###[/HELP]###


      ###[LBS]###
      <?
      function LB_LBSID($id) {
      $E=getLogicEingangDataAll($id);
      $interface = $E[3]['value'];
      if (getLogicElementVar($id,1)!=1) {
      setLogicElementVar($id,1,1);
      if ($E=getLogicEingangDataAll($id))
      if (!filter_var($ip, FILTER_VALIDATE_IP) === false)
      callLogicFunctionExec(LBSID,$id);
      } else setLogicLinkAusgang($id,1,1);
      }


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


      ###[EXEC]###
      <?
      require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");

      set_time_limit(0); //Script soll maximal 2 Sekunden laufen

      sql_connect();

      function debug($id,$msg,$error=FALSE)
      {
      $E=getLogicEingangDataAll($id);
      $version = getLogicElementVar($id,2);
      writeToTraceLog(0,!$error,$msg.' [v'.$version.']');
      }

      $E=getLogicEingangDataAll($id);
      $debug = $E[2]['value'];
      $interface = $E[3]['value'];
      $debug && debug($id,'Easymeter-Q3D-EXEC: ### INFO ### - 'Stromzähler Easymeter Q3D daemon started');

      $handle = @fopen("/dev/lesekopf0", "r");
      if ($handle) {
          while (($buffer = fgets($handle, 4096)) !== false) {
              echo $buffer;
          }
          if (!feof($handle)) {
              echo "Error: unexpected fgets() fail\n";
          }
          fclose($handle);
      }

      $Raw-Daten = $str[1];
      echo $Raw-Daten;

      sql_disconnect();

      ?>
      ###[/EXEC]###
      Zuletzt geändert von NorbertB; 23.09.2016, 14:20. Grund: Copy/Paste-Fehler

      Kommentar


        #33
        Doppelposting....

        Kommentar


          #34
          Hi Norbert,

          habe mal einen Baustein hochgeladen. ==> HIER

          Teste doch mal und gib mir Feedback, ob es funktioniert.

          Zumindest wenn ich deinen Zähler-Output in ein File schreibe und den LBS drauf loslasse, bekomme ich den Zählerstand.

          Sollen noch weitere Ausgänge außer der Zählerstand ausgegeben werden? Habe nicht genau herausgefunden, welche Bedeutung die verschiedenen Zeilen haben. Lediglich der Zählerstand war offensichtlich.

          Ggf. kannst basierend auf der OBIS Kennzahlen Spezifikation herausfinden, was in den anderen Zeilen von deinem Zähler geliefert wird. Sollte dann einfach sein, diese Daten auf weitere Ausgänge zu legen.

          Viele Grüße
          André

          Kommentar


            #35
            Hi André,

            ich danke Dir, das sieht gut aus, ich bekomme den Zählerstand
            Das mit den OBIS Kennzahlen ist mir klar.
            Code:
            1-0:0.0.0*255(0273160282481) -> das ist die Eigentumsnummer (Stromversorger)
            1-0:1.8.0*255(00013160.4925817*kWh) -> der Zählerstand
            1-0:21.7.0*255(000361.51*W) -> Momentanleistung L1 (wäre auch interessant)
            1-0:41.7.0*255(000370.41*W) -> Momentanleistung L2 (wäre auch interessant)
            1-0:61.7.0*255(000015.63*W) -> Momentanleistung L3 (wäre auch interessant)
            1-0:1.7.0*255(000747.55*W) -> Momentanleistung L1+L2+L3 (wäre auch interessant)
            1-0:96.5.5*255(80) -> Statusinformation (auch die wäre interessant)
            0-0:96.1.255*255(1ESY1160282481) -> Fabrikationsnummer
            Beste Grüße,
            Norbert

            Kommentar


              #36
              Ich habe mal versucht einen zusätzlichen Ausgang einzubauen:

              PHP-Code:
                  $fp = @fopen($interface"r");
                  if (
              $fp) {
                      while (
              getSysInfo(1)>=1)
                      {
                          
              $buffer fgets($fp4096);
                          if (
              $buffer !== false) {
                              
              logging($id,'Data read: '.$buffer);
                              if (
              preg_match('/1\-0\:1\.8\.0\*255/',$buffer)) // Wenn Zeile mit Zählerstand
                              
              {
                                  
              preg_match('/([0-9]*\.[0-9]*)\*kWh/'$buffer$matches);
                                  
              $zaehlerstand doubleval($matches[1]);
                                  
              logic_setOutput($id,1,intval($zaehlerstand));
                                  
              logic_setOutput($id,2,$zaehlerstand);
                              else if (
              preg_match('/1\-0\:21\.7\.0\*255/',$buffer)) // Wenn Zeile mit Momentanleistung L1
                              
              {
                                  
              preg_match('/([0-9]*\.[0-9]*)\*W/'$buffer$matches);
                                  
              $momentanl1 doubleval($matches[1]);
                                  
              logic_setOutput($id,3,$momentanl1);
                              }
                          }
                          
              usleep(100000);    
                      }
                      
              fclose($handle);
                  } 
              Leider bekomme ich Fehler:

              Code:
               [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
               	 		[TR]
               			[TD]2016-09-23 20:14:14[/TD]
               			[TD]015479[/TD]
               			[TD]?[/TD]
               			[TD]32324[/TD]
               			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000589.php | Fehlercode: 8 | Zeile: 58 | Undefined variable: handle[/TD]
               			[TD]ERROR[/TD]
               		[/TR]
               		[TR]
               			[TD]2016-09-23 20:14:14[/TD]
               			[TD]015929[/TD]
               			[TD]?[/TD]
               			[TD]32324[/TD]
               			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000589.php | Fehlercode: 2 | Zeile: 58 | fclose() expects parameter 1 to be resource, null given[/TD]
               			[TD]ERROR[/TD]
               		[/TR]
               	 [/TABLE]

              Kommentar


                #37
                Habe mal ein Update hochgeladen. Sollten jetzt alle wichtigen Daten auf den Ausgängen verfügbar sein.
                Viel Spaß
                André

                Kommentar


                  #38
                  Vielen herzlichen Dank

                  Kommentar


                    #39
                    Zitat von NorbertB Beitrag anzeigen
                    Vielen herzlichen Dank
                    Gerne.

                    Kommentar


                      #40
                      Hi André,

                      ich bekomme immermal wieder folgende Fehler vom LBS:

                      Code:
                       [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
                      [TR]
                      [TD]2016-10-06 19:39:18[/TD]
                       			[TD]583132[/TD]
                       			[TD]?[/TD]
                       			[TD]857[/TD]
                       			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000589.php | Fehlercode: 8 | Zeile: 47 | Undefined offset: 1[/TD]
                       			[TD]ERROR[/TD]
                       		[/TR]
                      [TR]
                      [TD]2016-10-06 19:39:39[/TD]
                       			[TD]085408[/TD]
                       			[TD]?[/TD]
                       			[TD]857[/TD]
                       			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000589.php | Fehlercode: 8 | Zeile: 75 | Undefined offset: 1[/TD]
                       			[TD]ERROR[/TD]
                       		[/TR]
                      [TR]
                      [TD]2016-10-06 19:39:58[/TD]
                       			[TD]156049[/TD]
                       			[TD]?[/TD]
                       			[TD]857[/TD]
                       			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000589.php | Fehlercode: 8 | Zeile: 47 | Undefined offset: 1[/TD]
                       			[TD]ERROR[/TD]
                       		[/TR]
                      [/TABLE]
                      Was will mir Fehlercode 8 sagen?

                      Kommentar


                        #41
                        Undefiniert Offset bekommst Du, wenn in einem Array nach einem Key, oder Wert gesucht wird, der nicht vorhanden ist. Wahrscheinlich ist da eine Abfrage schief gelaufen. Ich hab mir den BS jedoch nicht angeschaut.

                        Kommentar


                          #42
                          Hm..., zu 99,999% klappt das ja, nur ab und zu (unregelmäßig) bekomme ich die Fehler.
                          Das was der Zähler ausspuckt sieht immer aus wie das hier.

                          Kommentar


                            #43
                            Problem sollte im Update auf v0.3 nun behoben sein.

                            Das zweite preg_match() wurde nicht geprüft, bevor auf dessen Ergebnis zugegriffen wurde. Vermutlich kommt es sporadisch zu fehlerhaften Abrufen des Status. Und dabei sind dann diese Fehler aufgetreten.

                            EDIT: Update ist natürlich ungeprüft. Falls noch ein Fehler drin ist, bitte melden.

                            Kommentar


                              #44
                              Vielen Dank
                              Ich werde testen und berichten

                              Kommentar


                                #45
                                Zitat von NorbertB Beitrag anzeigen
                                Ich werde testen und berichten
                                Läuft jetzt seit 2 Monaten völlig fehlerfrei
                                Vielen Dank nochmal

                                Kommentar

                                Lädt...
                                X