Neues Modul für Geräte mit Modbus Schnittstelle über RS232 bzw. RS485

Begonnen von StefanStrobel, 12 Juli 2014, 14:50:22

Vorheriges Thema - Nächstes Thema

My-FHEM

Hallo Stefan


This is perl 5, version 14, subversion 2 (v5.14.2) built for arm-linux-gnueabi-thread-multi-64int
(with 89 registered patches, see perl -V for more detail)


Damit lässt sich das define ausführen.

Thanks

pejonp

Hallo,
inzwischen kann ich die Reg meines SolarEdge WR auslesen. Ein Problem habe ich aber noch. Bei den Ergebnissen muß noch die Kommastelle angepaßt werden. Dazu gibt es extra ein Register z.B.:

attr PWP obj-h83-expr $val
attr PWP obj-h83-reading I_AC_Leistung_kW
attr PWP obj-h84-expr $val
attr PWP obj-h84-reading I_AC_Leistung_SF

I_AC_Leistung_SF = 65534
I_AC_Leistung_kW = 5900  --> Ergebnis nach der Berechnung: 59,00 Watt

Ich habe jetzt versucht die Berechnung so zu machen:

attr PWP bj-h83-expr $val / {if (ReadingsVal("PWP","I_AC_Leistung_SF",0)=='65534' {100;}}
oder
attr PWP bj-h83-expr $val / {if (ReadingsVal($name,"I_AC_Leistung_SF",0)=='65534' {100;}}

Aber anscheinend geht das so nicht. Kann mir jemand einen Tipp geben. Vielen Dank.

Jörg
   
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

My-FHEM

@Roger

Ist das 98_ModbusSDM630M.pm vom 14.3.2015 die aktuelle Version?
Ist vorgesehen, dieses Modul demnächst in den FHEM update prozess mit einzubeziehen?

Viele Grüße

Tolles Modul

Ppunk

Hallo Marie ,

so habs hinbekommen, die Verdrahtung war Falsch.
Leider bekomme  ich jetzt falsche werte, kannst mir erklären wie das zusammenhängt zb.  "obj-h4279-expr  ($val* 4)/10000" sehe ich das richtig "( variable x 4)geteilt durch 10000"

Marie

Moin,

Ja genau, so war das bei mir richtig...d.h. Ja aber nicht das das bei dir auch so sein muss...aber das steht in der Anleitung für deinen wandler...

LG. Marie
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Ppunk

Das kann nicht sein, das muß dann auch noch mit den Bytes zusammen hängen, werde morgen das mit dem Hersteller Klären.

Vielen Lieben Dank Marie hast mir sehr geholfen, dir auch Stefan, werde berichten wenn ich so weit bin. 

Marie

Moin Moin,

ZitatLänge in Bytes der Meßgröße: Da ein Modbus-Verzeichnis 2 Bytes einnimmt, werden alle Meßgrößen auf mehrere Verzeichnisse verteilt (4 Bytes: 2 Verzeichnisse; 8 Bytes: 4 Verzeichnisse). 

Zitat


Meßgrößenlänge 4 Bytes 

Die in diesen Verzeichnissen (2) als ganze Zahlen gespeicherten Werte müssen zur Rekonstruktion des ursprünglichen Wertes durch 10000 dividiert werden. Beispiel: Wirkleistung 1. Phase Ganzzahlwert: 122447  Ursprünglicher Wert: 122447/10000 = 12,2447 (kW) 

Meßgrößenlänge 8 Bytes 

In diesem Fall ist die Rekonstruktion des ursprünglichen Wertes etwas komplizierter. Der in den ersten 4 Bytes enthaltene Wert muß mit 10^9 (1000000000) multipliziert werden.   Zum Ergebnis muß der in den nächsten 4 Bytes enthaltene Wert hinzuaddiert werden. Zum Schluß muß dieses Ergebnis durch 10000 dividiert werden. Beispiel: Wirkleistung gesamt  Ganzzahlwert (die wichtigsten 4 Bytes): 12344 Ganzzahlwert (die weniger wichtigen 4 Bytes): 765532 Ursprünglicher Wert: (12344*1000000000+765532)/10000=1234400076,5532 (kW) 


So steht es in deiner Anleitung. Du musst also bei 4bytes zwei Register einlesen, die beiden  Wörter addieren und dann durch 10000 teilen.

Für 8byte ein wenig komplizierter, 4 Register einlesen und dann nach der Anleitung Vorgehen....

LG Marie.
Banana Pi & FHEM2FHEM Raspberry,RS485 Modbus Stromzähler UMG96, diverse Schaltsteckdosen 433 MHz, 868 MHz, MYSENSORS Temperatursensoren , Smartvisu, Homekit & Siri, Geofency, Zwave Rauchmelder & Steckdosen & Garagensteuerung, TabletUi mit BananaPi M2Ultra im Wohnmobil, Homebridge usw.usw.

Ppunk

hab den zähler mit dem prog. ausgelesen wie bekomme ich dies verzeichnis aus der adresse?

StefanStrobel

Hallo Jörg,

In das Expr Attribut muss nur eine gültige Perl-Expression rein, wenn Du den Reading Wert ändern möchtest.
Eine Expr mit nur $val ist daher überflüssig und im ersten Fall kannst Du das Attribut einfach weglassen.
Für die kompliziertere Berechnung bist Du auf dem richtigen Weg, nur die geschweiften Klammern gehören da nicht rein. Das Ganze soll ja eine Perl Expression sein ...

Gruß
     Stefan

StefanStrobel

Hi Jörg,

Zwei ergänzende Hinweise noch:

1) Die beiden  Attribute in Deinem post beginnen mit bj- statt obj-. Das könnte ein Teil des Problems sein.
2) Die Readings werden in der Reihenfolge der Adressen verarbeitet. Das bedeutet dass h83 vor h84 ausgewertet wird. Wenn das Ergebnis von h84 abhängt, solltest Du h83 als temporären Wert betrachten und das Reading z.B. Leistung_raw nennen und dann h84 auswerten und in der Expr von h84 den Raw-Wert weiter verarbeiten.

