Neue Versionen und Support zum Modbus-Modul

Begonnen von StefanStrobel, 20 August 2017, 12:11:08

Vorheriges Thema - Nächstes Thema

pechnase

ich glaube, ich habe meinen Fehler gefunden. Es fehlt das
attr Proxon_WP obj-i195-poll 1
bzw. alternativ
attr Proxon_WP dev-i-defPoll 1

Jetzt pollt der Master schon mal den Slave.

Wolfgang
2 x RPI mit FHEM 5.8 (RPI B+ & RPI 2B) verbunden über FHEM2FHEM
- HM Fensterkontakte, Rauchmelder, Fernbedienung, Schalter
- Optolink (Selbstbau) Vitotronic 200KW2
- 1-wire DS1820 Temp.Sensoren, TX29DT-IT
- CUL (busware), nanoCUL, Jeelink (Nachbau), FHEMduino

holle75

Hallo Ihr, kurze Zwischenfrage: gibt es ein Attribut welches eine Zeit angibt, nachdem ein ehemals gelesener Wert auf "0" oder "error" oder irgendwas anderes gesetzt wird? Also wenn seit x Sekunden/Minuten kein neuer Wert gelesen werden kann -> 0/error

bin in der Commandref nicht fündig geworden.

Danke und Gruß
H.

Wzut

Zitat von: holle75 am 10 Oktober 2020, 19:31:23
Also wenn seit x Sekunden/Minuten kein neuer Wert gelesen werden kann -> 0/error
schau dir mal readingsWatcher an, der ist genau für so etwas macht wurden :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

holle75

Ah ok, werde ich mir ansehen.
Dachte Stefan hat da vielleicht schon direkt was ins Modul gebaut.
Bei mir bleiben Werte generell stehen, auch wenn das Device nicht erreichbar ist. Bei httpmod fallen die Werte, als Beispiel, bei mir auf 0 wenn ein Wert nicht auslesbar ist.

abc2006

Hallo,
ich habe einen Infini10k Solar-Wechselrichter mit einer Modbus-Karte.
Auf dem einen Port läuft die Kommunikation bereits einwandfrei, dank Stefans Hilfe.

Für die Kommunikation mit dem Batteriepack benötigt man angeblich eine weitere Karte, die dann "BMS-Modbus-Karte" heisst.
Aus diesem Grund versuche ich nun, herauszufinden, ob nicht vielleicht beides über die gleiche Karte funktioniert.
Da ich leider noch nicht viel Ahnung von Modbus habe und mich grade auch irgendwie sehr schwer tue, voranzukommen,
wollte ich mal fragen, ob jemand aus den ankommenden Daten irgendwas sinnvolles interpretieren kann:


2020.10.20 12:52:23.384 5: infini_test: HandleRequest could not parse request frame yet, wait for more data
2020.10.20 12:52:23.386 5: infini_test: read buffer: b7007feef8b8c3d8f8431f007fdfdfafd0ffa3b7007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdf5fafd6ff03d1007feef8b8c3d8f8431f007fdf5fafa4ff438a007feef8b8c3d8f8431f007fdf5fafa4ff43c5007feef8b8c3d8f8431f007fdf5fafb6ffe169007feef8b8c3d8f8431f007fdf5fafb6ffe169007feef8b8c3d8f8431f007fdf5fafb6ffe169007feef8b8c3d8f8431f007fdf5fafddffa3ee007feef8b8c3d8f8431f007fdf5fd7ddffa3ee007feef8b8c3d8f8431f007fdfdfedfcff63ff007feef8b8c3d8f8431f007fdfdfafe8ff2135007feef8b8c3d8f8431f007fdfdfafe8ff2135007feef8b8c3d8f8431f007fdf5f7dfaff2332007feef8b8c3d8f8431f007fdfdfaff7ff231a007feef8b8c3d8f8431f007fdfdf7dffff238a007feef8b8c3d8f8431f007fdfdfffffff09ee007feef8b8c3d8f8431f007fdfdffdfcff231e007feef8b8c3d8f8431f007fdfdffdfcff231e007feef8b8c3d8f8431f007fdf5ffdffff211e007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdfdfafcaffa145007feef8b8c3d8f8431f007fdfdfafc9ffa196007feef8b8c3d8f8431f007fdfdfafc2ffa3ed007feef8b8c3d8f8431f007fdfdfafc2ffa3ed007feef8b8c3d8f8431f007fdf5fafdeff0179007feef8b8c3d8f8431f007fdfdfaf83ff63e1007feef8b8c3d8f8431f007fdf5fafdaffa16d007feef8b8c3d8f8431f007fdf5fafbbff63f5007feef8b8c3d8f8431f007fdf5fafb6ff43e9007feef8b8c3d8f8431f007fdf5fafb6ff43e9007feef8b8c3d8f8431f007fdf5fb5ffff816f007feef8b8c3d8f8431f007fdfdfafe2ff2171007feef8b8c3d8f8431f007fdf5fafecff2165007feef8b8c3d8f8431f007fdf5fc5ffff417d007feef8b8c3d8f8431f007fdf5fafdfffa1fa007feef8b8c3d8f8431f007fdf5fafdfffa1fa007feef8b8c3d8f8431f007fdfdfafe5ff23c7007feef8b8c3d8f8431f007fdfdfbdf9ff23c7007feef8b8c3d8f8431f007fdfdfd7fcff217e007feef8b8c3d8f8431f007fdfdfaffcff217f007feef8b8c3d8f8431f007fdfdfaff6ff2132007feef8b8c3d8f8431f007fdfdfafebff212b007feef8b8c3d8f8431f007fdfdfafebff212b007feef8b8c3d8f8431f007fdfdfafd6ffa3a9007feef8b8c3d8f8431f007fdfdf3dfbff239d007feef8b8c3d8f8431f007fdfdfafecff239d007feef8b8c3d8f8431f007fdfdfaf8affe3f7007feef8b8c3d8f8431f007fdfdfaf8effe17d007feef8b8c3d8f8431f007fdfdfaf8effe17d007feef8b8c3d8f8431f007fdfdfdffdff235e007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdf5ffdfbff2336007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5f90feff411e007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdfdfafd6ffa3a9007feef8b8c3d8f8431f007fdfdfafd6ffa3a9007feef8b8c3d8f8431f007fdfdf5dfdffa3a7007feef8b8c3d8f8431f007fdf5f7dfcff21d2007feef8b8c3d8f8431f007fdfdfaff6ff2132007feef8b8c3d8f8431f007fdfdfeff6ff2132007feef8b8c3d8f8431f007fdf5f7dffff230200
2020.10.20 12:52:23.387 4: infini_test: ParseFrameStart (RTU) extracted id 183, fCode 0 and data 7feef8b8c3d8f8431f007fdfdfafd0ffa3b7007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdfdfaf9dff63a6007feef8b8c3d8f8431f007fdf5fafd6ff03d1007feef8b8c3d8f8431f007fdf5fafa4ff438a007feef8b8c3d8f8431f007fdf5fafa4ff43c5007feef8b8c3d8f8431f007fdf5fafb6ffe169007feef8b8c3d8f8431f007fdf5fafb6ffe169007feef8b8c3d8f8431f007fdf5fafb6ffe169007feef8b8c3d8f8431f007fdf5fafddffa3ee007feef8b8c3d8f8431f007fdf5fd7ddffa3ee007feef8b8c3d8f8431f007fdfdfedfcff63ff007feef8b8c3d8f8431f007fdfdfafe8ff2135007feef8b8c3d8f8431f007fdfdfafe8ff2135007feef8b8c3d8f8431f007fdf5f7dfaff2332007feef8b8c3d8f8431f007fdfdfaff7ff231a007feef8b8c3d8f8431f007fdfdf7dffff238a007feef8b8c3d8f8431f007fdfdfffffff09ee007feef8b8c3d8f8431f007fdfdffdfcff231e007feef8b8c3d8f8431f007fdfdffdfcff231e007feef8b8c3d8f8431f007fdf5ffdffff211e007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdfdfafcaffa145007feef8b8c3d8f8431f007fdfdfafc9ffa196007feef8b8c3d8f8431f007fdfdfafc2ffa3ed007feef8b8c3d8f8431f007fdfdfafc2ffa3ed007feef8b8c3d8f8431f007fdf5fafdeff0179007feef8b8c3d8f8431f007fdfdfaf83ff63e1007feef8b8c3d8f8431f007fdf5fafdaffa16d007feef8b8c3d8f8431f007fdf5fafbbff63f5007feef8b8c3d8f8431f007fdf5fafb6ff43e9007feef8b8c3d8f8431f007fdf5fafb6ff43e9007feef8b8c3d8f8431f007fdf5fb5ffff816f007feef8b8c3d8f8431f007fdfdfafe2ff2171007feef8b8c3d8f8431f007fdf5fafecff2165007feef8b8c3d8f8431f007fdf5fc5ffff417d007feef8b8c3d8f8431f007fdf5fafdfffa1fa007feef8b8c3d8f8431f007fdf5fafdfffa1fa007feef8b8c3d8f8431f007fdfdfafe5ff23c7007feef8b8c3d8f8431f007fdfdfbdf9ff23c7007feef8b8c3d8f8431f007fdfdfd7fcff217e007feef8b8c3d8f8431f007fdfdfaffcff217f007feef8b8c3d8f8431f007fdfdfaff6ff2132007feef8b8c3d8f8431f007fdfdfafebff212b007feef8b8c3d8f8431f007fdfdfafebff212b007feef8b8c3d8f8431f007fdfdfafd6ffa3a9007feef8b8c3d8f8431f007fdfdf3dfbff239d007feef8b8c3d8f8431f007fdfdfafecff239d007feef8b8c3d8f8431f007fdfdfaf8affe3f7007feef8b8c3d8f8431f007fdfdfaf8effe17d007feef8b8c3d8f8431f007fdfdfaf8effe17d007feef8b8c3d8f8431f007fdfdfdffdff235e007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdf5ffdfbff2336007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5f3dfeff2351007feef8b8c3d8f8431f007fdf5f90feff411e007feef8b8c3d8f8431f007fdf5fbdfcff2373007feef8b8c3d8f8431f007fdfdfafd6ffa3a9007feef8b8c3d8f8431f007fdfdfafd6ffa3a9007feef8b8c3d8f8431f007fdfdf5dfdffa3a7007feef8b8c3d8f8431f007fdf5f7dfcff21d2007feef8b8c3d8f8431f007fdfdfaff6ff2132007feef8b8c3d8f8431f007fdfdfeff6ff2132007feef8b8c3d8f8431f007fdf5f7dffff23
2020.10.20 12:52:23.387 5: infini_test: HandleRequest called from Read
2020.10.20 12:52:23.387 5: infini_test: HandleRequest could not parse request frame yet, wait for more data

