Hallo,
da ich es so nicht hinbekommen habe meine Systemair KWL Anlage auszulesen habe ich mich dazu entschieden selber ein Modul zu machen.
Ich habe das Modbus Modul für meinen SDM630 genommen und entsprechend abgeändert. Ich hoffe das ist so ok?
Ich kann nun auch schon einige Register auslesen und die Lüfterstufe setzen.
Nur leider werden die Werte nicht automatisch gelesen sondern immer nur wenn ich manuell ein get mache. Obwohl ein Intervall eingetragen ist.
Vielleicht kann mir jemand sagen wo der Fehler liegt.
Gibt es sonst noch User die eine Systemair Anlage betreiben und entsprechend testen können? Ich bekomme z.B. aus einem Register einen komischen Wert den ich nicht nachvollziehen kann.
Hier der Code, Kommentare passe ich später noch an:
package main;
use strict;
use warnings;
use Time::HiRes qw( time );
sub ModbusSystemair_Initialize($);
# deviceInfo defines properties of the device.
# some values can be overwritten in parseInfo, some defaults can even be overwritten by the user with attributes if a corresponding attribute is added to AttrList in _Initialize.
#
my %SystemairMdeviceInfo = (
"timing" => {
timeout => 2, # 2 seconds timeout when waiting for a response
commDelay => 0.7, # 0.7 seconds minimal delay between two communications e.g. a read a the next write,
# can be overwritten with attribute commDelay if added to AttrList in _Initialize below
sendDelay => 0.7, # 0.7 seconds minimal delay between two sends, can be overwritten with the attribute
# sendDelay if added to AttrList in _Initialize function below
},
"i" => { # details for "input registers" if the device offers them
read => 4, # use function code 4 to read discrete inputs. They can not be read by definition.
defLen => 2, # default length (number of registers) per value ((e.g. 2 for a float of 4 bytes that spans 2 registers)
# can be overwritten in parseInfo per reading by specifying the key "len"
combine => 40, # allow combined read of up to 10 adjacent registers during getUpdate
# combine => 1, # no combined read (read more than one registers with one read command) during getUpdate
defFormat => "%.1f", # default format string to use after reading a value in sprintf
# can be overwritten in parseInfo per reading by specifying the key "format"
defUnpack => "f>", # default pack / unpack code to convert raw values, e.g. "n" for a 16 bit integer oder
# "f>" for a big endian float IEEE 754 floating-point numbers
# can be overwritten in parseInfo per reading by specifying the key "unpack"
defPoll => 1, # All defined Input Registers should be polled by default unless specified otherwise in parseInfo or by attributes
defShowGet => 1, # default für showget Key in parseInfo
},
"h" => { # details for "holding registers" if the device offers them
read => 3, # use function code 3 to read holding registers.
write => 6, # use function code 6 to write holding registers (alternative could be 16)
defLen => 2, # default length (number of registers) per value (e.g. 2 for a float of 4 bytes that spans 2 registers)
# can be overwritten in parseInfo per reading by specifying the key "len"
combine => 10, # allow combined read of up to 10 adjacent registers during getUpdate
defUnpack => "n", # default pack / unpack code to convert raw values, e.g. "n" for a 16 bit integer oder
# "f>" for a big endian float IEEE 754 floating-point numbers
# can be overwritten in parseInfo per reading by specifying the key "unpack"
defShowGet => 1, # default für showget Key in parseInfo
},
);
# %parseInfo:
# r/c/i+adress => objHashRef (h = holding register, c = coil, i = input register, d = discrete input)
# the address is a decimal number without leading 0
#
# Explanation of the parseInfo hash sub-keys:
# name internal name of the value in the modbus documentation of the physical device
# reading name of the reading to be used in Fhem
# set can be set to 1 to allow writing this value with a Fhem set-command
# setmin min value for input validation in a set command
# setmax max value for input validation in a set command
# hint string for fhemweb to create a selection or slider
# expr perl expression to convert a string after it has bee read
# map a map string to convert an value from the device to a more readable output string
# or to convert a user input to the machine representation
# e.g. "0:mittig, 1:oberhalb, 2:unterhalb"
# setexpr per expression to convert an input string to the machine format before writing
# this is typically the reverse of the above expr
# format a format string for sprintf to format a value read
# len number of Registers this value spans
# poll defines if this value is included in the read that the module does every defined interval
# this can be changed by a user with an attribute
# unpack defines the translation between data in the module and in the communication frame
# see the documentation of the perl pack function for details.
# example: "n" for an unsigned 16 bit value or "f>" for a float that is stored in two registers
# showget can be set to 1 to allow a Fhem get command to read this value from the device
# polldelay if a value should not be read in each iteration after interval has passed,
# this value can be set to a multiple of interval
###############################################################################################################
# Holding Register
###############################################################################################################
my %SystemairMparseInfo = (
"h100" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_FAN_SPEED_LEVEL", # internal name of this register in the hardware doc
reading => "REG_FAN_SPEED_LEVEL", # name of the reading for this value
set => 1, # this value can be set
},
"h208" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_LVL1", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_LVL1", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h209" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_LVL2", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_LVL2", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h210" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_LVL3", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_LVL3", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h211" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_LVL4", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_LVL4", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h212" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_LVL5", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_LVL5", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h214" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_IN2", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_IN2", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h213" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_IN1", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_IN1", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h214" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_IN2", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_IN2", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h215" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_IN3", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_IN3", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h216" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_IN4", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_IN4", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h217" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_HC_TEMP_IN5", # internal name of this register in the hardware doc
reading => "REG_HC_TEMP_IN5", # name of the reading for this value
set => 0, # this value can be set
expr => '$val/10',
},
"h350" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_ROTOR_STATE", # internal name of this register in the hardware doc
reading => "REG_ROTOR_STATE", # name of the reading for this value
set => 0, # this value can be set
},
"h351" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_ROTOR_RELAY_ACTIVE", # internal name of this register in the hardware doc
reading => "REG_ROTOR_RELAY_ACTIVE", # name of the reading for this value
set => 0, # this value can be set
},
"h500" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_SYSTEM_TYP", # internal name of this register in the hardware doc
reading => "REG_SYSTEM_TYP", # name of the reading for this value
# unpack => "n", # name of the reading for this value
# min => 0, # input validation for set: min value
# max => 4, # input validation for set: max value
# format => '%.s', # format string for sprintf
# set => 1, # this value can be set
},
"h600" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_FILTER_PER", # internal name of this register in the hardware doc
reading => "REG_FILTER_PER", # name of the reading for this value
set => 0, # this value can be set
},
"h601" => { # holding register 0x0014
# Write the network port node address: 1 to 247 for MODBUS Protocol, default 1.
# Requires a restart to become effective.
name => "REG_FILTER_DAYS", # internal name of this register in the hardware doc
reading => "REG_FILTER_DAYS", # name of the reading for this value
set => 0, # this value can be set
},
# Ende parseInfo
);
#####################################
sub
ModbusSystemair_Initialize($)
{
my ($modHash) = @_;
require "$attr{global}{modpath}/FHEM/98_Modbus.pm";
$modHash->{parseInfo} = \%SystemairMparseInfo; # defines registers, inputs, coils etc. for this Modbus Defive
$modHash->{deviceInfo} = \%SystemairMdeviceInfo; # defines properties of the device like
# defaults and supported function codes
ModbusLD_Initialize($modHash); # Generic function of the Modbus module does the rest
$modHash->{AttrList} = $modHash->{AttrList} . " " . # Standard Attributes like IODEv etc
$modHash->{ObjAttrList} . " " . # Attributes to add or overwrite parseInfo definitions
$modHash->{DevAttrList} . " " . # Attributes to add or overwrite devInfo definitions
"poll-.* " . # overwrite poll with poll-ReadingName
"polldelay-.* "; # overwrite polldelay with polldelay-ReadingName
}
1;
Fehler was die Abfrage angeht habe ich nun selber gefunden:
defPoll => 1,
Fehlte oben in der Definition.
Trotzdem würde ich mich freuen wenn es noch jemand gibt der auch eine Anlage hat.
Gruß
Björnar
...es scheint doch nicht ganz gelöst zu sein.
Er Fragt bis auf 3 Werte alle ab so wie er soll.
Manuell kann ich die Werte die nicht abgefragt werden aber abfragen.
Es geht um: REG_HC_TEMP_IN2, REG_HC_TEMP_IN4 und REG_ROTOR_RELAY_ACTIVE
Ich verstehe nicht warum diese nicht mit abgefragt werden.
Gruß Björnar
Was Du geschrieben hast ist Code für eine 99_myUtils, bitte benenne Deine Datei entsprechend um oder nehme sie ganz weg vom Download. Stelle nur den Code hier rein und sage das er für eine 99_myUtils Datei ist.
Nennen kann man die Datei ja dann 99_myUtils_ModbusSystemair.pm
Für eine ricthige Moduldatei fehlen einige grundlegende Dinge (http://www.fhemwiki.de/wiki/DevelopmentModuleIntro)
Grüße
ich habe das Modul 98_ModbusSDM630 kompiert und entsprechend angepasst.
Dann müsste dies ja auch "falsch" sein.
Kannst du den Zusammenhang mit Myutils mal erklären?
Code welcher in einer 99er Datei steht wird immer geladen. Code welcher in einer anderen Datei steht wird erst auf Anweisung des Users geladen. Bei den meisten Modulen durch ein define oder auch durch autocreate Anweisungen bei 2 Stuffigen Modulen. Das was ich bei Deinem Code sehe einschließlich dem 1; am Ende deutet nicht auf ein FHEM Modul im eigentlichen Sinne hin.
Deine Vorlage muß ich gestehen kenne ich nicht und weiß auch nicht wie es dazu kommt das die Datei so eingecheckt wurde.
Aber glaube mir es ist gerade auf hinblick wenn Anfänger damit arbeiten wollen besser daraus entweder ein Device Modul zu machen so wie es im Wiki spezifiziert ist oder lieber eine 99_myUtils_*
Eine 98_ModbusSDM630 finde ich im offiziellen trunk nicht.
Aber es gibt einige 98_Modbus Module
98_ModbusTrovis5576.pm
98_ModbusSET.pm
Sind wohl Hilfsmodule welche die 98_Modbus.pm benötigen und somit wohl auch über 98_Modbus.pm geladen werden. Dein Code steht allerdings alleine ohne jegliche Abhängigkeit.
meiner greift auch auf 98_Modbus.pm zu.
require "$attr{global}{modpath}/FHEM/98_Modbus.pm";
Und du hast auch den entsprechend definiert? Dann wird es wohl passen.
Zitat von: CoolTux am 09 Juni 2016, 13:06:41
Und du hast auch den entsprechend definiert? Dann wird es wohl passen.
wie gesagt nur kopiert. Und dazu noch Anfänger.
Ist denn 98_Modbus... richtig oder 99_MyUtils_....?
Ich würde zum jetzigen Zeitpunkt erstmal sagen lass es so.
Ich gehe mal davon aus das Du irgendwo bestimmt ein define vom TYPE=Modbus oder ähnlich hast.
Grüße
Zitat von: wthiess am 13 Juni 2016, 14:01:10
Hallo Bjoernar!
Ich würde gerne mitmachen und Testen.
Bin wieder nächstes Wochenende auf der Baustelle.
Kannst du mir bitte deinen Schaltplan zukommen lassen. Auch wäre deine Fhem defines hilfreich.
Wo bekomme ich dein Modul?
lg
Wolgang
Hallo,
du musst mehr lesen und dir ein paar Dinge selber erarbeiten. Ansonsten wirst du schnell frustriert sein.
Modul ist im Beitrag 3 angehängt.
Ist aber noch nicht fertig!
Wenn du dir die FHEM Grundlagen durchgelesen hast solltest du es auch ohne Probleme einbinden können.
Deinen Adapter kenne ich nicht:
Bei mir ist es wie hier verdrahtet: https://github.com/gonium/gosdm630 (https://github.com/gonium/gosdm630)
Aber Grundsätzlich gibt es ja nur A und B (+ und -)
Gruß
Björnar
Zitat von: wthiess am 13 Juni 2016, 14:28:48
Leider schaffe ich es nicht. Trotzdem Danke. Ich werde mir wohl selber ein Modul erarbeiten müssen.
lg
Wolfgang
Das verstehe ich nun überhaupt nicht mehr.
Nach mal Modul hängt am dritten Beitrag. Dort kannst du es dir runterladen und bei dir einbinden.
Zitat von: wthiess am 13 Juni 2016, 14:42:49Wo bekomme ich dein Modul?
...war darauf bezogen.
Was ist denn dein Problem?
Bekommst du das Modul nicht eingebunden, Verkabelung....?
habe es erstmal mit den für mich relevanten Werten gemacht.
Lässt sich natürlich noch erweitern.
Sehr interessant finde den Status vom Wärmetauscher (ist glaube ich in der Version noch nicht drin, stelle ich aber später mal ein) und die Temperatur Fühler.
Viele Daten sind für mich irrelevant, was fehlt dir denn noch?
Es ist eine VSR300DE
IN1,2,4 und 5 lese ich aus.
Sensor 3 gibt es bei mir nicht.
Nicht ich bin verrutsch sondern die. Register sind alle -1 zu nehmen!
Die Timings habe ich auch noch geändert.
sorry aber 1. steht das im Modul und 2. sollte das auch so klar sein wenn du schon mal ein Modul eingebunden hast.
define <name> ModbusSystemair <id> <interval>
define Systemair ModbusSystemair 1 60
Zitat von: wthiess am 13 Juni 2016, 16:52:56
Hallo Bjoernar!
Nochmal. Ich würde gerne mitarbeiten. Aber nur wenn du alles preis gibst. Sprich fhem definitionen. Ein forum ist dazu da damit man das Rad nicht 2x erfindet.
Mfg
Wolfganh
Lass es einfach und mach es selbst.
Das define habe ich oben beschrieben. Wieder nicht gelesen?
Problem mit dem auslesen ist gelöst.
hallo,
habe eine systemair vr400 und hab schon versucht mit modbus darauf zuzugreifen bin allerdings gescheitert (habs aber auch nicht lange probiert).
ich würde das modul auch gerne probieren nachdem ich auch den gleichen rs485 adapter habe (die 120 ohm hab ich zwar genommen aber die anderen eben nicht...).
Was ich nirgends gefunden habe: verwendet die systemair automatisch 1 als adresse am modbus? oder muß man die irgendwo einstellen - die doku von systemair schweigt sich dazu aus (oder ich hab es nicht gefunden...)
danke anton
Zitat von: antonwinden am 14 Juni 2016, 08:15:01
hallo,
habe eine systemair vr400 und hab schon versucht mit modbus darauf zuzugreifen bin allerdings gescheitert (habs aber auch nicht lange probiert).
ich würde das modul auch gerne probieren nachdem ich auch den gleichen rs485 adapter habe (die 120 ohm hab ich zwar genommen aber die anderen eben nicht...).
Was ich nirgends gefunden habe: verwendet die systemair automatisch 1 als adresse am modbus? oder muß man die irgendwo einstellen - die doku von systemair schweigt sich dazu aus (oder ich hab es nicht gefunden...)
danke anton
Guten Morgen,
ohne die beiden pullup Widerstände habe ich es nicht probiert. Mit läuft es aber ohne Probleme.
Die Adresse kannst du an der CD3 unter Einstellungen->Funktionen->Modbus ändern. Hier bitte auch drauf achten das die parität passt.
Mit der zweiten von mir angehängten Datei sollten eigentlich fast alle Werte die relevant sind ankommen.
Gruß
Björnar
...habe das Modul jetzt an den ersten Beitrag gehängt.
Werde es wenn dann auch dort aktualisieren.
Hallo!
Habe Heute meine Anlage in Betrieb genommen. Sofort funktioniert. Danke an Bjoernar für das Modul. Ich verwende folgenden Stick:
https://www.amazon.de/gp/product/B00I9H5J02/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1
Der hat 4 Dipps wovon ich die 3 Wiederstände Dipp 2,3,4 auf on gesetzt habe. Ein altes ISDN Kabel mit "4=B-" "5=A+" sowie in der Modebusbeschreibung von Systemair beschrieben. Da mein Kabel nur 4 Meter lang ist und ich nur 9600 Baud eingstellt habe, kann ich auf den Terminator am Ende beider KWL verzichten. Info von einem Elektroniker.
In der 98_ModbusSystemair.pm habe ich die ### in der Section REG_HC_TEMP_IN3 entfernt da die VR400 diesen Sensor eingebaut hat.
Mein bisheriger fhem.cfg Eintrag
define VR400Mod Modbus /dev/ttyUSB1@9600,8,E,1 dieser Eintrag führt nach reboot bei mehreren USB's zu Problemen. Also besser nach ID.
define VR400Mod Modbus /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL01GIJ7-if00-port0@9600,8,E,1
attr VR400Mod room Modebus
define VR400 ModbusSystemair 1 60
attr VR400 userattr 1 IODev
attr VR400 IODev VR400Mod
attr VR400 room Modebus
Mir fehlen noch weitere fhem.cfg Einträge. Werde auch noch Erarbeiten.
lg
Wolfgamg
Super danke. Dann werde ich mal die Kommentare anpassen und die Sensor 3 aktivieren wenn es vr400 erkannt wird. Welcher Typ wird da angezeigt?
Gibt es etwas das dir noch fehlt ?
REG_HC_TEMP_IN3 216 R 10 Reg Temperature on sensor 3 * 10. Exhaust
air sensor.
Derzeit erarbeite ich mir Punkt für Punkt. Da fehlt mir noch nichts. Das wird sich im laufe der arbeit ergeben.
Ich bin bei den Grundlagen. Das Endkonzept gibt es noch nicht.
lg
Wolfgang
Ok der steht ja drin war nur nicht aktiv da bei mir nicht vorhanden.
Derzeit kann ich alle Temperaturen auslesen und darstellen. Doch den h100 Speed_level kann ich nur per Hand steuern/darstellen? Hat jemand Ahnung. Ich suche bereits seit Stunden.
lg
Wolfgang
H100 kann ich bei mir auch per set setzen und wird dann so an der Fernbedienung angezeigt. Was gibt er denn bei dir für einen Wert aus?
Ich kanns nicht in der Fhem.cfg definieren. Keine Ahnung vom Syntax??
Wenn du das Modul aufrufst kannst du oben alle Werte per get holen und den h100 per set setzen
Musst dafür also in der fhem.cfg nichts machen.
Ich glaub wir reden aneinander vorbei.
Ich verstehe das leider nicht.
Ich kann alles per Hand steuern. Aber ich möchte es am Handy per 8084 ablesen ohne get oder set drücken zu müssen.
Die siehst doch die Werte in dem Modul. Was genau möchtest du denn machen? Bzw. Hast du vor? Evtl. Hilft dir das Thema userreadings weiter. Da kannst du dann den Werten auch Namen geben wenn du möchtest
Hier komme ich nicht weiter:
Ich möchte per Schieberegler den Level steuern.
Wo ist der Fehler? Bitte Hilfe!
#Modebus
define VR400Mod Modbus /dev/ttyUSB1@9600,8,E,1
attr VR400Mod room Unsorted
#Stufe
define VSpeed ModbusSystemair 1 10
attr VSpeed userattr 1 IODev
attr VSpeed IODev VR400Mod
attr VSpeed obj-h100-reading REG_FAN_SPEED_LEVEL
attr VSpeed dev-h-combine 5
attr VSpeed dev-h-defPoll 1
attr VSpeed room Modebus
attr VSpeed userReadings REG_FAN_SPEED_LEVEL:0,1,2,3
attr VSpeed stateFormat {sprintf("%.0f Level", ReadingsVal($name,"REG_FAN_SPEED_LEVEL",0))}
#Stufe Steuerung
define VSpeedS dummy
attr VSpeedS userattr 1 IODev
attr VSpeedS IODev VR400Mod
attr VSpeedS room Modebus
#attr VSpeedS setList state:slider,0,1,3
attr VSpeedS setList state:0,1,2,3
attr VSpeedS webCmd state
set VSpeedS REG_FAN_SPEED_LEVEL
lg
Wolfgang
...ich glaube das gehört dann wohl in einen anderen Beitrag. Hat ja mit dem Modul direkt nichts zutun....obwohl das schon sehr nett ist was du da vor hast.
Das set in VspeedS scheint aber falsch zu sein, oder?
Zitat von: wthiess am 15 Juni 2016, 00:25:10
Hier komme ich nicht weiter:
Ich möchte per Schieberegler den Level steuern.
Wo ist der Fehler? Bitte Hilfe!
#Modebus
define VR400Mod Modbus /dev/ttyUSB1@9600,8,E,1
attr VR400Mod room Unsorted
#Stufe
define VSpeed ModbusSystemair 1 10
attr VSpeed userattr 1 IODev
attr VSpeed IODev VR400Mod
attr VSpeed obj-h100-reading REG_FAN_SPEED_LEVEL
attr VSpeed dev-h-combine 5
attr VSpeed dev-h-defPoll 1
attr VSpeed room Modebus
attr VSpeed userReadings REG_FAN_SPEED_LEVEL:0,1,2,3
attr VSpeed stateFormat {sprintf("%.0f Level", ReadingsVal($name,"REG_FAN_SPEED_LEVEL",0))}
#Stufe Steuerung
define VSpeedS dummy
attr VSpeedS userattr 1 IODev
attr VSpeedS IODev VR400Mod
attr VSpeedS room Modebus
#attr VSpeedS setList state:slider,0,1,3
attr VSpeedS setList state:0,1,2,3
attr VSpeedS webCmd state
set VSpeedS REG_FAN_SPEED_LEVEL
lg
Wolfgang
müsste das nicht
set VSpeedS:REG_FAN_SPEED_LEVEL $...
sein?
ich habe erst morgen wieder Zugriff auf meinen FHEM.
Aber hier sollte stehen was du brauchst:
https://forum.fhem.de/index.php?topic=15086.0 (https://forum.fhem.de/index.php?topic=15086.0)
Nein leider nicht. Hab nun mehrere Stunden verbracht.
lg
wolfgang
...werde es morgen mal selber versuchen.
Wie gesagt vorher kann ich leider nicht.
Ansonsten einen neuen Beitrag im Anfänger Forum auf machen.
Da es ja nichts mit meinem Modul zutun hat.
Gruß
Björnar
Habe ich schon gemacht.
Danke vorerst.
lg
Wolfgang
Habe eine Lösung gefunden: Allerdings mit 4 notify.
Noch ein Schönheitsfehler: Am Schieberegler bekomme ich es nicht mit wenn jemand an der Maschine mit CD3 regelt oder durch ein anderes Event z.B. Co2 bzw. Temperatur Steuerung sich der Wert ändert. D.h. hier muss noch ein "reading" irgend wo rein???
lg
Wolfgang
#Modebus
define VR400Mod Modbus /dev/ttyUSB1@9600,8,E,1
attr VR400Mod room Unsorted
#Stufe
define VSpeed ModbusSystemair 1 60
attr VSpeed userattr 1 IODev dev-h-combine dev-h-defPoll obj-h100-reading stateFormat userReadings
attr VSpeed IODev VR400Mod
attr VSpeed dev-h-combine 5
attr VSpeed dev-h-defPoll 1
attr VSpeed obj-h100-reading REG_FAN_SPEED_LEVEL
attr VSpeed room Modebus
attr VSpeed stateFormat {sprintf("%.0f Level", ReadingsVal($name,"REG_FAN_SPEED_LEVEL",0))}
attr VSpeed userReadings REG_FAN_SPEED_LEVEL:0,1,2,3
#Stufe Steuerung
define VSpeedD dummy
attr VSpeedD room Modebus
attr VSpeedD setList state:slider,0,1,3
attr VSpeedD webCmd state
#set VSpeed REG_FAN_SPEED_LEVEL 3
define Regler0 notify VSpeedD:0 set VSpeed REG_FAN_SPEED_LEVEL 0
attr Regler0 room Modebus
define Regler1 notify VSpeedD:1 set VSpeed REG_FAN_SPEED_LEVEL 1
attr Regler1 room Modebus
define Regler2 notify VSpeedD:2 set VSpeed REG_FAN_SPEED_LEVEL 2
attr Regler2 room Modebus
define Regler3 notify VSpeedD:3 set VSpeed REG_FAN_SPEED_LEVEL 3
attr Regler3 room Modebus
Hallo Bjoernar
Ich bin mal alle Register durchgegangen. Eventuell wären noch die Alarmfunktionen interessant. Sonst ist denke ich passts für unsere Anlagen. Für grössere gibts dann noch Co2 usw.
Lg
Wolfgang
Hallo
Ich hab noch was gefunden. Die Heizung wäre noch wichtig.
Lg
Wolfgang
....werde ich am Wochenende abändern.
Super
moin, hab jetzt meine vr400 auch zum laufen gebracht.
wenn ich noch wünsche äußern dürfte dann sind vielleicht folgende werte noch interessant die einstellbar sind mit der console der vr:
die temperaturkontrolle (werte 208 und in 201, 202 welche art von heizung vorhanden ist)
und absoluter luxus die programmsteuerung der vr400 -> zeiten sind die werte von 401 (ob aktiv oder nicht) und die zeiten folgend bis 459.
danke anton
Hallo Anton
Wäre für andere User sicher Interessant was für ein Fehler es war.
Ist die Zeitsteuerung nicht besser in Fhem?
Lg
Wolfgang
Hallo,
ein sehr trivialer fehler wars: a und b vertauscht -> hab den schaltplan falsch gelesen und außerdem hab ich beim digitus adapter die 680 Ohm widerstände nicht gewusst...
Bei der Zeitsteuerung wäre zumindestens REG_WP_ACTIVE interessant denn dann sieht man ob in der vr programme aktiv sind....
stimmt das die zeitsteuerung in fhem besser/flexibler ist allerdings funkt die andere auch wenn fhem auf der nase liegt (kommt eher selten vor bzw bei mir nur wenn ich selber dafür verantwortlich war...) und zusätzlich passiert es dann nicht das sich die interne Steuerung der vr400 mit einer eventuell mit fhem programmierten überkreuzt...
ist aber auch nicht so wichtig -> hab jetzt mal einfach selbst das modul dahin gehend erweitert (Zeit einstellen etc. denn das geht unter fhem einfach komfortabler und ich muß nicht immer in den keller :-) ) für mich um zu sehen ob es prinzipiell geht.
und es funktioniert wenn man die grenzen einhält (zb jahr nur 2stellig) denn wenn man das nicht macht dann kann es passieren das die vr erst wieder antwortet wenn man sie kurz von strom nimmt...
gruß anton
Kannst deine geänderte Version hier einstellen oder mir senden. Werden dann eine neue Version im ersten Beitrag bereit stellen.
Gruß
Björnar
anbei die von mir geänderte version. hab die systemzeit der vr400 und ein paar andere readings dazu gegeben wie die Heizungssteuerung und Programmsteuerung für Montag und Dienstag (den Rest kann man bei wunsch nachtragen) und ob ein Programm aktiv ist.
Was fehlt ist eine Kontrolle ob richtige werte übergeben werden -> wenn ich mehrere sinnlose werte an die vr400 schicke dann hängt sich anscheinend die vr auf bzw reagiert sie erst dann wieder wenn ich sie kurz vom strom nehme.
gruß anton
Die Alarmfunktion wäre auch wichtig.
Lg
Wolfgang
...kommt...etwas Geduld
Super. Werds Morgen testen. Danke
Lg
Wolfgang
Hallo!
Hab nach dem einspielen der Datei meinen Raspi neu gebootet. Jetzt sind alle meine USB's tot. Ich muss jetzt jemanden auf die Baustelle schicken um einen Hard Reset durchzuführen. Dann kann ich wieder testen.
Was mir noch fehlt. Schaffes es aber nicht selber.
Alarm's auslesen: "REG_ALARMS_ALL"
Heizung schalten nicht Frostschutz."REG_HC_TEMP_LVL"
Dann wäre wirklich alles drinnen.
lg
Wolfgang
Hallo,
neue Version ist im ersten Beitrag.
Alarme werden jetzt ausgegeben.
Einige Werte werden jetzt in Text umgesetzt (Geschwindigkeit, Rotor Status, Typ,...)
Ich musste das Gerät löschen, neu starten und dann neu anlagen.
Sonst wurden die Sachen nicht übernommen.
Delays habe ich auch angepasst, das waren doch sonst schon sehr viele readings mit den Programmen.
Diese werden jetzt nur alle 10min. abgefragt. Das sollte ja vollkommen ausreichen.
Gruß
Björnar
Zitat von: antonwinden am 19 Juni 2016, 13:01:35
anbei noch eine version wo das commdelay draußen ist (geht doch ohne) und minuten und stunden mit listeneingabe -> keine fehleingaben hier möglich...
alle tagesprogramme sind drinnen
gruß anton
nimmst du deine Dateien bitte wieder raus, damit nur die aktuelle im ersten Beitrag steht.
Danke für die Ergänzungen.
hab ich rausgenommen - danke für das modul.
einen kleinen fehler hab ich noch selbst produziert und hast du übernommen 8) ->
statt Zeit_Sekunten gehört Zeit_Sekunden....
danke anton
Ups...ändere ich ab
Hallo!
kommt REG_HC_TEMP_LVL auch noch rein?
lg
Wolfgang
Zitat von: wthiess am 20 Juni 2016, 18:55:45
Hallo!
kommt REG_HC_TEMP_LVL auch noch rein?
lg
Wolfgang
...du darfst auch gerne selbst ergänzen und nicht immer auf die Arbeit von anderen warten...
Ok Danke ich werde nichts mehr fragen. Ich hab schon Stunden damit verbracht.
Ich frag nur wenn ich nicht weiter kann.
lg
wolfgang
Zitat von: wthiess am 20 Juni 2016, 20:17:31
Ok Danke ich werde nichts mehr fragen. Ich hab schon Stunden damit verbracht.
Ich frag nur wenn ich nicht weiter kann.
lg
wolfgang
Und genau das glaube ich dir zum wiederholten male nicht. Einfach mal lesen und verstehen. Dann kannst du dein nächstes Modbus Gerät auch selber einbinden. Immer nur jammern und einfordern hilft da nicht
hab noch einen kleinen Fehler gefunden:
REG_HC_TEMP_SP hab ich als r/w reingegeben ist aber nur r
dafür hab ich die werte 207 und 209 - 213 rein gegeben :-)
anbei anton
Danke Anton!
Habe bei REG_HC_TEMP_LVL "0" ergänzt!
Warum hast du bei REG_ROTOR_STATE
"polldelay => 300" rauskommentiert?
lg
Wolfgang
hi
wie oft man die werte abfragt bedarf meiner meinung nach noch eine optimierung. ich hab das vorhandene genommen und um einige werte ergänzt die mir sinnvoll erschienen und da war halt das polldelay auskommentiert...
zb wird wahrscheinlich niemand die interne uhr der vr400 wirklich verwenden sondern man kontrolliert ob sie richtig geht -> daher sollte man nach gusto hier das polldelay auf einmal täglich oder nur auf "once" und dafür mit einem "at" kontrollieren ob sie richtig läuft...
soweit ich das beurteilen kann betrifft das auch einige andere werte wie die verschiedenen temperaturlevel der zusatzheizung. das würde auch den verkehr auf dem bus entlasten.
was meiner meinung noch zusätzlich optimiert gehört wäre ein state der einige sinnvolle werte zusammenfasst - ist nur so das meine perl kenntnisse etwas zu wünschen übrig lassen. außerdem fehlt mir derzeit etwas die zeit und mit dem jetzigen stand kann man ja schon einiges anfangen.
gruß anton
Zitat von: antonwinden am 21 Juni 2016, 18:34:57
hi
wie oft man die werte abfragt bedarf meiner meinung nach noch eine optimierung. ich hab das vorhandene genommen und um einige werte ergänzt die mir sinnvoll erschienen und da war halt das polldelay auskommentiert...
zb wird wahrscheinlich niemand die interne uhr der vr400 wirklich verwenden sondern man kontrolliert ob sie richtig geht -> daher sollte man nach gusto hier das polldelay auf einmal täglich oder nur auf "once" und dafür mit einem "at" kontrollieren ob sie richtig läuft...
soweit ich das beurteilen kann betrifft das auch einige andere werte wie die verschiedenen temperaturlevel der zusatzheizung. das würde auch den verkehr auf dem bus entlasten.
was meiner meinung noch zusätzlich optimiert gehört wäre ein state der einige sinnvolle werte zusammenfasst - ist nur so das meine perl kenntnisse etwas zu wünschen übrig lassen. außerdem fehlt mir derzeit etwas die zeit und mit dem jetzigen stand kann man ja schon einiges anfangen.
gruß anton
State habe ich geplant nur noch nicht hin bekommen.
Zitat von: wthiess am 21 Juni 2016, 19:03:27
Ok Danke. Hab mir eh schon meine eigene Version gebaut.
Dann solltest du auch deine Erweiterungen hier Posten und mit anderem Teilen.
Zitat von: Bjoernar am 22 Juni 2016, 06:58:38
Dann solltest du auch deine Erweiterungen hier Posten und mit anderem Teilen.
kann mich dem nur anschließen :-)
man lebt ja hier vom teilen und sich gegenseitig helfen...
Arbeite nun mit ModbusAttr.pm
Gut erklärt im command fhem.
Ist viel einfacher. Weniger Meldungen im Monitor. Auch kaum Fehlermeldungen mehr im log.
Gruß Wolfgang