Gruß
    Stefan

pejonp

Zitat von: StefanStrobel am 03 Juni 2015, 10:20:47
..
1) Die beiden  Attribute in Deinem post beginnen mit bj- statt obj-. Das könnte ein Teil des Problems sein.
2) Die Readings werden in der Reihenfolge der Adressen verarbeitet. Das bedeutet dass h83 vor h84 ausgewertet wird. Wenn das Ergebnis von h84 abhängt, solltest Du h83 als temporären Wert betrachten und das Reading z.B. Leistung_raw nennen und dann h84 auswerten und in der Expr von h84 den Raw-Wert weiter verarbeiten.
..

Hallo Stefan,

vielen Dank für die Hilfe.
bei 1) sind es Schreibfehler, in der fhem.cfg steht obj-. ;-(
zu 2) ich habe es jetzt über einen Dummy gelöst. Das Attribut -expr z.B.  'attr PWP obj-h100-expr $val' habe ich gelöscht. Macht die fhem.cfg wieder etwas kleiner. Der Dummy schreibt auch in Log. sieht jetzt so aus. Die Zeilen ohne PWP sind vom Dummy.

2015-06-03_15:04:43 PWP I_DC_Spannung_V: 753
2015-06-03_15:04:43 PWP I_DC_Spannung_SF: 0
2015-06-03_15:04:44 I_DC_Leistung_W 1909.6
2015-06-03_15:04:44 PWP I_DC_Leistung_W: 19096
2015-06-03_15:04:44 PWP I_DC_Leistung_SF: 65535
2015-06-03_15:04:44 PWP Temp_Kuehler_C: 35
2015-06-03_15:04:44 PWP C_Status: WR_An
2015-06-03_15:05:43 I_AC_Frequenz_Hz 49.99
2015-06-03_15:05:43 I_AC_Leistung_W 5207
2015-06-03_15:05:43 PWP C_Geraeteadresse: 1



attr PWP obj-h100-expr $val
attr PWP obj-h100-reading I_DC_Leistung_W
attr PWP obj-h101-expr $val
attr PWP obj-h101-reading I_DC_Leistung_SF

