Ankündigung

Einklappen
Keine Ankündigung bisher.

"SMA Binding " für OpenHAB

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Incomode
    antwortet
    Hallo,

    als erstes einmal vielen Dank für die bisherigen Codeschnipsel, die haben mich schon weit gebracht

    Ich habe nur das Problem, dass ich immer folgende Meldung im Log bekomme:
    Code:
    2020-09-10 14:25:22.497 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'eine rule für alle': null
    Die Rule habe ich quasi 1 zu 1 übernommen
    Code:
    rule "eine rule für alle"
    when
        Member of gSMA_Input changed
    then
        val output = Inverter.members.filter[i|triggeringItem.name.startsWith(i.name)].head
        var Number nWert = 0
        if(triggeringItem.state instanceof Number) {
            var Number nGrenze = 0
            switch(triggeringItem.name.split("_").get(2)) {
                case "voltage" : nGrenze = 240
                case "ampere" : nGrenze = 20
                case "watt" : nGrenze = 4500
            }
            if((triggeringItem.state as Number) < nGrenze) {
                nWert = triggeringItem.state as Number
            }
        }
        output.sendCommand(nWert)
    end
    Als Information für Leute die das eventuell auch nachbauen wollen:
    Ich musste bei meinem Sunny Boy 4.0 erst die Firmware updaten. Geupdated wurde von 1.1.32.R auf 3.10.18.R.
    Vorher wurden einige der Items mit unsinnigen Werten gefüllt, da anscheinend die Adressen nicht passten.

    Und in den Items hat sich ein (Kopier-) Fehler eingeschlichen, bei folgenden Items gibt es hinten ein Leerzeichen welches zu Fehlern führte:
    Code:
    Number SMA_input_ampere_1_In (gSMA_Input) {channel="modbus:data:smaTCP:smaHolding7:sma_input _ampere_1:number"}
    Number SMA_input_voltage_1_IN (gSMA_Input) {channel="modbus:data:smaTCP:smaHolding7:sma_input _voltage_1:number"}
    Number SMA_input_ampere_2_In (gSMA_Input) {channel="modbus:data:smaTCP:smaHolding8:sma_input _ampere_2:number"}
    Number SMA_input_voltage_2_In (gSMA_Input) {channel="modbus:data:smaTCP:smaHolding8:sma_input _voltage_2:number"}
    Number SMA_input_watt_2_In (gSMA_Input) {channel="modbus:data:smaTCP:smaHolding8:sma_input _watt_2:number"}

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Da war sie wieder, die Klammer. Ein dünner Strich und doch so wichtig. Funktioniert natürlich.

    Einen Kommentar schreiben:


  • udo1toni
    antwortet
    Prima. Der Fehler waren fehlende Klammern. Korrekt müsste die Zeile
    Code:
    if((triggeringItem.state as Number) < nGrenze) nWert = triggeringItem.state as Number
    heißen. openHAB castet stillschweigend nach Number, besser ist es aber, es dazu zu schreiben.

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    WORKS LIKE A CHARM

    Ich musste noch einen weiteren Wert in die Gruppe aufnehmen (Gesamtwirkleistung), welcher den gleichen unrealistischen Wert liefert.

    Einen Kommentar schreiben:


  • JoergA
    antwortet


    Es gab eine Fehlerwarnung => Type mismatch: cannot convert from Number<nGrenze> to boolean(org.eclipse.xtext.xbase.validation.IssueCo des.incompatible_types)

    Diese konnte ich beheben/umgeben indem ich folgendes geändert habe
    Code:
    if(triggeringItem.state < nGrenze) nWert = triggeringItem.state as Number
    Derzeit läuft es smart wie ein Uhrwerk (Ich habe die originären Werte noch zusätzlich angezeigt), mal sehen, wie es wird sobald der WR abschaltet-

    Einen Kommentar schreiben:


  • udo1toni
    antwortet
    Knapp daneben

    Du kannst nicht einfach ein Wort hinschreiben und dann etwas dazu addieren. Wenn schon, müsstest Du einen String verwenden, nur ist ein String kein Objekt, Du müsstest dann die Action statt der Methode verwenden.

    Sauber geht es so:
    Code:
    rule "eine rule für alle"
    when
        Member of gSMA_Input changed
    then
        val output = Inverter.members.filter[i|triggeringItem.name.startsWith(i.name)].head
        var Number nWert = 0
        if(triggeringItem.state instanceof Number) {
            var Number nGrenze = 0
            switch(triggeringItem.name.split("_").get(2)) {
                case "voltage" : nGrenze = 240
                case "ampere" : nGrenze = 20
                case "watt" : nGrenze = 4500
            }
            if(triggeringItem.state as Number < nGrenze) nWert = triggeringItem.state as Number
        }
        output.sendCommand(nWert)
    end
    Im ersten Schritt wird das Zielitem bestimmt, in diesem Fall ist der Name des Zielitems identisch mit dem Beginn des triggernden Items.
    Im zweiten Schritt wird der neue Wert auf 0 gesetzt (dies ist der default Wert)
    Im dritten Schritt wird der Grenzwert abhängig vom triggernden Item definiert.
    Im vierten Schritt wird der aktuelle Wert gesetzt, falls er den Grenzwert nicht überschreitet.
    Im letzten Schritt wird das Ergebnis zum im 1. Schritt bestimmte Item gesendet.

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Zitat von udo1toni Beitrag anzeigen
    rule:
    Code:
    rule "Fehlerbehebung Nacht Wechselrichter"
    when
    Item SMA_Wirkleistung changed or
    Item SMA_DC1_ changed
    then
    if(triggeringItem.name == "SMA_Wirkleistung")
    SMA_Wirkleistung_korr.postUpdate(if((SMA_Wirkleistung.state as Number) > 4500) 0 else (SMA_Wirkleistung.state as Number))
    else
    SMA_DC1_korr.postUpdate(if((SMA_DC1_.state as Number) > 4500) 0 else (SMA_DC1_.state as Number))
    end
    Ich wollte dies noch einmal aufgreifen und den Code direkt für alle Werte nutzen, und nicht für alle 6 Werte eine Abfrage erstellen.
    Dazu habe ich mir 6 zusätzliche Items erstellt

    Code:
    Number SMA_input_ampere_1_In                                    (gSMA_Input)    {channel="modbus:data:smaTCP:smaHolding7:sma_input_ampere_1 :number"}
    Number SMA_input_voltage_1_IN                                   (gSMA_Input)    {channel="modbus:data:smaTCP:smaHolding7:sma_input_voltage_ 1:number"}
    Number SMA_input_watt_1_In                                      (gSMA_Input)    {channel="modbus:data:smaTCP:smaHolding7:sma_input_watt_1:n umber"}
    Number SMA_input_ampere_1       "Ampere: [%s A]"    <smaampere> (Inverter)  
    Number SMA_input_voltage_1      "Volt: [%s V]"      <smavolt>   (Inverter)  
    Number SMA_input_watt_1         "Watt [%d W]"       <smawatt>   (Inverter)  
    
    Number SMA_input_ampere_2_In                                    (gSMA_Input)    {channel="modbus:data:smaTCP:smaHolding8:sma_input_ampere_2 :number"}
    Number SMA_input_voltage_2_In                                   (gSMA_Input)    {channel="modbus:data:smaTCP:smaHolding8:sma_input_voltage_ 2:number"}
    Number SMA_input_watt_2_In                                      (gSMA_Input)    {channel="modbus:data:smaTCP:smaHolding8:sma_input_watt_2:n umber"}
    Number SMA_input_ampere_2       "Ampere [%s A]"     <smaampere> (Inverter)  
    Number SMA_input_voltage_2      "Volt [%s V]"       <smavolt>   (Inverter)  
    Number SMA_input_watt_2         "Watt [%d W]"       <smawatt>   (Inverter)
    Test Rule
    Code:
    rule "Fehlerbehebung Nacht Wechselrichter"
    when
        Member of gSMA_Input changed
    then
        if(triggeringItem.name.split("_").get(2) == "ampere") {
            logInfo("Sunny", "Note: {}", triggeringItem.name.split("_").get(0))
            logInfo("Sunny", "Note: {}", triggeringItem.name.split("_").get(1))
            logInfo("Sunny", "Note: {}", triggeringItem.name.split("_").get(2))
            logInfo("Sunny", "Note: {}", triggeringItem.name.split("_").get(3))
        }
            SMA_input_ampere_ + triggeringItem.name.split("_").get(3).postUpdate(if((SMA_Wirkleistung.state as Number) > 4500) 0 else (SMA_Wirkleistung.state as Number))
    end
    Die Idee war gewesen, Pos. 2 und 3 zu finden und dann das Item anhand der beiden Ergebnisse zu finden und upzudaten.

    Geht natürlich nicht und das Item wird nicht zusammengebaut Eine andere Idee wäre Filtern mit 2 Parametern, aber dazu habe ich auch nichts gefunden

    Würde dies grundsätzlich funktionieren, oder bin ich auf dem Holzweg

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Zitat von Juergen151 Beitrag anzeigen
    Hi,

    habe die Modbusabfrage für meinen Wechselrichter SMA Sunny Tripower STP5.0-3AV-40 übernommen, Danke für die sehr gute Beschreibung hier, jedoch bekomme ich beim Tagesertrag keinen sinnvollen Wert, es wird konstant 4294967295 kWh angezeigt.

    Kann es sein das die Modbusadresse 30537 für den Tagesertrag nicht stimmt ?

    Grüße Jürgen
    Hi, schau mal hier => https://www.sma.de/produkte/monitori...ittstelle.html
    Unter Download findest Du die Specs der Schnittstelle. Die Werte unterscheiden sich in einigen Bereichen. Ich habe dies für einen SB-4000TL-21 implementiert.

    Einen Kommentar schreiben:


  • Juergen151
    antwortet
    Hi,

    habe die Modbusabfrage für meinen Wechselrichter SMA Sunny Tripower STP5.0-3AV-40 übernommen, Danke für die sehr gute Beschreibung hier, jedoch bekomme ich beim Tagesertrag keinen sinnvollen Wert, es wird konstant 4294967295 kWh angezeigt.

    Kann es sein das die Modbusadresse 30537 für den Tagesertrag nicht stimmt ?

    Grüße Jürgen

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Hallo André,

    Wie oben geschrieben, geht es bei mir mittlerweile ebenfalls

    Auch die Werte, mit denen ich gestern noch Probleme hatte, liefern nun Werte zurück.
    Der Unterschied ist, dass ich Gruppen polle und übergebe, da musste ich die Länge noch etwas anpassen.

    Meine Things
    Code:
    Bridge modbus:tcp:smaTCP [ host="192.168.50.25", port=502, id=3, connectMaxTries=3 ] {
        Bridge poller smaHolding1 [ start=30051, length=10, refresh=30000, type="holding" ] {
        Thing data sma_device_class [ readStart="30051", readValueType="uint32", readTransform="default" ]
        Thing data sma_device_type [ readStart="30053", readValueType="uint32", readTransform="default" ]
        Thing data sma_serialnumber [ readStart="30057", readValueType="uint32", readTransform="default" ]
        Thing data sma_software [ readStart="30059", readValueType="uint32", readTransform="default" ]
        }
    
        Bridge poller smaHolding2 [ start=40063, length=10, refresh=30000, type="holding" ] {
        Thing data sma_firmware_main_processor [ readStart="40063", readValueType="uint32", readTransform="default" ]
        Thing data sma_firmware_logical_component [ readStart="40065", readValueType="uint32", readTransform="default" ]
        Thing data sma_serialnumber_2 [ readStart="40067", readValueType="uint32", readTransform="default" ]
        }
    
        Bridge poller smaHolding3 [ start=30201, length=4, refresh=30000, type="holding" ] {
        Thing data sma_condition [ readStart="30201", readValueType="uint32", readTransform="default" ]
        }
    
        Bridge poller smaHolding4 [ start=30529, length=4, refresh=15000, type="holding" ] {
        //30529 Gesamtertrag (Wh) [E-Total]
        //30531 Gesamtertrag (kWh) [E-Total]
        Thing data sma_totalprod_kwh [ readStart="30531", readValueType="uint32", readTransform="default" ]
        //30533 Gesamtertrag (MWh) [E-Total]
        }
    
        Bridge poller smaHolding5 [ start=30535, length=4, refresh=5000, type="holding" ] {
        //30535 Tagesertrag (Wh) [E-Total]
        Thing data sma_dailyprod_wh [ readStart="30535", readValueType="uint32", readTransform="default" ]
        //30537 Tagesertrag (kWh) [E-Total]
        //30539 Tagesertrag (MWh) [E-Total]
        }
    
        Bridge poller smaHolding6 [ start=30775, length=20, refresh=5000, type="holding" ] {
        //30775AC Wirkleistung über alle Phasen (W) [Pac]
        Thing data sma_power [ readStart="30775", readValueType="uint32", readTransform="default" ]
        }
    
        Bridge poller smaHolding7 [ start=30769, length=20, refresh=5000, type="holding" ] {
        //30769    DC current input [1]    A
        Thing data sma_input_ampere_1 [ readStart="30769", readValueType="uint32", readTransform="default" ]
        //30771    DC voltage input [1]    V
        Thing data sma_input_voltage_1 [ readStart="30771", readValueType="uint32", readTransform="default" ]
        //30773    DC power input [1]    W
        Thing data sma_input_watt_1 [ readStart="30773", readValueType="uint32", readTransform="default" ]
        }
    
        Bridge poller smaHolding8 [ start=30957, length=20, refresh=5000, type="holding" ] {
        //30957    DC current input [2]    A
        Thing data sma_input_ampere_2 [ readStart="30957", readValueType="uint32", readTransform="default" ]
        //30959    DC voltage input [2]    V
        Thing data sma_input_voltage_2 [ readStart="30959", readValueType="uint32", readTransform="default" ]
        //30961    DC power input [2]    W
        Thing data sma_input_watt_2 [ readStart="30961", readValueType="uint32", readTransform="default" ]
        }
    }
    Meine Items dazu
    Code:
    /* SMA Photovoltaik SunnyBoy 4000-TL21 */
    Number    SMA_Device_Class    "[MAP(SMA.map):%s]"                    (Inverter)    {channel="modbus:data:smaTCP:smaHolding1:sma_device_class:number"}
    Number    SMA_Device_Type        "[MAP(SMA.map):%s]"        <sunnyboy>    (Inverter)    {channel="modbus:data:smaTCP:smaHolding1:sma_device_type:number"}
    Number    SMA_Serialnumber    "Seriennummer:[%d]"                    (Inverter)    {channel="modbus:data:smaTCP:smaHolding1:sma_serialnumber:number"}
    String    SMA_Software        "Software package:"                    (Inverter)    {channel="modbus:data:smaTCP:smaHolding1:sma_software:string"}
    
    String    SMA_Firmware_Main_Processor        "Firmware Main Proc.:"        (Inverter)    {channel="modbus:data:smaTCP:smaHolding2:sma_firmware_main_processor:string"}
    String    SMA_Firmware_Logical_Component    "Firmware Logical Comp.:"    (Inverter)    {channel="modbus:data:smaTCP:smaHolding3:sma_firmware_logical_component:string"}
    Number    SMA_Serialnumber_2                "Serialnumber 2:[%d V]"            (Inverter)    {channel="modbus:data:smaTCP:smaHolding3:sma_serialnumber_2:number"}
    
    Number    SMA_Condition        "Status: [MAP(SMA.map):%s]"    (Inverter)    {channel="modbus:data:smaTCP:smaHolding3:sma_condition:number"}
    
    Number SMA_power_total_kwh    "Gesamtertrag [%d kWh]"    (Inverter)    {channel="modbus:data:smaTCP:smaHolding4:sma_totalprod_kwh:number"}
    
    Number SMA_power_daily_wh    "Tagesertrag [%d Wh]"    (Inverter)    {channel="modbus:data:smaTCP:smaHolding5:sma_dailyprod_wh:number"}
    
    Number SMA_power            "Wirkleistung [%d w]"    (Inverter)    {channel="modbus:data:smaTCP:smaHolding6:sma_power:number"}
    
    Number SMA_input_ampere_1    "Ampere: [%d A]"    (Inverter)    {channel="modbus:data:smaTCP:smaHolding7:sma_input_ampere_1:number"}
    Number SMA_input_voltage_1    "Volt: [%d V]"        (Inverter)    {channel="modbus:data:smaTCP:smaHolding7:sma_input_voltage_1:number"}
    Number SMA_input_watt_1        "Watt [%d W]"        (Inverter)    {channel="modbus:data:smaTCP:smaHolding7:sma_input_watt_1:number"}
    
    Number SMA_input_ampere_2    "Ampere [%d A]"        (Inverter)    {channel="modbus:data:smaTCP:smaHolding8:sma_input_ampere_2:number"}
    Number SMA_input_voltage_2    "Volt [%d V]"        (Inverter)    {channel="modbus:data:smaTCP:smaHolding8:sma_input_voltage_2:number"}
    Number SMA_input_watt_2        "Watt [%d W]"        (Inverter)    {channel="modbus:data:smaTCP:smaHolding8:sma_input_watt_2:number"}
    Nicht alle Werte zur Hardware funktionieren schon 100%, da experimentiere ich gerade noch. Wichtig sind für mich aber eher die Leistungsdaten.
    Als nächstes geht es ans persistieren und die Fehlerbereinigung, wenn der WR abgeschaltet ist.

    Die Werte sind aktueller als im Sunny Portal, da dort nur alle 30 Min ein Update erfolgt und so kann man noch das eine oder andere Event steuern.

    Viele Grüße,

    Jörg

    Einen Kommentar schreiben:


  • eibalinchen
    antwortet
    Hi Jörg,
    meine modbus.things sieht so aus:


    Code:
    Bridge modbus:tcp:Sunnyboy1 [ host="192.168.2.173", port=502, id=3 ] {
    Bridge poller sma_dc1_poll [ start=30773, length=2, refresh=60000, type="holding" ] {
    Thing data sma_dc1_data [ readStart="30773", readValueType="uint32" ]
    }
    Bridge poller sma_dc2_poll [ start=30961, length=2, refresh=60000, type="holding" ] {
    Thing data sma_dc2_data [ readStart="30961", readValueType="uint32" ]
    }
    Bridge poller sma_wir_poll [ start=30775, length=2, refresh=60000, type="holding" ] {
    Thing data sma_wir_data [ readStart="30775", readValueType="uint32" ]
    }
    Bridge poller sma_ges_poll [ start=30531, length=2, refresh=60000, type="holding" ] {
    Thing data sma_ges_data [ readStart="30531", readValueType="uint32" ]
    }
    Bridge poller sma_tag_poll [ start=30537, length=2, refresh=60000, type="holding" ] {
    Thing data sma_tag_data [ readStart="30537", readValueType="uint32" ]
    }
    Bridge poller sma_err_poll [ start=30213, length=2, refresh=60000, type="holding" ] {
    Thing data sma_err_data [ readStart="30213", readValueType="uint32" ]
    }
    Bridge poller sma_mod_poll [ start=30053, length=2, refresh=43200000, type="holding" ] {
    Thing data sma_mod_data [ readStart="30053", readValueType="uint32" ]
    }
    Bridge poller sma_iso_poll [ start=30225, length=2, refresh=43200000, type="holding" ] {
    Thing data sma_iso_data [ readStart="30225", readValueType="uint32" ]
    }
    Bridge poller sma_fir_poll [ start=30061, length=2, refresh=43200000, type="holding" ] {
    Thing data sma_fir_data [ readStart="30061", readValueType="uint32" ]
    }
    Bridge poller sma_ser_poll [ start=30057, length=2, refresh=43200000, type="holding" ] {
    Thing data sma_ser_data [ readStart="30057", readValueType="uint32" ]
    }
    }
    die passende Items Datei sieht so aus:

    Code:
    Group Solar_Chart
    Group Solar_ACDC_Chart
    Number CHART_PERIOD_SMA     (Solar_Chart)
    Number SMA_DC1_ "DC-Leistung String 1: [%d W]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_dc1_poll:sma_dc1_data:number" }
    Number SMA_DC2_ "DC-Leistung String 2: [%d W]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_dc2_poll:sma_dc2_data:number" }
    Number SMA_Wirkleistung "Wirkleistung aktuell: [%d W]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_wir_poll:sma_wir_data:number" }
    Number SMA_Gesamtertrag "Gesamtertrag: [%d kWh]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_ges_poll:sma_ges_data:number" }
    Number SMA_Tagesertrag "Tagesertrag: [%d kWh]" <sunnyboy> (Solar_Chart) { channel="modbus:data:Sunnyboy1:sma_tag_poll:sma_tag_data:number" }
    Number SMA_Error "Status Sunny Boy: [MAP(SMA.map):%s]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_err_poll:sma_err_data:number"}
    Number SMA_Modell "Modell Sunny Boy: [%d]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_mod_poll:sma_mod_data:number" }
    Number SMA_IsoWiderstand "Isolationswiderstand: [%d Ohm]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_iso_poll:sma_iso_data:number" }
    Number SMA_Seriennummer "Seriennummer Sunny Boy: [%d]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_ser_poll:sma_ser_data:number" }
    Number SMA_Firmware "Firmware Sunny Boy: [%d]" <sunnyboy> { channel="modbus:data:Sunnyboy1:sma_fir_poll:sma_fir_data:number" }
    Number SMA_DC1_korr "DC-Leistung String 1: [%d W]" <solarplant> (Solar_Chart,Solar_ACDC_Chart)
    Number SMA_DC2_korr "DC-Leistung String 2: [%d W]" <solarplant> (Solar_Chart,Solar_ACDC_Chart)
    Number SMA_Wirkleistung_korr "Wirkleistung aktuell: [%d W]" <energy> (Solar_Chart,Solar_ACDC_Chart)
    damit funktioniert es auf jeden Fall bei mir

    Gruß André

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Nach suchen und probieren, kann ich die ersten Werte auslesen

    Code:
    Bridge modbus:tcp:smaTCP [ host="192.168.50.25", port=502, id=3, connectMaxTries=3 ] {
        Bridge poller smaHolding1 [ start=30529, length=4, refresh=30000, type="holding" ] {
        //30529 Gesamtertrag (Wh) [E-Total]
        Thing data sma_totalprod_wh [ readStart="30529", readValueType="uint32", readTransform="default" ]
        //30531 Gesamtertrag (kWh) [E-Total]
        Thing data sma_totalprod_kwh [ readStart="30531", readValueType="uint32", readTransform="default" ]
        //30537 Tagesertrag (kWh) [E-Total]
        Thing data sma_dailyprod_kwh [ readStart="30537", readValueType="uint32", readTransform="default" ]
        }
    
        Bridge poller smaHolding2 [ start=30775, length=20, refresh=5000, type="holding" ] {
        //30775AC Wirkleistung über alle Phasen (W) [Pac]
        Thing data sma_power [ readStart="30775", readValueType="uint32", readTransform="default" ]
        }
    }
    Natürlich mit dem gleichen Fehler, so das ich die rule noch einbauen werde ;-)

    Leider gehen die Werte für Firmware, Status etc nicht
    Code:
        Bridge poller smaHolding3 [ start=30051, length=4, refresh=30000, type="holding" ] {
        Thing data sma_device_class [ readStart="30051", readValueType="uint32", readTransform="default" ]
        Thing data sma_device_type [ readStart="30053", readValueType="uint32", readTransform="default" ]
        Thing data sma_serialnumber [ readStart="30057", readValueType="uint32", readTransform="default" ]
        Thing data sma_firmware [ readStart="30059", readValueType="uint32", readTransform="default" ]
        Thing data sma_condition [ readStart="30201", readValueType="uint32", readTransform="default" ]
        }

    Einen Kommentar schreiben:


  • JoergA
    antwortet
    Hallo zusammen,
    bin nun durch Zufall über dies Thema gestolpert, da hätte ich meinen Post zu SMA schon besser hier gestellt

    Ich habe nun das Modbus Binding 2.4 installiert und wollte die Items manuell konfigurieren, damit ich diese auch sichern kann.
    Leider funzt dies noch nicht, da ich falsche Werte angegeben bekomme. Der generelle Zugriffstest funktioniert und ich kann einzelne Register mit dem von SMA empfohlenen Test Tool auslesen und diese aktualisieren sich auch entsprechend des Intervalls.

    Meine Things
    Code:
    /* SMA Inverter */
    Bridge modbus:tcp:localhostTCP [ host="192.168.50.25", port=502, id=3, connectMaxTries=3, connectTimeoutMillis=2000] {
       Bridge poller inputRegisters [ start=529, length=4, type="holding", refresh=1000] {
       Thing data total_yield [ readStart="530", readValueType="uint32"]
        }
    }
    Meine Items dazu
    Code:
    Number Total_yield1        "Yield: [%.1f kWh]"    <pie>    (Inverter)    { channel="modbus:data:localhostTCP:inputRegisters:total_yield:number" }
    Die Bezeichnung und Text würde ich ändern, sobald die richtigen Werte angezeigt werden ;-)

    Frage: Hat evtl. jemand das 2.x Modbus mit einem SMA Wechselrichter schon am laufen?

    Viele Grüße,
    Jörg

    Einen Kommentar schreiben:


  • udo1toni
    antwortet
    So werden unter OH1 keine Bindings installiert

    Ich habe OH1 nie über die Paketverwaltung eingerichtet, weshalb ich nicht weiß, wie die einzelnen Bindings stattdessen zur Verfügung gestellt werden. Im Zweifel ist es am einfachsten, Du richtest das Binding manuell ein. (vielleicht ist das Repository auch gar nicht mehr vorhanden)
    Dazu lädst Du die aktuelle Fassung von
    hier: https://ci.openhab.org/job/openHAB1-...modbus/target/
    und packst die Datei in den addons-Ordner (suche nach anderen Dateien, die dem Namensmuster org.openhab.binding*.jar entsprechen, der Name des Ordners sollte eigentlich addons lauten). Du musst openHAB nicht neu starten, das addon steht sofort zur Verfügung. konfigurieren musst Du über die openhab.cfg, die Parameterliste kannst Du über die openhab-default.cfg und den passenden Abschnitt in Erfahrung bringen (ich hab immer den Abschnitt aus der einen in die andere Datei kopiert und dann angepasst)

    Einen Kommentar schreiben:


  • Juergen151
    antwortet
    Hi Andre, Udo,

    Danke für die Hinweise, ich habe nach deiner Anleitung installiert, momentan klappt die Installation des Bindings nicht :

    sudo apt-get install openhab-addon-binding-org.openhab.binding.modbus-1.7.0.jar

    kommt die Meldung, Mittels regulärem Ausdruck konnte kein Paket gefunden werden, das Bindung ist im Verzeichnis Addon abgelegt, in welchem Verzeichnis sollte die stehen ? (Also ich arbeite mittels Putty und WinSCP)

    Gruß Jürgen

    Einen Kommentar schreiben:

Lädt...
X