shh3083
6. Dezember 2013 um 20:15
61
Hallo @all ,
ich habe leider das problem das ich den stream welcher aus meinem ISKRA-Zähler kommt nicht verstehe zum umrechnen.
Könne mir jemand bitte helfen?
Ich würde gerne die Ausgabe direkt mit PHP auf meinem Webserver machen, ist das möglich?
Vielen Dank!!
zweirichtungszaehler.txt (10.2 KB)
Heizungs_drehtstrom.txt (162 KB)
Kann mir niemand helfen?
Ich komme einfach nicht weiter!!!
Hier mal die aktuelle Datei von heute, der Zählerstand beträgt 1145.
heizung_stand_1145.txt (30.4 KB)
fraggle
18. Januar 2014 um 14:16
63
Hallo,
grundsätzlich klappt das mit dem Auslesen des Zählers wunderbar. Nur wenn die Sonne scheint und ich zum EVU liefere stimmt die Wirkleistungsanzeige nicht, dann steht da immer eine große Zahl.
Hier mal der Teil meines Skriptes in welchem die Leistung ausgewertet wird:
// Wirkleistung (Wirk-Leistung Total) Obiskennung:1-0.16.7.0*255 Hex: 01 00 10 07 00 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF)) !== false)
{
$wirkleistung = explode(chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF), $_IPS['VALUE']);
SetValue(35051 /*[Daten\EVU Zähler\Wirkleistung]*/, hexdec(Str2Hex(substr($wirkleistung[1], 7, 4)))/10);
SetValue(13371 /*[Daten\EVU Zähler\Test]*/,Str2Hex(substr($wirkleistung[1], 0, 12)));
}
Dump bei negativer Wirkleistung:
1B 1B 1B 1B 01 01 01 01
76 07 00 0B 01 E7 56 D2 62 00 62 00 72 63 01 01
76 01 01 07 00 0B 00 99 72 46 0B 06 45 4D 48 01 07 19 7F 79 6D 01 01 63 73 C7 00
76 07 00 0B 01 E7 56 D3 62 00 62 00 72 63 07 01
77 01 0B 06 45 4D 48 01 07 19 7F 79 6D 07 01 00 62 0A FF FF 72 62 01 65 00 99 21 C1 7A
77 07 81 81 C7 82 03 FF 01 01 01 01 04 45 4D 48 01
77 07 01 00 00 00 09 FF 01 01 01 01 0B 06 45 4D 48 01 07 19 7F 79 6D 01
77 07 01 00 01 08 00 FF 64 01 02 A2 01 62 1E 52 FF 56 00 00 F2 2E 13 01
77 07 01 00 02 08 00 FF 64 01 02 A2 01 62 1E 52 FF 56 00 00 31 51 1E 01
77 07 01 00 01 08 01 FF 01 01 62 1E 52 FF 56 00 00 00 00 00 01
77 07 01 00 02 08 01 FF 01 01 62 1E 52 FF 56 00 00 31 51 1E 01
77 07 01 00 01 08 02 FF 01 01 62 1E 52 FF 56 00 00 F2 2E 13 01
77 07 01 00 02 08 02 FF 01 01 62 1E 52 FF 56 00 00 00 00 00 01
[b]77 07 01 00 10 07 00 FF 01 01 62 1B 52 FF 55 FF FF C9 5B 01 "Wirkleistung"[/b]
77 07 81 81 C7 82 05 FF 01 72 62 01 65 00 99 21 C1 01 01 83 02 2D DB CA
76 7B 28 84 56 C7 9A A6 83 D2 0E 28 BF 11 71 C8 7B FE F7 54 75 4C 74 6D DD 29 74 C7 B8 7D 86 9E 67 40 E2 91 F3 D5 4D 24 F7 80 C2 03 D4 01 01 01 63 D8 61 00
76 07 00 0B 01 E7 56 D6 62 00 62 00 72 63 02 01 71 01 63 D9 7F 00 00 1B 1B 1B 1B 1A 01 EB 59
irgendwie komme ich da nicht weiter.
Gruß
Frank
tommi
19. Januar 2014 um 16:32
64
das ist bestimmt ein signed Long Integer, also der echte (negative) Wert ist die Differenz zu 2^32
Kaeltis
20. Januar 2014 um 20:39
65
Hey,
komme aktuell nicht wirklich weiter, ich habe einen hager EHZ363W5
(http://datenblatt.stark-elektronik.de/hager/Bedienungsanleitung%20EHZ363.PDF )
Bekomme aber nicht wirklich sinnvolle Daten, hexdec(Str2Hex(substr($zaehlerstand[1], 9, 5))) z.B. ergibt INF
Habe mal einen Dump angehängt, wäre toll wenn mir jemand helfen könnte.
Die OBIS Hex-Werte aus der PDF funktionieren leider nicht oder ergeben genannte unsinnige Daten.
(Der Dump beginnt scheinbar mitten in einem „Paket“, habe 3 Terminal Programme ausprobiert und das leider nicht „schöner“ hinbekommen)
20140120203300.txt (9.58 KB)
RWN
20. Januar 2014 um 21:05
66
Einmal Dump von der Regvar in Hex bitte und einen vom Comport!
Kaeltis
20. Januar 2014 um 21:33
67
Hier die Dumps
dump - COM.txt (115 KB)
dump - regvar.txt (10.5 KB)
RWN
20. Januar 2014 um 23:03
68
Deine Daten wären, wie folgt:
Bezug 1: 888,70 kWh
Bezug 2. 432,58 kWh
Hersteller: HAG
Zählerstand: 889.70 kWh
Stimmt das mit deiner Anzeige im Zähler überein ?
Kaeltis
21. Januar 2014 um 00:06
69
Auf dem Display steht 10958 kWh, habe leider die PIN nicht, ist scheinbar das Einzige was ich ohne angezeigt bekomme.
RWN
21. Januar 2014 um 00:39
70
Stimmt, passt. Hatte eine Stelle unterschlagen. Du musst strpos anpassen.
// Zählerstand (Wirk-Energie Total Bezug) Obiskennung:1-0.1.8.0*255 Hex:01 00 01 08 00 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF)) !== false)
{ $zaehlerstand = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF), $_IPS['VALUE']);
SetValue(xxxxx/*[eHZ\Test SML\Zählerstand]*/, hexdec(Str2Hex(substr($zaehlerstand[1], 8, 4)))/10000); }
// Bezug Tarif 1 (Wirk-Energie Tarif 1 Bezug) Obiskennung:1-0.1.8.1*255 Hex:01 00 01 08 01 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF)) !== false)
{ //print_r(explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF), Str2Hex($_IPS['VALUE'])));
$bezugTarif1 = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF), $_IPS['VALUE']);
SetValue(xxxxx/*[eHZ\Test SML\Bezug 1]*/, hexdec(Str2Hex(substr($bezugTarif1[1], 7, 4)))/10000); }
// Bezug Tarif 2 ((Wirk-Energie Tarif 2 Bezug) Obiskennung:1-0.1.8.2*255 Hex:01 00 01 08 02 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF)) !== false)
{ $bezugTarif2 = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF), $_IPS['VALUE']);
SetValue(xxxxx/*[eHZ\Test SML\Bezug 2]*/, hexdec(Str2Hex(substr($bezugTarif2[1], 7, 4)))/10000); }
Kaeltis
21. Januar 2014 um 13:52
71
Vielen vielen Dank, funktioniert wunderbar
Hab jetzt den PIN aber mit dem bekomm ich über den Port leider auch nicht mehr Informationen.
Lässt sich das „optionale“ Protokoll nicht irgendwie freischalten oder hängt das vom Zähler ab?
Könntest du mir bitte noch den entsprechenden Code für die aktuelle Wirkleistung (01 00 10 07 00 FF) schicken?
Was wäre denn der optimale Weg das Script zeitgesteuert aufzurufen? Würde die Daten gerne Loggen und dabei die Datenbank nicht zu stark belasten, aber das Ganze baut ja auf den Aufruf durch die RegisterVariable mit $_IPS[‚VALUE‘] auf.
RWN
21. Januar 2014 um 15:04
72
SetValue(xxxxx/*[eHZ\Test SML\Wirkleistung]*/, hexdec(Str2Hex(substr($wirkleistung[1], 7, 2)))/10);
Sollte passen.
Bei mir sind die Daten Live. Wenn Du nur alle Minute oder 10 usw loggen willst, leg dir zusätzliche Variablen an. Diese kannst Du dann loggen wie Du willst.
Kaeltis
21. Januar 2014 um 15:15
73
Alles klar, danke
Aktuelle Wirkleistung liegt bei mir laut dem Script aktuell um 90W, kommt mir irgendwie ein bisschen wenig vor.
RWN
21. Januar 2014 um 16:05
74
Mir auch. Ich hab grad nochmal genau nachgesehen. Hier gibt es eine andere Teilung. Bei Bezug2 auch.
Änder das mal ab und vergleich nochmal. So, sollte es eigentlich richtig sein. Sorry.
Wirkleistung:
SetValue(xxxxx/*[eHZ\Test SML\Wirkleistung]*/, hexdec(Str2Hex(substr($wirkleistung[1], 7, 2))));
Bezug2
SetValue(xxxxx/*[eHZ\Test SML\Bezug 2]*/, hexdec(Str2Hex(substr($bezugTarif2[1], 7, 2))));
Kaeltis
21. Januar 2014 um 16:10
75
Garkein Problem, vielen vielen Dank
RWN
21. Januar 2014 um 16:15
76
Was ist denn bei dir Bezug2. Der Wert hat sich seit gestern nicht verändert. Nur Interesse halber.
Kaeltis
21. Januar 2014 um 16:17
77
Ehrlich gesagt habe ich da keine Ahnung, ist mir noch garnicht aufgefallen, muss ich mal rausfinden
RWN
21. Januar 2014 um 16:19
78
Hast Du Nachtstrom oder ähnliches. Dafür, ist er eigentlich gedacht.
Kaeltis
21. Januar 2014 um 16:25
79
Nicht dass ich wüsste oO vielleicht wird der garnicht benutzt.
Hmm,
ich komm mit dem SML von ED300L auch nicht klar.
Es kommt zwar was an aber die Daten sind irgendwie nicht richtig.
SENDCHUNK sieht gut aus (siehe Dump Cutter).
In der Varribale kommen aber ab und an der Wert 0, dann wieder ganz komische Zahlen an. (Wie im Screen)
Was mach ich denn falsch?
if ($_IPS['SENDER'] == "RegisterVariable")
{
$zaehlerstand = "";
// Zählerstand (Wirkarbeit Bezug (+) Zählerstand Total) Obiskennung:1-0.1.8.0*255 Hex:77 07 01 00 01 08 00 ff
if(strpos($_IPS['VALUE'], chr(0x77).chr(0x07).chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF)) !== false)
{
$zaehlerstand = explode(chr(0x77).chr(0x07).chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF), $_IPS['VALUE']);
print Str2Hex($zaehlerstand[1]);
SetValue(48077 /*[01_Programme\04_VOLKSZÄHLER\EMH - Wirk-Energie Total Bezug]*/, hexdec(Str2Hex(substr($zaehlerstand[1], 9, 6)))/10000);
}
$zaehlerstand = "";
// Zählerstand (Wirkarbeit Bezug Tarif 1) objName 1-0:1.8.1*255 Hex:77 07 01 00 01 08 01 ff
if(strpos($_IPS['VALUE'], chr(0x77).chr(0x07).chr(0x07).chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF)) !== false)
{
$zaehlerstand = explode(chr(0x77).chr(0x07).chr(0x07).chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF), $_IPS['VALUE']);
SetValue(40642 /*[01_Programme\04_VOLKSZÄHLER\EMH - Wirkarbeit Bezug Tarif 1]*/, hexdec(Str2Hex(substr($zaehlerstand[1], 7, 8)))/10000);
}
$zaehlerstand = "";
// Zählerstand (Wirkarbeit Bezug (+) Zählerstand Tarif 2) objName 1-0:1.8.2*255 Hex:7 07 01 00 01 08 02 ff
if(strpos($_IPS['VALUE'], chr(0x77).chr(0x07).chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF)) !== false)
{
$zaehlerstand = explode(chr(0x77).chr(0x07).chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF), $_IPS['VALUE']);
SetValue(55937 /*[01_Programme\04_VOLKSZÄHLER\EMH - Wirkarbeit Bezug Tarif 2]*/, hexdec(Str2Hex(substr($zaehlerstand[1], 7, 8)))/10000);
}
}
function Str2Hex($daten)
{
$hex = "";
for($i=0; $i<strlen($daten); $i++) {
$hex .= sprintf("%02X ", ord($daten[$i]));
}
return $hex;
}
dump RegisterVar.txt (131 KB)
dump.txt (99.5 KB)
dump_Cutter.txt (170 KB)