[vz-users] mbmd - SDM230

Andreas Goetz cpuidle at gmail.com
Mo Jan 13 23:00:38 CET 2020


Hi Joe!

> On 13. Jan 2020, at 14:04, joekokker at epios.eu wrote:
> 
> Hallo Andreas,
> 
> ich habe den Code getestet und angepasst. Untenstehend der Patch.
> 
> Ich sehe noch ein paar Probleme:
> Alle SDM Devices haben den gleichen "Voltage" Register Code. Es ist nicht möglich, die verschiedenen Geräte zu unterscheiden. Vielleicht könnte man beim SCAN nur SDM zurückgeben.

Zumindest beim 630 könnte man auf die zweite Phase testen- das wäre allerdings inkonsistent zu den anderen Zählern. Ansonsten würde ich es vllt. nur in der Readme erwähnen.

> Der Name vom SDM230 mit der Modbus und der Device ID ist nicht sehr leserlich. Was könnte man da machen? Vielleicht einen Unterstrich?
> initialized device SDM2301.1: {SDM230 Eastron SDM230   }

Das ist ja nur ein fast unsichtbarer Eintrag im Logfile. Würde ich aus Konsistenzgründen so lassen.

> Ich hatte das Problem, dass das Program beim Starten immer
> Unsupported Config Type ""
> ausgegeben hat. Ich musste eine Pseudoconfigdatei angeben, damit es gestartet hat. (-c emtpyfile.yaml)

Lösung folgt, neues “Feature” in verwendeter Bibliothek.

> Ich habe versucht einen weiteren Wert zum Auslesen hinzuzufügen (PhaseAngle). Er wird ausgelesen. Ich sehe es sogar im Webinterface. Aber die Zeile wird einfach nicht ausgegeben.

Welche Zeile?

> Ich habe es in assets/index.html geändert. Aber das hat nichts gebracht. Wo muss man es noch anpassen?

Auf jeden Fall musst Du ein go generate ./… ausführen.
Du sagst Du siehst es? Was genau funktioniert nicht?

> Vielen Dank für das Feedback!
> 
> Liebe Gruesse
> Joe

Viele Grüße, 
Andreas

