modbus Bitweise schreiben Esera Station 200

Alle Infos und Tipps speziell zu openHAB 2

Moderatoren: seppy, udo1toni

Antworten
exceptio
Beiträge: 2
Registriert: 16. Mär 2019 07:30

modbus Bitweise schreiben Esera Station 200

Beitrag von exceptio » 10. Okt 2019 18:47

Hallo Leute,

ich benötige mal bitte eure Hilfe. Ich komme nicht mehr weiter. Ich möchte bei meiner Esera Homestation Bitweise schreiben. Kann mir da jemand helfen?

Esera Station 200

https://www.esera.de/produkte/1-wire-sm ... t-home-iot

das aktuelle openhab2 mit einem raspberrypi 3

In meinem Beispiel OWD2 ist es ein 8 Fach Schaltmodul

modebus.think

Code: Alles auswählen

Bridge modbus:serial:esera [port="/dev/ttyUSB0",baud=19200,id=1,dataBits=8,parity="none",stopBits="1.0",encoding="rtu"] {

	 Bridge poller owd1 [ start=40100, length=16, refresh=5000, type="holding"] {
		Thing data owd1temp [ readStart="40100", readValueType="uint16", readTransform="teilen100.js"]
	}

	 Bridge poller owd2 [ start=40200, length=16, refresh=1000, type="holding"] {
		Thing data owd2ch1 [ readStart="40204.0", readValueType="bit" ]
		Thing data owd2ch2 [ readStart="40204.1", readValueType="bit" ]
		Thing data owd2ch3 [ readStart="40204.2", readValueType="bit" ]
		Thing data owd2ch4 [ readStart="40204.3", readValueType="bit" ]
		Thing data owd2ch5 [ readStart="40204.4", readValueType="bit" ]
		Thing data owd2ch6 [ readStart="40204.5", readValueType="bit" ]
       	        Thing data owd2ch7 [ readStart="40204.6", readValueType="bit" ]
		Thing data owd2ch8 [ readStart="40204.7", readValueType="bit" ]
	}
}
Bitweise lesen funktioniert. Mit dem schreiben habe ich meine massiven Probleme. Und leider zu wenig Ahnung. Kann mir jemand helfen, vielleicht mit einem Beispiel oder ähnlichen.

Bild

Grüße
Sebastian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

AnderOstsee
Beiträge: 17
Registriert: 15. Jul 2019 17:08

Re: modbus Bitweise schreiben Esera Station 200

Beitrag von AnderOstsee » 11. Okt 2019 08:22

Hallo Sebastian,

genau damit habe ich mich noch nicht beschäftigen können, aber vielleicht hilft dieser Link etwas weiter:
https://community.openhab.org/t/bitwise ... ster/77123

grüße

ralf

exceptio
Beiträge: 2
Registriert: 16. Mär 2019 07:30

Re: modbus Bitweise schreiben Esera Station 200

Beitrag von exceptio » 11. Okt 2019 10:14

Hallo Ralf,

ich bin mir nicht ganz sicher ob ich es richtig umgesetzt habe.

.things (mein ReadTransform geht auch nicht)

Code: Alles auswählen

[WARN ] [ernal.handler.ModbusDataThingHandler] - Channel number will not be updated since transformation was unsuccessful. Channel is expecting the following data types [DecimalType, QuantityType, UnDefType]. Input data: number value 1912 (value type 'uint16' taken into account) and bool value true. Transformation: Transformation@8ed10d[tranformation=teilen100.js,transformationServiceName=<null>,transformationServiceParam=<null>]

Code: Alles auswählen

Bridge modbus:serial:esera [port="/dev/ttyUSB0",baud=19200,id=1,dataBits=8,parity="none",stopBits="1.0",encoding="rtu"] {

	 Bridge poller owd1 [ start=40100, length=16, refresh=5000, type="holding"] {
		Thing data owd1temp [ readStart="40100", readValueType="uint16"] //, readTransform="teilen100.js"
	}

	 Bridge poller owd2 [ start=40200, length=16, refresh=1000, type="holding"] {
		Thing data owd2ch0 [ readStart="40204", readValueType="uint16", writeStart="40202", writeValueType="uint16", writeType="holding" ]
		Thing data owd2ch1 [ readStart="40204.0", readValueType="bit" ]
		Thing data owd2ch2 [ readStart="40204.1", readValueType="bit" ]
		Thing data owd2ch3 [ readStart="40204.2", readValueType="bit" ]
		Thing data owd2ch4 [ readStart="40204.3", readValueType="bit" ]
		Thing data owd2ch5 [ readStart="40204.4", readValueType="bit" ]
		Thing data owd2ch6 [ readStart="40204.5", readValueType="bit" ]
                Thing data owd2ch7 [ readStart="40204.6", readValueType="bit" ]
		Thing data owd2ch8 [ readStart="40204.7", readValueType="bit" ]
	}
}
.items (nur ein Teil)

