Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Ma Sch

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 0
    • Topics 11
    • Posts 22
    • Best 0
    • Groups 1

    Ma Sch

    @Ma Sch

    Starter

    0
    Reputation
    11
    Profile views
    22
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Ma Sch Follow
    Starter

    Latest posts made by Ma Sch

    • RE: Eltako Drehstromzähler Modbus konfiguration

      Hallo,

      habe die Ursache gefunden ... Ich habe im Modbus noch einen weiteren Zähler, einen Eastron SDM630, dem habe ich versehntlich die gleiche Adresse gegeben

      Richtige Konfiguration sieht so aus

      30053	10	Totals active power	Gesamtleistung	W	int32be	2	1	0		value		false	false
      
      posted in ioBroker Allgemein
      Ma Sch
      Ma Sch
    • RE: Eltako Drehstromzähler Modbus konfiguration

      So sieht die Allgemeine Konfiguration aus
      42db8de9-2494-483e-854d-81a14107f979-grafik.png

      und das ist die Logfile mit Einstellung "debug"

      modbus.2
      	2025-05-25 12:31:44.566	debug	[DevID_3/inputRegs] Poll address 72 DONE
      modbus.2
      	2025-05-25 12:31:44.530	debug	[DevID_3/inputRegs] Poll address 72 - 2 registers
      modbus.2
      	2025-05-25 12:31:44.527	debug	[DevID_3/inputRegs] Poll address 52 DONE
      modbus.2
      	2025-05-25 12:31:44.492	debug	[DevID_3/inputRegs] Poll address 52 - 2 registers
      modbus.2
      	2025-05-25 12:31:44.490	debug	[DevID_3/inputRegs] Poll address 0 DONE
      modbus.2
      	2025-05-25 12:31:44.455	debug	[DevID_3/inputRegs] Poll address 0 - 5 registers
      modbus.2
      	2025-05-25 12:31:44.454	debug	[DevID_3] Poll start ---------------------
      modbus.2
      	2025-05-25 12:31:44.403	debug	[DevID_2] Poll start ---------------------
      modbus.2
      	2025-05-25 12:31:43.347	debug	[DevID_3/inputRegs] Poll address 72 DONE
      modbus.2
      	2025-05-25 12:31:43.319	debug	[DevID_3/inputRegs] Poll address 72 - 2 registers
      modbus.2
      	2025-05-25 12:31:43.316	debug	[DevID_3/inputRegs] Poll address 52 DONE
      modbus.2
      	2025-05-25 12:31:43.286	debug	[DevID_3/inputRegs] Poll address 52 - 2 registers
      modbus.2
      	2025-05-25 12:31:43.283	debug	[DevID_3/inputRegs] Poll address 0 DONE
      modbus.2
      	2025-05-25 12:31:43.236	debug	[DevID_3/inputRegs] Poll address 0 - 5 registers
      modbus.2
      	2025-05-25 12:31:43.236	debug	Initialization of scale factors done!
      modbus.2
      	2025-05-25 12:31:43.235	debug	[DevID_3] Poll start ---------------------
      modbus.2
      	2025-05-25 12:31:43.180	debug	[DevID_2] Poll start ---------------------
      modbus.2
      	2025-05-25 12:31:43.179	info	Connected to slave
      modbus.2
      	2025-05-25 12:31:43.168	debug	connect to serial /dev/ttyUSB0 with 9600
      modbus.2
      	2025-05-25 12:31:42.857	debug	Initialize Objects for holdingRegs: [{"_address":"5","deviceId":2,"name":"Leisdtung","description":"Leistung","unit":"W","type":"int16be","len":"1","factor":"1","offset":"0","formula":"","role":"level","room":"","poll":false,"wp":false,"cw":false,"isScale":false,"address":null,"id":"holdingRegisters.2.NaN_Leisdtung","fullId":"modbus.2.holdingRegisters.2.NaN_Leisdtung"}]
      modbus.2
      	2025-05-25 12:31:42.857	debug	Add inputRegisters.3.30073_Energie_Total: {"_id":"inputRegisters.3.30073_Energie_Total","type":"state","common":{"name":"Energie Total","role":"value","type":"number","read":true,"write":false,"def":0,"unit":"kWh"},"native":{"regType":"inputRegs","address":72,"deviceId":3,"type":"uint32le","len":2,"offset":0,"factor":0.01}}
      modbus.2
      	2025-05-25 12:31:42.857	debug	Add inputRegisters.3.30053_Leistung: {"_id":"inputRegisters.3.30053_Leistung","type":"state","common":{"name":"Leistung","role":"value","type":"number","read":true,"write":false,"def":0,"unit":"W"},"native":{"regType":"inputRegs","address":52,"deviceId":3,"type":"uint32le","len":2,"offset":0,"factor":1}}
      modbus.2
      	2025-05-25 12:31:42.856	debug	Add inputRegisters.3.30005_Spannung: {"_id":"inputRegisters.3.30005_Spannung","type":"state","common":{"name":"Spannung L3 N","role":"value","type":"number","read":true,"write":false,"def":0,"unit":"V"},"native":{"regType":"inputRegs","address":4,"deviceId":3,"type":"uint16be","len":1,"offset":0,"factor":0.01}}
      modbus.2
      	2025-05-25 12:31:42.856	debug	Add inputRegisters.3.30003_Spannung: {"_id":"inputRegisters.3.30003_Spannung","type":"state","common":{"name":"Spannung L2 N","role":"value","type":"number","read":true,"write":false,"def":0,"unit":"V"},"native":{"regType":"inputRegs","address":2,"deviceId":3,"type":"uint16le","len":1,"offset":0,"factor":0.01}}
      modbus.2
      	2025-05-25 12:31:42.855	debug	Add inputRegisters.3.30001_Spannung: {"_id":"inputRegisters.3.30001_Spannung","type":"state","common":{"name":"Spannung L1 N","role":"value","type":"number","read":true,"write":false,"def":0,"unit":"V"},"native":{"regType":"inputRegs","address":0,"deviceId":3,"type":"int16be","len":1,"offset":0,"factor":0.01}}
      modbus.2
      	2025-05-25 12:31:42.855	debug	Initialize Objects for inputRegs: [{"_address":5,"deviceId":2,"name":"Leistung","description":"Leistung","unit":"W","type":"int16be","len":1,"factor":1,"offset":0,"formula":"","role":"level","room":"","cw":false,"isScale":false,"address":null,"id":"inputRegisters.2.NaN_Leistung","fullId":"modbus.2.inputRegisters.2.NaN_Leistung"},{"_address":30001,"deviceId":3,"name":"Spannung","description":"Spannung L1 N","unit":"V","type":"int16be","len":1,"factor":0.01,"offset":0,"formula":"","role":"value","room":"","cw":false,"isScale":false,"address":0,"id":"inputRegisters.3.30001_Spannung"},{"_address":30003,"deviceId":3,"name":"Spannung","description":"Spannung L2 N","unit":"V","type":"uint16le","len":1,"factor":0.01,"offset":0,"formula":"","role":"value","room":"","cw":false,"isScale":false,"address":2,"id":"inputRegisters.3.30003_Spannung"},{"_address":30005,"deviceId":3,"name":"Spannung","description":"Spannung L3 N","unit":"V","type":"uint16be","len":1,"factor":0.01,"offset":0,"formula":"","role":"value","room":"","cw":false,"isScale":false,"address":4,"id":"inputRegisters.3.30005_Spannung"},{"_address":30053,"deviceId":3,"name":"Leistung","description":"Leistung","unit":"W","type":"uint32le","len":2,"factor":1,"offset":0,"formula":"","role":"value","room":"","cw":false,"isScale":false,"address":52,"id":"inputRegisters.3.30053_Leistung"},{"_address":30073,"deviceId":3,"name":"Energie Total","description":"Energie Total","unit":"kWh","type":"uint32le","len":2,"factor":0.01,"offset":0,"formula":"","role":"value","room":"","cw":false,"isScale":false,"address":72,"id":"inputRegisters.3.30073_Energie_Total"}]
      modbus.2
      	2025-05-25 12:31:42.854	debug	Initialize Objects for coils: []
      modbus.2
      	2025-05-25 12:31:42.854	debug	Initialize Objects for disInputs: []
      modbus.2
      	2025-05-25 12:31:42.853	debug	Add holdingRegisters.2.NaN_Leisdtung: {"_id":"holdingRegisters.2.NaN_Leisdtung","type":"state","common":{"name":"Leistung","role":"level","type":"number","read":false,"write":true,"def":0,"unit":"W"},"native":{"regType":"holdingRegs","address":null,"deviceId":2,"type":"int16be","len":"1","offset":"0","factor":"1","poll":false}}
      modbus.2
      	2025-05-25 12:31:42.852	debug	Initialize Objects for holdingRegs: [{"_address":"5","deviceId":2,"name":"Leisdtung","description":"Leistung","unit":"W","type":"int16be","len":"1","factor":"1","offset":"0","formula":"","role":"level","room":"","poll":false,"wp":false,"cw":false,"isScale":false,"address":null,"id":"holdingRegisters.2.NaN_Leisdtung"}]
      modbus.2
      	2025-05-25 12:31:42.852	debug	Add inputRegisters.2.NaN_Leistung: {"_id":"inputRegisters.2.NaN_Leistung","type":"state","common":{"name":"Leistung","role":"level","type":"number","read":true,"write":false,"def":0,"unit":"W"},"native":{"regType":"inputRegs","address":null,"deviceId":2,"type":"int16be","len":1,"offset":0,"factor":1}}
      modbus.2
      	2025-05-25 12:31:42.851	debug	Initialize Objects for inputRegs: [{"_address":5,"deviceId":2,"name":"Leistung","description":"Leistung","unit":"W","type":"int16be","len":1,"factor":1,"offset":0,"formula":"","role":"level","room":"","cw":false,"isScale":false,"address":null,"id":"inputRegisters.2.NaN_Leistung"},{"_address":30001,"deviceId":3,"name":"Spannung","description":"Spannung L1 N","unit":"V","type":"int16be","len":1,"factor":"0.01","offset":"0","formula":"","role":"value","room":"","cw":false,"isScale":false},{"_address":30003,"deviceId":3,"name":"Spannung","description":"Spannung L2 N","unit":"V","type":"uint16le","len":1,"factor":"0.01","offset":"0","formula":"","role":"value","room":"","cw":false,"isScale":false},{"_address":30005,"deviceId":3,"name":"Spannung","description":"Spannung L3 N","unit":"V","type":"uint16be","len":1,"factor":"0.01","offset":"0","formula":"","role":"value","room":"","cw":false,"isScale":false},{"_address":30053,"deviceId":3,"name":"Leistung","description":"Leistung","unit":"W","type":"uint32le","len":2,"factor":"1","offset":"0","formula":"","role":"value","room":"","cw":false,"isScale":false},{"_address":30073,"deviceId":3,"name":"Energie Total","description":"Energie Total","unit":"kWh","type":"uint32le","len":2,"factor":"0.01","offset":"0","formula":"","role":"value","room":"","cw":false,"isScale":false}]
      modbus.2
      	2025-05-25 12:31:42.850	debug	Initialize Objects for coils: []
      modbus.2
      	2025-05-25 12:31:42.849	debug	Initialize Objects for disInputs: []
      modbus.2
      	2025-05-25 12:31:42.712	info	starting. Version 6.3.2 in /opt/iobroker/node_modules/iobroker.modbus, node: v20.17.0, js-controller: 6.0.11
      modbus.2
      	2025-05-25 12:31:42.267	debug	Plugin sentry Initialize Plugin (enabled=true)
      modbus.2
      	2025-05-25 12:31:36.666	info	terminating---------------------
      
      posted in ioBroker Allgemein
      Ma Sch
      Ma Sch
    • Eltako Drehstromzähler Modbus konfiguration

      Hallo,

      ich habe den Eltako DSZ15DZMOD-3x80A Drehstromzähler
      Das Protokoll findet man hier:
      https://www.eltako.com/fileadmin/downloads/de/_bedienung/Modbus-RTU_protocol_specification_for_DSZ15DZMOD_V1.6_English_version.pdf

      Die einzige Änderung am Zähler, die ich gemacht habe, ist die Adresse, diese habe ich auf 3 gesetzt. Wie ich die Dokumentation interpretiere, ist die Parität keine, es gibt ein Stopbit
      Es sind 4 byte große Register, also 32 bit, LSB steht meines Erachtens für LittleEndian und der Faktor ist 0.01.

      Das ist meine Konfiguration

      _address	deviceId	name	description	unit	type	len	factor	offset	formula	role	room	cw	isScale
      30053	3	Leistung	Leistung	W	int16le	1	1	0		value		false	false
      30001	3	Spannung	Spannung L1 N	V	uint16le	1	0.01	0		value		false	false
      30003	3	Spannung	Spannung L2 N	V	uint16le	1	0.01	0		value		false	false
      30005	3	Spannung	Spannung L3 N	V	uint16le	1	0.01	0		value		false	false
      30073	3	Energie Total	Energie Total	kWh	int16le	1	0.01	0		value		false	false
      

      allerdings passen die Werte nicht mit denen die am Gerät angezeigt werden. Die Spannung wird mit 260V angezeigt, auch die Leistung und Totale Energie haben falsche Werte.

      Sieht jemand meinen Fehler?

      Danke

      posted in ioBroker Allgemein
      Ma Sch
      Ma Sch
    • Modbus Seriell - Mehrere Adressen = mehrere Instanzen

      Hallo,

      ich habe einen USB2Serial Konverter,d er unter /dev/ttyUSB0 erkannt wurde. Daran hängt ein BUS mit 5 Teilnehmern, die natürlich unterschiedliche Adressen haben.
      Richte ich jetzt für jeden Teilnehmer einen Instanz ein oder muss ich "Mehrere Geräte-IDs" verwenden.

      Danke

      Modbus Seriell - Mehrere Adressen = mehrere Instanzen

      posted in Einbindung von Geräten
      Ma Sch
      Ma Sch
    • RE: Tasmota - SML - Modbus

      Hallo,

      es ist ein DD3 Zähler, der wird auch von Tasmota unterstützt und ich kann auslesen: https://tasmota.github.io/docs/Smart-Meter-Interface/#ebz-dd3-obissml

      Der esp32 so

      @1topf sagte in Tasmota - SML - Modbus:

      Aber ich vermute, daß Dein gekaufter Lesekopf (noch) nicht Modbusfähig ist. Das hätte der Verkäufer gleich mit reinkompilieren müssen. S

      Das modbus-Modul ist zwar kompiliert, meines Erachtens benötige ich es aber nur, wenn ich Modbus ASCII verwenden will.
      Ich möchte jetzt "nur", dass der esp32 als Modbus Server/Slave arbeitet. Er lauscht nach Anfragen und sendet dann. Das dürfte nur eine normale serielle Kommunikation sein, da habe ich gerade diesen Abschnitt gefunden https://tasmota.github.io/docs/Scripting-Language/#serial-io-support

      Ich muss den esp32 jetzt dazu bekommen, die ganze Zeit die seriellen Anfragen zu prüfen und entsprechend darauf reagieren. Jemand eine Idee?

      posted in Microcontroller
      Ma Sch
      Ma Sch
    • Tasmota - SML - Modbus

      Hallo,

      ich habe ioBroker auf einem rpi laufen und kann auf diverse Geräte in einem Modbus (RS485) Bus zugreifen.

      Jetzt habe ich einen Hichi Lesekopf mit esp32 und vorinstallierten Tasmota, wie man ihn überall kaufen kann.
      Allerdings habe ich im Keller kein WLAN und möchte ihn an den RS485 Bus anschließen
      Das ganze ist mein erstes Zusammenkommen mit Tasmota ...

      Also ich möchte, dass die über die optische Schnittstelle des Smartmeter ausgelesenen Werte von anderen Geräte im RS485 Bus gelesen werden könne.

      Wenn ich es richtig verstehe, benötige ich erstmal einen TTL zu RS485 Konverter wie hier beschrieben: https://tasmota.github.io/docs/Modbus-Bridge/

      Wie aber greife ich dann darauf zu und lese die Register aus und wie kommen die Werte da rein?

      Danke

      posted in Microcontroller
      Ma Sch
      Ma Sch
    • RE: kabelgebunden Luftfeuchte/Temperatur messen

      @martinp sagte in kabelgebunden Luftfeuchte/Temperatur messen:

      SHA8C01

      Das wird's

      posted in Einsteigerfragen
      Ma Sch
      Ma Sch
    • kabelgebunden Luftfeuchte/Temperatur messen

      Hallo,

      im Heizungsraum möchte ich Temperatur und Luftfeuchte messen. Dort habe ich allerdings kein WLan und sonstige Funktverbindungen. Ethernet aber schon und auch eine Datenleitung zum ioBroker ist einfach möglich. Kennt jemand einen Sensor (am besten mit Display), den ich über LAN oder andere Datenleitungen an den ioBroker anschließen kann?

      Danke

      posted in Einsteigerfragen
      Ma Sch
      Ma Sch
    • Sungrow Modbus: Zustand des D0-Relais auslesen

      Hallo,

      ich habe eine Sh25T von sungrow. Die Register-Definitionen für modbus stehen hier file:///home/mschulte/Downloads/TI_20231019_Communication.Protocol.of.Residential.Hybrid.Inverter_V1.1.2_EN.pdf

      Das läuft auch so weit für die Input-Register. Ich würde aber gerne den Zustand des D0-Relais (läuft im intelligenten Modus) auslesen. Das müsste mit dem Holdingregister 13011 gehen. Steht im verlinkten pdf auf Seite 1

      Kann mir jemand sagen, wie der Eintrag in der modbus-INstanz dafür aussieht

      _address	name	description	unit	type	len	factor	offset	formula	role	room	poll	wp	cw	isScale
      13011	D0	D0 Relais		uint16be	1	1	0		level					
      

      Gibt zwar keinen Fehler aber auch keinen sinnvollen Wert

      Danke

      posted in ioBroker Allgemein
      Ma Sch
      Ma Sch
    • Skript: eta Modbus zu tsv für Modbusadapter konvertieren

      Hallo,

      bei den Heizkesseln von eta muss man man für die einzelnen Parameter selbst festlegen, in welche modbus-Register sie geschrieben werden. Das Vorgehen wird hier beschrieben: https://www.eta.co.at/typo3conf/ext/lg_tecdoc/pi1/download.php?url=/TechDoku/Files/P-0000003693-DE-003.pdf&gid=4b5b50e37f409538fc4d23ac8cdbd618

      Somit ist bei jedem die Zuordnung Wert <-> Register eine andere, und eine universelle Datei wie z.B. bei so manchem Wechselrichter steht nicht zur Verfügung.
      Man kann die Zuordnung aber in eine xml-Datei exportieren. Das unten stehende python-Skript erzeugt aus der xml-Datei eine fertig formatierte tsv-Datei, deren Inhalt man direkt über den Reiter Holdingregister der modbus-Instanz einfügen kann.

      Vorgehen

      • Zunächst muss man die xml-Datei am Kessel auf einen usb-Stick kopieren. Das ist in der Anleitung oben beschrieben. Die Datei heißt standardmäßig modbusTcpService.xml
      • Diese Datei kopiert man auf einen Rechner mit installierten python3 (z.B. den rpi auf dem ioBroker läuft).
      • Auf diesem Rechner muss auch das Skript etaXML2ioBrokerModbus.py liegen. Nun ruft man das Skript mit dem Dateinamen und dem Namen der Ausgabedatei auf
      python3 etaXML2ioBrokerModbus.py -o eta.tsv
      
      • Danach liegt die fertige tsv-Datei im selben Ordner.
      • Hinweis: Alle Registereinträge sind Integer. In der xml-Datei stehen die Entsprechungen (z. B. 1000 für 'Aus', 1001 für 'An'). Das Skript erzeugt eine Formel, so dass die Entsprechungen in den Objekten bei ioBroker stehen und nicht die Rohwerte.
      • Hinweis: lässt man den Parameter -o und den Ausgabedateinamen weg, wird alles in die Konsole ausgegeben. Braucht man manchmal zum probieren.
      • Hinweis: Heißt die xml-Datei nicht modbusTcpService.xml, ruft man das Skript mit dem Namen der Datei auf
      python3 etaXML2ioBrokerModbus.py andererName.xml
      
      • Hinweis:
      python3 etaXML2ioBrokerModbus.py -h
      

      gibt die Hilfe aus

      Anmerkungen und Anregungen sind herzlich willkommen

      Hier das Skript

      # etaXML2ioBrokerModbus.py
      # M. Schulte, 2024
      
      # Convert eta modbus xml-File to tsv-file for ioBroker modbus adpater.
      # See https://www.eta.co.at/typo3conf/ext/lg_tecdoc/pi1/download.php?url=/TechDoku/Files/P-0000003693-EN-003.pdf&gid=4b5b50e37f409538fc4d23ac8cdbd618 how to configure and export modbus configuration from etaTouch to xml.
      
      import sys
      import os.path
      import argparse
      import xml.etree.ElementTree as ET
      
      seperator = "\t"
      
      parser = argparse.ArgumentParser(description="Convert eta Modbusfile to ioBroker (tsv)",formatter_class=argparse.ArgumentDefaultsHelpFormatter)
      parser.add_argument('filename', nargs='?', default="modbusTcpService.xml", help="The xml file generated from eta (Logs -> Export)")           # positional argument
      parser.add_argument('-o', '--outputFile', help="Name of the output file. If not set, the result will be prompt to the console.")
      
      args = parser.parse_args()
      
      
      # File exists?
      if not os.path.isfile(args.filename):
          print(args.filename + " doesn't exists. Abort.")
          sys.exit(0)
          
      #head of outputfile
      head=["_address","name","description","unit","type","len","factor","offset","formula","role","room","poll","wp","cw","isScale"]
      # result as tsv
      output = seperator.join(head)
      
      
      
      
      # Load xml file
      tree = ET.parse(args.filename)
      root = tree.getroot()
      
      
      # iterate over tree
      for register in root:
          line = [None]*len(head)
          # adress
          line[0]=register.attrib['id']
          # variable is the only subchid of register
          variable = register[0]
          #name
          line[1]=variable.attrib["fubName"]
          #description
          line[2]=variable.attrib["name"]
          #unit
          line[3]=variable.attrib["unit"]
          #type (always int32be)
          line[4]="int32be"
          #len (always 2)
          line[5]="2"
          #factor
          line[6]=str(1/int(variable.attrib["scaleFactor"]))
          #offset
          line[7]="0"
          #role
          line[9]="value"
           #room
          line[10]=""
          #poll
          line[11]="true"
          #wp
          line[12]="false"
          #cw
          line[13]="false"
          #isScale
          line[14]="false"
      
          variableType = variable.find('type')
          if variableType.text == "TEXT": 
              # find substitutions for values
              validValues = variable.find('validValues')
              formular =""
              # Build formular
              for validValue in validValues:
                  #x = 1001 ? 'An' :x=1002 ? 'Aus':''
                  formular = formular+"(x=="+validValue.text+")?'"+validValue.attrib["strValue"]+"':"
              formular=formular+"''+x"# Print value if no substitution
              line[8]=formular
          else: # No formular required
              #formula
              line[8]=""
          #append to output
          output = output+"\n"+seperator.join(line)
          
      if args.outputFile is not None:
          # Write to file if output filename is given
          print("Write result to file "+args.outputFile+".")
          f = open(args.outputFile, "w")
          f.write(output)
          f.close()
      else:    
          print(output)
      
      posted in ioBroker Allgemein
      Ma Sch
      Ma Sch
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo