+ Antworten
Seite 2 von 23 ErsteErste 1 2 3 4 12 ... LetzteLetzte
Ergebnis 11 bis 20 von 221
  1. #11
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,673

    Ob wir im Zuge des "Smart Metering" das SML-Protokoll unterstützen werden steht noch nicht fest.
    Dies hängt von der Marktdurchdringung ab.

    MST

  2. #12
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,330

    Das wird eh nichts bringen, da jeder sein eigenes Süppchen kocht. Ohne genau zu wissen was der Netzbetreiber für Daten zur Verfügung stellt wird es schwierig sein die Daten aufzubereiten.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  3. #13
    Registriert seit
    Mar 2007
    Beiträge
    175

    ...na aber das SML Protokoll ist doch ein Standard (Zählerstand, Leistung...), wenn das angezeigt wird ist das doch schon ok, oder?
    Zotac IONITX-A-E 2GByte
    Win7 Ultimate
    Ver 2.4 #1974, 12.06.11, iFront 1.1
    1-Wire USB Adapter DS9490R, Wago 750-342

  4. #14
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,330

    das ist genauso Standart wie das alte. Der eine bietet nur den Verbrauch an, der andere alles und der nächste denkt was kümmert mich der Rest der Welt.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  5. #15
    Registriert seit
    Sep 2008
    Beiträge
    385

    Da es leider derzeit noch keinen frei verfügbaren Parser für das SML-Protokoll gibt lese ich meinen Zähler mit der EDL-cockpit Software aus.

    Um die Daten in IPS zu verarbeiten und in das Webinterface zu integrieren habe ich folgendes gemacht:

    1. Da es in EDL-cockpit (noch) keinen automatischen CSV Export gibt (nur manuell) habe ich den CSV Export mit dem Tool "AutoHotKey" automatisiert. So kann ich alle 15 Minuten einen CSV Export per IPS Skript machen und anschließend die Daten per PHP-Skript zu IPS einlesen. Hier mein AutoHotKey Skript zum exportieren der Daten nach CSV:

    Code:
    IfWinExist EDL-cockpit :																		
    {                                                           
        WinActivate																							
    }                                                           
    else                                                        
    {                                                           
        Run C:\Programme\EDL-cockpit\EDL-cockpit.exe						
        WinWait EDL-cockpit :																		
        WinActivate																							
        Sleep, 500																							
    }                                                           
                                                                
    MouseClick, left,  36,  308																	
                                                                
    Sleep, 200																									
    Send, {ALTDOWN}{ALTUP}{ESC}{ESC}														
                                                                
    Sleep, 200																									
    Send, {ALTDOWN}{ALTUP}d{ENTER}{ENTER}												
    Sleep, 200																									
    Send, C:\Programme\IP-Symcon_V2\export\edl-export.csv{ENTER}
                                                                
    Sleep, 500																									
    Send, j																											
    Sleep, 500																									
    Send, {ENTER}
    2. Zudem habe ich die EDL-cockpit SW per metaVNC in das Webinterface integriert. Somit kann ich dann auch auch die historischen Daten zugreifen. Siehe Screenshot:
    Angehängte Grafiken Angehängte Grafiken  

  6. #16
    Registriert seit
    Jan 2011
    Beiträge
    238

    Hallo RWN,

    ich nutze Dein angepasstes Script um meinen eHZ von Itron (Hager) mit dem alten Protokoll auszulesen. Obwohl alle Variablen korrekt korrekt gefüllt werden, kommen bei der Verarbeitung noch einige Fehlermeldungen, die ich gerne eliminieren möchte. Da ich ein absoluter Script Anfänger bin, würde ich mich freuen, wenn Du 1. mal über das Script schaust und 2. mir mal Stichworte gibst, was genau im Script gemacht wird.

    Herzlichen Dank, Stromer

    PHP-Code:
    <?
    $eHZdata 
    = array("1-0:0.0.0*255" => 50333// Zaehlernummer
           
    "1-0:1.8.0*255" => 43029// aktueller Zaehlerstand
           
    "1-0:96.5.5*255" => 56189// Unbekannt1
                    
    "0-0:96.1.255*255" => 28514// Unbekannt2
                    
    "1-0:32.7.0*255" => 10358// Spannung L1
                    
    "1-0:52.7.0*255" => 39458// Spannung L2
                    
    "1-0:72.7.0*255" => 46118//Spannung L3
                    
    "1-0:31.7.0*255" => 30356//Strom L1
                    
    "1-0:51.7.0*255" => 41944// Strom L2
                    
    "1-0:71.7.0*255" => 15036// Strom L3
                    
    "1-0:21.7.0*255" => 51462// Wirkleistung L1
                    
    "1-0:41.7.0*255" => 52669// Wirkleistung L2
                    
    "1-0:61.7.0*255" => 15335// Wirkleistung L3
                     
    );

    $Netzperiodendauer 0// VariablenID der Obis Kennzahl der Netzperiodendauer
    $var1 0// VariablenID der Obis Kennzahl der Daten welche nicht umgrechnet werden und nur 2 Stellen haben.
    $var2 0// VariablenID der Obis Kennzahl der Daten welche nicht umgrechnet werden und nur 2 Stellen haben.

    //Dateneingang von Registervariable
    $string explode("\n"trim($IPS_VALUE));
    for(
    $i 0$i count($string); $i++)
    {
        
    $id strstr($string[$i], "("true);
        
    $value strstr($string[$i], "(");
        
    $check strpos($value"*");
        if(
    $check !== false)
        {
           
    $value strstr($value"*"true);
            
    $data substr($value1);
            
    SetValue($eHZdata[$id], number_format((float)$data2','''));
        }
        else
        {
            
    $data substr(trim($value), 1, -1);
            if(
    strlen($data) <= 4)
            {
               if(
    $eHZdata[$id] == $Netzperiodendauer)
                {
                   
    $data hexdec($data)/100;
                }
                elseif((
    $eHZdata[$id] == $var1) || ($eHZdata[$id] == $var2))
                {
                   
    $data $data;
                }
                else
                {
                   
    $data hexdec($data);
                }
              }
            
    SetValue($eHZdata[$id], (float)$data);
        }
    }
    $wirk_gesamt GetValue(51462 /*[13 eHZ1 Haushalt\Wirkleistung L1]*/) + GetValue(52669 /*[13 eHZ1 Haushalt\Wirkleistung L2]*/) + GetValue(15335 /*[13 eHZ1 Haushalt\Wirkleistung L3]*/);
    SetValue(19726 /*[13 eHZ1 Haushalt\Wirkleistung Summe]*/,$wirk_gesamt);
    ?>
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Pic1.jpg 
Hits:	458 
Größe:	131.1 KB 
ID:	11799   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Pic2.jpg 
Hits:	432 
Größe:	172.8 KB 
ID:	11800   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Pic3.jpg 
Hits:	345 
Größe:	185.8 KB 
ID:	11801  
    Geändert von RWN (06.05.11 um 12:40 Uhr) Grund: Erweiterung

  7. #17
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,330

    wenn Du 1. mal über das Script schaust
    über welches Script, ich sehe keins. Die Fehlermeldungen kommen von nicht vorhandenen Obis Kennzahlen, welche Du wohl in deinem Script stehen hast.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  8. #18
    Registriert seit
    Jan 2011
    Beiträge
    238

    Verzeihung, habe mein Post erweitert. Danke

  9. #19
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,330

    Das Script scheint nicht ganz zu deinem Zähler zupassen. Da fehlen die Kenzahlen 1-0:96.50.0*x

    Probier es mal hiermit.

    PHP-Code:
    <?
    $eHZdata 
    = array("1-0:0.0.0*255"    => 15447,
                     
    "1-0:1.8.0*255"    => 42432,
                     
    "1-0:1.7.255*255"  => 11938,
                     
    "1-0:96.5.5*255"   => 14262,
                     
    "0-0:96.1.255*255" => 55994,
                     
    "1-0:21.7.0*255" => 27081
                     
    "1-0:41.7.0*255" => 40687
                     
    "1-0:61.7.0*255" => 20592,  
                     
    "1-0:96.50.0*0" => 11938,
                          
    "1-0:96.50.0*1" => 13656,
                     
    "1-0:96.50.0*2" => 49255,
                     
    "1-0:96.50.0*3" => 18449,
                     
    "1-0:96.50.0*4" => 14338,
                     
    "1-0:96.50.0*5" => 25477,
                     
    "1-0:96.50.0*6" => 27081,
                     
    "1-0:96.50.0*7" => 16969
                     
    );

    $Netzperiodendauer 13656 /*[eHZ\Netzperiodendauer]*/// VariablenID der Obis Kennzahl der Netzperiodendauer
    $var1 16969 /*[eHZ\Diagnose]*/// VariablenID der Obis Kennzahl der Daten welche nicht umgerechnet werden
    $var2 11938 /*[eHZ\Netzstatus]*/// VariablenID der Obis Kennzahl der Daten welche nicht umgerechnet werden
    $var3 14262 /*[eHZ\Status]*/// VariablenID der Obis Kennzahl der Daten welche nicht umgerechnet werden

    //Dateneingang von Registervariable
    $string explode("\n"trim(RegVar_GetBuffer(14099 /*[eHZ\Register Variable]*/)));
    for(
    $i 0$i count($string); $i++)
    {
        
    $id strstr($string[$i], "("true); // split nach Obis Kennzahl
        
    $value strstr($string[$i], "("); // split nach Daten
        
    $check strpos($value"*"); // suche nach Daten mit Angaben *V-A-W
        
    if($check !== false// Daten mit V-A-W ausgeben und formatieren auf 2 Stellen nach dem Komma
        
    {
           
    $value strstr($value"*"true); // split nach *V-A-W
            
    $data substr($value1);
            
    SetValue($eHZdata[$id], number_format((float)$data2','''));
        }
        else 
    // alle anderen Daten ausgeben
        
    {
            
    $data substr(trim($value), 1, -1);
            if(
    strlen($data) <= 4// Daten mit bis zu 2 Byte
            
    {
               if(
    $eHZdata[$id] == $Netzperiodendauer)
                {
                   
    $data hexdec($data)/100// Daten umrechnen 1/100 in ms
                
    }
                elseif((
    $eHZdata[$id] == $var1) || ($eHZdata[$id] == $var2) || ($eHZdata[$id] == $var3))
                {
                   
    $data $data// Daten ohne Umrechnung
                
    }
                else
                {
                   
    $data hexdec($data); // Daten von Hex nach Dec umrechnen
                
    }
              }
             
    //echo $data."\n";
            
    if(preg_match('/[A-F]/'$data))
            {
               
    SetValue($eHZdata[$id], (string)$data);
            }
            else
            {
                
    SetValue($eHZdata[$id], (float)$data);
            }
        }
    }
    ?>
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  10. #20
    Registriert seit
    Jan 2011
    Beiträge
    238

    Hallo Rainer,

    vielen Dank auch für die Kommentare. Um das besser zu lernen, würde ich sofort einen kleinen Workshop in Nidda buchen.... Im Ernst.

    Grüße, Stromer