> 
> 
> 
> 
> 
> Patch:
> 
> 
> 
> diff --git a/assets/index.html b/assets/index.html
> index 408d633..6409396 100644
> --- a/assets/index.html
> +++ b/assets/index.html
> @@ -340,6 +340,13 @@
>                                                        <td class="col-2">—</td>
>                                                        <td class="col-3">${ m.Frequency }</td>
>                                                </tr>
> +                                                <tr class="d-flex" v-if="populated(m.PhaseAngle)">
> +                                                        <td class="col-3">Phase Angle</td>
> +                                                        <td class="col-2">—</td>
> +                                                        <td class="col-2">—</td>
> +                                                        <td class="col-2">—</td>
> +                                                        <td class="col-3">${ m.PhaseAngle }</td>
> +                                                </tr>
>                                                <tr class="d-flex" v-if="populated(m.HeatsinkTemp)">
>                                                        <td class="col-3">Heatsink Temperature (°C)</td>
>                                                        <td class="col-2">—</td>
> diff --git a/go.mod b/go.mod
> index 9916109..b793aa3 100644
> --- a/go.mod
> +++ b/go.mod
> @@ -25,7 +25,7 @@ require (
>        golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914 // indirect
>        golang.org/x/sys v0.0.0-20191120130536-6bfc516c8699 // indirect
>        golang.org/x/text v0.3.2 // indirect
> -       golang.org/x/tools v0.0.0-20191120143758-e97fc272220f
> +       golang.org/x/tools v0.0.0-20200110213125-a7a6caa82ab2
>        gopkg.in/yaml.v2 v2.2.7 // indirect
> )
> 
> diff --git a/go.sum b/go.sum
> index b41c20c..816d93c 100644
> --- a/go.sum
> +++ b/go.sum
> @@ -181,12 +181,15 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
> golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
> golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
> golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
> +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
> golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
> golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
> +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
> golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
> golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
> golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
> golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
> +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
> golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
> golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
> golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
> @@ -203,6 +206,7 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h
> golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
> golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
> golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
> +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
> golang.org/x/sys v0.0.0-20191120130536-6bfc516c8699 h1:oCSF9X76y260soaXqeFRu+UB7ufcanjVoUARkg8qLtc=
> golang.org/x/sys v0.0.0-20191120130536-6bfc516c8699/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
> golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
> @@ -217,7 +221,10 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
> golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
> golang.org/x/tools v0.0.0-20191120143758-e97fc272220f h1:LTEe3T49y9RXXFzoxnB6NaIFXFheV+5YFnpW1Eepm7I=
> golang.org/x/tools v0.0.0-20191120143758-e97fc272220f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
> +golang.org/x/tools v0.0.0-20200110213125-a7a6caa82ab2 h1:V9r/14uGBqLgNlHRYWdVqjMdWkcOHnE2KG8DwVqQSEc=
> +golang.org/x/tools v0.0.0-20200110213125-a7a6caa82ab2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
> golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
> +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
> google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
> google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
> google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
> diff --git a/meters/measurement_string.go b/meters/measurement_string.go
> index e79d18d..18269ab 100644
> --- a/meters/measurement_string.go
> +++ b/meters/measurement_string.go
> @@ -37,61 +37,62 @@ func _() {
>        _ = x[ApparentPowerL1-27]
>        _ = x[ApparentPowerL2-28]
>        _ = x[ApparentPowerL3-29]
> -       _ = x[Cosphi-30]
> -       _ = x[CosphiL1-31]
> -       _ = x[CosphiL2-32]
> -       _ = x[CosphiL3-33]
> -       _ = x[THD-34]
> -       _ = x[THDL1-35]
> -       _ = x[THDL2-36]
> -       _ = x[THDL3-37]
> -       _ = x[Sum-38]
> -       _ = x[SumT1-39]
> -       _ = x[SumT2-40]
> -       _ = x[SumL1-41]
> -       _ = x[SumL2-42]
> -       _ = x[SumL3-43]
> -       _ = x[Import-44]
> -       _ = x[ImportT1-45]
> -       _ = x[ImportT2-46]
> -       _ = x[ImportL1-47]
> -       _ = x[ImportL2-48]
> -       _ = x[ImportL3-49]
> -       _ = x[Export-50]
> -       _ = x[ExportT1-51]
> -       _ = x[ExportT2-52]
> -       _ = x[ExportL1-53]
> -       _ = x[ExportL2-54]
> -       _ = x[ExportL3-55]
> -       _ = x[ReactiveSum-56]
> -       _ = x[ReactiveSumT1-57]
> -       _ = x[ReactiveSumT2-58]
> -       _ = x[ReactiveSumL1-59]
> -       _ = x[ReactiveSumL2-60]
> -       _ = x[ReactiveSumL3-61]
> -       _ = x[ReactiveImport-62]
> -       _ = x[ReactiveImportT1-63]
> -       _ = x[ReactiveImportT2-64]
> -       _ = x[ReactiveImportL1-65]
> -       _ = x[ReactiveImportL2-66]
> -       _ = x[ReactiveImportL3-67]
> -       _ = x[ReactiveExport-68]
> -       _ = x[ReactiveExportT1-69]
> -       _ = x[ReactiveExportT2-70]
> -       _ = x[ReactiveExportL1-71]
> -       _ = x[ReactiveExportL2-72]
> -       _ = x[ReactiveExportL3-73]
> -       _ = x[DCCurrent-74]
> -       _ = x[DCVoltage-75]
> -       _ = x[DCPower-76]
> -       _ = x[HeatSinkTemp-77]
> -       _ = x[ChargeState-78]
> -       _ = x[BatteryVoltage-79]
> +       _ = x[PhaseAngle-30]
> +       _ = x[Cosphi-31]
> +       _ = x[CosphiL1-32]
> +       _ = x[CosphiL2-33]
> +       _ = x[CosphiL3-34]
> +       _ = x[THD-35]
> +       _ = x[THDL1-36]
> +       _ = x[THDL2-37]
> +       _ = x[THDL3-38]
> +       _ = x[Sum-39]
> +       _ = x[SumT1-40]
> +       _ = x[SumT2-41]
> +       _ = x[SumL1-42]
> +       _ = x[SumL2-43]
> +       _ = x[SumL3-44]
> +       _ = x[Import-45]
> +       _ = x[ImportT1-46]
> +       _ = x[ImportT2-47]
> +       _ = x[ImportL1-48]
> +       _ = x[ImportL2-49]
> +       _ = x[ImportL3-50]
> +       _ = x[Export-51]
> +       _ = x[ExportT1-52]
> +       _ = x[ExportT2-53]
> +       _ = x[ExportL1-54]
> +       _ = x[ExportL2-55]
> +       _ = x[ExportL3-56]
> +       _ = x[ReactiveSum-57]
> +       _ = x[ReactiveSumT1-58]
> +       _ = x[ReactiveSumT2-59]
> +       _ = x[ReactiveSumL1-60]
> +       _ = x[ReactiveSumL2-61]
> +       _ = x[ReactiveSumL3-62]
> +       _ = x[ReactiveImport-63]
> +       _ = x[ReactiveImportT1-64]
> +       _ = x[ReactiveImportT2-65]
> +       _ = x[ReactiveImportL1-66]
> +       _ = x[ReactiveImportL2-67]
> +       _ = x[ReactiveImportL3-68]
> +       _ = x[ReactiveExport-69]
> +       _ = x[ReactiveExportT1-70]
> +       _ = x[ReactiveExportT2-71]
> +       _ = x[ReactiveExportL1-72]
> +       _ = x[ReactiveExportL2-73]
> +       _ = x[ReactiveExportL3-74]
> +       _ = x[DCCurrent-75]
> +       _ = x[DCVoltage-76]
> +       _ = x[DCPower-77]
> +       _ = x[HeatSinkTemp-78]
> +       _ = x[ChargeState-79]
> +       _ = x[BatteryVoltage-80]
> }
> 
> -const _Measurement_name = "FrequencyCurrentCurrentL1CurrentL2CurrentL3VoltageVoltageL1VoltageL2VoltageL3PowerPowerL1PowerL2PowerL3ImportPowerImportPowerL1ImportPowerL2ImportPowerL3ExportPowerExportPowerL1ExportPowerL2ExportPowerL3ReactivePowerReactivePowerL1ReactivePowerL2ReactivePowerL3ApparentPowerApparentPowerL1ApparentPowerL2ApparentPowerL3CosphiCosphiL1CosphiL2CosphiL3THDTHDL1THDL2THDL3SumSumT1SumT2SumL1SumL2SumL3ImportImportT1ImportT2ImportL1ImportL2ImportL3ExportExportT1ExportT2ExportL1ExportL2ExportL3ReactiveSumReactiveSumT1ReactiveSumT2ReactiveSumL1ReactiveSumL2ReactiveSumL3ReactiveImportReactiveImportT1ReactiveImportT2ReactiveImportL1ReactiveImportL2ReactiveImportL3ReactiveExportReactiveExportT1ReactiveExportT2ReactiveExportL1ReactiveExportL2ReactiveExportL3DCCurrentDCVoltageDCPowerHeatSinkTempChargeStateBatteryVoltage"
> +const _Measurement_name = "FrequencyCurrentCurrentL1CurrentL2CurrentL3VoltageVoltageL1VoltageL2VoltageL3PowerPowerL1PowerL2PowerL3ImportPowerImportPowerL1ImportPowerL2ImportPowerL3ExportPowerExportPowerL1ExportPowerL2ExportPowerL3ReactivePowerReactivePowerL1ReactivePowerL2ReactivePowerL3ApparentPowerApparentPowerL1ApparentPowerL2ApparentPowerL3PhaseAngleCosphiCosphiL1CosphiL2CosphiL3THDTHDL1THDL2THDL3SumSumT1SumT2SumL1SumL2SumL3ImportImportT1ImportT2ImportL1ImportL2ImportL3ExportExportT1ExportT2ExportL1ExportL2ExportL3ReactiveSumReactiveSumT1ReactiveSumT2ReactiveSumL1ReactiveSumL2ReactiveSumL3ReactiveImportReactiveImportT1ReactiveImportT2ReactiveImportL1ReactiveImportL2ReactiveImportL3ReactiveExportReactiveExportT1ReactiveExportT2ReactiveExportL1ReactiveExportL2ReactiveExportL3DCCurrentDCVoltageDCPowerHeatSinkTempChargeStateBatteryVoltage"
> 
> -var _Measurement_index = [...]uint16{0, 9, 16, 25, 34, 43, 50, 59, 68, 77, 82, 89, 96, 103, 114, 127, 140, 153, 164, 177, 190, 203, 216, 231, 246, 261, 274, 289, 304, 319, 325, 333, 341, 349, 352, 357, 362, 367, 370, 375, 380, 385, 390, 395, 401, 409, 417, 425, 433, 441, 447, 455, 463, 471, 479, 487, 498, 511, 524, 537, 550, 563, 577, 593, 609, 625, 641, 657, 671, 687, 703, 719, 735, 751, 760, 769, 776, 788, 799, 813}
> +var _Measurement_index = [...]uint16{0, 9, 16, 25, 34, 43, 50, 59, 68, 77, 82, 89, 96, 103, 114, 127, 140, 153, 164, 177, 190, 203, 216, 231, 246, 261, 274, 289, 304, 319, 329, 335, 343, 351, 359, 362, 367, 372, 377, 380, 385, 390, 395, 400, 405, 411, 419, 427, 435, 443, 451, 457, 465, 473, 481, 489, 497, 508, 521, 534, 547, 560, 573, 587, 603, 619, 635, 651, 667, 681, 697, 713, 729, 745, 761, 770, 779, 786, 798, 809, 823}
> 
> func (i Measurement) String() string {
>        i -= 1
> diff --git a/meters/measurements.go b/meters/measurements.go
> index 0406241..476ae1b 100644
> --- a/meters/measurements.go
> +++ b/meters/measurements.go
> @@ -62,6 +62,8 @@ const (
>        ApparentPowerL2
>        ApparentPowerL3
> 
> +        PhaseAngle
> +
>        Cosphi
>        CosphiL1
>        CosphiL2
> @@ -156,6 +158,7 @@ var iec = map[Measurement][]string{
>        ApparentPowerL1:  {"L1 Apparent Power", "VA"},
>        ApparentPowerL2:  {"L2 Apparent Power", "VA"},
>        ApparentPowerL3:  {"L3 Apparent Power", "VA"},
> +        PhaseAngle:       {"Phase Angle", "°"},
>        Cosphi:           {"Cosphi"},
>        CosphiL1:         {"L1 Cosphi"},
>        CosphiL2:         {"L2 Cosphi"},
> diff --git a/meters/rs485/sdm220.go b/meters/rs485/sdm220.go
> index e038e64..e518b19 100644
> --- a/meters/rs485/sdm220.go
> +++ b/meters/rs485/sdm220.go
> @@ -24,14 +24,11 @@ func NewSDM220Producer() Producer {
>                Current: 0x0006, // 220, 230
>                Import:  0x0048, // 220, 230
>                Export:  0x004a, // 220, 230
> -               Sum:     0x0156, // 220
> -               // ImportReactive: 0x4C,   // 220, 230
> -               // ExportReactive: 0x4E,   // 220, 230
> +               Sum:     0x0156, // 220, 230
>                // SumWirk:        0x0156, // 220
> -               // SumBlind:       0x0158, // 220
> -               // ApparentPower:  0x0012, // 230
> -               // ReactivePower:  0x0018, // 230
> -               // PhaseAngle:     0x0024, // 230
> +               ReactiveSum:       0x0158, // 220
> +                ReactiveImport: 0x4C,   // 220, 230
> +                ReactiveExport: 0x4E,   // 220, 230
>        }
>        return &SDM220Producer{Opcodes: ops}
> }
> @@ -56,7 +53,7 @@ func (p *SDM220Producer) snip(iec Measurement) Operation {
> }
> 
> func (p *SDM220Producer) Probe() Operation {
> -       return p.snip(VoltageL1)
> +       return p.snip(Voltage)
> }
> 
> func (p *SDM220Producer) Produce() (res []Operation) {
> diff --git a/meters/rs485/sdm230.go b/meters/rs485/sdm230.go
> index a280b6e..c511dfb 100644
> --- a/meters/rs485/sdm230.go
> +++ b/meters/rs485/sdm230.go
> @@ -27,11 +27,12 @@ func NewSDM230Producer() Producer {
>                Export:    0x004a, // 220, 230
>                Cosphi:    0x001e, //      230
>                Frequency: 0x0046, //      230
> -               // ImportReactive: 0x4C,   // 220, 230
> -               // ExportReactive: 0x4E,   // 220, 230
> -               // ApparentPower:  0x0012, // 230
> -               // ReactivePower:  0x0018, // 230
> -               // PhaseAngle:     0x0024, // 230
> +               ReactiveImport: 0x4C,   // 220, 230
> +               ReactiveExport: 0x4E,   // 220, 230
> +               ApparentPower:  0x0012, // 230
> +               ReactivePower:  0x0018, // 230
> +                Sum:     0x0156, // 230
> +               PhaseAngle:     0x0024, // 230
>        }
>        return &SDM230Producer{Opcodes: ops}
> }
> @@ -56,7 +57,7 @@ func (p *SDM230Producer) snip(iec Measurement) Operation {
> }
> 
> func (p *SDM230Producer) Probe() Operation {
> -       return p.snip(VoltageL1)
> +       return p.snip(Voltage)
> }
> 
> func (p *SDM230Producer) Produce() (res []Operation) {
> 
> 
> 
> 
> 
> 
> 
> On 1/9/20 10:28 PM, Andreas Goetz wrote:
>> Du brauchst go 1.13. Zusätzliche Werte werden mit ausgelesen. Wenn etwas fehlt würde ich ihn aber gerne einfach mit einbauen.
>> Viele Grüße, Andreas
>>> On 9. Jan 2020, at 21:22, joekokker at epios.eu wrote:
>>> 
>>> Hallo Andreas,
>>> 
>>> vielen Dank! Ich werde es gerne am Wochenende ausprobieren.
>>> 
>>> Weisst du ob man mbmd mit dem go packet aus raspbian kompilieren kann, oder ob man die neueste go Version dafür braucht?
>>> 
>>> Was passiert in mbmd intern, wenn ich weitere Reigster abfrage und unter einer Variable speichere? Z.B.:
>>> ops := Opcodes{ ... CustomValue: 0x00FF ...
>>> Kann ich diese auch direkt über die REST API Abfragen?
>>> 
>>> Liebe Grüße
>>> Joe
>>> 
>>> 
>>> 
>>> 
>>> On 07.01.2020 09:23, Andreas Goetz wrote:
>>>> Moin Joe,
>>>> ich hab mal was versucht: https://github.com/volkszaehler/mbmd/pull/74
>>>> Magst Du mal schauen ob das für Dich funktioniert und alle notwendigen Register dabei sind?
>>>> Viele Grüße,
>>>> Andreas
>>>>> On 5. Jan 2020, at 22:33, Andreas Götz <cpuidle at gmail.com> wrote:
>>>>> 
>>>>> Dann würde ich Dir- etwas Geduld- einfach einen neuen Zählertyp anlegen. Hast Du evtl auch Infos zum 220/120? Die gibts ja m.W. auch noch?
>>>>> 
>>>>> Viele Grüße,
>>>>> Andreas
>>>>> 
>>>>>> Am 05.01.2020 um 22:30 schrieb joekokker at epios.eu:
>>>>>> 
>>>>>> Lieber Andreas,
>>>>>> 
>>>>>> leider scheint es einige kleine Abweichungen zu geben.
>>>>>> 
>>>>>> http://www.flanesi.it/blog/download/sdm230modbus/SDM230-Modbus%20protocol%20V1.2.pdf
>>>>>> 
>>>>>> Liebe Grüße
>>>>>> Joe
>>>>>> 
>>>>>> 
>>>>>>> On 1/5/20 9:47 PM, Andreas Goetz wrote:
>>>>>>> Hey Joe
>>>>>>> (Scnr ;)
>>>>>>> Hast Du mal einen Link zum Handbuch? Ich dachte bisher, die Register wären ein Subset. Neue Zähler sind einfach, siehe meters/rtu Verzeichnis.
>>>>>>> Viele Grüße, Andreas
>>>>>>>>> Am 05.01.2020 um 21:43 schrieb joekokker at epios.eu:
>>>>>>>> 
>>>>>>>> Hallo,
>>>>>>>> 
>>>>>>>> ich habe über Weihnachten die Modbus Zähler SDM230 und SDM630 ausprobiert und dabei auch mbmd getestet. Die REST Api von mbmd lese ich periodisch mit einem Skript (exec-Protokoll vzlogger) aus um es in die Volkszahler Datenbank zu bringen.
>>>>>>>> 
>>>>>>>> Für den SDM230 Zähler stimmen einige Zuordnungen nicht, da sie sich vom SDM630 unterscheiden. Zum Beispiel:
>>>>>>>> 
>>>>>>>> Aus dem Manual für den SDM230 Zähler:
>>>>>>>> ApparentPower 0x0012
>>>>>>>> ReactivePower 0x0018
>>>>>>>> 
>>>>>>>> Aus dem Quellcode von mbmd für den generellen SDM Zähler:
>>>>>>>> ApparentPower: 0x0038
>>>>>>>> ReactivePower: 0x003C
>>>>>>>> 
>>>>>>>> Was ist das sinnvollste? Eine neue Definition für den Zähler?
>>>>>>>> 
>>>>>>>> Aus Neugierde: Wie einfach ist es weitere Custom Werte der Zähler zusätzlich zu den Standard Werten mit mbmd auszulesen? Es gibt ja weitere Register bei den Zählern.
>>>>>>>> 
>>>>>>>> Beste Grüße
>>>>>>>> Joe



More information about the volkszaehler-users mailing list