Code: Alles auswählen

Number Reg_Image  "OWD2 [%d]" { channel="modbus:data:esera:owd2:owd2ch0:number", autoupdate="false" }
Switch   Bedroom_Light            "Licht Schlafzimer"  <light>              (Bedroom, gLight)            ["Lighting", "Switchable"]         {channel="modbus:data:esera:owd2:owd2ch1:switch", autoupdate="false"}
Switch   Bathroom_Light           "Licht Badezimmer"   <light>              (Bathroom, gLight)           ["Lighting", "Switchable"]         {channel="modbus:data:esera:owd2:owd2ch2:switch", autoupdate="false"}
Switch   Kitchen_Light_1          "Licht Küche 1"      <light>              (Kitchen, gLight)            ["Lighting", "Switchable"]         {channel="modbus:data:esera:owd2:owd2ch3:switch", autoupdate="false"}

.rules

Code: Alles auswählen

import java.math.BigInteger // we need this for testBit

rule "update hvac register"
when
    Member of Owd2 received command
then
   var register = BigInteger.valueOf(0)  // we need BigInteger type to use testBit
   if ( Reg_Image.state != NULL && Reg_Image.state != UNDEF) { // avoid using invalid register image
       register = (Reg_Image.state as DecimalType).toBigDecimal.toBigInteger // use existing image
   }
   switch triggeringItem.name {    // act on switched Item name to change only one bit
      case "Bedroom_Light" : {
         if  (receivedCommand == ON) {
            register = register.setBit(0)
         } else if (receivedCommand == OFF) { // by testing both, we will ignore REFRESH commands
            register = register.clearBit(0)
         }
      }
      case "Bathroom_Light" : {
         if  (receivedCommand == ON) {
            register = register.setBit(1)
         } else if (receivedCommand == OFF) {
            register = register.clearBit(1)
         }
      }
      case "Kitchen_Light_1" : {
         if  (receivedCommand == ON) {
            register = register.setBit(2)
         } else if (receivedCommand == OFF) {
            register = register.clearBit(2)
         }
      }
   }
    // at last, write to Modbus
    Reg_Image.sendCommand(register)
end
.log

Code: Alles auswählen

2019-10-11 10:01:53.087 [WARN ] [ernal.handler.ModbusDataThingHandler] - Thing modbus:data:esera:owd2:owd2ch2 'Modbus data': not processing command OFF since writeStart is missing and transformation output is not a JSON

==> /var/log/openhab2/events.log <==

2019-10-11 10:01:54.289 [ome.event.ItemCommandEvent] - Item 'Kitchen_Light_1' received command OFF

==> /var/log/openhab2/openhab.log <==

2019-10-11 10:01:54.297 [WARN ] [ernal.handler.ModbusDataThingHandler] - Thing modbus:data:esera:owd2:owd2ch3 'Modbus data': not processing command OFF since writeStart is missing and transformation output is not a JSON

==> /var/log/openhab2/events.log <==

2019-10-11 10:01:55.341 [ome.event.ItemCommandEvent] - Item 'Bedroom_Light' received command OFF

==> /var/log/openhab2/openhab.log <==

2019-10-11 10:01:55.349 [WARN ] [ernal.handler.ModbusDataThingHandler] - Thing modbus:data:esera:owd2:owd2ch1 'Modbus data': not processing command OFF since writeStart is missing and transformation output is not a JSON

Wenn ich bei Modbus data OWD2 einen Wert zwischen 0 und 255 gebe, schreibe ich auch und die release machen das was sie sollen.

1.PNG

Würde mich freuen wenn mir weiter geholfen werden könnte

Grüße
Sebastian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 4 Gäste