Poolsteuerung per Modbus auslesen

Begonnen von Fistandantilus, 18 August 2018, 18:15:54

Vorheriges Thema - Nächstes Thema

Fistandantilus

Hi,

ich habe ein Hidrolife 16 Poolsteuerung. Ist wohl identisch mit den Sugar Valley Anlagen. Eine Beschreibung der Register habe ich hier gefunden:
https://downloads.vodnici.net/uploads/wpforo/attachments/69/171-Modbus-registers.pdf

Mit einem In-Circuit rs485 Adpter habe ich die Verbindung auch hinbekommen und die ersten Werte werden mir angezeigt. Konfiguriert ist es wie folgt:

my %BrilixParseInfo = (
# MEASURE
'h100' => { reading => 'MBF_ION_CURRENT',
name => 'ION_CURR',
poll => 1
},
'h101' => { reading => 'MBF_HIDRO_CURRENT',
name => 'HIDRO_CURR',
poll => 1
},
'h102' => { reading => 'MBF_MEASURE_PH',
name => 'PH_MEASURE',
poll => 1
},
'h103' => { reading => 'MBF_MEASURE_RX',
name => 'RX_MEASURE',
poll => 1
},
'h104' => { reading => 'MBF_MEASURE_CL',
name => 'CL_MEASURE',
poll => 1
},
'h107' => { reading => 'MBF_PH_STATUS',
name => 'PH_STATUS',
poll => 1
},
'h108' => { reading => 'MBF_RX_STATUS',
name => 'RX_STATUS',
poll => 1
},
'h109' => { reading => 'MBF_CL_STATUS',
name => 'CL_STATUS',
poll => 1
},
'h1010' => { reading => 'MBF_CD_STATUS',
name => 'CD_STATUS',
poll => 1
},
'h1012' => { reading => 'MBF_ION_STATUS',
name => 'ION_STATUS',
poll => 1
},
'h1014' => { reading => 'MBF_HIDRO_STATUS',
name => 'HIDRO_STATUS',
poll => 1
},
'h1015' => { reading => 'MBF_RELAY_STATE',
name => 'RELAY_STATE',
poll => 1
}
);


Inbesondere bei den Registern 0x010A und ff. bin ich mir nicht sicher, ob das so richtig ist?

Ich bekomme aktuell folgende readings:

MBF_CD_STATUS
0
2018-08-18 18:09:18

MBF_CL_STATUS
0
2018-08-18 18:09:18

MBF_HIDRO_CURRENT
2030
2018-08-18 18:09:18

MBF_HIDRO_STATUS
0
2018-08-18 18:09:18

MBF_ION_CURRENT
4
2018-08-18 18:09:18

MBF_ION_STATUS
0
2018-08-18 18:09:18

MBF_MEASURE_CL
749
2018-08-18 18:09:18

MBF_MEASURE_PH
348
2018-08-18 18:09:18

MBF_MEASURE_RX
0
2018-08-18 18:09:18

MBF_PH_STATUS
0
2018-08-18 18:09:18

MBF_RELAY_STATE
0
2018-08-18 18:09:18

MBF_RX_STATUS
0
2018-08-18 18:09:18


Was mir jetzt unklar ist, wie ich zum einen bei den Messwerten z.B. MBF_MEASURE_PH mit 348 den echten Wert (7,1 oder 7,2) angezeigt bekomme.
Bei Register mit den 0 Werten hab ich auch noch keine Idee.
Vielleicht habt Ihr ein paar Denkanstöße für mich bzw. könnt mir anhand der Doku mit dem Setup helfen. Ich bin absoluter Modbus Neuling und arbeite mich gerade erst in das Thema ein.

VG
F.
Raspberry Pi 3 + FHEM + Smartvisu/Fronthem, CUL, HMLAN, Enocean USB300, Eltako (FAM14, FSB14, FSR,FTS14EM,Multisensor,...) - MySQL DB + 2.Raspberry für Heizungsregelung und 3. Raspberry als Alarmanlage

jewuma

Lt. Manual soll der Wert dem Wert inkl. 2 Nachkommastellen entsprechen.

"Este registro indica el nivel de pH medido en centésimas. El valor 700 indica un pH
de 7.00"

Ich spreche zwar kein Italienisch, aber so sieht es aus.
Meine Vermutung ist auch, dass die Register in Hex angegeben sind, aber h102 das "Dezimalregister" 102 abfragt.

Ich würde mal h258 probieren.
Gruß
Jens


JoeALLb

Zitat von: Fistandantilus am 18 August 2018, 18:15:54
Hi,

ich habe ein Hidrolife 16 Poolsteuerung. Ist wohl
F.

Hast du das am laufen? Habe auch so ein Gerät....
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Hallo, an welche Schnittstelle und welche Pins hast Du die RS485 Schnittstelle angeschlossen?

Gruss Jan

JF Mennedy

ok, Verbindung habe ich aufgebaut... Bekomme auch die Werte... Ist es möglich die Relais zu schalten?

JoeALLb

Klingt gut. Und, welche Pins hast du belegt? Woran hast du diese angeklemmt? An einen USB Adapter?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Ich benutze einen RS485 USB Adapter.
Hier das list vom Device:
Internals:
   DEF        /dev/ttyUSB0@19200,8,N,1
   DeviceName /dev/ttyUSB0@19200,8,N,1
   EXPECT     idle
   FD         4
   FUUID      5ecd0c97-f33f-6aba-3a6f-df1932aaabaaba48
   LASTOPEN   1590508205.77863
   MODE       master
   NAME       ModBusLine
   NR         14
   NTFY_ORDER 50-ModBusLine
   PARTIAL   
   PROTOCOL   RTU
   STATE      opened
   SerialConn 1
   TYPE       Modbus
   devioLoglevel 3
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2020-05-26 17:50:05   state           opened
   REMEMBER:
     lid        1
     lname      Pool
     lrecv      1590522639.52888
     lsend      1590522639.50378
   defptr:
     Pool       1
Attributes:



Das LIST vom SR-Pro:
Internals:
   DEF        1 5
   FUUID      5ecd3817-f33f-6aba-7d6f-4ace8bc1137cf58d
   INTERVAL   5
   IODev      ModBusLine
   LeadingZeros 1
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.1.5 - 17.9.2019
   NAME       Pool
   NOTIFYDEV  global
   NR         15
   NTFY_ORDER 50-Pool
   PROTOCOL   RTU
   STATE      opened
   TRIGGERTIME 1590522498.90716
   TRIGGERTIME_FMT 2020-05-26 21:48:18
   TYPE       ModbusAttr
   lastUpdate 1590522493.90716
   FRAME:
   READ:
   READINGS:
     2020-05-26 21:48:14   FiltrationsModus 1.00
     2020-05-26 21:48:13   FiltrationsSchalterMan 1.00
     2020-05-26 21:48:14   RX              533.00
     2020-05-26 21:48:14   Temperatur      24.40
     2020-05-26 21:48:14   pH              7.00
     2020-05-26 21:24:02   state           opened
   REMEMBER:
     lrecv      1590522494.44271
     lsend      1590522494.41817
   gotReadings:
     Temperatur 24.40
   lastRead:
     h00258     1590522494.18808
     h00259     1590522494.06008
     h00262     1590522494.44385
     h01041     1590522494.31593
     h01043     1590522493.93219
Attributes:
   dev-h-defFormat %.2f
   dev-h-defLen 2
   dev-h-defPoll 1
   obj-h00258-expr $val * 0.01
   obj-h00258-reading pH
   obj-h00259-expr $val * 1
   obj-h00259-reading RX
   obj-h00262-expr $val * 0.1
   obj-h00262-reading Temperatur
   obj-h01041-allowWrite 1
   obj-h01041-expr $val * 1
   obj-h01041-hint 0,1,2,3,4,5,6,7
   obj-h01041-max 7
   obj-h01041-min 0
   obj-h01041-reading FiltrationsModus
   obj-h01041-set 1
   obj-h01043-allowWrite 1
   obj-h01043-expr $val * 1
   obj-h01043-hint 0,1
   obj-h01043-max 1
   obj-h01043-min 0
   obj-h01043-reading FiltrationsSchalterMan
   obj-h01043-set 1
   userattr   dev-h-defFormat dev-h-defLen dev-h-defPoll obj-h00258-expr obj-h00258-reading obj-h00259-expr obj-h00259-reading obj-h00262-expr obj-h00262-reading obj-h01041-allowWrite obj-h01041-expr obj-h01041-hint obj-h01041-max obj-h01041-min obj-h01041-reading obj-h01041-set obj-h01043-allowWrite obj-h01043-expr obj-h01043-hint obj-h01043-max obj-h01043-min obj-h01043-reading obj-h01043-set



Hier die Defines:
ModBusLine:
defmod ModBusLine Modbus /dev/ttyUSB0@19200,8,N,1


Salt-Relax-Pro:
defmod Pool ModbusAttr 1 5
attr Pool userattr dev-h-defFormat dev-h-defLen dev-h-defPoll obj-h00258-expr obj-h00258-reading obj-h00259-expr obj-h00259-reading obj-h00262-expr obj-h00262-reading obj-h01041-allowWrite obj-h01041-expr obj-h01041-hint obj-h01041-max obj-h01041-min obj-h01041-reading obj-h01041-set obj-h01043-allowWrite obj-h01043-expr obj-h01043-hint obj-h01043-max obj-h01043-min obj-h01043-reading obj-h01043-set
attr Pool dev-h-defFormat %.2f
attr Pool dev-h-defLen 2
attr Pool dev-h-defPoll 1
attr Pool obj-h00258-expr $val * 0.01
attr Pool obj-h00258-reading pH
attr Pool obj-h00259-expr $val * 1
attr Pool obj-h00259-reading RX
attr Pool obj-h00262-expr $val * 0.1
attr Pool obj-h00262-reading Temperatur
attr Pool obj-h01041-allowWrite 1
attr Pool obj-h01041-expr $val * 1
attr Pool obj-h01041-hint 0,1,2,3,4,5,6,7
attr Pool obj-h01041-max 7
attr Pool obj-h01041-min 0
attr Pool obj-h01041-reading FiltrationsModus
attr Pool obj-h01041-set 1
attr Pool obj-h01043-allowWrite 1
attr Pool obj-h01043-expr $val * 1
attr Pool obj-h01043-hint 0,1
attr Pool obj-h01043-max 1
attr Pool obj-h01043-min 0
attr Pool obj-h01043-reading FiltrationsSchalterMan
attr Pool obj-h01043-set 1


Ich kann die Werte aus dem Salt-Relax auslesen, aber ich kann noch keine Relais schalten.. Wäre aber total gut, weil ich dann auch meine Filterpumpe darüber schalten könnte...


Gruss Jan

JF Mennedy

Die RS485 Schnittstelle habe ich auf dem Anschluss "Extern (Modbus3)" rechts neben dem Stecker vom WIFI Modul auf den Pins 3 und 4 (von oben) angeschlossen. Hier musst Du mal experimentieren, was A und B ist... Wenn die Schnittstelle sich nicht öffnet einfach die Adern drehen...

JoeALLb

Vielen Dank! Habe auch einen salt relax pro, also mal sehen, ob ich weiter komme, hab aber noch kein Kabel in den technikschacht.
Daher werde ich vorerst die filterpumpe über knx direkt starten...
Eine Redox-sonde hast du nicht verbaut, oder?
Hast du das ph Modul im ph-minus oder ph-plus Modus?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Ich habe beide Optionen redox mit ph minus, wobei die ph Messung nicht funktioniert... Habe die Anlage seit letztem Jahr und Reklamation läuft... Das wifi Modul verbindet dich auch seit ein paar Tagen nicht mehr mit dem Portal, so dass ich jetzt nach einer anderen Lösung gesucht habe... Normalerweise schalte ich über die SR-Plus auch die Stufe der Pumpe... Habe ne badu Eco mit integriertem frequenzumformer... Die Anbindung vom web Portal hatte ich bisher mit httpmod realisiert, aber wenn das Portal nicht läuft geht halt auch in fhem nix [emoji35][emoji35][emoji35]

Gesendet von meinem VOG-L29 mit Tapatalk


JoeALLb

Spannend, habe die selbe Pumpe wie du! Jedoch kein WiFi-Modul, da ich dort sowieso keinen WLAN Empfang hätte daher hoffe ich es per modbus zu lösen...
Dosierst du dann das ph-minus manuell?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

zur zeit dosiere ich manuell, da die Messung nicht geht... hoffe dass bayrol sich hier bald mal äußert...

JF Mennedy

Die 3 Stufen Pumpensteuerung kann man auch in der SR-Pro anschließen über den Kommunikationsschnittstellen, jedoch nicht das Aus-Signal, das habe ich über den potentialfreien Kontakt gelöst, der mir ein Schütz schaltet... Da die Anlage bei mir im Keller steht, habe ich die Zuleitung über einen verriegelnden Druckknopfschalter gelegt, der im Erdgeschoss als Not-Aus installiert ist, dann muss ich im Notfall nicht erst in den Keller rennen.. Die Ader vom GND der 3 Stufen ist noch zusätzlich über einen 0/1 Schalter gezogen, schalte ich den Schalter auf 0 kann ich die Pumpe manuell über das Steuergerät der Pumpe schalten, steht der Schalter auf 1 läufts über die SR-Pro...

JF Mennedy

So, mit dieser Definition geht auch das Schreiben der HoldingRegister:

defmod Pool ModbusAttr 1 10
attr Pool userattr dev-h-defPoll dev-h-write obj-h00258-expr obj-h00258-reading obj-h00259-expr obj-h00259-reading obj-h00262-expr obj-h00262-reading obj-h01041-allowWrite obj-h01041-expr obj-h01041-hint obj-h01041-max obj-h01041-min obj-h01041-reading obj-h01041-set obj-h01043-allowWrite obj-h01043-expr obj-h01043-hint obj-h01043-max obj-h01043-min obj-h01043-reading obj-h01043-set
attr Pool dev-h-defPoll 10
attr Pool dev-h-write 16
attr Pool disable 0
attr Pool obj-h00258-expr $val * 0.01
attr Pool obj-h00258-reading pH
attr Pool obj-h00259-expr $val * 1
attr Pool obj-h00259-reading RX
attr Pool obj-h00262-expr $val * 0.1
attr Pool obj-h00262-reading Temperatur
attr Pool obj-h01041-allowWrite 1
attr Pool obj-h01041-expr $val * 1
attr Pool obj-h01041-hint 0,1,2,3,4,5,6,7
attr Pool obj-h01041-max 7
attr Pool obj-h01041-min 0
attr Pool obj-h01041-reading FiltrationsModus
attr Pool obj-h01041-set 1
attr Pool obj-h01043-allowWrite 1
attr Pool obj-h01043-expr $val * 1
attr Pool obj-h01043-hint 0,1
attr Pool obj-h01043-max 1
attr Pool obj-h01043-min 0
attr Pool obj-h01043-reading FiltrationsSchalterMan
attr Pool obj-h01043-set 1


Problem, war dass ich die Länge des Registers mit 2 definiert hatte... und das Attribut dev-h-write muss auf 16 stehen.

JF Mennedy

Schade für die 600 Euro für das WIFI Modul, kann man sich eindeutig sparen und die Anbindung über Modbus ist wesentlich performanter... Werde das Modul in den nächsten Tagen noch ein wenig ausbauen und dann hier posten, auch mit Foto, wo die RS485 Schnittstelle angeschlossen wird...

Hilft vielleicht dann anderen SR-Pro Besitzern weiter ;-)


Gruss Jan

JF Mennedy

#15
So,

hier die derzeitige Definition:

defmod NaturallySalt ModbusAttr 1 10
attr NaturallySalt userattr dev-h-defPoll dev-h-write obj-h00257-expr obj-h00257-reading obj-h00258-expr obj-h00258-reading obj-h00259-expr obj-h00259-reading obj-h00262-expr obj-h00262-reading obj-h01041-allowWrite obj-h01041-expr obj-h01041-hint obj-h01041-max obj-h01041-min obj-h01041-reading obj-h01041-set obj-h01043-allowWrite obj-h01043-expr obj-h01043-hint obj-h01043-max obj-h01043-min obj-h01043-reading obj-h01043-set obj-h01057-expr obj-h01057-reading obj-h01068-allowWrite obj-h01068-expr obj-h01068-hint obj-h01068-max obj-h01068-min obj-h01068-reading obj-h01068-set obj-h01282-allowWrite obj-h01282-expr obj-h01282-hint obj-h01282-max obj-h01282-min obj-h01282-reading obj-h01282-set obj-h01284-allowWrite obj-h01284-expr obj-h01284-hint obj-h01284-max obj-h01284-min obj-h01284-reading obj-h01284-set obj-h01284-setexpr obj-h01288-allowWrite obj-h01288-expr obj-h01288-hint obj-h01288-max obj-h01288-min obj-h01288-reading obj-h01288-set
attr NaturallySalt DbLogExclude .*
attr NaturallySalt IODev ModBusLine
attr NaturallySalt alias NaturallySalt
attr NaturallySalt dev-h-defPoll 10
attr NaturallySalt dev-h-write 16
attr NaturallySalt disable 0
attr NaturallySalt group Pool
attr NaturallySalt icon virtualbox-alt
attr NaturallySalt obj-h00257-expr $val * 0.1
attr NaturallySalt obj-h00257-reading Hydro
attr NaturallySalt obj-h00258-expr $val * 0.01
attr NaturallySalt obj-h00258-reading pH
attr NaturallySalt obj-h00259-expr $val * 1
attr NaturallySalt obj-h00259-reading RX
attr NaturallySalt obj-h00262-expr $val * 0.1
attr NaturallySalt obj-h00262-reading Temperatur
attr NaturallySalt obj-h01041-allowWrite 1
attr NaturallySalt obj-h01041-expr $val * 1
attr NaturallySalt obj-h01041-hint 0,1,2,3,4,5,6,7
attr NaturallySalt obj-h01041-max 7
attr NaturallySalt obj-h01041-min 0
attr NaturallySalt obj-h01041-reading FiltrationsModus
attr NaturallySalt obj-h01041-set 1
attr NaturallySalt obj-h01043-allowWrite 1
attr NaturallySalt obj-h01043-expr $val * 1
attr NaturallySalt obj-h01043-hint 0,1
attr NaturallySalt obj-h01043-max 1
attr NaturallySalt obj-h01043-min 0
attr NaturallySalt obj-h01043-reading FiltrationsSchalterMan
attr NaturallySalt obj-h01043-set 1
attr NaturallySalt obj-h01057-expr $val * 1
attr NaturallySalt obj-h01057-reading FiltrationState
attr NaturallySalt obj-h01068-allowWrite 1
attr NaturallySalt obj-h01068-expr $val * 1
attr NaturallySalt obj-h01068-hint 0,1
attr NaturallySalt obj-h01068-max 1
attr NaturallySalt obj-h01068-min 0
attr NaturallySalt obj-h01068-reading Cover
attr NaturallySalt obj-h01068-set 1
attr NaturallySalt obj-h01282-allowWrite 1
attr NaturallySalt obj-h01282-expr $val * 0.1
attr NaturallySalt obj-h01282-hint 0,10,20,30,40,50,60,70,80,90,100
attr NaturallySalt obj-h01282-max 100
attr NaturallySalt obj-h01282-min 0
attr NaturallySalt obj-h01282-reading HydroSollwert
attr NaturallySalt obj-h01282-set 1
attr NaturallySalt obj-h01284-allowWrite 1
attr NaturallySalt obj-h01284-expr $val * 0.01
attr NaturallySalt obj-h01284-hint 6.8,6.9,7.0,7.1,7.2,7.4,7.5,7.6
attr NaturallySalt obj-h01284-max 7.6
attr NaturallySalt obj-h01284-min 6.8
attr NaturallySalt obj-h01284-reading phSollwert
attr NaturallySalt obj-h01284-set 1
attr NaturallySalt obj-h01284-setexpr $val * 100
attr NaturallySalt obj-h01288-allowWrite 1
attr NaturallySalt obj-h01288-expr $val * 1
attr NaturallySalt obj-h01288-hint 400,450,500,550,600,650
attr NaturallySalt obj-h01288-max 700
attr NaturallySalt obj-h01288-min 300
attr NaturallySalt obj-h01288-reading rxSollwert
attr NaturallySalt obj-h01288-set 1
attr NaturallySalt realRoom Schwimmbad
attr NaturallySalt room 00_Haus,11_Garten,12_Schwimmbad,35_Keller,73_GoogleHome
attr NaturallySalt stateFormat {sprintf("Temp: %.1f °C PH: %.2f Redox: %.0f Elektrolyse: %.0f", ReadingsNum($name,'Temperatur',0),ReadingsNum($name,'pH',0),ReadingsNum($name,'RX',0),ReadingsNum($name,'Hydro',0)  )}
attr NaturallySalt userReadings temperature { ReadingsNum($name,"Temperatur",0) }, \
state { ReadingsVal($name,"FiltrationState",0) }
attr NaturallySalt webCmd FiltrationsModus:FiltrationsSchalterMan:phSollwert:rxSollwert:HydroSollwert
attr NaturallySalt webCmdLabel FiltrationsModus:FiltrationsSchalterMan:phSollwert:rxSollwert:HydroSollwert



