{"id":989,"date":"2021-11-24T16:15:47","date_gmt":"2021-11-24T14:15:47","guid":{"rendered":"https:\/\/www.gressly.ch\/?page_id=989"},"modified":"2021-11-28T13:35:04","modified_gmt":"2021-11-28T11:35:04","slug":"modbus-wert-lesen","status":"publish","type":"page","link":"https:\/\/www.gressly.ch\/index.php\/openhab\/modbus-wert-lesen\/","title":{"rendered":"Modbus-Wert lesen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Gibt es mal kein Binding f\u00fcr ein Ger\u00e4t, welches via modbus Werte anbietet, kann man im openHAB diese Werte dennoch lesen. Es braucht dazu halt ein bisschen mehr Aufwand, als wenn man schon ein Binding h\u00e4tte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zuerst f\u00fcgt man ein <strong>Modbus TCP Slave<\/strong> hinzu den man die IP-Adresse und den Port des Ger\u00e4tes konfiguriert. In meinem Beispiel zeige ich wie das mit dem <strong>Kostal Smart Energy Meter<\/strong> geht um die Einspeisung ins Stromnetz abzulesen. Analog dazu kann man auch andere Werte lesen, wie den Netzbezug.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"987\" src=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/modbus_slave-1024x987.png\" alt=\"\" class=\"wp-image-702\" srcset=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/modbus_slave-1024x987.png 1024w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/modbus_slave-300x289.png 300w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/modbus_slave-768x740.png 768w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/modbus_slave.png 1066w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Damit die Werte regelm\u00e4ssig gelesen werden, f\u00fcgt man einen <strong>Regular Poll<\/strong> ein. Als <strong>Bridge<\/strong> w\u00e4hlt man den <em>Modbus TCP Slave<\/em>. Der Wert <strong>Poll Interval<\/strong> gibt die Zeit in Millisekunden an die zwischen den Lesezyklen liegt. Bei 5000 wird also alle 5 Sekunden der Wert vom Modbus gelesen. Das Start-Register und die L\u00e4nge muss man auch angeben.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"923\" height=\"1024\" src=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/regular_poll-923x1024.png\" alt=\"\" class=\"wp-image-703\" srcset=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/regular_poll-923x1024.png 923w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/regular_poll-270x300.png 270w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/regular_poll-768x852.png 768w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/regular_poll.png 1063w\" sizes=\"auto, (max-width: 923px) 100vw, 923px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nun das Thing, welches den Wert im openHAB zur Verf\u00fcgung stellt. Hier ist wichtig, die korrekte <strong>Read Address<\/strong> und <strong>Read Value Type<\/strong> einzutragen. Diese Angaben findet man in der Beschreibung des Ger\u00e4teherstellers. In diesem Beispiel die <a rel=\"noreferrer noopener\" href=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/BA_KOSTAL_Interface_KSEM_DE.pdf\" data-type=\"URL\" data-id=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/BA_KOSTAL_Interface_KSEM_DE.pdf\" target=\"_blank\">KSEM Interface Modbus Beschreibung<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1020\" src=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing-1024x1020.png\" alt=\"\" class=\"wp-image-704\" srcset=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing-1024x1020.png 1024w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing-300x300.png 300w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing-150x150.png 150w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing-768x765.png 768w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing-80x80.png 80w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing-320x320.png 320w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_thing.png 1067w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Das Item erstellt man als <strong>Value as Number<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"940\" src=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_item-1024x940.png\" alt=\"\" class=\"wp-image-705\" srcset=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_item-1024x940.png 1024w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_item-300x276.png 300w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_item-768x705.png 768w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_item.png 1066w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Daher der Wert vom Modbus als Zehntel-Watt daherkommt, muss man diesen noch durch 10 Teilen damit man ganze Watt erh\u00e4lt. Dazu braucht es eine <strong>Transformation<\/strong>. Diese kann z.B. als JavaScript abgelegt werden, man muss aber die Transformation-Type dazu noch installieren unter Einstellungen-Transformations.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"831\" src=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_link-1024x831.png\" alt=\"\" class=\"wp-image-706\" srcset=\"https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_link-1024x831.png 1024w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_link-300x243.png 300w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_link-768x623.png 768w, https:\/\/www.gressly.ch\/wp-content\/uploads\/2021\/10\/einspeisung_link.png 1067w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die JavaScript-Datei legt man direkt im Verzeichnis <strong>\/etc\/openhab\/transform<\/strong> ab. Hier ein Beispiel:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">(function(inputData) {\n  return parseFloat(inputData) \/ 10;\n})(input)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Gibt es mal kein Binding f\u00fcr ein Ger\u00e4t, welches via modbus Werte anbietet, kann man im openHAB diese Werte dennoch lesen. Es braucht dazu halt ein bisschen mehr Aufwand, als wenn man schon ein Binding h\u00e4tte. Zuerst f\u00fcgt man ein Modbus TCP Slave hinzu den man die IP-Adresse und den Port des Ger\u00e4tes konfiguriert. In meinem Beispiel zeige ich wie das mit dem Kostal Smart Energy Meter geht um die Einspeisung ins Stromnetz abzulesen. Analog dazu kann man auch andere Werte lesen, wie den Netzbezug. Damit die Werte regelm\u00e4ssig gelesen werden, f\u00fcgt man einen Regular Poll ein. Als Bridge w\u00e4hlt man den Modbus TCP Slave. Der Wert Poll Interval gibt die Zeit in Millisekunden an die zwischen den Lesezyklen liegt. Bei 5000 wird also alle 5 Sekunden der Wert vom Modbus gelesen. Das Start-Register und die L\u00e4nge muss man auch angeben. Nun das Thing, welches den Wert im openHAB zur Verf\u00fcgung stellt. Hier ist wichtig, die korrekte Read Address und Read Value Type einzutragen. Diese Angaben findet man in der Beschreibung des Ger\u00e4teherstellers. In diesem Beispiel die KSEM Interface Modbus Beschreibung. Das Item erstellt man als Value as Number. Daher der Wert vom Modbus als Zehntel-Watt daherkommt, muss man diesen noch durch 10 Teilen damit man ganze Watt erh\u00e4lt. Dazu braucht es eine Transformation. Diese kann z.B. als JavaScript abgelegt werden, man muss aber die Transformation-Type dazu noch installieren unter Einstellungen-Transformations. Die JavaScript-Datei legt man direkt im Verzeichnis \/etc\/openhab\/transform ab. Hier ein Beispiel: (function(inputData) { return parseFloat(inputData) \/ 10; })(input)<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":695,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-989","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/pages\/989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/comments?post=989"}],"version-history":[{"count":7,"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/pages\/989\/revisions"}],"predecessor-version":[{"id":1045,"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/pages\/989\/revisions\/1045"}],"up":[{"embeddable":true,"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/pages\/695"}],"wp:attachment":[{"href":"https:\/\/www.gressly.ch\/index.php\/wp-json\/wp\/v2\/media?parent=989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}