Prinzipiell scheint das immer das gleiche zu sein:
feef8b8c3d8f8431f007fdfdfafd0ffa3b7007

Ein Ansatzpunkt, eine Idee, oder ein Tipp würden mir vielleicht schon helfen...
Oder ist das überhaupt kein Modbus?

Danke und viele Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

StefanStrobel

Hallo,

für mich sieht das nicht nach Modbus aus.

Gruss
    Stefan

StefanStrobel

Hallo,

anbei mal wieder eine neue Version des Basis-Moduls.
Es hat jetzt einen eigenen Namespace und einige interne Optimierungen. Falls ein paar Leute Zeit haben, es zu testen, wäre das sehr hilfreich.
Es benötigt die aktuelle Version des Utils-Moduls von HTTPMOD, da ich einige redundante Funktionen von beiden Modulen darin ausgelagert habe.
Das muss entweder per update geholt werden (habe es gerade eingecheckt) oder manuell ins Verzeichnis lib/FHEM/HTTPMOD.
Zudem muss das File modTemplate nach lib/FHEM/Modbus (das ist der neue Rahmen für "set saveAsModule")

Gruss / vielen Dank
    Stefan

abc2006

Die neue Version scheint bei mir problemlos zu laufen.

Für die Steuerung meines Wechselrichters möchte ich gerne bei erreichen eines bestimmten Ladezustandes der Batterie keine Antworten mehr auf Modbus-Anfragen senden.
Ich habe herausgefunden, dass das mit dem Attribut "disable" funktioniert.
Allerdings ist das ein bisschen unschön, weil es jedesmal das rote Fragezeichen bei save triggert. Andererseits wird es hoffentlich nicht so oft vorkommen, dass ich den WR abschalten muss.
Die Frage dazu wäre, ob es eine andere Möglichkeit gibt, den Modbus-Slave temporär zu deaktivieren?

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Heuberg

Hallo Stephan (abc2006),
kleine Frage zu Deinem Vorgehen: Warum möchtest Du den Wechselrichter abschalten, wenn Deine Batterie "voll" ist?

Viele Grüße
Rainer
HM, MAX, MySensors, Fronius, Conbee II, ZigBee, VCONTROL, Modbus, RPi, AVM

ch.eick

#534
Hallo zusammen,
das ist zwar OT, aber seis drum :-)

Zitat von: Heuberg am 21 Oktober 2020, 22:28:19
kleine Frage zu Deinem Vorgehen: Warum möchtest Du den Wechselrichter abschalten, wenn Deine Batterie "voll" ist?
Ich vermute, dass der WR mit der Batterie über modBus kommuniziert. Durch das unterbinden dieser Kommunikation würde der WR nicht mehr die Batterie weiter laden.
Das könnte man verwenden, um selber zu bestimmen, wann die Batterie geladen wird.

Zitat
bei erreichen eines bestimmten Ladezustandes
Das bedeutet nicht, dass die Batterie voll ist.

Bei mir hat der WR eine "inteligente" Ladesteuerung und versucht im Sommer das Maximum am Mittag für die Ladung zu verwenden. Dann wird zB 70% ins Netz eingespeist, zusätzlich das Haus versorgt und dann noch die Batterie geladen. Somit erfolgt dann keine Begrenzung der Leistung.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo,

