modbus auf Openhab 4

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

modbus auf Openhab 4

Beitrag von hulda »

Hallo ich bin gerade am Update auf Version 4
nun folgendes Problem beim Modbus:
das ist der Code der Version 3 (funktioniert)

Code: Alles auswählen

  Bridge modbus:tcp:Heizung [ host="192.168.1.196", 
                                   port=8887, id=1, 
                                   connectMaxTries=10 
                                   //reconnectAfterMillis=60000
                                   //timeBetweenReconnectMillis=1000,
                                   //timeBetweenTransactionsMillis=200 
                                 ] {


    Bridge modbus:poller:Heizung:Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
        Thing data cKesselTemperatur                [ readStart="0", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cRestsauerstoffgehalt            [ readStart="3", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cSekundaerluftklappe              [ readStart="5", readValueType="int16" ]
        Thing data cFuehler1                        [ readStart="7", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cRuecklauffuehler               [ readStart="9", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cSaugzugansteuerung              [ readStart="13", readValueType="int16" ]
        Thing data cKesselstellgroesse              [ readStart="14", readValueType="int16" ]
        Thing data cAbgasSollTemperatur             [ readStart="15", readValueType="int16" ]
        Thing data cSauerstoffregler                [ readStart="16", readValueType="int16" ]
        Thing data cBetriebsstunden                 [ readStart="20", readValueType="int16" ]
        Thing data cFuellstandPelletbehaelter       [ readStart="21", readTransform="JS(TeileDurch207.js)", readValueType="int16" ]
        Thing data cUnterdruck                      [ readStart="32", readValueType="int16" ]
          Thing data cBetriebsstundenSaugturbine      [ readStart="48", readValueType="int16" ]
        Thing data cStundenSeitLetzterWartung       [ readStart="55", readValueType="int16" ]
        Thing data cPelletverbrauchKGZaehler        [ readStart="81", readValueType="int16" ]
        Thing data cPelletVerbrauchGesamt           [ readStart="83", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cHeizstundenBisAscheEntleerung   [ readStart="86", readValueType="int16" ]
        Thing data cTest   [ readStart="97", readValueType="int16" ]
       
    
    }
    }

und das der Code der Version der noch irgendeinen Fehler hat.

Code: Alles auswählen

    Bridge modbus:tcp:Heizung [ host="192.168.1.196", 
                                   port=8887, id=1, 
                                   connectMaxTries=10 
                                   //reconnectAfterMillis=60000
                                   //timeBetweenReconnectMillis=1000,
                                   //timeBetweenTransactionsMillis=200 
                                 ] {


    Bridge poller inputRegisters Heizung Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
        Thing data cKesselTemperatur                [ readStart="0", readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cRestsauerstoffgehalt            [ readStart="3", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cSekundaerluftklappe              [ readStart="5", readValueType="int16" ]
        Thing data cFuehler1                        [ readStart="7", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cRuecklauffuehler               [ readStart="9", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cSaugzugansteuerung              [ readStart="13", readValueType="int16" ]
        Thing data cKesselstellgroesse              [ readStart="14", readValueType="int16" ]
        Thing data cAbgasSollTemperatur             [ readStart="15", readValueType="int16" ]
        Thing data cSauerstoffregler                [ readStart="16", readValueType="int16" ]
        Thing data cBetriebsstunden                 [ readStart="20", readValueType="int16" ]
        Thing data cFuellstandPelletbehaelter       [ readStart="21", readTransform="JS(TeileDurch207.js)", readValueType="int16" ]
        Thing data cUnterdruck                      [ readStart="32", readValueType="int16" ]
          Thing data cBetriebsstundenSaugturbine      [ readStart="48", readValueType="int16" ]
        Thing data cStundenSeitLetzterWartung       [ readStart="55", readValueType="int16" ]
        Thing data cPelletverbrauchKGZaehler        [ readStart="81", readValueType="int16" ]
        Thing data cPelletVerbrauchGesamt           [ readStart="83", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cHeizstundenBisAscheEntleerung   [ readStart="86", readValueType="int16" ] 
        Thing data cTest   [ readStart="97", readValueType="int16" ]
       
    }
    }
               
Welche Änderungen muß ich noch vornehmen?

Gruß Dirk

Benutzeravatar
udo1toni
Beiträge: 13989
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: modbus auf Openhab 4

Beitrag von udo1toni »

Vermutlich musst Du JavaScript Scripting nachinstallieren.
Je nach verwendeten Scripten (TeileDurch2.js, TeileDurch10.js und TeileDurch207.js) könnte es auch sein, dass Du Code anpassen musst (unwahrscheinlich...) weil in openHAB3 "Nashorn" Standard war und unter openHAB nun "Graal" zum Einsatz kommt (das eine von 2017, das andere von... öhhh... 2021? Dialekte halt...)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: modbus auf Openhab 4

Beitrag von hulda »

Hallo, ich habe JavaScript Scripting nachinstalliert.
aber es scheint noch ein Syntaxproblem zu geben
ich finde nicht wo...
Es wird beim ersten Thing angezeigt das eine Klammer zu fehlt. ist aber nicht so..
An was kann das noch liegen?
ist diese Zeile richtig?

Code: Alles auswählen

    Bridge poller inputRegisters Heizung Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
das ist die Zeile die ich geändert habe

Code: Alles auswählen

   Bridge modbus:poller:Heizung:Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
kompletter Code:

Code: Alles auswählen

    Bridge modbus:tcp:Heizung [ host="192.168.1.196", 
                                   port=8887, id=1, 
                                   connectMaxTries=10 
                                   //reconnectAfterMillis=60000
                                   //timeBetweenReconnectMillis=1000,
                                   //timeBetweenTransactionsMillis=200 
                                 ] {


    Bridge poller inputRegisters Heizung Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
        Thing data cKesselTemperatur                [ readStart="0", readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cRestsauerstoffgehalt            [ readStart="3", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cSekundaerluftklappe              [ readStart="5", readValueType="int16" ]
        Thing data cFuehler1                        [ readStart="7", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cRuecklauffuehler               [ readStart="9", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cSaugzugansteuerung              [ readStart="13", readValueType="int16" ]
        Thing data cKesselstellgroesse              [ readStart="14", readValueType="int16" ]
        Thing data cAbgasSollTemperatur             [ readStart="15", readValueType="int16" ]
        Thing data cSauerstoffregler                [ readStart="16", readValueType="int16" ]
        Thing data cBetriebsstunden                 [ readStart="20", readValueType="int16" ]
        Thing data cFuellstandPelletbehaelter       [ readStart="21", readTransform="JS(TeileDurch207.js)", readValueType="int16" ]
        Thing data cUnterdruck                      [ readStart="32", readValueType="int16" ]
          Thing data cBetriebsstundenSaugturbine      [ readStart="48", readValueType="int16" ]
        Thing data cStundenSeitLetzterWartung       [ readStart="55", readValueType="int16" ]
        Thing data cPelletverbrauchKGZaehler        [ readStart="81", readValueType="int16" ]
        Thing data cPelletVerbrauchGesamt           [ readStart="83", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cHeizstundenBisAscheEntleerung   [ readStart="86", readValueType="int16" ] 
        Thing data cTest   [ readStart="97", readValueType="int16" ]
       
    }
    }
               

Benutzeravatar
udo1toni
Beiträge: 13989
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: modbus auf Openhab 4

Beitrag von udo1toni »

Ich nutze selbst kein Modbus. Leider ist Modbus eine totale Ausnahme von anderen Bindings (durch die doppelte Bridge, die dann noch nicht mal so funktioniert, wie man es als Anwender erwarten würde)
Meinem Verständnis der Hierarchie nach müsste die Zeile aber so aussehen:

Code: Alles auswählen

Bridge poller Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
Es wird eine Bridge definiert, welche unterhalb der übergeordneten Bridge liegt. Diese Bridge ist vom Typ poller. Die UID der Bridge lautet dann modbus:poller:<übergeordneteBridge>:Heizung_AnlagenWerte
Wobei ich ohnehin empfehlen möchte, die UID über die UI nachzuschlagen, die wird ja auch für per Textdatei angelegte Things angezeigt. Oder Du nutzt gleich das openHAB Plugin in VS Code, dann kannst Du bei bestehendem Thing für alle Channel automatisch ein Item (in einer Textdatei) erstellen lassen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: modbus auf Openhab 4

Beitrag von mad-mike »

Moin,

Hier mal eine Zeile von meinem Modbus:

Code: Alles auswählen

Bridge modbus:tcp:tcpBridge "PV Gateway"  [ host="192.168.178.198", port=502, id=1,   reconnectAfterMillis=1000 ] {

    Bridge poller inputPoller2 "PV Poller2"               [ start=0, length=100, refresh=7500, type="input", cacheMillis=100] {
        Thing data PV_total "PV_total"                    [ readStart="2", readValueType="uint16", readTransform="JS:komma.js"]      
...
...
}
}
Und das JS:komma.js:

Code: Alles auswählen

(function(i) {
    return parseFloat(i) / 10
})(input)

Vielleicht hilft das?
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: modbus auf Openhab 4

Beitrag von hulda »

Hallo,
also ich habe alles ausprobiert funktioniert leider nicht.
Es kommt immer
COMMUNICATION_ERROR
Error with read: org.openhab.core.io.transport.modbus.internal.ModbusSlaveIOExceptionImpl: Modbus IO Error with cause=ModbusIOException, EOF=false, message='I/O exception: SocketTimeoutException Read timed out', cause2=null

so sah es in OH 3 aus und hat funtioniert

Code: Alles auswählen

    Bridge modbus:tcp:Heizung [ host="192.168.1.196", 
                                   port=8887, id=1, 
                                   connectMaxTries=10 
                                   //reconnectAfterMillis=60000
                                   //timeBetweenReconnectMillis=1000,
                                   //timeBetweenTransactionsMillis=200 
                                 ] {


    Bridge modbus:poller:Heizung:Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
        Thing data cKesselTemperatur                [ readStart="0", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cRestsauerstoffgehalt            [ readStart="3", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cSekundaerluftklappe              [ readStart="5", readValueType="int16" ]
        Thing data cFuehler1                        [ readStart="7", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cRuecklauffuehler               [ readStart="9", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cSaugzugansteuerung              [ readStart="13", readValueType="int16" ]
        Thing data cKesselstellgroesse              [ readStart="14", readValueType="int16" ]
        Thing data cAbgasSollTemperatur             [ readStart="15", readValueType="int16" ]
        Thing data cSauerstoffregler                [ readStart="16", readValueType="int16" ]
        Thing data cBetriebsstunden                 [ readStart="20", readValueType="int16" ]
        Thing data cFuellstandPelletbehaelter       [ readStart="21", readTransform="JS(TeileDurch207.js)", readValueType="int16" ]
        Thing data cUnterdruck                      [ readStart="32", readValueType="int16" ]
          Thing data cBetriebsstundenSaugturbine      [ readStart="48", readValueType="int16" ]
        Thing data cStundenSeitLetzterWartung       [ readStart="55", readValueType="int16" ]
        Thing data cPelletverbrauchKGZaehler        [ readStart="81", readValueType="int16" ]
        Thing data cPelletVerbrauchGesamt           [ readStart="83", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cHeizstundenBisAscheEntleerung   [ readStart="86", readValueType="int16" ]

      

         
        Thing data cTest   [ readStart="97", readValueType="int16" ]
       
    
    }
    }
    
und nun so:

Code: Alles auswählen

    Bridge modbus:tcp:Heizung [ host="192.168.1.196", 
                                   port=8887, id=1, 
                                   connectMaxTries=10 
                                   //reconnectAfterMillis=60000
                                   //timeBetweenReconnectMillis=1000,
                                   //timeBetweenTransactionsMillis=200 
                                 ] {

Bridge modbus:poller:Heizung:Heizung_AnlagenWerte{
    Bridge poller inputRegisters Heizung_AnlagenWerte [ start=0, length=99, refresh=10000, maxTries=5, type="input" ] {
        
        Thing data cKesselTemperatur                [ readStart="0", readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cRestsauerstoffgehalt            [ readStart="3", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cAbgasTemperatur                 [ readStart="1", readValueType="int16" ]
        Thing data cSekundaerluftklappe              [ readStart="5", readValueType="int16" ]
        Thing data cFuehler1                        [ readStart="7", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cRuecklauffuehler               [ readStart="9", readTransform="JS(TeileDurch2.js)", readValueType="int16" ]
        Thing data cSaugzugansteuerung              [ readStart="13", readValueType="int16" ]
        Thing data cKesselstellgroesse              [ readStart="14", readValueType="int16" ]
        Thing data cAbgasSollTemperatur             [ readStart="15", readValueType="int16" ]
        Thing data cSauerstoffregler                [ readStart="16", readValueType="int16" ]
        Thing data cBetriebsstunden                 [ readStart="20", readValueType="int16" ]
        Thing data cFuellstandPelletbehaelter       [ readStart="21", readTransform="JS(TeileDurch207.js)", readValueType="int16" ]
        Thing data cUnterdruck                      [ readStart="32", readValueType="int16" ]
          Thing data cBetriebsstundenSaugturbine      [ readStart="48", readValueType="int16" ]
        Thing data cStundenSeitLetzterWartung       [ readStart="55", readValueType="int16" ]
        Thing data cPelletverbrauchKGZaehler        [ readStart="81", readValueType="int16" ]
        Thing data cPelletVerbrauchGesamt           [ readStart="83", readTransform="JS(TeileDurch10.js)", readValueType="int16" ]
        Thing data cHeizstundenBisAscheEntleerung   [ readStart="86", readValueType="int16" ] 
        Thing data cTest   [ readStart="97", readValueType="int16" ]
       
    }
                                 
}
}

aber was nun?

Benutzeravatar
udo1toni
Beiträge: 13989
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: modbus auf Openhab 4

Beitrag von udo1toni »

Drei Bridges ist ja auch Quatsch...
So sollte das aussehen (Zeilenumbrüche und Einrückungen sind optional, helfen aber vielleicht, das Format besser zu verstehen):

Code: Alles auswählen

Bridge modbus:tcp:Heizung [ 
    host="192.168.1.196", 
    port=8887, 
    id=1, 
    connectMaxTries=10 //, // falls nachfolgende Werte includiert werden sollen, muss hier ein Komma stehen
    // reconnectAfterMillis=60000,
    // timeBetweenReconnectMillis=1000,
    // timeBetweenTransactionsMillis=200 
 ] {
    Bridge poller Anlagenwerte [
        start=0, 
        length=99, 
        refresh=10000, 
        maxTries=5, 
        type="input"
     ] {
        Thing data cKesselTemperatur              [ readStart="0",  readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cAbgasTemperatur               [ readStart="1",  readValueType="int16" ]
        Thing data cRestsauerstoffgehalt          [ readStart="3",  readValueType="int16", readTransform="JS(TeileDurch10.js)" ]
        // Thing data cAbgasTemperatur               [ readStart="1",  readValueType="int16" ] // Zeile ist doppelt
        Thing data cSekundaerluftklappe           [ readStart="5",  readValueType="int16" ]
        Thing data cFuehler1                      [ readStart="7",  readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cRuecklauffuehler              [ readStart="9",  readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cSaugzugansteuerung            [ readStart="13", readValueType="int16" ]
        Thing data cKesselstellgroesse            [ readStart="14", readValueType="int16" ]
        Thing data cAbgasSollTemperatur           [ readStart="15", readValueType="int16" ]
        Thing data cSauerstoffregler              [ readStart="16", readValueType="int16" ]
        Thing data cBetriebsstunden               [ readStart="20", readValueType="int16" ]
        Thing data cFuellstandPelletbehaelter     [ readStart="21", readValueType="int16" , readTransform="JS(TeileDurch207.js)"]
        Thing data cUnterdruck                    [ readStart="32", readValueType="int16" ]
        Thing data cBetriebsstundenSaugturbine    [ readStart="48", readValueType="int16" ]
        Thing data cStundenSeitLetzterWartung     [ readStart="55", readValueType="int16" ]
        Thing data cPelletverbrauchKGZaehler      [ readStart="81", readValueType="int16" ]
        Thing data cPelletVerbrauchGesamt         [ readStart="83", readValueType="int16" , readTransform="JS(TeileDurch10.js)"]
        Thing data cHeizstundenBisAscheEntleerung [ readStart="86", readValueType="int16" ] 
        Thing data cTest                          [ readStart="97", readValueType="int16" ]
    }
}
Das bedeutet: es gibt eine modbus Bridge vom Typ "tcp", also eine physische Verbindung zum Modbus über TCP/IP, der Host ist 192.168.1.196, Port 8887, es wird ID 1 verwendet. Der Name der Bridge ist "Heizung"
Unterhalb dieser Bridge (enthalten in {}) gibt es eine weitere Bridge, diesmal vom Typ "poller". Der Poller startet an Adresse 0 und holt 99 Byte, die Werte werden alle 10 Sekunden aktualisiert, es werden maximal 5 Leseversuche (pro Poll) gestartet. Der Poller ist vom Typ input, liest also Daten.
Der Name dieser Bridge ist Anlagenwerte.
Zu dieser Poller Bridge gehören diverse Things vom Typ "data".

Was eigentlich nicht stimmen kann: readStart zählt die Bytes ab Startadresse, ein Typ int16 ist zwei Byte lang, somit muss der minimale Abstand der verschiedenen readStarts immer mindestens 2 betragen, das ist aber nicht der Fall. Ich gehe also davon aus, dass einzelne Werte in Wirklichkeit vom Typ int8 sind (das wäre dann nur ein Byte), evtl. solltest Du die Things dahingehend noch mal mit der Dokumentation Deines Modbus Geräts abgleichen.
Die Reihenfolge der Parameter ist egal, so wie hier formatiert stehen aber die Werte jeweils schön untereinander ;)

Es sollten sich daraus UIDs der Form modbus:data:Heizung:Anlagenwerte:cKesselTemperatur:number ergeben.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: modbus auf Openhab 4

Beitrag von hulda »

Hallo,
vielen dank für die sehr ausführliche Erklärung.
Ich habe auch etwas Mist geschrieben.
Ich bin noch nicht auf Version 4 sondern versuche ein update von 3.4.2 auf 3.4.4
Das habe ich irgendwo gelesen das man die bevor man auf Version 4 geht machen soll.
Bei Version 3.4.4 kommt noch immer diese Fehlermeldung:
COMMUNICATION_ERROR
Error with read: org.openhab.core.io.transport.modbus.internal.ModbusSlaveIOExceptionImpl: Modbus IO Error with cause=ModbusIOException, EOF=false, message='I/O exception: SocketTimeoutException Read timed out', cause2=null

Komisch ist wenn ich auf version 3 zurückschalte das es problemlos funktioniert.

Kann ich noch etwas vergessen haben zu installieren?

Das ist der aktuelle code:

Code: Alles auswählen

Bridge modbus:tcp:Heizung [ 
    host="192.168.1.196", 
    port=8887, 
    id=1, 
    connectMaxTries=10 //, // falls nachfolgende Werte includiert werden sollen, muss hier ein Komma stehen
    // reconnectAfterMillis=60000,
    // timeBetweenReconnectMillis=1000,
    // timeBetweenTransactionsMillis=200 
 ] {
    Bridge poller Heizung_AnlagenWerte [
        start=0, 
        length=99, 
        refresh=10000, 
        maxTries=5, 
        type="input"
     ] {
        Thing data cKesselTemperatur              [ readStart="0",  readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cAbgasTemperatur               [ readStart="1",  readValueType="int16" ]
        Thing data cRestsauerstoffgehalt          [ readStart="3",  readValueType="int16", readTransform="JS(TeileDurch10.js)" ]
        Thing data cSekundaerluftklappe           [ readStart="5",  readValueType="int16" ]
        Thing data cFuehler1                      [ readStart="7",  readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cRuecklauffuehler              [ readStart="9",  readValueType="int16", readTransform="JS(TeileDurch2.js)" ]
        Thing data cSaugzugansteuerung            [ readStart="13", readValueType="int16" ]
        Thing data cKesselstellgroesse            [ readStart="14", readValueType="int16" ]
        Thing data cAbgasSollTemperatur           [ readStart="15", readValueType="int16" ]
        Thing data cSauerstoffregler              [ readStart="16", readValueType="int16" ]
        Thing data cBetriebsstunden               [ readStart="20", readValueType="int16" ]
        Thing data cFuellstandPelletbehaelter     [ readStart="21", readValueType="int16" , readTransform="JS(TeileDurch207.js)"]
        Thing data cUnterdruck                    [ readStart="32", readValueType="int16" ]
        Thing data cBetriebsstundenSaugturbine    [ readStart="48", readValueType="int16" ]
        Thing data cStundenSeitLetzterWartung     [ readStart="55", readValueType="int16" ]
        Thing data cPelletverbrauchKGZaehler      [ readStart="81", readValueType="int16" ]
        Thing data cPelletVerbrauchGesamt         [ readStart="83", readValueType="int16" , readTransform="JS(TeileDurch10.js)"]
        Thing data cHeizstundenBisAscheEntleerung [ readStart="86", readValueType="int16" ] 
        Thing data cTest                          [ readStart="97", readValueType="int16" ]
    }
}



mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: modbus auf Openhab 4

Beitrag von mad-mike »

Ich habe das noch mal verglichgen:

unter oH3 hatte ich folgende Zeile:

Code: Alles auswählen

readTransform="JS(komma.js)
unter oH4 musste ich dies ändern auf:

Code: Alles auswählen

readTransform="JS:komma.js
Ich weiss nicht, ob diese Klammern ein Problem darstellt??
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: modbus auf Openhab 4

Beitrag von mad-mike »

Moin zusammen,

Ich habe hier ein USB zu 485 Stick und ein Modbus Smart-Meter...

Ich benötige mal eine Hilfe, wie ich den USB Stick ins openHAB system bekomme.

Da ich an anderer Stelle über LAN eine Modbus verbindung hergestellt habe, Ist mir MBPOLL bekannt...

Hier der Punkt:

MBPOLL über die konsole gibt werte aus.

Code: Alles auswählen

mbpoll -a 1 -b 9600 -P none -v -1 -t3 -c 100 -r1 /dev/ttyUSB1 
debug enabled
Set function=3
Set number of values=100
Set start reference=1
Set mode to RTU for serial port
Set device=/dev/ttyUSB1
mbpoll 1.0-0 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright © 2015-2019 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.

Opening /dev/ttyUSB1 at 9600 bauds (N, 8, 1)
Set response timeout to 1 sec, 0 us
Protocol configuration: Modbus RTU
Slave configuration...: address = [1]
                        start reference = 1, count = 100
Communication.........: /dev/ttyUSB1,       9600-8N1 
                        t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave 1...
Dann noch eine Liste....



Das Thing ist Online, wobei ich glaube, hier ist irgendwo ein Fehler, vermute ich...

Code: Alles auswählen

UID: modbus:serial:Eastron
label: Eastron
thingTypeUID: modbus:serial
configuration:
  baud: 9600
  connectMaxTries: 1
  timeBetweenTransactionsMillis: 35
  stopBits: "1.0"
  parity: none
  receiveTimeoutMillis: 1500
  dataBits: 8
  echo: false
  encoding: rtu
  flowControlIn: rts/cts in
  flowControlOut: none
  port: /dev/ttyUSB1
  connectTimeoutMillis: 10000
  afterConnectionDelayMillis: 0
  id: 1
  enableDiscovery: true

und Poll:

Code: Alles auswählen

UID: modbus:poller:Eastron:75d1847ed9
label: Regular Poll
thingTypeUID: modbus:poller
configuration:
  length: 100
  start: 1
  refresh: 1000
  maxTries: 3
  cacheMillis: 50
  type: input
bridgeUID: modbus:serial:Eastron


Sobald ich den Poller Thing erstelle, kommt folgendes:

Code: Alles auswählen

2024-02-18 15:25:35.391 [WARN ] [ing.ModbusSlaveConnectionFactoryImpl] - Connect reached max tries 1, throwing last error: Could not get port identifier, maybe insufficient permissions. null. Connection SerialConnection [m_SerialPort=null, m_Parameters.getPortName()=/dev/ttyUSB1]. Endpoint ModbusSerialSlaveEndpoint [getPortName()=/dev/ttyUSB1]

2024-02-18 15:25:35.392 [WARN ] [ing.ModbusSlaveConnectionFactoryImpl] - Error connecting connection SerialConnection [m_SerialPort=null, m_Parameters.getPortName()=/dev/ttyUSB1] for endpoint ModbusSerialSlaveEndpoint [getPortName()=/dev/ttyUSB1]: Could not get port identifier, maybe insufficient permissions. null

2024-02-18 15:25:35.392 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Could not connect to endpoint ModbusSerialSlaveEndpoint [getPortName()=/dev/ttyUSB1] -- aborting request ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_INPUT_REGISTERS, start=1, length=100, maxTries=3] [operation ID 6cf22ce8-3688-4ca5-a273-ac01c0ccd226]


Jemand eine IDEE?


Beste Grüße.
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

Antworten