alen

Hallo zusammen

Ich habe die Poolsteuerung Hidrolife Sal 22 (mehr oder weniger baugleich zur Salt Relax Pro).
Darf ich fragen, was für einen USB Modus converter ihr benutzt?
Würde dieser auch funktionieren?

https://www.digitec.ch/de/s1/product/oem-yf-usb-zu-rs485-adapter-diverse-elektronikmodul-5999133

Gruss
alen
Raspberry Pi Model Model 2 SD 32GB
Jeelink
FHEM 5.6, 2x TX 29DTH-IT

JF Mennedy

Hallo Alen,

Ich verwende die USB - RS485 Adapter von CTI (https://www.cti-shop.com/rs485-konverter/usb-485-mini-op). Die sind zwar etwas teuerer, da ich sie oft in der Industrie verwende und ich die halt vorrätig habe. Normalersweise sollte es auch mit den günstigeren Varianten funktionieren, er muss nur von Deinem OS als serielles Device erkannt werden werden. Das kannst Du mit folgendem Befehl in der Konsole prüfen: ls -al /dev/serial/by-id

Das gibt Dir eine Ausgabe die etwa so aussehen sollte:

lrwxrwxrwx 1 root root  13 Mai 29 09:54 usb-CTI_GmbH_USB-485-Mini_CTRBD29D-if00-port0 -> ../../ttyUSB0

In das Define kommt dann als Schnittstelle:

/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0

anstelle von ttyUSB0...

Da ich verschiedene USB Adapter an meinem System benutze (für Modbus, M-Bus, Enocean, Bluetooth, Z-Wave) bevorzuge ich die Definition über die ID und nicht über die ttyUSBx Angabe, da diese bei Neustart wechseln kann.

Das define der ModbusLine sieht bei mir so aus (die SaltRelaxPro kommuniziert mit 19200, 8 N 1, daher die Schnittstelle mit diesen Parametern öffnen):

define ModBusLine Modbus /dev/serial/by-id/usb-CTI_GmbH_USB-485-Mini_CTRBD29D-if00-port0@19200,8,N,1

Wenn die ModbusLine den Status open hat, kannst Du Deine Steuerung als ModbusAttr definieren. DieSaltRelaxPro hat die ModbusAdresse 1 und soll alle 10 Sekundengepollt werden:

define NaturallySalt ModbusAttr 1 10


Gruss Jan

JF Mennedy

Anbei noch das Foto von den benutzten Pins...

JoeALLb

Danke für das Photo, hatte es tatsächlich falsch angeschlossen.
Hast Du auch weitere dinge versucht wie das schalten der relais oder das schalten einer vario-pumpe oder der UV Anlage?

Leider hab ich von Modbus so gar keinen Plan....

Mit diesem Dokument hier stimmt a nichts überein, oder? (Wurde an anderer Stelle verlinkt)
https://downloads.vodnici.net/uploads/wpforo/attachments/69/171-Modbus-registers.pdf

sG Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Noch eine Nachfrage: Weißt du, was darüber der 4-20mA stecker macht?
Und weißt du welcher Typ Temeratursendor auf dem Board passt? Der originale ist dieses Jahr nicht mehr lieferbar....
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Hallo,

doch das Dokument ist in Ordnung, Ich habe mir da die Register herausgeholt. Sie müssen allerdings von hex nach dezimal umgerechnet werden (Bsp. Register 0x0106 MBF_MEASURE_TEMPERATURE ist in FHEM obj-h00262-reading). Es fehlt leider die Registeradresse zum schalten der 3 Stufen der Pumpe, aber das Relais zum ein und ausschalten ist verfügbar.

UV habe ich nicht, kannst Du aber bestimmt an eins der freien Relais anschließen, ebenso wie einen Kontakt für eine Heizung. Die Pumpe darf auf keinen Fall direkt an die SR Pro angeschlossen werden, sondern an ein Relais bzw. Schütz. Wofür der 4-20mA Anschluss ist, kann ich Dir leider nicht sagen... Auch nicht für die Temperatur Sonde, aber die gibt es bei verschiedenen Online-Händlern...

Das ist meine derzeitige Konfig, mit der ich RX-Sollwert, pH-Sollwert und Pumpe schalten kann und auch die aktuellen Werte von RX, pH auslese

defmod NaturallySalt ModbusAttr 1 10
attr NaturallySalt userattr dev-h-defPoll dev-h-write obj-h00257-expr obj-h00257-reading obj-h00258-expr obj-h00258-reading obj-h00259-expr obj-h00259-reading obj-h00262-expr obj-h00262-reading obj-h01041-allowWrite obj-h01041-expr obj-h01041-hint obj-h01041-max obj-h01041-min obj-h01041-reading obj-h01041-set obj-h01043-allowWrite obj-h01043-expr obj-h01043-hint obj-h01043-max obj-h01043-min obj-h01043-reading obj-h01043-set obj-h01057-expr obj-h01057-reading obj-h01068-allowWrite obj-h01068-expr obj-h01068-hint obj-h01068-max obj-h01068-min obj-h01068-reading obj-h01068-set obj-h01282-allowWrite obj-h01282-expr obj-h01282-hint obj-h01282-max obj-h01282-min obj-h01282-reading obj-h01282-set obj-h01282-setexpr obj-h01284-allowWrite obj-h01284-expr obj-h01284-hint obj-h01284-max obj-h01284-min obj-h01284-reading obj-h01284-set obj-h01284-setexpr obj-h01288-allowWrite obj-h01288-expr obj-h01288-hint obj-h01288-max obj-h01288-min obj-h01288-reading obj-h01288-set
attr NaturallySalt DbLogExclude .*
attr NaturallySalt DbLogInclude RX,Temperatur,pH
attr NaturallySalt IODev ModBusLine2
attr NaturallySalt alias NaturallySalt
attr NaturallySalt dev-h-defPoll 10
attr NaturallySalt dev-h-write 16
attr NaturallySalt disable 0
attr NaturallySalt group Pool
attr NaturallySalt icon virtualbox-alt
attr NaturallySalt obj-h00257-expr $val * 0.1
attr NaturallySalt obj-h00257-reading Hydro
attr NaturallySalt obj-h00258-expr $val * 0.01
attr NaturallySalt obj-h00258-reading pH
attr NaturallySalt obj-h00259-expr $val * 1
attr NaturallySalt obj-h00259-reading RX
attr NaturallySalt obj-h00262-expr $val * 0.1
attr NaturallySalt obj-h00262-reading Temperatur
attr NaturallySalt obj-h00263-reading pH-Status
attr NaturallySalt obj-h00264-reading RX-Status
attr NaturallySalt obj-h01041-allowWrite 1
attr NaturallySalt obj-h01041-expr $val * 1
attr NaturallySalt obj-h01041-hint 0,1,2,3,4,5,6,7
attr NaturallySalt obj-h01041-max 7
attr NaturallySalt obj-h01041-min 0
attr NaturallySalt obj-h01041-reading FiltrationsModus
attr NaturallySalt obj-h01041-set 1
attr NaturallySalt obj-h01043-allowWrite 1
attr NaturallySalt obj-h01043-expr $val * 1
attr NaturallySalt obj-h01043-hint 0,1
attr NaturallySalt obj-h01043-max 1
attr NaturallySalt obj-h01043-min 0
attr NaturallySalt obj-h01043-reading FiltrationsSchalterMan
attr NaturallySalt obj-h01043-set 1
attr NaturallySalt obj-h01057-expr $val * 1
attr NaturallySalt obj-h01057-reading FiltrationState
attr NaturallySalt obj-h01068-allowWrite 1
attr NaturallySalt obj-h01068-expr $val * 1
attr NaturallySalt obj-h01068-hint 0,1
attr NaturallySalt obj-h01068-max 1
attr NaturallySalt obj-h01068-min 0
attr NaturallySalt obj-h01068-reading Cover
attr NaturallySalt obj-h01068-set 1
attr NaturallySalt obj-h01282-allowWrite 1
attr NaturallySalt obj-h01282-expr $val * 0.1
attr NaturallySalt obj-h01282-hint 0,10,20,30,40,50,60,70,80,90,100
attr NaturallySalt obj-h01282-max 100
attr NaturallySalt obj-h01282-min 0
attr NaturallySalt obj-h01282-reading HydroSollwert
attr NaturallySalt obj-h01282-set 1
attr NaturallySalt obj-h01282-setexpr $val * 10
attr NaturallySalt obj-h01284-allowWrite 1
attr NaturallySalt obj-h01284-expr $val * 0.01
attr NaturallySalt obj-h01284-hint 6.8,6.9,7.0,7.1,7.2,7.4,7.5,7.6
attr NaturallySalt obj-h01284-max 7.6
attr NaturallySalt obj-h01284-min 6.8
attr NaturallySalt obj-h01284-reading phSollwert
attr NaturallySalt obj-h01284-set 1
attr NaturallySalt obj-h01284-setexpr $val * 100
attr NaturallySalt obj-h01288-allowWrite 1
attr NaturallySalt obj-h01288-expr $val * 1
attr NaturallySalt obj-h01288-hint 400,450,500,550,600,650
attr NaturallySalt obj-h01288-max 700
attr NaturallySalt obj-h01288-min 300
attr NaturallySalt obj-h01288-reading rxSollwert
attr NaturallySalt obj-h01288-set 1
attr NaturallySalt realRoom Schwimmbad
attr NaturallySalt room 00_Haus,11_Garten,12_Schwimmbad,35_Keller,73_GoogleHome
attr NaturallySalt stateFormat {sprintf("Temp: %.1f °C PH: %.2f Redox: %.0f Elektrolyse: %.0f", ReadingsNum($name,'Temperatur',0),ReadingsNum($name,'pH',0),ReadingsNum($name,'RX',0),ReadingsNum($name,'Hydro',0)  )}
attr NaturallySalt userReadings temperature { ReadingsNum($name,"Temperatur",0) }, \
state { ReadingsVal($name,"FiltrationState",0) }
attr NaturallySalt webCmd FiltrationsModus:FiltrationsSchalterMan:phSollwert:rxSollwert:HydroSollwert
attr NaturallySalt webCmdLabel FiltrationsModus:FiltrationsSchalterMan:phSollwert:rxSollwert:HydroSollwert


Die Stufe der Pumpe schalte ich über ein HTTPMOD Device (welches auch die Werte von der SR Pro abholt):

defmod NaturallySaltWeb HTTPMOD http://naturally-salt-poolaccess.de/de/pool/getmainvalues?id=7440 60
attr NaturallySaltWeb userattr reading100JSON reading100Name reading101JSON reading101Name reading102JSON reading102Name reading103JSON reading103Name reading104JSON reading104Name reading105JSON reading105Name reading106JSON reading106Name reading107JSON reading107Name reading108JSON reading108Name reading109JSON reading109Name reading110JSON reading110Name reading111JSON reading111Name reading112JSON reading112Name reading113JSON reading113Name reading114JSON reading114Name reading115JSON reading115Name reading116JSON reading116Name reading117JSON reading117Name reading118JSON reading118Name reading119JSON reading119Name reading120JSON reading120Name reading121JSON reading121Name reading122JSON reading122Name reading123JSON reading123Name reading124JSON reading124Name reading125JSON reading125Name reading126JSON reading126Name reading127JSON reading127Name reading128JSON reading128Name reading129JSON reading129Name reading130JSON reading130Name reading131JSON reading131Name reading132JSON reading132Name set01Data set01Hint set01Name set01URL set02Data set02Hint set02Name set02URL set03Data set03Hint set03Name set03URL set04Data set04Hint set04Name set04URL set05Data set05Hint set05Max set05Min set05Name set05URL set06Data set06Hint set06Max set06Min set06Name set06URL set07Data set07Hint set07Max set07Min set07Name set07URL set08Data set08Hint set08Max set08Min set08Name set08URL setHeader1 setHeader2 sid01Data sid01URL
attr NaturallySaltWeb DbLogExclude .*
attr NaturallySaltWeb alias NaturallySalt
attr NaturallySaltWeb enableControlSet 1
attr NaturallySaltWeb enableCookies 1
attr NaturallySaltWeb enableXPath 1
attr NaturallySaltWeb enforceGoodReadingNames 0
attr NaturallySaltWeb extractAllJSON 1
attr NaturallySaltWeb gassistantName Schwimmbad
attr NaturallySaltWeb genericDeviceType thermometer
attr NaturallySaltWeb group Pool
attr NaturallySaltWeb handleRedirects 1
attr NaturallySaltWeb icon virtualbox-alt
attr NaturallySaltWeb reAuthRegex id="pass"|data-validation-engine
attr NaturallySaltWeb reading100JSON RX_status_current
attr NaturallySaltWeb reading100Name RX_status_current
attr NaturallySaltWeb reading101JSON CL_status_hidro
attr NaturallySaltWeb reading101Name CL_status_hidro
attr NaturallySaltWeb reading102JSON CL
attr NaturallySaltWeb reading102Name CL
attr NaturallySaltWeb reading103JSON PH_status_hi_value
attr NaturallySaltWeb reading103Name PH_status_hi_value
attr NaturallySaltWeb reading104JSON RXColor_hex
attr NaturallySaltWeb reading104Name RXColor_hex
attr NaturallySaltWeb reading105JSON CLColor_class
attr NaturallySaltWeb reading105Name CLColor_class
attr NaturallySaltWeb reading106JSON CL1
attr NaturallySaltWeb reading106Name CL1
attr NaturallySaltWeb reading107JSON RXColor_class
attr NaturallySaltWeb reading107Name RXColor_class
attr NaturallySaltWeb reading108JSON temp
attr NaturallySaltWeb reading108Name temp
attr NaturallySaltWeb reading109JSON PH
attr NaturallySaltWeb reading109Name PH
attr NaturallySaltWeb reading110JSON CLColor_hex
attr NaturallySaltWeb reading110Name CLColor_hex
attr NaturallySaltWeb reading111JSON PH_status_type
attr NaturallySaltWeb reading111Name PH_status_type
attr NaturallySaltWeb reading112JSON RX1
attr NaturallySaltWeb reading112Name RX1
attr NaturallySaltWeb reading113JSON CL_status_current
attr NaturallySaltWeb reading113Name CL_status_current
attr NaturallySaltWeb reading114JSON RX_status_hidro
attr NaturallySaltWeb reading114Name RX_status_hidro
attr NaturallySaltWeb reading115JSON lightStat_status_type
attr NaturallySaltWeb reading115Name lightStat_status_type
attr NaturallySaltWeb reading116JSON RX
attr NaturallySaltWeb reading116Name RX
attr NaturallySaltWeb reading117JSON CD1
attr NaturallySaltWeb reading117Name CD1
attr NaturallySaltWeb reading118JSON lightStat_status_status
attr NaturallySaltWeb reading118Name lightStat_status_status
attr NaturallySaltWeb reading119JSON CDColor_class
attr NaturallySaltWeb reading119Name CDColor_class
attr NaturallySaltWeb reading120JSON local_time
attr NaturallySaltWeb reading120Name local_time
attr NaturallySaltWeb reading121JSON PH_status_color_class
attr NaturallySaltWeb reading121Name PH_status_color_class
attr NaturallySaltWeb reading122JSON PH_status_alarm
attr NaturallySaltWeb reading122Name PH_status_alarm
attr NaturallySaltWeb reading123JSON CD
attr NaturallySaltWeb reading123Name CD
attr NaturallySaltWeb reading124JSON filtration_time_remaining
attr NaturallySaltWeb reading124Name filtration_time_remaining
attr NaturallySaltWeb reading125JSON filtration_stat
attr NaturallySaltWeb reading125Name filtration_stat
attr NaturallySaltWeb reading126JSON CL_status_status
attr NaturallySaltWeb reading126Name CL_status_status
attr NaturallySaltWeb reading127JSON RX_status_status
attr NaturallySaltWeb reading127Name RX_status_status
attr NaturallySaltWeb reading128JSON PH_status_status
attr NaturallySaltWeb reading128Name PH_status_status
attr NaturallySaltWeb reading129JSON PH_status_color_hex
attr NaturallySaltWeb reading129Name PH_status_color_hex
attr NaturallySaltWeb reading130JSON CD_status
attr NaturallySaltWeb reading130Name CD_status
attr NaturallySaltWeb reading131JSON CDColor_hex
attr NaturallySaltWeb reading131Name CDColor_hex
attr NaturallySaltWeb reading132JSON filtration_mode
attr NaturallySaltWeb reading132Name filtration_mode
attr NaturallySaltWeb realRoom Schwimmbad
attr NaturallySaltWeb room 11_Garten,35_Keller
attr NaturallySaltWeb set01Data data={"mode": $val}
attr NaturallySaltWeb set01Hint 0,1
attr NaturallySaltWeb set01Name Pumpe
attr NaturallySaltWeb set01URL http://naturally-salt-poolaccess.de/de/pool/setfiltrationvalues
attr NaturallySaltWeb set02Data data={"mode": 1 , "vel": $val}
attr NaturallySaltWeb set02Hint 0,1,2
attr NaturallySaltWeb set02Name Pumpenstufe
attr NaturallySaltWeb set02URL http://naturally-salt-poolaccess.de/de/pool/setfiltrationvalues
attr NaturallySaltWeb set03Data data=%7B%22type%22%3A0%2C%22mode%22%3A1%2C%22vel%22%3A$val%7D&int=%5B%5D&vel=%5B%5D
attr NaturallySaltWeb set03Hint 1
attr NaturallySaltWeb set03Name PumpeStufe2
attr NaturallySaltWeb set03URL http://naturally-salt-poolaccess.de/de/pool/setfiltrationvalues
attr NaturallySaltWeb set04Data data=%7B%22type%22%3A0%2C%22mode%22%3A1%2C%22vel%22%3A$val%7D&int=%5B%5D&vel=%5B%5D
attr NaturallySaltWeb set04Hint 2
attr NaturallySaltWeb set04Name PumpeStufe3
attr NaturallySaltWeb set04URL http://naturally-salt-poolaccess.de/de/pool/setfiltrationvalues
attr NaturallySaltWeb set05Data type=0&status=$val&freq=86400&start=20%3A00&end=23%3A00
attr NaturallySaltWeb set05Hint 0,1
attr NaturallySaltWeb set05Max 1
attr NaturallySaltWeb set05Min 0
attr NaturallySaltWeb set05Name Licht
attr NaturallySaltWeb set05URL http://naturally-salt-poolaccess.de/de/pool/setlightvalues
attr NaturallySaltWeb set06Data id=7440&acid=$val&base=NaN&type=ACID
attr NaturallySaltWeb set06Hint 700,710,720,730,740,750
attr NaturallySaltWeb set06Max 750
attr NaturallySaltWeb set06Min 700
attr NaturallySaltWeb set06Name SollwertPH
attr NaturallySaltWeb set06URL http://naturally-salt-poolaccess.de/de/pool/setphvalue
attr NaturallySaltWeb set07Data id=7440&val=$val
attr NaturallySaltWeb set07Hint 500,550,600,650,700,750,800
attr NaturallySaltWeb set07Max 800
attr NaturallySaltWeb set07Min 500
attr NaturallySaltWeb set07Name SollwertRedox
attr NaturallySaltWeb set07URL http://naturally-salt-poolaccess.de/de/pool/setrxvalue
attr NaturallySaltWeb set08Data id=7440&level=$val&cover=0&reduction=20&cloration=0&hidroControl=cl&disable=0&hidroTemp=0&hidroTempValue=5
attr NaturallySaltWeb set08Hint 0,10,20,30,40,50,60,70,80,90,95,100
attr NaturallySaltWeb set08Max 100
attr NaturallySaltWeb set08Min 0
attr NaturallySaltWeb set08Name SollwertElektrolyse
attr NaturallySaltWeb set08URL http://naturally-salt-poolaccess.de/de/pool/sethidrovalue
attr NaturallySaltWeb setHeader1 Content-Type: application/x-www-form-urlencoded;; charset=UTF-8
attr NaturallySaltWeb setHeader2 User-Agent: Mozilla/5.0 (Windows NT 10.0;; Win64;; x64)
attr NaturallySaltWeb sid01Data user=deine@email.de&pass=DeinPasswort&remember_password=1&entrar=Eingabe
attr NaturallySaltWeb sid01URL http://naturally-salt-poolaccess.de/de/login/login
attr NaturallySaltWeb stateFormat {sprintf("Temp: %.1f °C PH: %.1f Redox: %.0f Elektrolyse: %.0f", ReadingsNum($name,'temp',0),ReadingsNum($name,'PH',0),ReadingsNum($name,'RX',0),ReadingsNum($name,'RX_status_current',0)  )}
attr NaturallySaltWeb userReadings temperature { ReadingsNum($name,"Temperatur",0) }, \
state { ReadingsVal($name,"FiltrationState",0) }
attr NaturallySaltWeb verbose 0
attr NaturallySaltWeb webCmd SollwertPH:SollwertRedox:SollwertElektrolyse:Pumpe:Pumpenstufe
attr NaturallySaltWeb webCmdLabel PH:Redox:Elektrolyse:Pumpe:Stufe


Gruss Jan

JoeALLb

Vielen Dank für die Infos, das ist eine riesen Hilfe!

Nun, WiFi Modul habe ich keines da da draußen eh kein Empfang ist und die Rohre ins Haus fast 40m lang sind.
Aber zumindest kann ich über das Pumpen Relais abgreifen, ob die Pumpe laufen sollte oder nicht. Die Stufe kann ich in der Haussteuerung einstellen, aber wollte die Verantwortung dafür Kerne an die pool Steuerung "abgeben".
Vielleicht muss ich einfach den Status der Klemmen über einen sensor abgreifen.
Die Pumpe selbst hängt an einem Relais, da sie per Luftdruckschalter direkt aus dem Pool heraus in der Geschwindigkeit geregelt werden kann.
Mweist du wie diese Stecker heißen, die du an pin 3 und 4 angebracht hast? Mein Kabel ist noch sehr provisorisch an dem Stecker befestigt.

Danke vielmals, LG Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Ich habe da einfache Jumper Kabel für benutzt, die aus der Steuerung herausgeführt sind und dann auf die Busleitung angeklemmt sind.

JoeALLb

#24
Super, danke.

Habe noch das gefunden:
0x0100
Hidro shock enabled – Chlorine boost activated.

Das sollte ich ja dann auch noch hinzufügen können, oder?

Werde es mal versuchen, doch wie rechne ich dies zu dezimal um?
Wäre das dann 256?

Edit: Scheint nicht zu funktionieren, bekomme immer die 0 als ergebnis
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Ja du kannst alles an Registern auslesen... Wenn Du eine 0 zurück bekommst, dann ist die schockchlorung deaktiviert... Von hex in dez kannst Du ganz einfach mit dem Windows Rechner umrechnen. Den Rechner auf Programmierer umschalten... Ich habe mich gestern noch amüsiert und die bit-maskierten register des Relais Status und ph, RX stati zu implementieren...
defmod NaturallySalt ModbusAttr 1 10
attr NaturallySalt userattr dev-h-defPoll dev-h-write obj-h00257-expr obj-h00257-reading obj-h00258-expr obj-h00258-reading obj-h00259-expr obj-h00259-reading obj-h00260-expr obj-h00260-reading obj-h00261-expr obj-h00261-reading obj-h00262-expr obj-h00262-reading obj-h00263-reading obj-h00263-unpack obj-h00264-reading obj-h00264-unpack obj-h00270-reading obj-h00270-unpack obj-h01041-allowWrite obj-h01041-expr obj-h01041-hint obj-h01041-max obj-h01041-min obj-h01041-reading obj-h01041-set obj-h01043-allowWrite obj-h01043-expr obj-h01043-hint obj-h01043-max obj-h01043-min obj-h01043-reading obj-h01043-set obj-h01057-expr obj-h01057-reading obj-h01068-allowWrite obj-h01068-expr obj-h01068-hint obj-h01068-max obj-h01068-min obj-h01068-reading obj-h01068-set obj-h01282-allowWrite obj-h01282-expr obj-h01282-hint obj-h01282-max obj-h01282-min obj-h01282-reading obj-h01282-set obj-h01282-setexpr obj-h01284-allowWrite obj-h01284-expr obj-h01284-hint obj-h01284-max obj-h01284-min obj-h01284-reading obj-h01284-set obj-h01284-setexpr obj-h01288-allowWrite obj-h01288-expr obj-h01288-hint obj-h01288-max obj-h01288-min obj-h01288-reading obj-h01288-set
attr NaturallySalt DbLogExclude .*
attr NaturallySalt DbLogInclude RX,Temperatur,pH,pH-Minus
attr NaturallySalt IODev ModBusLine2
attr NaturallySalt alias NaturallySalt
attr NaturallySalt dev-h-defPoll 10
attr NaturallySalt dev-h-write 16
attr NaturallySalt disable 0
attr NaturallySalt group Pool
attr NaturallySalt icon virtualbox-alt
attr NaturallySalt obj-h00257-expr $val * 0.1
attr NaturallySalt obj-h00257-reading Hydro
attr NaturallySalt obj-h00258-expr $val * 0.01
attr NaturallySalt obj-h00258-reading pH
attr NaturallySalt obj-h00259-expr $val * 1
attr NaturallySalt obj-h00259-reading RX
attr NaturallySalt obj-h00260-expr $val * 1
attr NaturallySalt obj-h00260-reading Chlor
attr NaturallySalt obj-h00261-expr $val * 1
attr NaturallySalt obj-h00261-reading Conductivity
attr NaturallySalt obj-h00262-expr $val * 0.1
attr NaturallySalt obj-h00262-reading Temperatur
attr NaturallySalt obj-h00263-reading pH-Status
attr NaturallySalt obj-h00264-reading RX-Status
attr NaturallySalt obj-h00270-reading Relais-Status
attr NaturallySalt obj-h01041-allowWrite 1
attr NaturallySalt obj-h01041-expr $val * 1
attr NaturallySalt obj-h01041-hint 0,1,2,3,4,5,6,7
attr NaturallySalt obj-h01041-max 7
attr NaturallySalt obj-h01041-min 0
attr NaturallySalt obj-h01041-reading FiltrationsModus
attr NaturallySalt obj-h01041-set 1
attr NaturallySalt obj-h01043-allowWrite 1
attr NaturallySalt obj-h01043-expr $val * 1
attr NaturallySalt obj-h01043-hint 0,1
attr NaturallySalt obj-h01043-max 1
attr NaturallySalt obj-h01043-min 0
attr NaturallySalt obj-h01043-reading FiltrationsSchalterMan
attr NaturallySalt obj-h01043-set 1
attr NaturallySalt obj-h01057-expr $val * 1
attr NaturallySalt obj-h01057-reading FiltrationState
attr NaturallySalt obj-h01068-allowWrite 1
attr NaturallySalt obj-h01068-expr $val * 1
attr NaturallySalt obj-h01068-hint 0,1
attr NaturallySalt obj-h01068-max 1
attr NaturallySalt obj-h01068-min 0
attr NaturallySalt obj-h01068-reading Cover
attr NaturallySalt obj-h01068-set 1
attr NaturallySalt obj-h01282-allowWrite 1
attr NaturallySalt obj-h01282-expr $val * 0.1
attr NaturallySalt obj-h01282-hint 0,10,20,30,40,50,60,70,80,90,100
attr NaturallySalt obj-h01282-max 100
attr NaturallySalt obj-h01282-min 0
attr NaturallySalt obj-h01282-reading HydroSollwert
attr NaturallySalt obj-h01282-set 1
attr NaturallySalt obj-h01282-setexpr $val * 10
attr NaturallySalt obj-h01284-allowWrite 1
attr NaturallySalt obj-h01284-expr $val * 0.01
attr NaturallySalt obj-h01284-hint 6.8,6.9,7.0,7.1,7.2,7.4,7.5,7.6
attr NaturallySalt obj-h01284-max 7.6
attr NaturallySalt obj-h01284-min 6.8
attr NaturallySalt obj-h01284-reading phSollwert
attr NaturallySalt obj-h01284-set 1
attr NaturallySalt obj-h01284-setexpr $val * 100
attr NaturallySalt obj-h01288-allowWrite 1
attr NaturallySalt obj-h01288-expr $val * 1
attr NaturallySalt obj-h01288-hint 400,450,500,550,600,650
attr NaturallySalt obj-h01288-max 700
attr NaturallySalt obj-h01288-min 300
attr NaturallySalt obj-h01288-reading rxSollwert
attr NaturallySalt obj-h01288-set 1
attr NaturallySalt realRoom Schwimmbad
attr NaturallySalt room 00_Haus,11_Garten,12_Schwimmbad,35_Keller,73_GoogleHome
attr NaturallySalt stateFormat {sprintf("Temp: %.1f °C PH: %.2f Redox: %.0f Elektrolyse: %.0f pH-Minus: %d", ReadingsNum($name,'Temperatur',0),ReadingsNum($name,'pH',0),ReadingsNum($name,'RX',0),ReadingsNum($name,'Hydro',0),ReadingsVal($name,'pH-Minus',0)  )}
attr NaturallySalt userReadings temperature { ReadingsNum($name,"Temperatur",0) }, \
state { ReadingsVal($name,"FiltrationState",0) },\
PH_STATUS { sprintf("%016b",ReadingsVal($name,"pH-Status",0)) },\
RX_STATUS { sprintf("%016b",ReadingsVal($name,"RX-Status",0)) },\
RELAIS_STATUS { sprintf("%016b",ReadingsVal($name,"Relais-Status",0)) },\
pH-Minus { (split //,ReadingsVal($name,"RELAIS_STATUS","0000000000000000"))[15]}\

attr NaturallySalt webCmd FiltrationsModus:FiltrationsSchalterMan:phSollwert:rxSollwert:HydroSollwert
attr NaturallySalt webCmdLabel FiltrationsModus:FiltrationsSchalterMan:phSollwert:rxSollwert:HydroSollwert


Somit weiss ich wie oft und wie lange die PH minus Pumpe gelaufen ist :-)

JoeALLb

Danke vielmals!

Das mit der Schockchlorierung klappt bei mir leider nicht, da wird immer die 0 angezeigt.
Lässt du dein Gerät permanent eingeschaltet?
Ich habe aktuell auch das Problem, dass nach dem einschalten des Gerätes stark negative Werte einmalig gesendet werden. Hast du saß auch? Filtert du das irgendwie?


FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy


JoeALLb

Zur Info: Ich habe einfach PH und RX jeweils mit Min und Max begrenzt,um beim Start die negativen Werte zu verhindern,klappt bestens, seither sehen meine Plots besser aus!

sG Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

#29
Anbei noch veränderte Userreadings. Diese sind gefiltert, lösen also nicht alle bei jedem event aus.
Zusätzlich habe ich eventValues verwendet.
Vielleicht interessierts dich :D

temperature:Temperatur.* { $eventValue },
state:FiltrationState.* { $eventValue },
PH_STATUS:pH-Status.* { sprintf("%016b",$eventValue) },
RX_STATUS:RX-Status.* { sprintf("%016b",$eventValue) },
RELAIS_STATUS:Relais-Status.* { sprintf("%016b",$eventValue) },
pH-Minus:RELAIS_STATUS.* { (split //,$eventValue)[15]}
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

#30
Servus nochmal.
Wenn ich das richtig sehe, steht in RELAIS_STATUS jetzt auch, welche Stufe die Filterpumpe
laufen soll.
Bit 6= schnell, 7 mittel und 8 langsam.


Bekomme es leider dennoch nicht "programmiert", perl ist mir einfach zu fremd.
Versucht habe ich es über

filterSpeed:RELAIS_STATUS.* {
if    (($eventValue & '0000001') == '0000001') {return 1} 
elsif (($eventValue & '00000001')== '00000001') {return 2} 
else { return 0}
},


Der Vorteil ist, dass es schneller geht als die modhttp Variante!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Ja das ist richtig dass in dem register auch die pumpen Stufe angezeigt wird, allerdings ist dieses register nicht beschreibbar :(

JF Mennedy

Du musst die bits anders interpretieren (siehe mein Beitrag in einem anderen thread) :
Zitat
author=JF Mennedy link=topic=75638.msg1075465#msg1075465 date=1596191742]
Also, Selbsthilfe ist der Beste Weg zum Lernen...

Ich habe nun die Dezimalzahl in eine Binärzahl umgewandelt:
PH_STATUS { sprintf("%016b",ReadingsVal($name,"pH-Status",0)) }

Das Ergebnis ist:
PH_STATUS 1110010100000000

Die Bitfolge ist :


bit:     15 14 13 12   11 10 9  8    7  6  5  4    3  2  1  0
binar:   1  1  1  0    0  1  0  1    0  0  0  0    0  0  0  0


Und somit komme ich an die jeweiligen Statusmeldungen aus dem Register :-)

JoeALLb

Zitat von: JF Mennedy am 05 August 2020, 11:02:14
Ja das ist richtig dass in dem register auch die pumpen Stufe angezeigt wird, allerdings ist dieses register nicht beschreibbar :(
Stimmt, aber ich brauche das hier gar nicht beschreibbar. Ich lese das hier nur aus, und sende es weiter per knx. Somit übernimmt bei mir die Elektrolyse Box die grundsteuerung, ich kann es aber jederzeit per knx übersteuern.
Beim manuellen filterstart kann ich auch die Pumpe Geschwindigkeit mit angeben. Ist dieses Feld. Auch nicht schreibbar?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Welches register meinst du? Die beschreibbaren sind alle im 0x04er Bereich...

JoeALLb

Servus,
Das muss ich mir noch genauer ansehen, bin gerade nicht vor Ort.

Mir fällt auf, dass nach einer Stromabschaltung manchmal Werte nicht gespeichert werden.
Weist du zufällig, ob das Setzen dieses Wertes dabei etwas helfen würde?
Oder ist der gar nicht schrkeibbar, weil er eben nicht im 0x04er Bereich sich befindet?

0x02F0
MBF_SAVE_TO_EEPROM

Hast du noch eine Idee, wie ich "erkennen", sprich in einem reading einen Eintrag bekommen kann, wenn das Gerät strom los ist?
Im Log von FHEM finde ich Reading timeouts, aber
I'm Modbus Modul selbst scheint es dafür nichts zu geben.

Sg Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Ist es bei dir auch so? Wenn ich die Hydrolyse von 40% auf 60% erhöhe, bleibt die tatsächliche Stufe bis zum Restart des Gerätes bei den 40%.
Ob das auch mit dem Speichern des Wertes zusammenhängt? Wenn ich am Display das verändere, wird der neue Wert auch erst nach dem OK übernommen.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

ZitatMir fällt auf, dass nach einer Stromabschaltung manchmal Werte nicht gespeichert werden.
Weist du zufällig, ob das Setzen dieses Wertes dabei etwas helfen würde?
Oder ist der gar nicht schrkeibbar, weil er eben nicht im 0x04er Bereich sich befindet?

Die Sollwerte sind im 0x05er Bereich (USER). Laut Doku muss ein Schreiben ins EEPROM durchgeführt werden um die Werte dauerhaft zu speichern... Aber beachte den hinweis aus der Doku dass das EEPROM nicht unendlich viele Schreibzyklen hat...

ZitatHast du noch eine Idee, wie ich "erkennen", sprich in einem reading einen Eintrag bekommen kann, wenn das Gerät strom los ist?
Im Log von FHEM finde ich Reading timeouts, aber
I'm Modbus Modul selbst scheint es dafür nichts zu geben.

Was steht denn im State, wenn die Anlage ausgeschaltet ist?

ZitatIst es bei dir auch so? Wenn ich die Hydrolyse von 40% auf 60% erhöhe, bleibt die tatsächliche Stufe bis zum Restart des Gerätes bei den 40%.
Ob das auch mit dem Speichern des Wertes zusammenhängt? Wenn ich am Display das verändere, wird der neue Wert auch erst nach dem OK übernommen.

Ich lasse den Sollwert der Hydrolyse eigentlich immer auf 100% stehen... Aber wenn ich ihn verändere( 0x0502 MBF_PAR_HIDRO in fhem obj-h01282-reading
HydroSollwert) wird es auf der SR-Pro übernommen...

Gruss Jan

JoeALLb

#38
Zitat von: JF Mennedy am 07 August 2020, 13:51:31
Aber beachte den hinweis aus der Doku dass das EEPROM nicht unendlich viele Schreibzyklen hat...
Nun, ich brauche maximal 100 im Jahr.

Zitat von: JF Mennedy am 07 August 2020, 13:51:31
Was steht denn im State, wenn die Anlage ausgeschaltet ist?

connected.

Zitat von: JF Mennedy am 07 August 2020, 13:51:31
Aber wenn ich ihn verändere( 0x0502 MBF_PAR_HIDRO in fhem obj-h01282-reading
HydroSollwert) wird es auf der SR-Pro übernommen...
Übernommen, sprich angezeigt wird mir auch der neue Wert. Aber angesteuert wird noch der alte!
Ich habe eine recht große Anlage und bei 100% entstehen bei mir in der Verrohrung recht viele Blasen, wenn die Pumpe nicht auf der höchsten Stufe läuft. (Ich habe Glasrohre, sehe die Blasen also).
Nun möchte ich aber tagsüber nur 10-15m3/h  permanernt umwälzen, daher möchte ich dazu den Sollwert, bei nicht allzugroßer Differenz reduzieren.
50% scheint hier ein recht guter Wert zu sein.

sG Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Fosso

Zitat von: JoeALLb am 07 August 2020, 13:06:36
Ist es bei dir auch so? Wenn ich die Hydrolyse von 40% auf 60% erhöhe, bleibt die tatsächliche Stufe bis zum Restart des Gerätes bei den 40%.
Ob das auch mit dem Speichern des Wertes zusammenhängt? Wenn ich am Display das verändere, wird der neue Wert auch erst nach dem OK übernommen.

Hallo Zusammen,
dafür gibt es einen undokumentierten Befehl MBF_EEPROM_RESTART, welchen mir ein Poolmonteur freundlicherweise genannt hat...
1. den neuen Sollwert setzen z.B.: 0x0508 (dez. 1288) MBF_PAR_RX1 auf 700 (mV)
2. im EEPROM speichern: 0x02F0 (dez. 752) MBF_SAVE_TO_EEPROM auf 1 setzen
3. EEPROM Restart: 0x02F5 (dez. 757) MBF_EEPROM_RESTART auf 1 setzen

nach 3. wird der neue Sollwert, so als würde man am Display OK drücken, unmittelbar aktiviert :-)
Grüße von Fosso

JoeALLb

Juhuu, das funktioniert perfekt!
Man muss lediglich nach dem Setzen des neuen Sollwertes "etwas" warten...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Kann man eigentlich den Boost starten?
Wenn nein, lt. Anleitung sollte die RX-Controlle deaktiviert werden während einem Boost.

Wenn ich also den RX-Soll auf 999 stelle und 100% Leistung einstelle, kann ich ja einen Boost "simulieren".
KAnn ich dann zumindest diese RX-Kontrolle deaktivieren, oder macht das keinen Sinn?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Zitat von: JF Mennedy am 05 August 2020, 12:05:40
Welches register meinst du? Die beschreibbaren sind alle im 0x04er Bereich...

Servus! Sorry der Nachfrage, hast Du das mal in iobroker versucht?
Kann mir dabei jemand auf die Sprünge helfen? Wo muss ich dort die Adressen angeben?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JF Mennedy

Im iobroker sollte es etwas einfacher gehen, da kannst Du die Registeradressen im Adapter eintragen.. Schau Dir mal von Matthias Kleine das Tutorial für die Integration von einem Wechselrichter über Modbus an... Da ist das Modul ganz gut beschrieben... https://haus-automatisierung.com/hardware/iobroker/2020/12/18/iobroker-sma-wechselrichter-modbus.html

Gruss Jan

JoeALLb

Hallo
Zitat von: JF Mennedy am 08 Mai 2021, 22:51:03
Im iobroker sollte es etwas einfacher gehen

Hallo Jan, DANKE!!
Das Lesen der 100er Werte klappt damit mittlerweile ganz gut, das schreiben jedoch noch nicht.

Auch 1282_HydroSollwert kann ich damit nicht lesen. Hast Du dazu viell. noch einen Tip? Ich will die Werte damit auf einem entfernten Standort
erhalten und per mqtt auf mein FHEM senden. 
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Eduard76

Hallo Zusammen,

ich bin FHEM-Neuling und auch ModBus ist neu für mich.
Nun habe ich eine Oxilife-Poolsteuerung, welche mit den genannten Steuerungen fast baugleich ist.
Leider komme ich beim Auslesen des ModBus nicht weiter und bräuchte etwas Hilfe in der Art: "Hast du das und das schon gemacht?"

Aktueller Stand:
- PI mit FHEM + "Raspberry Pi - USB-RS485-Schnittstelle, CH340C"
- Anschlüsse A und B schonmal verdreht
- "ModBusLine" nach o.g. Code angelegt
- "Pool" nach o.g. Code angelegt

Folgend ein paar Ausschnitte aus FHEM.
Was habe ich vergessen zu konfigurieren???

Vielen Dank schon mal.

Event Log
2021.05.13 12:18:24 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 01041, len 2 for device Pool reading FiltrationsModus (getUpdate), queued 20.30 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:26 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 00262, len 2 for device Pool reading Temperatur (getUpdate), queued 17.31 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:28 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 01043, len 2 for device Pool reading FiltrationsSchalterMan (getUpdate), queued 19.31 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:30 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 00258, len 2 for device Pool reading pH (getUpdate), queued 21.31 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:32 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 00262, len 2 for device Pool reading Temperatur (getUpdate), queued 18.31 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:34 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 01043, len 2 for device Pool reading FiltrationsSchalterMan (getUpdate), queued 20.31 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:36 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 01043, len 2 for device Pool reading FiltrationsSchalterMan (getUpdate), queued 17.32 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:38 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 00258, len 2 for device Pool reading pH (getUpdate), queued 19.32 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:40 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 00259, len 2 for device Pool reading RX (getUpdate), queued 21.32 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:42 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 01041, len 2 for device Pool reading FiltrationsModus (getUpdate), queued 18.32 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:44 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 00259, len 2 for device Pool reading RX (getUpdate), queued 20.33 secs ago, sent 2.00 secs ago, Current read buffer: 00
2021.05.13 12:18:46 3 : ModBusLine: Timeout waiting for a modbus response request: id 1, fCode 3, type h, adr 00262, len 2 for device Pool reading Temperatur (getUpdate), queued 17.33 secs ago, sent 2.00 secs ago, Current read buffer: 00


Listing ModBusLine
Internals:
   DEF        /dev/ttyUSB0@19200,8,N,1
   DeviceName /dev/ttyUSB0@19200,8,N,1
   EXPECT     response
   FD         4
   FUUID      609ce06a-f33f-898f-a049-1ade2abadc1bfffd
   LASTOPEN   1620896340.5088
   MODE       master
   NAME       ModBusLine
   NR         15
   NTFY_ORDER 50-ModBusLine
   PARTIAL   
   PROTOCOL   RTU
   STATE      opened
   SerialConn 1
   TYPE       Modbus
   devioLoglevel 3
   nextOpenDelay 60
   nextQueueRun 1620900829.75217
   nextTimeout 1620900829.74888
   FRAME:
   QUEUE:
     HASH(0x13cc5c0)
     HASH(0x14ab528)
     HASH(0x14392e0)
     HASH(0x1438848)
     HASH(0x14b3c40)
     HASH(0x13cd2c8)
     HASH(0x14cb028)
     HASH(0x13cd418)
     HASH(0x13c4cf8)
     HASH(0x14cb118)
     HASH(0x14b0fb8)
     HASH(0x14ca758)
     HASH(0x14b12b8)
     HASH(0x14ca7a0)
     HASH(0x14cab90)
     HASH(0x14caab8)
     HASH(0x14b1600)
     HASH(0x14cacf8)
     HASH(0x13c4b30)
     HASH(0x14abed0)
   READ:
     BUFFER     
   READINGS:
     2021-05-13 10:59:00   state           opened
   REMEMBER:
     lid        1
     lname      ModBusLine
     lrecv      1620900827.76168
     lsend      1620900827.75106
   REQUEST:
     ADR        01043
     DBGINFO    getUpdate
     FCODE      3
     FRAME      4�
     LEN        2
     MODBUSID   1
     OPERATION  read
     READING    FiltrationsSchalterMan
     SENT       1620900827.74888
     TIMESTAMP  1620900808.67083
     TYPE       h
     VALUES     0
     DEVHASH:
       DEF        1 5
       FUUID      609ce226-f33f-898f-c813-ba2b98c0c169d885
       INTERVAL   5
       IODev      ModBusLine
       LeadingZeros 1
       MODBUSID   1
       MODE       master
       MODULEVERSION Modbus 4.1.5 - 17.9.2019
       NAME       Pool
       NOTIFYDEV  global
       NR         16
       NTFY_ORDER 50-Pool
       PROTOCOL   RTU
       STATE      opened
       TRIGGERTIME 1620900833.6699
       TRIGGERTIME_FMT 2021-05-13 12:13:53
       TYPE       ModbusAttr
       lastUpdate 1620900828.6699
       FRAME:
       READ:
       READINGS:
         2021-05-13 10:59:00   state           opened
       REMEMBER:
         lsend      1620900827.75106
       lastRead:
   defptr:
     Pool       1
Attributes:
   room       Heizungskeller


Listing Pool
Internals:
   DEF        1 5
   FUUID      609ce226-f33f-898f-c813-ba2b98c0c169d885
   INTERVAL   5
   IODev      ModBusLine
   LeadingZeros 1
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.1.5 - 17.9.2019
   NAME       Pool
   NOTIFYDEV  global
   NR         16
   NTFY_ORDER 50-Pool
   PROTOCOL   RTU
   STATE      opened
   TRIGGERTIME 1620900903.68604
   TRIGGERTIME_FMT 2021-05-13 12:15:03
   TYPE       ModbusAttr
   lastUpdate 1620900898.68604
   FRAME:
   READ:
   READINGS:
     2021-05-13 10:59:00   state           opened
   REMEMBER:
     lsend      1620900897.82262
   lastRead:
Attributes:
   dev-h-defFormat %.2f
   dev-h-defLen 2
   dev-h-defPoll 1
   obj-h00258-expr $val * 0.01
   obj-h00258-reading pH
   obj-h00259-expr $val * 1
   obj-h00259-reading RX
   obj-h00262-expr $val * 0.1
   obj-h00262-reading Temperatur
   obj-h01041-allowWrite 1
   obj-h01041-expr $val * 1
   obj-h01041-hint 0,1,2,3,4,5,6,7
   obj-h01041-max 7
   obj-h01041-min 0
   obj-h01041-reading FiltrationsModus
   obj-h01041-set 1
   obj-h01043-allowWrite 1
   obj-h01043-expr $val * 1
   obj-h01043-hint 0,1
   obj-h01043-max 1
   obj-h01043-min 0
   obj-h01043-reading FiltrationsSchalterMan
   obj-h01043-set 1
   room       Heizungskeller
   userattr   dev-h-defFormat dev-h-defLen dev-h-defPoll obj-h00258-expr obj-h00258-reading obj-h00259-expr obj-h00259-reading obj-h00262-expr obj-h00262-reading obj-h01041-allowWrite obj-h01041-expr obj-h01041-hint obj-h01041-max obj-h01041-min obj-h01041-reading obj-h01041-set obj-h01043-allowWrite obj-h01043-expr obj-h01043-hint obj-h01043-max obj-h01043-min obj-h01043-reading obj-h01043-set



Eduard76

Hallo,

man muss nur seine Überlegungen teilen und kommt dann selber drauf - naja so ähnlich:

Die Übertragung hatte schon gehakt - das lag daran dass ich einen 5er Stecker habe und der 2. PIN nicht vorhanden ist.
Deshalb war bei meiner Rechnung PIN 3 und 4 ganz unten - jetzt funktioniert es.  :)

Eduard76

Hallo Zusammen,

ich bin mittlerweile gut weitergekommen mit o.g. Thema.
Vielen Dank für die Beschreibungen.

Jetzt versuche ich einen "Salzalarm" zu realisieren.
Da ich aber keine Konduktivitätssonde habe, hätte ich gerne einfach nur den Alarm ausgelesen, der bei "Salzmangel" erscheint.
-> Weiß jemand wie das gehen könnte?

In dem Dokument mit den Register haben ich nur Folgendes gefunden:
"MBF_HIDRO_VOLTAGE - Dieses Register beinhaltet die Belastung der Hydrolysezelle.
Dieses Register ermöglicht zusammen mit dem von MBF_HIDRO_CURRENT die Extrapolation des Salzgehalts des Wassers."
-> Oder weiß jemand wie man das berechnen könnte?

Vielen Dank für ein paar Ideen oder Verweise.

Niko1987

Zitat von: JF Mennedy am 27 Mai 2020, 08:31:44
Ich habe beide Optionen redox mit ph minus, wobei die ph Messung nicht funktioniert... Habe die Anlage seit letztem Jahr und Reklamation läuft... Das wifi Modul verbindet dich auch seit ein paar Tagen nicht mehr mit dem Portal, so dass ich jetzt nach einer anderen Lösung gesucht habe... Normalerweise schalte ich über die SR-Plus auch die Stufe der Pumpe... Habe ne badu Eco mit integriertem frequenzumformer... Die Anbindung vom web Portal hatte ich bisher mit httpmod realisiert, aber wenn das Portal nicht läuft geht halt auch in fhem nix [emoji35][emoji35][emoji35]

Gesendet von meinem VOG-L29 mit Tapatalk

Hallo,
hast du dein Wifi-Modul wieder zum laufen bekommen?
Arbeite zufällig bei einem Pool-Händler.
Hayward hat die Server-IP geändert, daher sind die Geräte alle offline...

Bei Fehlern der pH-Messung liegt es meistens am pH-Chip...

Gruß

JF Mennedy

Hi.. Ja das wifi Modul könnte wieder laufen, wenn ich es wollte.. Die Server IP Adresse wurde geändert, ohne die Kunden, die mir ihrer Email Adresse im Portal registriert sind, darüber zu informieren.. Ich habe mich allerdings so darüber geärgert, daß es meinen Ehrgeiz umso mehr angeregt hat, das Gerät ohne Cloud und wifi adapter in mein System zu integrieren... Hätte ich das vorher gewusst, hätte ich 300euro für das dämliche wifi Modul gespart... Meine letzte ph sonde habe ich bei Amazon für ca 50 Euro inkl. Versand bestellt und sie funktioniert einwandfrei... Seitdem läuft die Anlage wie gewünscht und störungsfrei und das Wasser ist glasklar und hoffentlich auch nächste Woche warm 🤪🤪🤪

JF Mennedy

Das war übrigens das Dokument, welches mir nach mehrfacher Nachfrage zur Verfügung gestellt wurde...

Niko1987

Es gibt übrigens auch die Möglichkeit, die Steuerungen (Hidrolife, Aquascenic, Oxilife, Bionet, Hidroniser, UVScenic, Neosal, Station, Brilix, Bayrol, Salt One, Kripsol KLX usw.) mit einem TTL UART to RS485 und einem Wemos per Tasmota auszulesen und zu steuern.

Das scheint eine recht unkomplizierte Lösung zu sein wenn man keine Kabel ziehen will oder kann.

Hier der GitHub Link: https://tasmota.github.io/docs/NeoPool/

JF Mennedy

Zitat von: JF Mennedy am 05 August 2020, 12:05:40
Welches register meinst du? Die beschreibbaren sind alle im 0x04er Bereich...

So, ich habe mich gestern nacht nochmals mit der Thematik Pumpendrehzahl befasst und habe es eeendlich geschafft 😃😃😃 Für die Pumpendrehzahl muss das Register 0x050f mit 1 für langsam 17 für mittel und 33 für schnell beschrieben werden...

Gruss Jan

Blaky1613

Hallo,

weis jemand mit welchen Register ich die Relais manuell schalten und den Status der jeweiligen lesen kann.
Möchte gerne das Licht Relais 3 schalten.

Gruß Daniel

JF Mennedy

#54
Hallo Daniel,

das Schalten der Relais funktioniert, ist nur etwas aufwendiger. Zunächst brauchst Du folgende Attribute:

attr NaturallySalt obj-h00649-allowWrite 1
attr NaturallySalt obj-h00649-expr $val * 1
attr NaturallySalt obj-h00649-hint 0,1
attr NaturallySalt obj-h00649-max 1
attr NaturallySalt obj-h00649-min 0
attr NaturallySalt obj-h00649-reading MBF_SET_MANUAL_CTRL
attr NaturallySalt obj-h00649-set 1
attr NaturallySalt obj-h00757-allowWrite 1
attr NaturallySalt obj-h00757-expr $val * 1
attr NaturallySalt obj-h00757-hint 0,1
attr NaturallySalt obj-h00757-max 1
attr NaturallySalt obj-h00757-min 0
attr NaturallySalt obj-h00757-reading MBF_EXEC
attr NaturallySalt obj-h00757-set 1
attr NaturallySalt obj-h01136-allowWrite 1
attr NaturallySalt obj-h01136-expr $val * 1
attr NaturallySalt obj-h01136-hint 0,1,2,3,4,5
attr NaturallySalt obj-h01136-max 5
attr NaturallySalt obj-h01136-min 0
attr NaturallySalt obj-h01136-reading LIGHT_TIMER_BLOCK
attr NaturallySalt obj-h01136-set 1


Um das Licht Relais manuell zu schalten muss eine Sequenz an Befehlen gesendet werden:


set NaturallySalt MBF_SET_MANUAL_CTRL 1
set NaturallySalt LIGHT_TIMER_BLOCK 3 (für AN) / 4 (für AUS)
set NaturallySalt MBF_SET_MANUAL_CTRL 0
set NaturallySalt MBF_EXEC 1


Folgende Werte für LIGHT_TIMER_BLOCK sind verfügbar:


// MBV_TIMER_OFFMB_TIMER_ENABLE working modes:
  MBV_PAR_CTIMER_DISABLE                  = 0,      // Timer disabled
  MBV_PAR_CTIMER_ENABLED                  = 1,      // Timer enabled and independent
  MBV_PAR_CTIMER_ENABLED_LINKED           = 2,      // Timer enabled and linked to relay from timer 0
  MBV_PAR_CTIMER_ALWAYS_ON                = 3,      // Relay assigned to this timer always on
  MBV_PAR_CTIMER_ALWAYS_OFF               = 4,      // Relay assigned to this timer always off
  MBV_PAR_CTIMER_COUNTDOWN                = 5,      // Timer in countdown mode


Die Modbus Register sind sehr gut in der Tasmota Bibliothek für NeoPool dokumentiert (https://github.com/arendst/Tasmota/blob/development/tasmota/xsns_83_neopool.ino)... Besser als das, was man vom Hersteller bekommt ;-)

Gruss Jan

JF Mennedy

#55
Anbei sind die Modbus-Variablen / Bit-Maskierungen / Funktions Codes aus der Tasmota Lib:

Sugar Valley Modbus Register
(see https://downloads.vodnici.net/uploads/wpforo/attachments/69/171-Modbus-registers.pdf)

// MODBUS page (0x0000 - 0x002E - unknown - for internal use only)
  MBF_VOLT_24_36 = 0x0022,                // 0x0022         Current 24-36V line in mV
  MBF_VOLT_12 = 0x0023,                   // 0x0023         Current 12V line in mV

  // MEASURE page (0x01xx)
  MBF_ION_CURRENT = 0x0100,               // 0x0100*        Current measured in the ionization system
  MBF_HIDRO_CURRENT,                      // 0x0101*        Intensity level currently measured in the hydrolysissystem
  MBF_MEASURE_PH,                         // 0x0102* ph     Level measured in hundredths (700 = 7.00)
  MBF_MEASURE_RX,                         // 0x0103* mV     Redox level in mV
  MBF_MEASURE_CL,                         // 0x0104* ppm    Level measured in hundredths of chlorine ppm (100 = 1.00 ppm)
  MBF_MEASURE_CONDUCTIVITY,               // 0x0105  %      Level of conductivity measured in the water.
  MBF_MEASURE_TEMPERATURE,                // 0x0106* °C     Water temperature sensor (100 = 10.0°C)
  MBF_PH_STATUS,                          // 0x0107* mask   Status of the module control pH
  MBF_RX_STATUS,                          // 0x0108* mask   Status of the Rx-module
  MBF_CL_STATUS,                          // 0x0109* mask   Status of the Chlorine-module
  MBF_CD_STATUS,                          // 0x010A  mask   Status of the Conductivity-module
  MBF_ION_STATUS = 0x010C,                // 0x010C* mask   Status of the Ionization-module
  MBF_HIDRO_STATUS,                       // 0x010D* mask   Status of the Hydrolysis-module
  MBF_RELAY_STATE,                        // 0x010E* mask   Status of each configurable relays
  MBF_HIDRO_SWITCH_VALUE,                 // 0x010F         INTERNAL - contains the opening of the hydrolysis PWM.
  MBF_NOTIFICATION,                       // 0x0110* mask   Reports whether a page of properties has changed since the last time it was consulted.
  MBF_HIDRO_VOLTAGE,                      // 0x0111         Reports on the stress applied to the hydrolysis cell. This register, together with that of MBF_HIDRO_CURRENT allows extrapolating the salinity of the water.

  // GLOBAL page (0x02xx)
  MBF_SET_MANUAL_CTRL = 0x0289,           // 0x0289         undocumented - write a 1 before manual control MBF_RELAY_STATE, after done write 0 and do MBF_EXEC
  MBF_ESCAPE = 0x0297,                    // 0x0297         undocumented - A write operation to this register is the same as using the ESC button on main screen - clears error
  MBF_SAVE_TO_EEPROM = 0x02F0,            // 0x02F0         A write operation to this register starts a EEPROM storage operation immediately. During the EEPROM storage procedure, the system may be unresponsive to MODBUS requests. The operation will last always less than 1 second.
  MBF_EXEC = 0x02F5,                      // 0x02F5         undocumented - immediately take over settings - a write operation to this register take over the previous written data

  // FACTORY page (0x03xx)
  MBF_PAR_VERSION = 0x0300,               // 0x0300*        Software version of the PowerBox (unused)
  MBF_PAR_MODEL,                          // 0x0301* mask   System model options
  MBF_PAR_SERNUM,                         // 0x0302         Serial number of the PowerBox (unused)
  MBF_PAR_ION_NOM,                        // 0x0303         Ionization maximum production level (DO NOT WRITE!)
  MBF_PAR_HIDRO_NOM = 0x0306,             // 0x0306         Hydrolysis maximum production level. (DO NOT WRITE!) If the hydrolysis is set to work in percent mode, this value will be 100. If the hydrolysis module is set to work in g/h production, this module will contain the maximum amount of production in g/h units. (DO NOT WRITE!)
  MBF_PAR_SAL_AMPS = 0x030A,              // 0x030A         Current command in regulation for which we are going to measure voltage
  MBF_PAR_SAL_CELLK,                      // 0x030B         Specifies the relationship between the resistance obtained in the measurement process and its equivalence in g / l (grams per liter)
  MBF_PAR_SAL_TCOMP,                      // 0x030C         Specifies the deviation in temperature from the conductivity.
  MBF_PAR_HIDRO_MAX_VOLTAGE = 0x0322,     // 0x0322         Allows setting the maximum voltage value that can be reached with the hydrolysis current regulation. The value is specified in tenths of a volt. The default value of this register when the EEPROM is cleared is 80, which is equivalent to a maximum cell operating voltage of 8 volts.
  MBF_PAR_HIDRO_FLOW_SIGNAL,              // 0x0323         Allows to select the operation of the flow detection signal associated with the operation of the hydrolysis (see MBV_PAR_HIDRO_FLOW_SIGNAL*). The default value for this register is 0 (standard detection).
  MBF_PAR_HIDRO_MAX_PWM_STEP_UP,          // 0x0324         This register sets the PWM ramp up of the hydrolysis in pulses per duty cycle. This register makes it possible to adjust the rate at which the power delivered to the cell increases, allowing a gradual rise in power so that the operation of the switching source of the equipment is not saturated. Default 150
  MBF_PAR_HIDRO_MAX_PWM_STEP_DOWN,        // 0x0325         This register sets the PWM down ramp of the hydrolysis in pulses per duty cycle. This register allows adjusting the rate at which the power delivered to the cell decreases, allowing a gradual drop in power so that the switched source of the equipment is not disconnected due to lack of consumption. This gradual fall must be in accordance with the type of cell used, since said cell stores charge once the current stimulus has ceased. Default 20

  // INSTALLER page (0x04xx)
  MBF_PAR_ION_POL0 = 0x0400,              // 0x0400         Time in min the team must spend working on positive polarization in copper-silver ionization.
  MBF_PAR_ION_POL1,                       // 0x0401         Time in min the team must spend working on positive polarization in copper-silver ionization.
  MBF_PAR_ION_POL2,                       // 0x0402         Time in min the team must spend working on positive polarization in copper-silver ionization.
  MBF_PAR_HIDRO_ION_CAUDAL,               // 0x0403  mask   Bitmask register regulates the external control mode of ionization, hydrolysis and pumps.
  MBF_PAR_HIDRO_MODE,                     // 0x0404         Regulates the external control mode of hydrolysis from the modules of measure. 0: no control, 1: standard control (on / off), 2: with timed pump
  MBF_PAR_HIDRO_POL0,                     // 0x0405         Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes.
  MBF_PAR_HIDRO_POL1,                     // 0x0406         Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes.
  MBF_PAR_HIDRO_POL2,                     // 0x0407         Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes.
  MBF_PAR_TIME_LOW,                       // 0x0408*        System timestamp (32 bit unixtime) - low word
  MBF_PAR_TIME_HIGH,                      // 0x0409*        System timestamp (32 bit unixtime) - high word
  MBF_PAR_PH_ACID_RELAY_GPIO,             // 0x040A*        Relay number assigned to the acid pump function (only with pH module).
  MBF_PAR_PH_BASE_RELAY_GPIO,             // 0x040B*        Relay number assigned to the base pump function (only with pH module).
  MBF_PAR_RX_RELAY_GPIO,                  // 0x040C*        Relay number assigned to the Redox level regulation function. If the value is 0, there is no relay assigned, and therefore there is no pump function (ON / OFF should not be displayed)
  MBF_PAR_CL_RELAY_GPIO,                  // 0x040D*        Relay number assigned to the chlorine pump function (only with free chlorine measuring modules).
  MBF_PAR_CD_RELAY_GPIO,                  // 0x040E*        Relay number assigned to the conductivity (brine) pump function (only with conductivity measurement modules).
  MBF_PAR_TEMPERATURE_ACTIVE,             // 0x040F*        Indicates whether the equipment has a temperature measurement or not.
  MBF_PAR_LIGHTING_GPIO,                  // 0x0410*        Relay number assigned to the lighting function. 0: inactive.
  MBF_PAR_FILT_MODE,                      // 0x0411*        Filtration mode (see MBV_PAR_FILT_*)
  MBF_PAR_FILT_GPIO,                      // 0x0412*        Relay selected to perform the filtering function (by default it is relay 2). When this value is at zero, there is no relay assigned and therefore it is understood that the equipment does not control the filtration. In this case, the filter option does not appear in the user menu.
  MBF_PAR_FILT_MANUAL_STATE,              // 0x0413         Filtration status in manual mode (on = 1; off = 0)
  MBF_PAR_HEATING_MODE,                   // 0x0414         Heating mode. 0: the equipment is not heated. 1: the equipment is heating.
  MBF_PAR_HEATING_GPIO,                   // 0x0415         Relay selected to perform the heating function (by default it is relay 7). When this value is at zero, there is no relay assigned and therefore it is understood that the equipment does not control the heating. In this case, the filter modes associated with heating will not be displayed.
  MBF_PAR_HEATING_TEMP,                   // 0x0416         Heating setpoint temperature
  MBF_PAR_CLIMA_ONOFF,                    // 0x0417         Activation of the air conditioning mode (0 inactive; 1 active.
  MBF_PAR_SMART_TEMP_HIGH,                // 0x0418         Superior temperature of the Smart mode
  MBF_PAR_SMART_TEMP_LOW,                 // 0x0419         Lower temperature of the Smart mode
  MBF_PAR_SMART_ANTI_FREEZE,              // 0x041A         Antifreeze mode activated (1) or not (0). This adjustment is only available in the Smart filtration mode.
  MBF_PAR_SMART_INTERVAL_REDUCTION,       // 0x041B         This register is read-only and reports to the outside what percentage (0 to 100%) is being applied to the nominal filtration time. 100% means that the total programmed time is being filtered.
  MBF_PAR_INTELLIGENT_TEMP,               // 0x041C         Setpoint temperature for smart mode
  MBF_PAR_INTELLIGENT_FILT_MIN_TIME,      // 0x041D         Minimum filtration time in minutes
  MBF_PAR_INTELLIGENT_BONUS_TIME,         // 0x041E         Bonus time for the current set of intervals
  MBF_PAR_INTELLIGENT_TT_NEXT_INTERVAL,   // 0x041F         Time to next filtration interval. When it reaches 0 an interval is started and the number of seconds is reloaded for the next interval (2x3600)
  MBF_PAR_INTELLIGENT_INTERVALS,          // 0x0420         Number of started intervals. When it reaches 12 it is reset to 0 and the bonus time is reloaded with the value of MBF_PAR_INTELLIGENT_FILT_MIN_TIME
  MBF_PAR_FILTRATION_STATE,               // 0x0421         Filtration function state: 0 is off and 1 is on. The filtration state is regulated according to the MBF_PAR_FILT_MANUAL_STATE register if the filtration mode held in register MBF_PAR_FILT_MODE is set to FILT_MODE_MANUAL (0).
  MBF_PAR_HEATING_DELAY_TIME,             // 0x0422         Timer in seconds that counts up when the heating is to be enabled. Once this counter reaches 60 seconds, the heating is then enabled. This counter is for internal use only.
  MBF_PAR_FILTERING_TIME_LOW,             // 0x0423         32-bit value:
  MBF_PAR_FILTERING_TIME_HIGH,            // 0x0424         Internal timer for the intelligent filtering mode. It counts the filtering time done during a given day. This register is only for internal use and should not be modified by the user.
  MBF_PAR_INTELLIGENT_INTERVAL_TIME_LOW,  // 0x0425         32-bit value:
  MBF_PAR_INTELLIGENT_INTERVAL_TIME_HIGH, // 0x0426         Internal timer that counts the filtration interval assigned to the the intelligent mode. This register is only for internal use and should not be modified by the user.
  MBF_PAR_UV_MODE,                        // 0x0427         UV mode active or not - see MBV_PAR_UV_MODE*. To enable UV support for a given device, add the mask MBMSK_MODEL_UV to the MBF_PAR_MODEL register.
  MBF_PAR_UV_HIDE_WARN,                   // 0x0428  mask   Suppression for warning messages in the UV mode.
  MBF_PAR_UV_RELAY_GPIO,                  // 0x0429         Relay number assigned to the UV function.
  MBF_PAR_PH_PUMP_REP_TIME_ON,            // 0x042A  mask   Time that the pH pump will be turn on in the repetitive mode (see MBMSK_PH_PUMP_*). Contains a special time format, see desc for MBMSK_PH_PUMP_TIME.
  MBF_PAR_PH_PUMP_REP_TIME_OFF,           // 0x042B         Time that the pH pump will be turn off in the repetitive mode. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000
  MBF_PAR_HIDRO_COVER_ENABLE,             // 0x042C         Options for the hydrolysis/electrolysis module (see MBMSK_HIDRO_*)
  MBF_PAR_HIDRO_COVER_REDUCTION,          // 0x042D         Configured levels for the cover reduction and the hydrolysis shutdown temperature options: LSB = Percentage for the cover reduction, MSB = Temperature level for the hydrolysis shutdown (see MBMSK_HIDRO_*)
  MBF_PAR_PUMP_RELAY_TIME_OFF,            // 0x042E         Time level in minutes or seconds that the dosing pump must remain off when the temporized pump mode is selected. This time level register applies to all pumps except pH. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000
  MBF_PAR_PUMP_RELAY_TIME_ON,             // 0x042F         Time level in minutes or seconds that the dosing pump must remain on when the temporized pump mode is selected. This time level register applies to all pumps except pH. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000
  MBF_PAR_RELAY_PH,                       // 0x0430         Determine what pH regulation configuration the equipment has (see MBV_PAR_RELAY_PH_*)
  MBF_PAR_RELAY_MAX_TIME,                 // 0x0431         Maximum amount of time, in seconds, that a dosing pump can operate before rising an alarm signal. The behavior of the system when the dosing time is exceeded is regulated by the type of action stored in the MBF_PAR_RELAY_MODE register.
  MBF_PAR_RELAY_MODE,                     // 0x0432         Behavior of the system when the dosing time is exceeded (see MBMSK_PAR_RELAY_MODE_* and MBV_PAR_RELAY_MODE_*)
  MBF_PAR_RELAY_ACTIVATION_DELAY,         // 0x0433         Delay time in seconds for the pH pump when the measured pH value is outside the allowable pH setpoints. The system internally adds an extra time of 10 seconds to the value stored here. The pump starts the dosing operation once the condition of pH out of valid interval is maintained during the time specified in this register.
  MBF_PAR_TIMER_BLOCK_BASE,               // 0x0434         This block of 180 registers holds the configuration of the system timers. The system has a set of 12 fully configurable timers, each one assigned to a specific function, described below:
  MBF_PAR_TIMER_BLOCK_FILT_INT1 = 0x0434, // 0x0434         Filtration interval 1 (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_FILT_INT2 = 0x0443, // 0x0443         Filtration interval 2 (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_FILT_INT3 = 0x0452, // 0x0452         Filtration interval 3 (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX1_INT2 = 0x0461, // 0x0461         Auxiliary relay 1 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_LIGHT_INT = 0x0470, // 0x0470         Lighting interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX2_INT2 = 0x047F, // 0x047F         Auxiliary relay 2 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX3_INT2 = 0x048E, // 0x048E         Auxiliary relay 3 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX4_INT2 = 0x049D, // 0x049D         Auxiliary relay 4 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX1_INT1 = 0x04AC, // 0x04AC         Auxiliary relay 1 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX2_INT1 = 0x04BB, // 0x04BB         Auxiliary relay 2 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX3_INT1 = 0x04CA, // 0x04CA         Auxiliary relay 3 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_TIMER_BLOCK_AUX4_INT1 = 0x04D9, // 0x04D9         Auxiliary relay 4 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc)
  MBF_PAR_FILTVALVE_ENABLE = 0x04E8,      // 0x04E8         Filter cleaning functionality mode (0 = off, 1 = Besgo)
  MBF_PAR_FILTVALVE_MODE,                 // 0x04E9         Filter cleaning valve timing mode, possible modes: MBV_PAR_CTIMER_ENABLED, MBV_PAR_CTIMER_ALWAYS_ON, MBV_PAR_CTIMER_ALWAYS_OFF
  MBF_PAR_FILTVALVE_GPIO,                 // 0x04EA         Relay associated with the filter cleaning function. default AUX2 (value 5)
  MBF_PAR_FILTVALVE_START_LOW,            // 0x04EB         start timestamp of filter cleaning (32-bit)
  MBF_PAR_FILTVALVE_START_HIGH,           // 0x04EC           "
  MBF_PAR_FILTVALVE_PERIOD_MINUTES,       // 0x04ED         Period in minutes between cleaning actions. For example, if a value of 60 is stored in this registry, a cleanup action will occur every hour.
  MBF_PAR_FILTVALVE_INTERVAL,             // 0x04EE         Cleaning action duration in seconds.
  MBF_PAR_FILTVALVE_REMAINING,            // 0x04EF         Time remaining for the current cleaning action in seconds. If this register is 0, it means that there is no cleaning function running. When a cleanup function is started, the contents of the MBF_PAR_FILTVALVE_INTERVAL register are copied to this register, then decremented once per second. The display uses this log to track the progress of the cleaning function.
  MBF_ACTION_COPY_TO_RTC,                 // 0x04F0         A write (any value) forces the writing of the RTC time registers MBF_PAR_TIME_LOW (0x0408) and MBF_PAR_TIME_HIGH (0x0409) into the RTC internal microcontroller clock management registers.

  // USER page (0x05xx)  To make the modification of this register persistent, execute the EEPROM storage procedure described in global register MBF_SAVE_TO_EEPROM.
  MBF_PAR_ION = 0x0500,                   // 0x0500         Ionization target production level. The value adjusted in this register must not exceed the value set in the MBF_PAR_ION_NOM factory register.
  MBF_PAR_ION_PR,                         // 0x0501         Amount of time in minutes that the ionization must be activated each time that the filtration starts.
  MBF_PAR_HIDRO,                          // 0x0502         Hydrolisis target production level. When the hydrolysis production is to be set in percent values, this value will contain the percent of production. If the hydrolysis module is set to work in g/h production, this module will contain the desired amount of production in g/h units. The value adjusted in this register must not exceed the value set in the MBF_PAR_HIDRO_NOM factory register.
  MBF_PAR_PH1 = 0x0504,                   // 0x0504         Higher limit of the pH regulation system. The value set in this register is multiplied by 100. This means that if we want to set a value of 7.5, the numerical content that we must write in this register is 750. This register must be always higher than MBF_PAR_PH2.
  MBF_PAR_PH2,                            // 0x0505         Lower limit of the pH regulation system. The value set in this register is multiplied by 100. This means that if we want to set a value of 7.0, the numerical content that we must write in this register is 700. This register must be always lower than MBF_PAR_PH1.
  MBF_PAR_RX1 = 0x0508,                   // 0x0508         Set point for the redox regulation system. This value must be in the range of 0 to 1000.
  MBF_PAR_CL1 = 0x050A,                   // 0x050A         Set point for the chlorine regulation system. The value stored in this register is multiplied by 100. This mean that if we want to set a value of 1.5 ppm, we will have to write a numerical value of 150. This value stored in this register must be in the range of 0 to 1000.
  MBF_PAR_FILTRATION_TYPE = 0x050F,       // 0x050F         undocumented - filtration type, see MBV_PAR_FILTRATION_TYPE_*  0 = Standard, 1 = Variable Hayward, 2 = Variable speed B
  MBF_PAR_FILTRATION_SPEED_FUNC = 0x0513, // 0x0513         undocumented - filtration speed function control
  MBF_PAR_FUNCTION_DEPENDENCY = 0x051B,   // 0x051B  mask   Specification for the dependency of different functions, such as heating, from external events like FL1 (see MBMSK_FCTDEP_HEATING/MBMSK_DEPENDENCY_*)

  // MISC page (0x06xx)
  MBF_PAR_UICFG_MACHINE = 0x0600,         // 0x0600*        Machine type (see MBV_PAR_MACH_* and  kNeoPoolMachineNames[])
  MBF_PAR_UICFG_LANGUAGE,                 // 0x0601         Selected language (see MBV_PAR_LANG_*)
  MBF_PAR_UICFG_BACKLIGHT,                // 0x0602         Display backlight (see MBV_PAR_BACKLIGHT_*)
  MBF_PAR_UICFG_SOUND,                    // 0x0603  mask   Audible alerts (see MBMSK_PAR_SOUND_*)
  MBF_PAR_UICFG_PASSWORD,                 // 0x0604         System password encoded in BCD
  MBF_PAR_UICFG_VISUAL_OPTIONS,           // 0x0605  mask   Stores the different display options for the user interface menus (bitmask). Some bits allow you to hide options that are normally visible (bits 0 to 3) while other bits allow you to show options that are normally hidden (bits 9 to 15)
  MBF_PAR_UICFG_VISUAL_OPTIONS_EXT,       // 0x0606  mask   This register stores additional display options for the user interface menus, see MBMSK_VOE_*
  MBF_PAR_UICFG_MACH_VISUAL_STYLE,        // 0x0607* mask   This register is an expansion of register 0x0600 and 0x0605. The lower part of the register (8 bits LSB) is used to store the type of color selected when in register 0x600 has been specified that the machine is of type "generic". Colors and styles correspond to those listed in record 0x600 MBF_PAR_UICFG_MACHINE. The upper part (8-bit MSB) contains extra bits MBMSK_VS_FORCE_UNITS_GRH, MBMSK_VS_FORCE_UNITS_PERCENTAGE and MBMSK_ELECTROLISIS
  MBF_PAR_UICFG_MACH_NAME_BOLD_0,         // 0x0608         This set of 4 registers stores an ASCIIZ string of up to 8 characters that is used to specify the bold part of the title to be displayed at startup if the specified machine type is generic. Note: only lowercase letters (a-z) can be used.
  MBF_PAR_UICFG_MACH_NAME_BOLD_1,         // 0x0609
  MBF_PAR_UICFG_MACH_NAME_BOLD_2,         // 0x060A
  MBF_PAR_UICFG_MACH_NAME_BOLD_3,         // 0x060B
  MBF_PAR_UICFG_MACH_NAME_LIGHT_0,        // 0x060C         This set of 4 registers stores an ASCIIZ string of up to 8 characters that is used to specify the normal intensity part of the title that will be displayed at startup if the specified machine type is generic. Note: Only lowercase letters (a-z) can be used.
  MBF_PAR_UICFG_MACH_NAME_LIGHT_1,        // 0x060D
  MBF_PAR_UICFG_MACH_NAME_LIGHT_2,        // 0x060E
  MBF_PAR_UICFG_MACH_NAME_LIGHT_3,        // 0x060F
  MBF_PAR_UICFG_MACH_NAME_AUX1_0,         // 0x0610         Aux1 relay name: 5 registers ASCIIZ string of up to 10 characters
  MBF_PAR_UICFG_MACH_NAME_AUX1_1,         // 0x0611
  MBF_PAR_UICFG_MACH_NAME_AUX1_2,         // 0x0612
  MBF_PAR_UICFG_MACH_NAME_AUX1_3,         // 0x0613
  MBF_PAR_UICFG_MACH_NAME_AUX1_4,         // 0x0614
  MBF_PAR_UICFG_MACH_NAME_AUX2_0,         // 0x0615         Aux2 relay name: 5 registers ASCIIZ string of up to 10 characters
  MBF_PAR_UICFG_MACH_NAME_AUX2_1,         // 0x0616
  MBF_PAR_UICFG_MACH_NAME_AUX2_2,         // 0x0617
  MBF_PAR_UICFG_MACH_NAME_AUX2_3,         // 0x0618
  MBF_PAR_UICFG_MACH_NAME_AUX2_4,         // 0x0619
  MBF_PAR_UICFG_MACH_NAME_AUX3_0,         // 0x061A         Aux3 relay name: 5 registers ASCIIZ string of up to 10 characters
  MBF_PAR_UICFG_MACH_NAME_AUX3_1,         // 0x061B
  MBF_PAR_UICFG_MACH_NAME_AUX3_2,         // 0x061C
  MBF_PAR_UICFG_MACH_NAME_AUX3_3,         // 0x061D
  MBF_PAR_UICFG_MACH_NAME_AUX3_4,         // 0x061E
  MBF_PAR_UICFG_MACH_NAME_AUX4_0,         // 0x061F         Aux4 relay name: 5 registers ASCIIZ string of up to 10 characters
  MBF_PAR_UICFG_MACH_NAME_AUX4_1,         // 0x0620
  MBF_PAR_UICFG_MACH_NAME_AUX4_2,         // 0x0621
  MBF_PAR_UICFG_MACH_NAME_AUX4_3,         // 0x0622
  MBF_PAR_UICFG_MACH_NAME_AUX4_4,         // 0x0623
};


JF Mennedy

Sugar Valley register constants and bit masks:

  // MBF_PH_STATUS
  MBMSK_PH_STATUS_ALARM                   = 0x000F, // PH alarm. The possible alarm values are depending on the regulation model:
      // Valid alarm values for pH regulation with acid and base:
  MBV_PH_ACID_BASE_ALARM0 = 0,                      // no alarm
  MBV_PH_ACID_BASE_ALARM1 = 1,                      // pH too high; the pH value is 0.8 points higher than the setpoint value set in PH1
  MBV_PH_ACID_BASE_ALARM2 = 2,                      // pH too low: the pH value is 0.8 points lower than the set point value set in PH2
  MBV_PH_ACID_BASE_ALARM3 = 3,                      // pH pump (acid or base, it does not matter) has exceeded the working time set by the MBF_PAR_RELAY_PH_MAX_TIME parameter and has stopped.
  MBV_PH_ACID_BASE_ALARM4 = 4,                      // pH higher than the set point indicated in PH1
  MBV_PH_ACID_BASE_ALARM5 = 5,                      // pH lower than the set point indicated in PH2
  MBV_PH_ACID_BASE_ALARM6 = 6,                      // undocumented - acid tank level alarm
      // Valid alarm values for pH regulation with acid only:
  MBV_PH_ACID_ALARM0 = 0,                           // no alarm
  MBV_PH_ACID_ALARM1 = 1,                           // pH too high; the pH value is 0.8 points higher than the setpoint value set in PH1
  MBV_PH_ACID_ALARM2 = 2,                           // pH too low: the pH value is 0.8 points lower than the setpoint value set in PH1
  MBV_PH_ACID_ALARM3 = 3,                           // pH pump acid has exceeded the working time set by the MBF_PAR_RELAY_PH_MAX_TIME parameter and has stopped.
  MBV_PH_ACID_ALARM4 = 4,                           // pH higher than the setpoint indicated in PH1 by 0.1
  MBV_PH_ACID_ALARM5 = 5,                           // pH lower than the set point indicated in PH1 by 0.3
  MBV_PH_ACID_ALARM6 = 6,                           // undocumented - acid tank level alarm
      // Valid alarm values for pH regulation with base only:
  MBV_PH_BASE_ALARM0 = 0,                           // no alarm
  MBV_PH_BASE_ALARM1 = 1,                           // pH too high; the pH value is 0.8 points higher than the set point value set in PH2
  MBV_PH_BASE_ALARM2 = 2,                           // pH too low: the pH value is 0.8 points lower than the set point value set in PH2
  MBV_PH_BASE_ALARM3 = 3,                           // pH pump has exceeded the working time set by the MBF_PAR_RELAY_PH_MAX_TIME parameter and has stopped.
  MBV_PH_BASE_ALARM4 = 4,                           // pH higher than the set point indicated in PH2 by 0.1
  MBV_PH_BASE_ALARM5 = 5,                           // pH lower than the set point indicated in PH2 by 0.3
  MBV_PH_BASE_ALARM6 = 6,                           // undocumented - acid tank level alarm

  MBMSK_PH_STATUS_CTRL_BY_FL              = 0x0400, // Control status of the pH module by flow detection (if enabled by MBF_PAR_HIDRO_ION_CAUDAL)
  MBMSK_PH_STATUS_ACID_PUMP_ACTIVE        = 0x0800, // Acid pH pump relay on (pump on)
  MBMSK_PH_STATUS_BASE_PUMP_ACTIVE        = 0x1000, // Base pH Pump Relay On (Pump On)
  MBMSK_PH_STATUS_CTRL_ACTIVE             = 0x2000, // Active pH control module and controlling pumps
  MBMSK_PH_STATUS_MEASURE_ACTIVE          = 0x4000, // Active pH measurement module and making measurements. If this bit is at 1, the pH bar should be displayed.
  MBMSK_PH_STATUS_MODULE_PRESENT          = 0x8000, // Detected pH measurement module

  // MBF_RX_STATUS
  MBMSK_RX_STATUS_RX_PUMP_ACTIVE          = 0x1000, // Redox pump relay on (pump activated)
  MBMSK_RX_STATUS_CTRL_ACTIVE             = 0x2000, // Active Redox control module and controlling pump
  MBMSK_RX_STATUS_MEASURE_ACTIVE          = 0x4000, // Active Redox measurement module and performing measurements. If this bit is at 1, the Redox bar should be displayed on the screen.
  MBMSK_RX_STATUS_MODULE_PRESENT          = 0x8000, // Redox measurement module detected in the system

  // MBF_CL_STATUS
  MBMSK_CL_STATUS_CHLORINE_FLOW           = 0x0008, // Chlorine Probe Flow Sensor. This sensor is built into the probe itself and serves to detect whether there is water passing through the chlorine measurement probe. In case the sensor is at 0, the chlorine measurement will not be valid.
  MBMSK_CL_STATUS_CL_PUMP_ACTIVE          = 0x1000, // Chlorine pump relay on (pump on)
  MBMSK_CL_STATUS_CTRL_ACTIVE             = 0x2000, // Active chlorine control module and controlling pump
  MBMSK_CL_STATUS_MEASURE_ACTIVE          = 0x4000, // Active chlorine measurement module and taking measurements. If this bit is 1, the chlorine bar should be displayed on the screen.
  MBMSK_CL_STATUS_MODULE_PRESENT          = 0x8000, // Chlorine measurement module detected in the system

  // MBF_CD_STATUS
  MBMSK_CD_STATUS_RX_PUMP_ACTIVE          = 0x1000, // Conductivity pump relay on (pump active)
  MBMSK_CD_STATUS_CTRL_ACTIVE             = 0x2000, // Active conductivity control module and controlling pump
  MBMSK_CD_STATUS_MEASURE_ACTIVE          = 0x4000, // Active conductivity measurement module and making measurements. If this bit is 1, the conditionality bar should be displayed on the screen.
  MBMSK_CD_STATUS_MODULE_PRESENT          = 0x8000, // Conductivity measurement module detected in the system

  // MBF_ION_STATUS
  MBMSK_ION_STATUS_ON_TARGET              = 0x0001, // On Target - the system has reached the set point.
  MBMSK_ION_STATUS_LOW                    = 0x0002, // Low - Ionization cannot reach the set point.
  MBMSK_ION_STATUS_RESERVED               = 0x0004,
  MBMSK_ION_STATUS_PROGTIME_EXCEEDED      = 0x0008, // Pr off - The programmed ionization time has been exceeded
  MBMSK_ION_STATUS_POLOFF                 = 0x1000, // Ion Pol off - Ionization in dead time
  MBMSK_ION_STATUS_POL1                   = 0x2000, // Ion Pol 1 - Ionization working in polarization 1
  MBMSK_ION_STATUS_POL2                   = 0x4000, // Ion Pol 2 - Ionization working in polarization 2

  // MBF_HIDRO_STATUS
  MBMSK_HIDRO_STATUS_ON_TARGET            = 0x0001, // On Target - the system has reached the set point.
  MBMSK_HIDRO_STATUS_LOW                  = 0x0002, // Low - Hydrolysis cannot reach the set point.
  MBMSK_HIDRO_STATUS_RESERVED             = 0x0004,
  MBMSK_HIDRO_STATUS_FL1                  = 0x0008, // Flow - Hydrolysis cell flow indicator (FL1)
  MBMSK_HIDRO_STATUS_COVER                = 0x0010, // Cover - Cover input activated
  MBMSK_HIDRO_STATUS_MODULE_ACTIVE        = 0x0020, // Active - Active Module hydrolysis (hidroEnable)
  MBMSK_HIDRO_STATUS_CTRL_ACTIVE          = 0x0040, // Control - Hydrolysis module working with regulation (hydroControlEnable)
  MBMSK_HIDRO_STATUS_REDOX_ENABLED        = 0x0080, // Redox enable - Activation of hydrolysis by the redox module
  MBMSK_HIDRO_STATUS_SHOCK_ENABLED        = 0x0100, // Hydro shock enabled - Chlorine shock mode enabled
  MBMSK_HIDRO_STATUS_FL2                  = 0x0200, // FL2 - Chlorine probe flow indicator, if present
  MBMSK_HIDRO_STATUS_ENABLED_BY_CHLORINE  = 0x0400, // Cl enable - Activation of hydrolysis by the chlorine module
  MBMSK_HIDRO_STATUS_POLOFF               = 0x1000, // Ion Pol off - Ionization in dead time
  MBMSK_HIDRO_STATUS_POL1                 = 0x2000, // Ion Pol 1 - Ionization working in polarization 1
  MBMSK_HIDRO_STATUS_POL2                 = 0x4000, // Ion Pol 2 - Ionization working in polarization 2

  // MBF_RELAY_STATE
  MBMSK_RELAY_STATE1                      = 0x0001, // Relay 1 state (1 on; 0 off) (normally assigned to ph)
  MBMSK_RELAY_STATE2                      = 0x0002, // Relay 2 state (1 on; 0 off) (normally assigned to filtering)
  MBMSK_RELAY_STATE3                      = 0x0004, // Relay 3 status (1 on; 0 off) (normally assigned to lighting)
  MBMSK_RELAY_STATE4                      = 0x0008, // Relay 4 status (1 on; 0 off)
  MBMSK_RELAY_STATE5                      = 0x0010, // Relay 5 status (1 on; 0 off)
  MBMSK_RELAY_STATE6                      = 0x0020, // Relay 6 status (1 on; 0 off)
  MBMSK_RELAY_STATE7                      = 0x0040, // Relay 7 status (1 on; 0 off)
  MBMSK_RELAY_FILTSPEED_LOW               = 0x0100, // Filtration low speed
  MBMSK_RELAY_FILTSPEED_MID               = 0x0200, // Filtration mid speed
  MBMSK_RELAY_FILTSPEED_HIGH              = 0x0400, // Filtration high speed

  // MBF_NOTIFICATION
  MBMSK_NOTIF_MODBUS_CHANGED              = 0x0001,
  MBMSK_NOTIF_GLOBAL_CHANGED              = 0x0002,
  MBMSK_NOTIF_FACTORY_CHANGED             = 0x0004,
  MBMSK_NOTIF_INSTALLER_CHANGED           = 0x0008,
  MBMSK_NOTIF_USER_CHANGED                = 0x0010,
  MBMSK_NOTIF_MISC_CHANGED                = 0x0020,

  // MBF_PAR_MODEL
  MBMSK_MODEL_ION                         = 0x0001, // The equipment includes ionization control
  MBMSK_MODEL_HIDRO                       = 0x0002, // The equipment includes hydrolysis or electrolysis
  MBMSK_MODEL_UV                          = 0x0004, // The equipment includes disinfection control by ultraviolet lamp
  MBMSK_MODEL_SALINITY                    = 0x0008, // The equipment includes measurement of salinity (Fanless equipment only)

  // MBF_PAR_HIDRO_FLOW_SIGNAL
  MBV_PAR_HIDRO_FLOW_SIGNAL_STD           = 0,      // Standard detection based on conduction between an auxiliary electrode and either of the two electrodes of the cell.
  MBV_PAR_HIDRO_FLOW_SIGNAL_ALWAYS_ON     = 1,      // Always connected. This value allows forcing the generation of the hydrolysis current even if no flow is detected in the sensor.
  MBV_PAR_HIDRO_FLOW_SIGNAL_PADDLE        = 2,      // Detection based on the paddle switch, associated with the FL1 input
  MBV_PAR_HIDRO_FLOW_SIGNAL_PADDLE_AND_STD= 3,      // Detection based on the paddle switch, associated with the FL1 input, and the standard detector. The system will understand that there is flow when both elements detect flow. If either one opens, the hydrolysis will stop.
  MBV_PAR_HIDRO_FLOW_SIGNAL_PADDLE_OR_STD = 4,      // Detection based on the paddle switch, associated with the FL1 input, or the standard detector. The system will understand that there is flow when either of the two elements detects flow. Hydrolysis will stop only if both detectors detect no flow.

  // MBF_PAR_HIDRO_ION_CAUDAL
  MBMSK_HIDRO_ION_CAUDAL_FL1_CTRL         = 0x0001, // If the FL1 signal is detected to be inactive, the actuation of the different elements of the system is disabled.
  MBMSK_HIDRO_ION_CAUDAL_FL2_CTRL         = 0x0002, // If the FL2 signal is detected to be inactive, the actuation of the different elements of the system is disabled.
  MBMSK_HIDRO_ION_CAUDAL_FULL_CL_HIDRO_CTRL=0x0004, // If there is a chlorine module installed and it is detected that its flow sensor is inactive, the action of the different elements of the system is disabled.
  MBMSK_HIDRO_ION_CAUDAL_SLAVE            = 0x0008, // The value of the slave input is taken and if it is inactive, the action of the different elements of the system is disabled.
  MBMSK_HIDRO_ION_CAUDAL_PADDLE_SWITCH    = 0x0010,
  MBMSK_HIDRO_ION_CAUDAL_PADDLE_SWITCH_INV= 0x0020,
  MBMSK_HIDRO_ION_CAUDAL_INVERSION        = 0x0080, // This bit determines if active means open or closed for the input electrical signals, and allows to reverse the operation for example to implement a paddle switch that closes when there is no flow.

  // MBF_PAR_FILT_MODE
  MBV_PAR_FILT_MANUAL                     = 0,      // This mode allows to turn the filtration (and all other systems that depend on it) on and off manually.
  MBV_PAR_FILT_AUTO                       = 1,      // This mode allows filtering to be turned on and off according to the settings of the TIMER1, TIMER2 and TIMER3 timers.
  MBV_PAR_FILT_HEATING                    = 2,      // This mode is similar to the AUTO mode, but includes setting the temperature for the heating function. This mode is activated only if the MBF_PAR_HEATING_MODE register is at 1 and there is a heating relay assigned.
  MBV_PAR_FILT_SMART                      = 3,      // This filtration mode adjusts the pump operating times depending on the temperature. This mode is activated only if the MBF_PAR_TEMPERATURE_ACTIVE register is at 1.
  MBV_PAR_FILT_INTELLIGENT                = 4,      // This mode performs an intelligent filtration process in combination with the heating function. This mode is activated only if the MBF_PAR_HEATING_MODE register is at 1 and there is a heating relay assigned.
  MBV_PAR_FILT_BACKWASH                   = 13,     // This filter mode is started when the backwash operation is activated.

  // MBF_PAR_UV_MODE
  MBV_PAR_UV_MODE0                        = 0,      // UV is switched off and it will not turn on when filtration starts
  MBV_PAR_UV_MODE1                        = 1,      // UV is switched on and it will turn on when filtration starts. Time counter for the UV lamp will be incremented.

  // MBF_PAR_UV_HIDE_WARN
  MBMSK_UV_HIDE_WARN_CLEAN                = 0x0001,
  MBMSK_UV_HIDE_WARN_REPLACE              = 0x0002,

  // MBF_PAR_PH_PUMP_REP_TIME_ON
  MBMSK_PH_PUMP_TIME                      = 0x7FFF, // Time level for the pump: The time level has a special coding format. It can cover periods of 1 to 180 seconds with 1 second granularity and from 3 to 999 minutes with 1 minute granularity. f the value is set to 30 for example, a 30 second time will be considered. If we have the value 200, we will have an on time of (200-180+3) = 23 minutes.
  MBMSK_PH_PUMP_REPETITIVE                = 0x8000, // pH pump in repetitive mode (1)

  // MBF_PAR_HIDRO_COVER_ENABLE
  MBMSK_HIDRO_COVER_ENABLE                = 0x0001, // If enabled, the hydrolysis/electrolysis production will be reduced by a given percentage specified in the lower half of the MBF_PAR_HIDRO_COVER_REDUCTION register when the cover input is detected.
  MBMSK_HIDRO_TEMPERATURE_SHUTDOWN_ENABLE = 0x0002, // If enabled, the hydrolysis/electrolysis production will stop when the temperature falls below a given temperature threshold specified in higher part of the MBF_PAR_HIDRO_COVER_REDUCTION register.
  // MBF_PAR_HIDRO_COVER_REDUCTION
  MBMSK_HIDRO_COVER_REDUCTION             = 0x00FF, // Percentage for the cover reduction
  MBMSK_HIDRO_SHUTDOWN_TEMPERATURE        = 0xFF00, // Temperature level for the hydrolysis shutdown

  // MBF_PAR_RELAY_PH
  MBV_PAR_RELAY_PH_ACID_AND_BASE          = 0,      // The equipment works with an acid and base pump
  MBV_PAR_RELAY_PH_ACID_ONLY              = 1,      // The equipment works with acid pump only
  MBV_PAR_RELAY_PH_BASE_ONLY              = 2,      // The equipment works with base pump only

  //MBF_PAR_RELAY_MODE
  MBMSK_PAR_RELAY_MODE_PH                 = 0x0003, // Behavior for the pH module (MBV_PAR_RELAY_MODE_*)
  MBMSK_PAR_RELAY_MODE_RX                 = 0x000C, // Behavior for the Redox module (MBV_PAR_RELAY_MODE_*)
  MBMSK_PAR_RELAY_MODE_CL                 = 0x0030, // Behavior for the Chlorine module (MBV_PAR_RELAY_MODE_*)
  MBMSK_PAR_RELAY_MODE_CD                 = 0x00C0, // Behavior for the Conductivity module (MBV_PAR_RELAY_MODE_*)
  MBMSK_PAR_RELAY_MODE_TURBIDITY          = 0x0300, // Behavior for the Turbidity module (MBV_PAR_RELAY_MODE_*)
  MBV_PAR_RELAY_MODE_IGNORE               = 0,      // The system simply ignores the alarm and dosing continues.
  MBV_PAR_RELAY_MODE_SHOW_ONLY            = 1,      // The system only shows the alarm on screen, but the dosing continues.
  MBV_PAR_RELAY_MODE_SHOW_AND_STOP        = 2,      // The system shows the alarm on screen and stops the dosing pump

  // MBF_PAR_FILTRATION_TYPE
  MBV_PAR_FILTRATION_TYPE_STANDARD        = 0x00,   // Standard (without speed control)
  MBV_PAR_FILTRATION_TYPE_HAYWARD_SLOW    = 0x01,   // Variable Hayward Slow
  MBV_PAR_FILTRATION_TYPE_HAYWARD_MEDIUM  = 0x11,   // Variable Hayward Medium
  MBV_PAR_FILTRATION_TYPE_HAYWARD_FAST    = 0x21,   // Variable Hayward Fast
  MBV_PAR_FILTRATION_TYPE_SPEED_B_SLOW    = 0x02,   // Variable speed B Slow
  MBV_PAR_FILTRATION_TYPE_SPEED_B_MEDIUM  = 0x12,   // Variable speed B Medium
  MBV_PAR_FILTRATION_TYPE_SPEED_B_FAST    = 0x22,   // Variable speed B Fast

  // MBF_PAR_FUNCTION_DEPENDENCY
  MBMSK_FCTDEP_HEATING                    = 0x0007, // Heating function dependency:
  MBMSK_DEPENDENCY_FL1_PADDLE             = 0x0001,
  MBMSK_DEPENDENCY_FL2                    = 0x0002,
  MBMSK_DEPENDENCY_SLAVE                  = 0x0004,

  // MBF_PAR_UICFG_MACHINE
  MBV_PAR_MACH_NONE                       = 0,      // No machine assigned
  MBV_PAR_MACH_HIDROLIFE                  = 1,      // Hidrolife (yellow)
  MBV_PAR_MACH_AQUASCENIC                 = 2,      // Aquascenic (blue)
  MBV_PAR_MACH_OXILIFE                    = 3,      // Oxilife (green)
  MBV_PAR_MACH_BIONET                     = 4,      // Bionet (light blue)
  MBV_PAR_MACH_HIDRONISER                 = 5,      // Hidroniser (red)
  MBV_PAR_MACH_UVSCENIC                   = 6,      // UVScenic (lilac)
  MBV_PAR_MACH_STATION                    = 7,      // Station (orange)
  MBV_PAR_MACH_BRILIX                     = 8,      // Brilix
  MBV_PAR_MACH_GENERIC                    = 9,      // Generic
  MBV_PAR_MACH_BAYROL                     = 10,     // Bayrol
  MBV_PAR_MACH_HAY                        = 11,     // Hay

  // MBF_PAR_UICFG_LANGUAGE
  MBV_PAR_LANG_SPANISH                    = 0,
  MBV_PAR_LANG_ENGLISH                    = 1,
  MBV_PAR_LANG_FRENCH                     = 2,
  MBV_PAR_LANG_GERMAN                     = 3,
  MBV_PAR_LANG_ITALIAN                    = 4,
  MBV_PAR_LANG_TURKISH                    = 5,
  MBV_PAR_LANG_CZECH                      = 6,
  MBV_PAR_LANG_PORTUGUESE                 = 7,
  MBV_PAR_LANG_DUTCH                      = 8,
  MBV_PAR_LANG_POLISH                     = 9,
  MBV_PAR_LANG_HUNGARIAN                  = 10,
  MBV_PAR_LANG_RUSSIAN                    = 11,

  // MBF_PAR_UICFG_BACKLIGHT
  MBV_PAR_BACKLIGHT_15SEC                 = 0,      // Backlight off after 15 sec
  MBV_PAR_BACKLIGHT_30SEC                 = 1,      // Backlight off after 30 sec
  MBV_PAR_BACKLIGHT_60SEC                 = 2,      // Backlight off after 60 sec
  MBV_PAR_BACKLIGHT_5MIN                  = 3,      // Backlight off after 5 min
  MBV_PAR_BACKLIGHT_ON                    = 4,      // Backlight never turns off

  // MBF_PAR_TIMER_BLOCK_BASE
  MBV_TIMER_OFFMB_TIMER_ENABLE            = 0,      // Enables the timer function in the selected working mode, see MBF_PAR_CTIMER_*
  MBV_TIMER_OFFMB_TIMER_ON                = 1,      // Timer start (32-bit timestamp, LSB first)
  MBV_TIMER_OFFMB_TIMER_OFF               = 3,      // Timer stop (32-bit timestamp, LSB first) - not used
  MBV_TIMER_OFFMB_TIMER_PERIOD            = 5,      // Time in seconds between starting points (32-bit, LSB first), e.g. 86400 means daily
  MBV_TIMER_OFFMB_TIMER_INTERVAL          = 7,      // Time in seconds that the timer has to run when started (32-bit, LSB first)
  MBV_TIMER_OFFMB_TIMER_COUNTDOWN         = 9,      // Time remaining in seconds for the countdown mode (32-bit, LSB first)
  MBV_TIMER_OFFMB_TIMER_FUNCTION          = 11,     // Function assigned to this timer, see MBV_PAR_CTIMER_FCT_*
  MBV_TIMER_OFFMB_TIMER_WORK_TIME         = 13,     // Number of seconds that the timer has been operating
  // MBV_TIMER_OFFMB_TIMER_ENABLE working modes:
  MBV_PAR_CTIMER_DISABLE                  = 0,      // Timer disabled
  MBV_PAR_CTIMER_ENABLED                  = 1,      // Timer enabled and independent
  MBV_PAR_CTIMER_ENABLED_LINKED           = 2,      // Timer enabled and linked to relay from timer 0
  MBV_PAR_CTIMER_ALWAYS_ON                = 3,      // Relay assigned to this timer always on
  MBV_PAR_CTIMER_ALWAYS_OFF               = 4,      // Relay assigned to this timer always off
  MBV_PAR_CTIMER_COUNTDOWN                = 5,      // Timer in countdown mode
  // MBV_TIMER_OFFMB_TIMER_FUNCTION codes:
  MBV_PAR_CTIMER_FCT_FILTRATION           = 0x0001, // Filtration function of the system
  MBV_PAR_CTIMER_FCT_LIGHTING             = 0x0002, // Lighting function of the system
  MBV_PAR_CTIMER_FCT_HEATING              = 0x0004, // Heating function of the system
  MBV_PAR_CTIMER_FCT_AUXREL1              = 0x0100, // Auxiliary function assigned to relay 1
  MBV_PAR_CTIMER_FCT_AUXREL2              = 0x0200, // Auxiliary function assigned to relay 2
  MBV_PAR_CTIMER_FCT_AUXREL3              = 0x0400, // Auxiliary function assigned to relay 3
  MBV_PAR_CTIMER_FCT_AUXREL4              = 0x0800, // Auxiliary function assigned to relay 4
  MBV_PAR_CTIMER_FCT_AUXREL5              = 0x1000, // Auxiliary function assigned to relay 5
  MBV_PAR_CTIMER_FCT_AUXREL6              = 0x2000, // Auxiliary function assigned to relay 6
  MBV_PAR_CTIMER_FCT_AUXREL7              = 0x4000, // Auxiliary function assigned to relay 7

  // MBF_PAR_UICFG_SOUND
  MBMSK_PAR_SOUND_CLICK                   = 0x0001, // Click sounds every time a key is pressed
  MBMSK_PAR_SOUND_POPUP                   = 0x0002, // Sound plays each time a pop-up message appears
  MBMSK_PAR_SOUND_ALERTS                  = 0x0004, // An alarm sounds when there is an alert on the equipment (AL3)
  MBMSK_PAR_SOUND_FILTRATION              = 0x0008, // Audible warning every time the filtration is started

  // MBF_PAR_UICFG_VISUAL_OPTIONS
  MBMSK_HIDE_TEMPERATURE                  = 0x0001, // Hide temperature measurement from main menu
  MBMSK_HIDE_FILTRATION                   = 0x0002, // Hide filter status from main menu
  MBMSK_HIDE_LIGHTING                     = 0x0004, // Hide lighting status from main menu
  MBMSK_HIDE_AUX_RELAYS                   = 0x0008, // Hide auxiliary relay status from main menu.
  MBMSK_VO_HIDE_EXTRA_REGS                = 0x0010, // Hide the option to adjust additional registers in the installer menu
  MBMSK_VO_HIDE_RELAY_CONFIG              = 0x0020, // Hide the relay configuration option in the installer menu.
  MBMSK_VO_SLOW_FILTER_HIDRO_LEVEL        = 0x0040, // This option enables the slow hydrolysis level filtering option when the pH module is installed. This is especially important when the acid / base dosing is done very close to the hydrolysis probe.
  MBMSK_VO_HIDE_SALINITY_MAIN_WINDOW      = 0x0080, // Hides the salinity measurement from main screen.
  MBMSK_VO_SHOW_SPECIAL_REGS              = 0x0100, // Displays the special register set configuration menu in the installer menu.
  MBMSK_SHOW_HID_SHUTDOWN_BY_TEMPERATURE  = 0x0200, // Displays the option to turn off hydrolysis by temperature.
  MBMSK_SHOW_CELL_SELECTION               = 0x0400, // Enables access to the cell selection menu from the service menu option of the configuration menu.
  MBMSK_SHOW_PUMP_TYPE                    = 0x0800, // Displays the option for selecting the type of filtration pump (normal, three speeds, etc.).
  MBMSK_SHOW_QUICK_MENU                   = 0x1000, // Displays the quick access menu instead of the conventional menu, when the SET key is pressed from the main display screen. Filtration (normal, three speeds, etc).
  MBMSK_SHOW_OXI_MAIN_DATA_SCREEN         = 0x2000, // Displays main screen shown with a particular style called OXI
  MBMSK_SHOW_INSTALLER_MENU               = 0x4000, // Shows access to the installer menu in the main menu without the need for a password.
  MBMSK_SHOW_FACTORY_MENU                 = 0x8000, // Shows access to the factory menu in the main menu without the need for a password.

  // MBF_PAR_UICFG_VISUAL_OPTIONS_EXT
  MBMSK_VOE_SHOW_PNEUMATIC_VALVE          = 0x0001, // Shows the pneumatic valve
  MBMSK_VOE_HIDE_AUX_REL_DEPENDENCY       = 0x0002, // Hides the auxiliary relay dependency
  MBMSK_VOE_SHOW_BESGO_NAME               = 0x0004, // Show "Besgo" instead of "Pneumatic" for the pneumatic valve titles.

  // MBF_PAR_UICFG_MACH_VISUAL_STYLE
  MBMSK_VS_FORCE_UNITS_GRH                = 0x2000, // Display the hydrolysis/electrolysis in units of grams per hour (gr/h).
  MBMSK_VS_FORCE_UNITS_PERCENTAGE         = 0x4000, // Display the hydrolysis/electrolysis in percentage units (%).
  MBMSK_ELECTROLISIS                      = 0x8000, // Display the word electrolysis instead of hydrolysis in generic mode.

W_Esch

Hallo zusammen,
Es wäre toll, wenn vielleicht jemand das SaltRelax Gerätemodul hier posten könnte. Das würde den Aufwand sparen alles neu zu bauen. Ich würde mich auch gerne an der Weiterentwicklung von weiteren Festures und Tests beteiligen. Ich besitze eine Bayrol SaltRelax Pro und nutze bisher die Webanwendung. Das Interface ist grausam, speziell nach der Umstellung zum 01.07. funktioniert mein HTTPMOD Gerät auch nicht mehr. Daher möchte ich gerne auf Modbus umstellen.

Viele Grüße, Wolfgang
FHEM, Viessmann 300, SMA inverter, Zaehler über OBIS, DeltaSol über VBUS, Bayrol SaltRelax über httpmod, MQTT, Firmata, Homematic, MAX, FS20, Gardena smart Bewässerung, OneWire, SONOS, InfluxDB, GRAFANA, alles integriert und alles auf Docker

JF Mennedy


defmod NaturallySalt ModbusAttr 1 10
attr NaturallySalt userattr obj-h00263-unpack obj-h00264-unpack obj-h00270-unpack
attr NaturallySalt DbLogExclude .*
attr NaturallySalt DbLogInclude RX,Temperatur,pH,pH-Minus,temperature
attr NaturallySalt DbLogValueFn {\
if (($READING =~ /^RX$|^pH$|^Temperatur$/) && (abs($VALUE - OldReadingsNum($DEVICE,$READING,$VALUE)) > 5))\
{\
           $IGNORE=1\
};;\
  if ($READING =~ /^RX$|^pH$|^Temperatur$/) \
{\
    my $val  = ReadingsNum($DEVICE,$READING,"");;\
my $oval = OldReadingsNum($DEVICE,$READING,0);;\
#Log 1, "$DEVICE, $READING, $val, old: $oval";;\
  }\
}\
attr NaturallySalt IODev ModBusLine2
attr NaturallySalt alias NaturallySalt
attr NaturallySalt dev-h-defPoll 10
attr NaturallySalt dev-h-write 16
attr NaturallySalt disable 0
attr NaturallySalt event-min-interval .*:300
attr NaturallySalt event-on-change-reading .*
attr NaturallySalt group Pool
attr NaturallySalt icon virtualbox-alt
attr NaturallySalt obj-h00257-expr $val * 0.1
attr NaturallySalt obj-h00257-reading Hydro
attr NaturallySalt obj-h00258-expr $val * 0.01
attr NaturallySalt obj-h00258-reading pH
attr NaturallySalt obj-h00259-expr $val * 1
attr NaturallySalt obj-h00259-reading RX
attr NaturallySalt obj-h00260-expr $val * 1
attr NaturallySalt obj-h00260-reading Chlor
attr NaturallySalt obj-h00261-expr $val * 1
attr NaturallySalt obj-h00261-reading Conductivity
attr NaturallySalt obj-h00262-expr $val * 0.1
attr NaturallySalt obj-h00262-reading Temperatur
attr NaturallySalt obj-h00263-reading pH-Status
attr NaturallySalt obj-h00264-reading RX-Status
attr NaturallySalt obj-h00270-allowWrite 1
attr NaturallySalt obj-h00270-hint 258,770,1794
attr NaturallySalt obj-h00270-reading Relais-Status
attr NaturallySalt obj-h00270-set 1
attr NaturallySalt obj-h00649-allowWrite 1
attr NaturallySalt obj-h00649-expr $val * 1
attr NaturallySalt obj-h00649-hint 0,1
attr NaturallySalt obj-h00649-max 1
attr NaturallySalt obj-h00649-min 0
attr NaturallySalt obj-h00649-reading MBF_SET_MANUAL_CTRL
attr NaturallySalt obj-h00649-set 1
attr NaturallySalt obj-h00663-allowWrite 1
attr NaturallySalt obj-h00663-expr $val * 1
attr NaturallySalt obj-h00663-hint 0,1
attr NaturallySalt obj-h00663-max 1
attr NaturallySalt obj-h00663-min 0
attr NaturallySalt obj-h00663-reading MBF_ESCAPE
attr NaturallySalt obj-h00663-set 1
attr NaturallySalt obj-h00752-allowWrite 1
attr NaturallySalt obj-h00752-expr $val * 1
attr NaturallySalt obj-h00752-hint 0,1
attr NaturallySalt obj-h00752-max 1
attr NaturallySalt obj-h00752-min 0
attr NaturallySalt obj-h00752-reading MBF_SAVE_TO_EEPROM
attr NaturallySalt obj-h00752-set 1
attr NaturallySalt obj-h00757-allowWrite 1
attr NaturallySalt obj-h00757-expr $val * 1
attr NaturallySalt obj-h00757-hint 0,1
attr NaturallySalt obj-h00757-max 1
attr NaturallySalt obj-h00757-min 0
attr NaturallySalt obj-h00757-reading MBF_EXEC
attr NaturallySalt obj-h00757-set 1
attr NaturallySalt obj-h00778-expr $val * 0.001
attr NaturallySalt obj-h00778-reading SaltSetpt
attr NaturallySalt obj-h00779-expr $val * 1
attr NaturallySalt obj-h00779-reading SaltVal
attr NaturallySalt obj-h01040-allowWrite 1
attr NaturallySalt obj-h01040-expr $val * 1
attr NaturallySalt obj-h01040-hint 0,1,2,3
attr NaturallySalt obj-h01040-max 4
attr NaturallySalt obj-h01040-min 0
attr NaturallySalt obj-h01040-reading LIGHT_GPIO
attr NaturallySalt obj-h01040-set 1
attr NaturallySalt obj-h01041-allowWrite 1
attr NaturallySalt obj-h01041-expr $val * 1
attr NaturallySalt obj-h01041-hint 0,1,2,3,4,5,6,7
attr NaturallySalt obj-h01041-max 7
attr NaturallySalt obj-h01041-min 0
attr NaturallySalt obj-h01041-reading FiltrationsModus
attr NaturallySalt obj-h01041-set 1
attr NaturallySalt obj-h01043-allowWrite 1
attr NaturallySalt obj-h01043-expr $val * 1
attr NaturallySalt obj-h01043-hint 0,1
attr NaturallySalt obj-h01043-max 1
attr NaturallySalt obj-h01043-min 0
attr NaturallySalt obj-h01043-reading FiltrationsSchalterMan
attr NaturallySalt obj-h01043-set 1
attr NaturallySalt obj-h01057-expr $val * 1
attr NaturallySalt obj-h01057-reading FiltrationState
attr NaturallySalt obj-h01068-allowWrite 1
attr NaturallySalt obj-h01068-expr $val * 1
attr NaturallySalt obj-h01068-hint 0,1
attr NaturallySalt obj-h01068-max 1
attr NaturallySalt obj-h01068-min 0
attr NaturallySalt obj-h01068-reading Cover
attr NaturallySalt obj-h01068-set 1
attr NaturallySalt obj-h01136-allowWrite 1
attr NaturallySalt obj-h01136-expr $val * 1
attr NaturallySalt obj-h01136-hint 0,1,2,3,4,5
attr NaturallySalt obj-h01136-max 5
attr NaturallySalt obj-h01136-min 0
attr NaturallySalt obj-h01136-reading LIGHT_TIMER_BLOCK
attr NaturallySalt obj-h01136-set 1
attr NaturallySalt obj-h01147-allowWrite 1
attr NaturallySalt obj-h01147-expr $val * 1
attr NaturallySalt obj-h01147-hint 2
attr NaturallySalt obj-h01147-min 2
attr NaturallySalt obj-h01147-reading LIGHT_TIMER_FUNCTION
attr NaturallySalt obj-h01147-set 1
attr NaturallySalt obj-h01282-allowWrite 1
attr NaturallySalt obj-h01282-expr $val * 0.1
attr NaturallySalt obj-h01282-hint 0,10,20,30,40,50,60,70,80,90,100
attr NaturallySalt obj-h01282-max 100
attr NaturallySalt obj-h01282-min 0
attr NaturallySalt obj-h01282-reading HydroSollwert
attr NaturallySalt obj-h01282-set 1
attr NaturallySalt obj-h01282-setexpr $val * 10
attr NaturallySalt obj-h01284-allowWrite 1
attr NaturallySalt obj-h01284-expr $val * 0.01
attr NaturallySalt obj-h01284-hint 6.8,6.9,7.0,7.1,7.2,7.4,7.5,7.6
attr NaturallySalt obj-h01284-max 7.6
attr NaturallySalt obj-h01284-min 6.8
attr NaturallySalt obj-h01284-reading phSollwert
attr NaturallySalt obj-h01284-set 1
attr NaturallySalt obj-h01284-setexpr $val * 100
attr NaturallySalt obj-h01288-allowWrite 1
attr NaturallySalt obj-h01288-expr $val * 1
attr NaturallySalt obj-h01288-hint 600,610,620,630,640,650,660,670,680,690,700
attr NaturallySalt obj-h01288-max 900
attr NaturallySalt obj-h01288-min 300
attr NaturallySalt obj-h01288-reading rxSollwert
attr NaturallySalt obj-h01288-set 1
attr NaturallySalt obj-h01295-allowWrite 1
attr NaturallySalt obj-h01295-expr $val * 1
attr NaturallySalt obj-h01295-hint 1,17,33
attr NaturallySalt obj-h01295-max 33
attr NaturallySalt obj-h01295-min 1
attr NaturallySalt obj-h01295-reading PumpSpeed
attr NaturallySalt obj-h01295-set 1
attr NaturallySalt oldreadings RX,pH,Temperatur
attr NaturallySalt realRoom Schwimmbad
attr NaturallySalt room 36_Keller,00_Haus,11_Garten,12_Schwimmbad,73_GoogleHome
attr NaturallySalt stateFormat {sprintf("Temp: %.1f °C <br/> PH: %.2f <br/> Redox: %.0f <br/> Elektrolyse: %.0f <br/> pH-Minus: %d", ReadingsNum($name,'Temperatur',0),ReadingsNum($name,'pH',0),ReadingsNum($name,'RX',0),ReadingsNum($name,'Hydro',0),ReadingsVal($name,'pH-Minus',0)  )}
attr NaturallySalt userReadings temperature { ReadingsNum($name,"Temperatur",0) }, \
state { ReadingsVal($name,"FiltrationState",0) },\
PH_STATUS { sprintf("%016b",ReadingsNum($name,"pH-Status",0)) },\
RX_STATUS { sprintf("%016b",ReadingsNum($name,"RX-Status",0)) },\
RELAIS_STATUS { sprintf("%016b",ReadingsNum($name,"Relais-Status",0)) },\
pH-Minus { (split //,ReadingsVal($name,"RELAIS_STATUS","0000000000000000"))[15]}\
attr NaturallySalt verbose 0
attr NaturallySalt webCmd FiltrationsModus:FiltrationsSchalterMan:PumpSpeed:phSollwert:rxSollwert:HydroSollwert:Relais-Status
attr NaturallySalt webCmdLabel FiltrationsModus:FiltrationsSchalterMan:PumpSpeed:phSollwert:rxSollwert:HydroSollwert:Relais-Status

W_Esch

Hallo JF,
Erstmal vielen Dank für die prompte Antwort. 
Ist das ModbusAttr Modul unverändert? Ich dachte dort müsste man die entsprechenden Register definieren. Damit kämpfe ich momentan. Oder habe ich da etwas falsch verstanden.
Vielen Dank und viele Grüße,
Wolfgang
FHEM, Viessmann 300, SMA inverter, Zaehler über OBIS, DeltaSol über VBUS, Bayrol SaltRelax über httpmod, MQTT, Firmata, Homematic, MAX, FS20, Gardena smart Bewässerung, OneWire, SONOS, InfluxDB, GRAFANA, alles integriert und alles auf Docker

W_Esch

Hallo,
Wie immer lesen hilft. Jetzt habe ich verstanden, dass man entweder das ModbusAttr generisch verwenden kann und im Device einfach die passenden Attribute setzen muss, oder man schreibt ein neues Modul und definiert dort die Register. Manchmal dauert es bis der Groschen fällt. Nochmals vielen Dank an alle, die hier mitgearbeitet haben.

Grüße
FHEM, Viessmann 300, SMA inverter, Zaehler über OBIS, DeltaSol über VBUS, Bayrol SaltRelax über httpmod, MQTT, Firmata, Homematic, MAX, FS20, Gardena smart Bewässerung, OneWire, SONOS, InfluxDB, GRAFANA, alles integriert und alles auf Docker

JF Mennedy

Hallo Wolfgang,

die Register definierst Du wie folgt (1 Beispiel):
attr NaturallySalt obj-h00257-expr $val * 0.1
attr NaturallySalt obj-h00257-reading Hydro


h00257 ist das Holding-Register 257

Angeschlossen ist mein SR-Pro so:
Zitat von: JF Mennedy am 30 Juni 2020, 22:56:23
Anbei noch das Foto von den benutzten Pins...

Versuch doch einfach mal mein define anzulegen, schmeiss nur die Zeil mit dem Attribut userattr raus, das ist nicht komplett und wird sowieso automatisch angelegt...

Ich betreibe meine Anlage jetzt seit 3 Jahren so und funktioniert echt gut...

Gruss Jan

W_Esch

Hallo Jan,
vielen Dank. Es funktioniert einwandfrei!!! Es war viel einfacher als gedacht. Ich kann sogar die Filterpumpe von FHEM aus schalten. Genau was ich gesucht habe. Bin begeistert!!!
Vielen Dank und viele Grüße
Wolfgang
FHEM, Viessmann 300, SMA inverter, Zaehler über OBIS, DeltaSol über VBUS, Bayrol SaltRelax über httpmod, MQTT, Firmata, Homematic, MAX, FS20, Gardena smart Bewässerung, OneWire, SONOS, InfluxDB, GRAFANA, alles integriert und alles auf Docker

JF Mennedy

Hallo Wolfgang, freut mich, dass es klappt 👍 Wenn die Filter Pumpe es unterstützt, kannst Du sogar die Drehzahl einstellen ;-) Hab dafür extra eine gekauft damals von Speck, aber da ich aktiv überwinter, hilft das echt enorm. Alles läuft komplett automatisch und wenn der Stromzähler mal nix verbraucht und es frostet kommt ne Meldung aufs Handy 😊

W_Esch

Hallo Jan,
vielen Dank für die Tips. Ich habe mittlerweile auch noch etwas weiter am Thema gearbeitet.



Filterzeiten Slot 1 und Relaisstatus

Die Startzeit sieht man in Timer1On_f und die Endezeit in Timer1End_f

attr SaltRelax obj-h01076-expr $val * 1
attr SaltRelax obj-h01076-reading Timer1Enable
attr SaltRelax obj-h01077-expr $val * 1
attr SaltRelax obj-h01077-len 2
attr SaltRelax obj-h01077-reading Timer1On
attr SaltRelax obj-h01079-expr $val * 1
attr SaltRelax obj-h01079-len 2
attr SaltRelax obj-h01079-reading Timer1Off
attr SaltRelax obj-h01081-expr $val * 1
attr SaltRelax obj-h01081-len 2
attr SaltRelax obj-h01081-reading Timer1Period
attr SaltRelax obj-h01083-expr $val * 1
attr SaltRelax obj-h01083-len 2
attr SaltRelax obj-h01083-reading Timer1Interval
attr SaltRelax obj-h01085-expr $val * 1
attr SaltRelax obj-h01085-len 2
attr SaltRelax obj-h01085-reading Timer1Countdown
attr SaltRelax obj-h01087-expr $val * 1
attr SaltRelax obj-h01087-len 2
attr SaltRelax obj-h01087-reading Timer1Function
attr SaltRelax obj-h01089-expr $val * 1
attr SaltRelax obj-h01089-reading Timer1Worktime


Passende userReadings für Filterzeit und Relais Status

ReadingsNum($name,'Hydro',0),ReadingsVal($name,'pH-Minus',0)  )}
attr SaltRelax userReadings state { ReadingsVal($name,"FiltrationState",0) },\
PH_STATUS_B { sprintf("%016b",ReadingsNum($name,"pH-Status",0)) },\
RX_STATUS_B { sprintf("%016b",ReadingsNum($name,"RX-Status",0)) },\
RELAIS_STATUS_B { sprintf("%016b",ReadingsNum($name,"Relais-Status",0)) },\
pH-Modul { (split //,ReadingsVal($name,"RELAIS_STATUS_B","0000000000000000"))[15]},\
Filterpumpe { (split //,ReadingsVal($name,"RELAIS_STATUS_B","0000000000000000"))[14]},\
WT { (split //,ReadingsVal($name,"RELAIS_STATUS_B","0000000000000000"))[9]},\
Timer1On_f { strftime('%H:%M:%S', gmtime(ReadingsNum("SaltRelax", "Timer1On" , 0))) },\
Timer1End { ReadingsNum("SaltRelax", "Timer1On" , 0) + ReadingsNum("SaltRelax", "Timer1Interval" , 0)},\
Timer1End_f { strftime('%H:%M:%S', gmtime(ReadingsNum("SaltRelax", "Timer1End" , 0) )) }


Nochmals vielen
Dank
FHEM, Viessmann 300, SMA inverter, Zaehler über OBIS, DeltaSol über VBUS, Bayrol SaltRelax über httpmod, MQTT, Firmata, Homematic, MAX, FS20, Gardena smart Bewässerung, OneWire, SONOS, InfluxDB, GRAFANA, alles integriert und alles auf Docker

JoeALLb

Kann mir jemand eine aktuelle komplette Config zukommen lassen? Die Eizelstücke aus diesem Thread bekomme ich aktuell nicht sauber zusammen, immer scheint etwas zu fehlen oder anders zu heißen.

DANKE.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270