Elektronische Haushalts Zähler [eHZ] auslesen

Hallo Toni,

da Du hier im IP-Symcon Forum bist, ist das Script auch auf dieses Software ausgelegt. Der Cutter ist eine Instanz, welche Daten anHand von Trennzeichen zur Verfügung stellt.

Danke RWN ,

du hast recht :slight_smile: hab mir grad das ganze hier durchgeschaut nicht schlecht das IP-Symcon , ich als alter KNX´ler …

trotzdem vielen Dank
Toni

ich als alter KNX´ler

ist ja kein Grund sich das Programm nicht trotzdem zuzulegen, es funktioniert auch mit KNX.

Es gibt ja eine Basic-Version für 99 Euro, ist also nicht allzuviel Geld. :wink:

Das das Teil SML spricht, kommt da nix lesbares raus. Ansonsten wird die hintere Schnittstelle wie RS232 behandelt.

Hallo Rainer,

verstehe noch nicht ganz (bin plont) :smiley:

also bei mir kommt gar an nix der seriellen Schnittstelle an… nicht einmal hieroglyphen…
wenn die Schnittstelle wie RS232 behandelt wird: wie ist die Belegung?
ist meine Belegung richtig oder muss ein komplett belegtes Nullmodemkabel verwendet werden?
mit oder ohne Handshake etc?

Serielle RS232-Kabel Layout Information

Noch vorhanden/im Angebot? :slight_smile:

Da es in diesem Thread auch um das Auslesen von SML-Zähler ging möchte ich aufgrund der regen Nachfrage hier kurz auf mein HowTo zu diesem Thema verweisen:

Ich habe hier einen Hager eHz. Den möchte ich ins IPS integrieren.
Ich habe einen COM1-Modul von co.met und das „funkt“ ins Netzwerk.

Ich habe also einen Client Socket erstellt. Parameter vom COM1-Modul.

Danach habe ich eine Cutterinstanz erstellt. Übergeordnete Instanz ist der Client Socket. Und eine Register Variable darunter.

Hier beginnen schon die Probleme: was muss ich in der Cutterinstanz definieren? Muss ich „cuttern“?

Wenn ich hier debuge, dann ist noch alles wunderbar … irgendwas kommt an. In der Register Variable definiere ich dann das Script und als übergeordnete Instanz den Cutter.

Mein Script sieht so aus:

<?
$eHZdata = array("1-0:0.0.0*255"    => 19662 , //Zählernummer
                 "1-0:2.8.1*255"    => 49563 , //kWh erwirtschaftet
                 "1-0:96.5.5*255"   => 52939 , //Leistung aktuell
                 "0-0:96.1.255*255" => 24726 , //unbekannt
                 "1-0:96.50.0*1"    => 25757  , //unbekannt
                 );

//Dateneingang von Registervariable
$string = explode("
", trim(RegVar_GetBuffer(54391 /*[Cutter MOD Stromzähler Solar\Register Variable]*/)));
echo "String: $string
";

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($value, 1);
        SetValue($eHZdata[$id], number_format((float)$data, 2, ',', ''));
    }
    else
    {

        SetValue($eHZdata[$id], (float)$data);
    }
}

?>

Das war alles. Eigentlich … tut es aber nicht. Ich sehe gar nichts.
Hat jemand eine Idee wo ich meinen Knoten im Kopf habe? :confused:

Übersicht vergessen:

Nicht wundern, es gibt schon ein paar Variablen die durch einen anderen Prozess befüllt wurden. Den will ich ja grad umstellen.

was kommt im CS und im Cutter an? stell das mal hier ein

Ein Dump vom Comport sagt mehr als Tausend Worte. :wink:

Sehr gerne! :slight_smile:

Siehe Post oberdrüber! Den Dump einmal als Hex und ASCII.

Und häng die Dateien bitte hier an und nicht von deinem Server. Da kann man ja Kaffee trinken gehen bis man was sieht. :confused:

sooo, hier nun die beiden dumps.

dump_ascii_mod.txt (5.03 KB)

dump_hex_mod.txt (15.9 KB)

Setz mal als rechtes Trennzeichen im Cutter das Ausrufezeichen. !

Und ersetz mal die Zeile.

   


//Dateneingang von Registervariable
$string = explode("
", trim($IPS_VALUE));
echo "String: $string
";



    

Ich hab dir das Script angepasst. :slight_smile:

<?

$eHZdata = array("1-0:0.0.0*255"    => 19662 , //Zählernummer
                 "1-0:2.8.1*255"    => 49563 , //kWh erwirtschaftet
                 "1-0:96.5.5*255"   => 52939 , //Leistung aktuell
                 "1-0:96.50.0*1"    => 25757  , //unbekannt
                 );

$string = explode("
", trim($IPS_VALUE));
//print_r($string);

for($i = 0; $i < count($string); $i++)
{
   $id = strstr($string[$i], "(", true);
   $value = strstr($string[$i], "(");
   $data = substr(trim($value), 1, -1);
   SetValue($eHZdata[$id], (float)$data);
}


?>

Ok. Habe ich jetzt so umgesetzt.
Leider kommt nichts an. Ich habe alles auskommentiert außer der Zählernummer … leider nichts. :frowning:
Es aktualisiert sich, jedoch schreibt er eine Null (0).

Das Script was ich vor 2min gepostet habe, funktioniert!

Es tut mir leid Rainer, aber bei mir funktioniert es nicht.
Ein

print_r($string);

bringt

Array
(
    [0] => 
)

Dann hast Du irgend was verbockt.

Von vorne, Comport -> Cutter, linke Trennzeichen /HAG5eHZ010C_RWE1mA10 rechte Trennzeichen !

Cutter -> Regvar -> Script

und jetzt sag nicht wieder es geht nicht. :smiley:

hast Du in diesem Beispiel das Script von Hand gestartet oder wie kommt das Ergebnis zustande?

Von Hand gibt es eine Fehler meldung. Ist doch eine Systemvariable drinnen. :wink: Er Cuttert nicht richtig.