bisher wird alles über Attribute gesteuert und wenn ein Attribut sich ändert, dann bietet Fhem an die Konfiguration zu speichern.
Aber: das Modbus-Modul verwendet die Fhem-Funktion IsDisabled um abzufragen ob das Gerät auf disabled steht. Die prüft nicht nur Attribute sondern auch den State:


return 1 if($attr{$devname}{disable});
return 3 if($defs{$devname} && $defs{$devname}{STATE} &&
              $defs{$devname}{STATE} eq "inactive");
return 3 if(ReadingsVal($devname, "state", "") eq "inactive");


Man könnte mal ausprobieren einfach den State auf inactive zu setzen. Ich hab das noch nicht getestet.

Gruss
   Stefan


Heuberg

Hallo Christian,

OT hin oder her :-), ich denke es geht hier um die Möglichkeiten des Modbus.
Wenn Du den Modbus vom FHEM her auf "disable" stellst, ist doch nur FHEM "vom Netz". Dein WR unterhält sich dabei weiterhin mit Deiner Batterie, unter der Annahme, daß die beiden sich über Modbus unterhalten und nicht über andere Steuerleitungen.

Das würde doch heißen, Du nimmst Dir nur die Überwachungs- und Steuerungsmöglichkeit von FHEM auf dem Modbus. Die Geräte unterhalten sich weiterhin.

Aus meiner Sicht müßtest Du für Deinen Wunsch genau FHEM dafür nehmen, den WR zu steuern und die Parameter in Deinem Sinne zu verändern, sofern er sich über den Modbus steuern läßt.

Viele Grüße
Rainer
HM, MAX, MySensors, Fronius, Conbee II, ZigBee, VCONTROL, Modbus, RPi, AVM

ch.eick

Zitat von: Heuberg am 22 Oktober 2020, 17:17:24
Aus meiner Sicht müßtest Du für Deinen Wunsch genau FHEM dafür nehmen, den WR zu steuern und die Parameter in Deinem Sinne zu verändern, sofern er sich über den Modbus steuern läßt.
Bei mir mache ich das auch so, es war ja nur eine Vermutung, was er versuchen möchte.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

pejonp

#538
Zitat von: StefanStrobel am 20 Oktober 2020, 19:41:42
Hallo,

anbei mal wieder eine neue Version des Basis-Moduls.
......

Hallo Stefan,

das die Module 2017 Versionen haben ist so gewollt ?! Ich werde sie in den nächsten Tagen einmal testen.


Hab es mal getestet: ich nutzte deine Funktionen in diesem Modul (https://github.com/pejonp/FHEM---SolarEdge/tree/master/FHEM)

Zitat
2020.10.22 17:48:48 0: Undefined subroutine &FHEM::SolarEdge::ModbusLD_Initialize called at ./FHEM/98_SolarEdge.pm line 629, <$fh> line 102.

2020.10.22 17:48:48 1: Including ./log/fhem.save
2020.10.22 17:48:48 1: Messages collected while initializing FHEM:configfile: Cannot load module SolarEdge
Please define SEdge 5e9c7d2d-f33f-416a-a25c-8a42e71ede7a0bb6 first
./log/fhem.save: Please define SEdge first

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

StefanStrobel

Hallo Jörg,

wo siehst Du denn 2017?
bei mir ist das
Zitat
MODULEVERSION  Modbus 4.3 - 27.9.2020

Was den Fehler angeht, so muss ich mir mal das SolarEdge-Modul näher ansehen.
Genau solche Probleme habe ich vermutet / befürchtet. Das Basismodul ist jetzt in einem eigenen Package:

package Modbus;


zur Rückwärtskompatibilität habe ich folgendes eingefügt:

    # special case to be used by legacy Fhem modules built on Modbus ...
    *main::ModbusLD_Initialize = *Modbus::InitializeLD;
    *main::ModbusLD_Define = *Modbus::DefineLDFn;
    *main::ModbusLD_Undef = *Modbus::UndefLDFn;
    *main::ModbusLD_Set = *Modbus::SetLDFn;
    *main::ModbusLD_Get = *Modbus::GetLDFn;
    *main::ModbusLD_Attr = *Modbus::AttrLDFn;
    *main::Modbus_Notify = *Modbus::NotifyFn;


aber wenn das SolarEdge-Modul nach FHEM::SolarEdge::ModbusLD_Initialize sucht, dann kann das natürlich nicht klappen.
Ich poste dann wieder ein Update sobald ich Zeit hatte, mir das anzusehen.

Grus / Thanx
    Stefan