define DC_LeistungWR notify PWP:I_DC_Leistung_W.* {\
use Math::Round qw/nearest/;;;;\
    my $a = ReadingsVal("PWP","I_DC_Leistung_W",0) ;;;; \
    my $b = ReadingsVal("PWP","I_DC_Leistung_SF",0) ;;;; \
    my $beginn = 65536;;;; \
    my $vv = $beginn - $b;;;;  \
    if ($vv==6){$vv=1000000;;} elsif($vv == 5){$vv=100000;;}elsif($vv == 4){$vv=10000;;}elsif($vv == 3){$vv=1000;;} elsif($vv == 2){$vv=100;;}elsif($vv == 1 ){$vv=10;;}else{$vv=1;;};;;; \
    my $sum1 = nearest(0.001, $a/$vv);;;; \
    my $text = "$sum1" ;;;; \
    fhem ("set I_DC_Leistung_W $text") ;;;; \
    }
attr DC_LeistungWR room Solar
define I_DC_Leistung_W dummy
attr I_DC_Leistung_W room Solar



Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

pejonp

Hallo ich noch mal.

das eine Problem ist gelöst, jetzt das nächste. Ich habe eine DRT710M (Drehstromzähler)  Einstellung: 1200 8E1 . Nach langem in und her (Telefonat) mit dem Hersteller, komme ich jetzt an das Gerät.

Was habe ich gemacht ? Ich habe mir einen neuen RS485 Adapter Digitus DA-70157 http://www.amazon.de/gp/product/B007VZY4CW?psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00 gekauft. Mit dem vorhanden http://www.amazon.de/gp/product/B00D8VK9SQ?psc=1&redirect=true&ref_=oh_aui_detailpage_o06_s00 kann ich nur meinen SolarEdge SE5K WR auslesen.

Jetzt zum Problem: Mit Win 8.1, QModBus (http://qmodbus.sourceforge.net/) und dem Digitus DA-70157 komme ich an die Register. Etwas umständlich, da diese nicht fortlaufend sind, sondern mit Lücken, da kommt dann ein Timeout (bei QModbus).

Jetzt habe ich den Digitus DA-70157 an den zur Zeit noch Linux-PC gehangen. Auf dem läuft schon der RS485 Adapter vom SolarEdge an der /dev/ttyS0 und liefert Daten. Der Digitus DA-70157 ist /dev/ttyUSB0 und liefert keine Daten.

Die anderen Tools (modpool, perl-script) liefern von der /dev/ttyUSB0 auch keine Daten. Was kann ich einstellen ? Jemand eine Idee. Vielen Dank.

Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

Roger

@My-FHEM: Ich habe noch eine kleine Ergänzung zur Einspeisung von PV Anlagen in Arbeit. Leider saldiert der Zähler nicht über die Phasen.
Das Lob steht in großen Teilen Stefan Strobel, der das Basis-Modul geschrieben hat, zu. Ihm würde ich auch die Verteilung über FHEM update überlassen (habe selbst keinen Zugriff)
Roger
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron

StefanStrobel

Hallo Jörg,

Was fhem angeht, so könnte das Problem die Even Parity sein. Soweit ich mich erinnere stellt devio immer 8n1 ein (dieses Basismodul verwenden die meisten Module, auch Modbus.pm).
Wenn es daran liegt, könnte man das sicher etwas erweitern, z.B. mit einem Attribut.
Wenn Du in DevIO.pm nach parity suchst, findest Du die Stelle leicht. Du könntest dort ja testweise mal even reinschreiben. Dann geht zwar natürlich Deine andere Schnittstelle erstmal nicht mehr, aber zumindest ist dann der Lösungsweg klar.

Gruß
    Stefan

StefanStrobel

Hallo Roger,

Ich kann Die Module gerne unter contrib einchecken.
Ideal wäre es wenn Du eine kleine Wiki-Seite mit passender Kategorie dafür schreiben könntest:
http://www.fhemwiki.de/wiki/Kategorie:Energieverbrauchsmessung
Oder Du beantragst einfach einen Zugang zum SVN.

Gruß
     Stefan