Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Die Spezifikation iec62056-21 schreibt nichts über UTF-8 encoding sondern rein nur über ASCII.
Zitat von iec62056-21
5.4 Character format
Character format according to ISO/IEC 1177:1985.
(1 start bit, 7 data bits, 1 parity bit, 1 stop bit).
NOTE Protocol mode E (see 6.4.5) may use byte transparency, 1 start bit, 8 data bits, 1 stop bit (e.g. see Annex E).
5.5 Character code
Character code according to ISO/IEC 646:1991, international reference version. For local use,
a national replacement code can be used.
Da Du aber ohnehin ein Anzeigeproblem z.B. mit µ hast, würde ich erstmal schauen warum das so ist. Bist Du auf Raspi unterwegs? Welche Python Version nutzt Du?
ich glaub auch nicht so recht an unicode die BOMs die ich kenne sehen anders aus. https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8 .Ich denke eher der unicode converter wirft diese Zeichen einfach raus.
Hallo,
ich arbeite auf einen RPi3 mit Jessie lite und Python 3.6.1. Daran angeschlossen ist ein USB IR-Schreib-Lesekopf von volkszaehler, sprich Udo.
Nachdem ich wie gesagt nicht vom Fach bin, benötige ich idealerweise Eure Unterstützung.
Wie kann ich die Rohdaten der Kommunikation oder zumindest der Antwort des Zählers ermitteln?
Wie gesagt habe ich nur die Spezifikation eines ähnliches Zählers. Trotzdem füge ich diese hier mal an, denn die Produktnummer ist in der Anleitung enthalten, einzig die blaue Taste (zum Anzeigenwechsel) fehlt bei mir. Mein Zähler ist ein FRP-SM-R1B-05060CAA1-LCD/0.
Sprich mein Zähler kommuniziert scheinbar nur mit 9600baud. Sagen Euch die Antworten was bzw. <15> und <7>.
Kann ich trotzdem das Plugin nutzen bzw. was müsste ich ändern?
Nein, es ist eigentlich der erste Versuch korrekt mit 300 Baud.
Es wird /?! gesendet und kommt als Echo zurück. Dann wird lt. Spezifikation auch bei 300 Baud die Identifikation abgefragt. Eigentlich antwortet Dein Zähler auch:
/ ist der Beginn der Antwort der Identifikation
ITF ist ein Herstellerkürzel
5 bedeutet entweder Protocol Mode C oder E und ein umschalten auf 9600 Baud für die weitere Kommunikation
Daraufhin wird dann ein Acknowledgement an den Zähler gesendet mit der Info der Umschaltung auf die 9600 Baud.
Ich denke Da kommt bei Dir bei 2. einfach Käse an: die beiden <15><15> bei ASCII entsprechen nicht den 0F 7F 0F und ich weiß auch nicht, warum die Zeichen bei Dir da auftauchen. Auch im ISO Standard von 2002 sind die nicht aufgeführt.
Das DLMS Plugin ist aktuell so programmiert, das die Aktion vom SmartHomeNG ausgeht und nicht vom Zähler.
Man könnte da höchstens einen Sonderfall einbauen. Das genannte /eHZ-Pflichtenheft/ habe ich auch nirgendwo gefunden. Das könnte Aufschluß über die komischen weiteren Zeichen geben.
Auf Seite 17 ist aber eben auch der Pull Mode C beschrieben der Out-of-the -box funktionieren müßte. Also bitte mal dafür sorgen, das UTF8 bei dir korrekt dargestellt wird und dann kann man weitere Überlegungen anstellen...
PS: Es gibt einen Parameter only_listen in dem keine bidirektionale Kommunikation aufgebaut wird sondern wo das Plugin nur auf den Zähler hört. Da gibt es aber Stand Dez. 2021 noch das Problem das das hören nicht mit dem Smartmeter synchonisiert ist. Insofern kann da auch mal Müll empfangen werden.
Ich habe es aufgegeben, das Plugin anzuwenden. Ich denke, dass der Zähler doch das Protokoll nicht sauber unterstützt. Alle Versuche schlugen fehl. Ich habe mir stattdessen eine Logik mit Auszügen aus dem PlugIn gebaut, die nun zyklisch aufgerufen wird. Das funktioniert soweit gut.
Hier meine Logik:
Code:
#!/usr/bin/python
#
#
import sys
import serial
import time
import re
import string
logger.info("Logik ITF : by :" + trigger['by'] )
def _read_data_block_from_serial(the_serial, end_byte=0x0A):
response = bytes()
try:
while True:
ch = the_serial.read()
if len(ch) == 0:
break
response += ch
if ch == end_byte:
break
if (response[-1] == end_byte):
break
except Exception as e:
# self.logger.debug("Warning {0}".format(e))
return None
return response
# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial('/dev/ehz-lesekopf', 9600, 7, 'E', 1)
#Alternativ
#ser = serial.Serial(
# port='/dev/ttyUSB0',
# baudrate=9600,
# parity=serial.PARITY_EVEN,
# stopbits=serial.STOPBITS_ONE,
# bytesize=serial.SEVENBITS
#)
#Prüfen, ob Port geöffnet
if ser.isOpen()== False:
ser.open()
#Senden des Initialisierungs-String "/?!<CR><LF>" und Lesen der Antwort
ser.write(b"\x2F\x3F\x21\x0D\x0A")
response = _read_data_block_from_serial(ser)
#logger.info(response)
#Acknowledge und OBIS einlesen
ser.write(b'\x06050\r\n')
ser.flush()
ser.reset_input_buffer()
response = _read_data_block_from_serial(ser, 0x03)
#logger.info(response)
#b'\x020.0.0(0000000061009920)\r\n0.0.9(0001420061009920)\r\n0.2.0(V320090704)\r\n1.7.0(0000213*W)\r\n1.8.0(0019166.180*kWh)\r\n96.1.0(12345678)\r\n96.5.5(8C80)\r\n96.7.0(005)\r\n96.7.1(001)\r\n96.7.2(000)\r\n96.7.3(000)\r\n96.8.0(0C611E1E)\r\n97.97.0(00)\r\n96.90.1(010D)\r\n96.90.2(A092)\r\n!\r\n\x03'
# Port schliessen
ser.close()
#Response verabreiten
if len(response) > 5:
result = str(response[1:-4], 'ascii')
#logger.info(result)
else:
logger.info("Sorry response did not contain enough data for OBIS decode")
for item in sh.find_items('obis_code'): # findet alle Items die ein Attribut 'obis_code' besitzen und führe Datenextraktion aus dem String aus
argument = item.conf['obis_code']
index = result.find(argument)
#logger.info(index)
if index > 0:
begin = result.find("(", index)
end = result.find("*", index)
value = float(result[begin+1:end])
logger.info(value)
item(value)
else:
logger.info("Sorry response did not OBIS code")
break
Hi,
okay dann ist da wohl irgentwas im Git falsch da ist es auch so das unterschiedliche Versionen zwischen Plugin und Src da sind.
Das Problem mit den Warnings habe ich auch gelöst indem ich die Doku des plugins im Git gelesen habe. Da war noch die schwirigkeit das yaml bei listen ganz anders aussieht wie das alte format.
Code:
Dlms:
name: 'Elster AS 1440'
ReadOut:
type: str
dlms_obis_readout:
ActPowerIn:
type: num
sqlite: 'true'
dlms_obis_code:
- 1.7.0
- 0
- Value
- num
name: Momentane Leistung Bezug kW
unit: 'kW'
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar