Integration von Nibe Wärmepumpen per RS485

Begonnen von matzefisi, 30 Juli 2014, 00:10:44

Vorheriges Thema - Nächstes Thema

Sonnenschein

Hallo, jetzt habe ich mich mal doch angemeldet.
Ich habe eine Nibe F750 und möchte Einstellungen der Pumpe steuern, sprich Register schreiben.
In einem Beitrag wird erwähnt, dass wohl nicht alle Register geschrieben werden können.
Laut der Beschreibung gibt es wenn, alles installiert, ist einen Befehl der mir ausweist welche Register beschrieben werden können.

Da ich lange im Irrgarten von API und IFTTT erfolglos gesucht hatte, möchte ich hier nicht jetzt auch noch Zeit verschwenden und dann erkennen dass meine Anforderungen nicht erfüllt werden können.

Es müssten folgende Werte frei gesetzt werden können.
1. die normale Ventilatorgeschwindigkeit!!! im Service Einstellungsmenue. ID???
2. Ladepumpe Heizung ID43181
3. Gradminuten ID43005

Wünschenswert wäre
4. Außentemperatur oder Raumtemperatur (um indirekt die Heizkurve und dadurch die angestrebte Vorlauftemperatur anzupassen)
5. Denke Kompressor, berechnete Vorlauftemperatur etc kann ich wohl ausschließen, da es zu sehr in das System eingreift.

Hintergrund:
Wir haben eine Luftfeuchtigkeit von 10-50%, da brauche ich keine ständige Lüftung.
Die Luft ist aber der Energieträger und die Menge schwankt nach Anforderungen von Warmwasser, Heizung und Außentemperatur.
Bei Temperaturen im Außenbereich von 0-12 Grad gerät die Heizung häufig in Start/Stopp Betrieb weil zu viel Energie da ist oder sie ständig vereist.
Es gibt leider keinen Filter für die Außentemperatur zu der Vorlauftemperatur der FBH, somit wird tagsüber gedrosselt und Nachts muss die Heizung  wieder extrem arbeiten und vereist.
Genauso gibt es nur eine sehr einfache statische Schaltung zu Lüftung und Heizbedarf, die gerade mal die Probleme bei einer Außentemperatur größer 12 Grad ausstreicht.

In meiner Not würde ich über die AUX Eingänge die Lüfter einstellen, aber es würde nur ein Bruchteil der Möglichkeiten erreicht.

Händisch bekomme ich die Heizung in einen gleichmäßigen Lauf, aber ich kann nicht alle Stunde die Werte kontrollieren und anpassen.

Es wäre also schön wenn ich erfahren könnte ob technisch die genannten Register geschrieben werden können.

Lieber Grüße
Sonnenschein.

vuffiraa

Hallo Sonnenschein,

das Modul stützt sich auf die Parameter, die im ModbusManager als änderbar ausgewiesen werden. Es gibt keine Logik, die noch weitergehende Enschränkungen oder Ausnahmen macht. Mir war nur aufgefallen, dass es nicht zu allen Einstellungen, die man im Display der Nibe konfigurieren kann (z.B. Zeitsteuerungen), entsprechende Register im ModbusManager gibt. Im ModbusManager kannst du die Register für dein Modell anschauen oder auch exportieren. Das Fhem-Modul liest genau diese Datei und erzeugt daraus die Listen der lesbaren Register und der schreibbaren Register.

Ich kann dir hier leider auch nicht grantieren, dass sich alle deine Anforderungen mit dem Fhem-Modul umsetzen lassen. Selbsterklärend sind die ganzen Register leider nicht und du wirst etwas Zeit aufwenden müssen, um dich da einzuarbeiten. Die Aufgabe würde wahrscheinlich darin bestehen, aus den änderbaren Parameter die Kombination zu finden, die dein gewünschtes Erbegnis erreicht. Wenn ich das richtig sehe, kann man Ventilatorgeschwindigkeiten, die Geschwindigkeit der Ladepumpe und Temperatursensoren nicht direkt einstellen. Aber Gradminuten, Punktverschiebungen der Heizkurve, Min- und Maxwerte für Geschwindigkeiten usw.

Ich hoffe, das schreckt dich jetzt nicht ab!

Viele Grüße
Ulf
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Sonnenschein

Hallo Ulf,

vielen Dank für die schnelle und kompetente Antwort.
Habe alle gewünschten Werte gefunden.
Habe mit dem Motbusmanager vor vier Jahren mal kurz gearbeitet.
Aber jetzt sehe ich zusätzliche Register die sehr interessant sind.
Seltsamerweise sind da aber auch  Register dabei, die würde ich niemals wagen zu schreiben.

Abschrecken, tut mich eher noch der Aufbau 2.Rechner etc und die Angst, dass die 20 Werte nicht reichen werden.
Weil aktuell sprudeln viele Ideen.

Natürlich kann ich es jetzt nicht finden. Aber man könne wohl auch auf gezielte Einzelregister des Modbus zugreifen ohne die Modbusliste. Hier waren die Responce Time auch länger. Wenn ich mich richtig erinnere bis zu der dreifachen Zeit. dann wären auch alle Register erreichbar. Wäre das eine Idee? Hoffe ich finde die Angaben dazu noch.

Mein Fhem Server ist ein alter Laptop, wäre es ein Versuch wert, deine beiden Module auf einem Rechner zu installieren?
Geht das überhaupt? Ist eine FHEM2FhEM Konfiguration für deine Module zwingend erforderlich?
Gabe es schon eine Antwort zu der Frage zwei Instanzen von Fhem auf einem Rechner laufen zu lassen und mit FHEM2FHem zu kombinieren?

Ich vermute, dass eine Portierung auf ein Arduino oder gar einem ESP8266, kommt eher einer Neuprogrammierung nahe, oder?

Liebe Grüße Sonnenschein

Sonnenschein

Gefunden das Thema mit den Timeout und einzelabfragen der Register
Siehe Anhang Seite 22.

mit log.set 0,5sec
ohne log.set 2,1sec

vuffiraa

Hallo Sonnenschein,

das was du zu den Einzelabfragen gefunden hast, bezieht sich auf die Modbus-Erweiterung. Das Fhem-Modul simuliert ja genau dieses, daher sind die Angaben so nicht anwendbar. Aber natürlich kann das Fhem-Modul das trotzdem ;-)

Das Modul kann beliebige Register aus der Heizung lesen. Dabei gibt es nur den Unterschied, ob der Register zu den 20 Registern gehört, die über den ModbusManager definiert werden können. Wenn es zu diesen gehört, liefert die Heizung die Werte regelmäßig ans Modul. Ansonsten muß das Modul den Registerwert direkt bei der Heizung anfragen. Der zweite Weg dauert etwas länger. Aber mit Hilfe von 'notify' oder 'DOIF' lassen sich dann alle Register von der Heizung holen.

Das Problem mit den zwei Fhem-Instanzen besteht darin, dass die Heizung ihre Nachrichten immer sehr zeitnah bestätigt haben will. Das klappt, bei mir, nicht auf der Hauptinstallation bzw. das komplette Verarbeiten der Nachrichten dauert zu lange. Naja und dann steht meine Hauptinstanz auch nicht neben der Heizung. Die zweite Fhem-Instanz läuft bei mir auf einem Raspi B+. Da kommen nur die Daten von der Heizung und ein paar Stromzählern an. Grundsätzlich funktioniert das aber auch alles auf einer Fhem-Instanz. Wenn die Nachrichten nicht rechtzeitig bestätigt werden, geht die Heizung in den Alarmmodus, funktioniert aber weiterhin und liefert auch weiterhin Daten ans Modul. Zum Testen könnte ich das akzeptieren. Zwei Fhem-Instanzen auf dem gleichen Rechner hat wohl noch keiner probiert bzw. ich habe da keine Antwort bekommen.

Bei einer Portierung auf Arduino / ESP8266 müsste man das Module bzw. Teile davon komplett neu machen. In dieser Richtung plane ich aber momentan nichts.

Viele Grüße
Ulf
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Sonnenschein

Hallo,

ich habe meinen RS485 USB Stick erhalten und auch schon einige Versuche unternommen.
1. Einzelne Register lesen und schreiben geht auf einem Rechner.
2. Nibe akzeptiert irgend wie die LOG.SET nicht. Es werden keine Daten über den Modbus gesendet als auch auf den Stick geschrieben.
3. Ca nach 24h +/- 1h timeout wie zu vermuten war.
4. Habe NibeGW (Raspbery) gestartet, hier gibt es keinen timeout. Die RAW Daten werden fleißig per UDP gesendet. Es gibt keinen timeout.

Jetzt dachte ich fein, jetzt mache ich aus NIBE 70 RS485.pm einfach ein NIBE 70 UDP.
Leider sind meine PERL Kenntnisse eher eines DAUs und musste feststellen ich werde mich nicht rein denken könne.
Auf Openhab2 wollte ich jetzt auch nicht umstellen.

Der Vorteil mit NibeGW ist, local könnte ich den Dienst höher priorisieren umd timeouts zu verhindern. NibeGW gibt es auch als Arduino, die könnte man auf einen ESP8266 kompalieren. So hätte meinen Dongle, den man einfach an die Nibe Pumpe anschließen könnte.
Laut Änderungsverzeichniss soll NibeGW auch schreiben können.

Wäre es für Euch möglich eine UDP Variante mit aufzunehmen?
Sobald ich den Code für einen ESP8266 fertig habe, würde ich ihn auch veröffentlichen.

Ich würde es gerne sogar selber versuchen, aber ich bin wohl noch zu weit weg vom progammieren.

Liebe Grüße
Sonnenschein.



vuffiraa

Hallo Sonnenschein,

da hast du ja einiges probiert. Ich versuche mal die einzelnen Punkte aus deinem Beitrag zu kommentieren  ;)

Das Problem mit dem USB-Stick und LOG.SET sollte sich unabhängig vom Modul direkt mit an der Nibe lösen lassen. Prüfe mal genau, nach den Anweisungen von Nibe, das Format des Sticks und die Datei (Format, Dateinamen, Ablageort auf dem Stick). Wenn du es schaffst, Logs auf den Stick zu schreiben, liefert die Nibe auch über die Modbus40-Schnittstelle Daten.

Hast du jetzt eigentlich alles nur auf dem Rechner installiert? Da hatte ich auch vermutet, dass es nicht ohne Timeouts geht. Wo läuft das NibeGW? Wenn du da extra einen Raspi genommen hast, könntest du den doch auch für Fhem benutzen.

Mit UDP habe ich mich auch noch nicht weiter beschäftigt, aber nichts ist unmöglich. Man braucht, wie immer, nur die Zeit dafür. Also ich kann nichts versprechen, aber ich überlege es mir mal. Ich habe mir den Code vom NibeGW (für openhab2) mal angeschaut, du hast recht, da sind die Kommandos zu sehen, damit man auch einzelnen Werte lesen und schreiben können sollte.

Viele Grüße,
VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Sonnenschein

Hallo VuffiRaa,

bin auch schon ein kleines bisschen weitergekommen.
Aber erst zu deinen Themen.

LOG.SET: Die Nibe Pumpe schreibt die LOG Daten auf den USB Stick. Aber ich erkenne weder über dein NIBE70_RS485.pm oder NibeGW, dass die LOG:SET Daten gesendet werden. Vielleicht interpretiere ich es ja auch falsch. Es werde in beiden Varianten ca. alle 2 Sekunden RAW Daten gesendet die mit 5c00206850 beginnen und dann mit 20x mit FFFF0000 gefüllt sind. Das sieht für mich nach keinen Inhalt aus, das HEX 68 einen LOG.SET kennzeichnet. Pass ja auch zu den 20x FFFF0000.

Installation: Einmal hatte beide NIBE Module auf einem Rechner installiert. Was ja wie beschrieben mit timeout funktionierte. Jetzt läuft NibeGW, FHEM, UPNP und Samba auf dem Rechner. Ich habe jetzt seit zwei Tagen keinen timeout gehabt. Gut NibeGW muss jetzt auch nur den RS485 Transfer bestätigen und die Daten auf UDP pollen. Empfangen konnte ich mangels Programmier Erfahrungen nicht.  Denke an NibeGW ist der Vorteil, das es im Hintergrund eigenständig laufen kann.

Weitere Erfahrungen:
Ich konnte ein $sock=IO::Socket::INE unter Perl installieren und somit über Perl die UDP Daten empfangen.
Jetz versuche ich es mit deinem nibe.pl Programm zu verknüpfen um einfach besser in Perl reinzukommen. Die Fhem Komponente ist gerade noch zu viel, für mich ist @Hash =@_ immer noch etwas völlig abstracktes. Wenn ich nibe.pl aber richtig verstanden habe, werden nur die LOG.SET Daten gesendet.

Also wäre der nächste Schritt, gezielte Werte abzufragen, wie es bei NIBE71.pm mit GET möglich ist.
Danach zu schreiben wie unter SET und dann die Einbindung in FHEM.
Aber es ist für mich der keine Erfahrung mit Perl hat sehr schwierig.

Das funktioniert
#!/usr/bin/perl -w

use IO::Socket;
use strict;

print "Start Server\n";

my ($sock);
my $data;

$sock=IO::Socket::INET->new(
  Proto => 'udp',
  LocalPort => 9999 ,
  Host => 127.0.0.1
) or die "Can't bind: $@\n";

print scalar localtime().": Awaiting data...\n";

while($sock->recv($data, 512)) {

  print scalar localtime().": , ";
  printf (unpack("H*",$data));
  print "\n";
}
print "Stop Server\n";

close($sock);


Da habe ich schon Problem im Umgang $daten und @daten $daten von UDP muss ich jetzt in ein Array bringen. Mal sehen ob ich es schaffe.
#!/usr/bin/perl -w
use strict;
use IO::Socket;

# http://search.cpan.org/~cook/Device-SerialPort-1.002/SerialPort.pm

# Configuration
my $debug = 1; # If you want to see the RAW message please set debug=1

#------------------------------------------------------------------------------------------------------

print "UDP Socket\n";

my ($sock);
$sock=IO::Socket::INET->new(
  Proto => 'udp',
  LocalPort => 9999 ,
  Host => 127.0.0.1
) or die "Can't bind: $@\n";



# Define the basic variables
my $daten; # Array for storing the message



print "Initialized. Let´s go...\n";


# Start the main queue
while(1) {
        # Daten vom UDP Socket holen
$sock->recv($daten, 512);

# Check if the end of the message has arrived
if (defined $daten [0] && $daten[0] eq "5c" && defined $daten[4] && defined $daten[5]) {

# Check if the length of the message is reached.
if (0+@daten==hex($daten[4])+6) {

# Calculate checksum
my $j=0;
my $checksum=0;
for (my $j = 2; $j < hex($daten[4])+5; $j++) {
        $checksum = $checksum^hex($daten[$j]);
  }

                        # Print what we got so far to the console
                        print "HEAD: $daten[0]$daten[1] ADDR: $daten[2] CMD: $daten[3] LEN: $daten[4] CHK: $daten[@daten-1]";


# } nicht gelöscht?

# Check if we got a message with the command 68
# In this message we can expect 20 values from the heater which were defined with the help of ModbusManager
if ($daten[3] eq "68") {
my $j=5;
while($j <  hex($daten[4])+1) {
if ($daten[$j+1].$daten[$j] ne "ffff") {
# Getting the register name
print return_register( hex($daten[$j+1].$daten[$j]),0);
#print " ";
       
print $daten[$j+1] . " " . $daten[$j] . " - " . $daten[$j+3] . " " . $daten[$j+2] . "\n";

# Calculating the actual value
#my $valuetype = return_register( hex($daten[$j+1].$daten[$j]),3);
#my $factor = return_register( hex($daten[$j+1].$daten[$j]),4);
#print return_normalizedvalue($valuetype,$daten[$j+3].$daten[$j+2])/$factor."\n";
$j=$j+4;
} else {
$j=$j+4;
}

}
}

@daten=();
}
}

$SIG{INT} = sub { die "Caught a sigint: $!" };
}

print "\nScript Ended\n";


sub return_normalizedvalue {
# Helper for normalizing the value
#s16, #s32, #u16, u8, #u32, #s8
my (@input) = @_;

if ($input[0] eq "s8") {
    return 0 if $input[1] !~ /^[0-9A-Fa-f]{1,2}$/;
my $num = hex($input[1]);
return $num >> 7 ? $num - 2 ** 8 : $num;
}
elsif ($input[0] eq "s16") {
return 0 if $input[1] !~ /^[0-9A-Fa-f]{1,4}$/;
my $num = hex($input[1]);
return $num >> 15 ? $num - 2 ** 16 : $num;
}
elsif ($input[0] eq "s32") {
return 0 if $input[1] !~ /^[0-9A-Fa-f]{1,8}$/;
my $num = hex($input[1]);
return $num >> 31 ? $num - 2 ** 32 : $num;
}
else {
# Lazy replacement for U8 -> U32
return hex($input[1]);
}
}

sub write_data {
# To be done:
#http://elektronikforumet.com/forum/viewtopic.php?f=4&t=13714&sid=34bc49f6c5651c1464df383af2906265&start=165
#sendBuffer[0] = 0x01; // To the master address 1
#sendBuffer[1] = 0x10; // Write command
#sendBuffer[2] = 0xB7; // High byte address register
#sendBuffer[3] = 0xA3; // Low byte address register
#sendBuffer[4] = 0x00; // Number of register to write high byte
#sendBuffer[5] = 0x01; // Number of register to write low byte
#sendBuffer[6] = 0x02; // Number of following bytes
#tempshort = short.Parse(textBox29.Text);
#shortBuffer = BitConverter.GetBytes(tempshort);
#sendBuffer[7] = shortBuffer[1]; // Value to set, high byte
#sendBuffer[8] = shortBuffer[0]; // Value to set, low byte
#CRC = ModRTU_CRC(sendBuffer, 9);
#sendBuffer[9] = (byte)CRC;
#sendBuffer[10] = (byte)(CRC / 256);



}

sub return_register {

#Title  = 0
#Info = 1
#Unit = 2
#Size = 3
#Factor = 4
#Min = 5
#Max = 6
#Default= 7
#Mode = 8

my (@input) = @_;
my %register = (
40004 => ["BT1 Outdoor temp","Outdoor temperature","°C","s16","10","0","0","0","R"],
40005 => ["EB23-BT2 Supply temp S4","Supply temperature for system 4","°C","s16","10","0","0","0","R"],
40005 => ["EB23-BT2 Supply temp S4","Supply temperature for system 4","°C","s16","10","0","0","0","R"],
40006 => ["EB22-BT2 Supply temp S3","Supply temperature for system 3","°C","s16","10","0","0","0","R"],
40007 => ["EB21-BT2 Supply temp S2","Supply temperature for system 2","°C","s16","10","0","0","0","R"],
40008 => ["BT2 Supply temp S1","Supply temperature for system 1","°C","s16","10","0","0","0","R"],
40012 => ["EB100-EP14-BT3 Return temp","Return temperature","°C","s16","10","0","0","0","R"],
40013 => ["BT7 Hot Water top","","°C","s16","10","0","0","0","R"],
40014 => ["BT6 Hot Water load","","°C","s16","10","0","0","0","R"],
40017 => ["EB100-EP14-BT12 Cond. out","","°C","s16","10","0","0","0","R"],
40018 => ["EB100-EP14-BT14 Hot gas temp","","°C","s16","10","0","0","0","R"],
40019 => ["EB100-EP14-BT15 Liquid line","","°C","s16","10","0","0","0","R"],
40020 => ["EB100-BT16 Evaporator temp","","°C","s16","10","0","0","0","R"],
40022 => ["EB100-EP14-BT17 Suction","","°C","s16","10","0","0","0","R"],
40025 => ["EB100-BT20 Exhaust air temp.","","°C","s16","10","0","0","0","R"],
40026 => ["EB100-BT21 Vented air temp.","","°C","s16","10","0","0","0","R"],
40030 => ["EB23-BT50 Room Temp S4","","°C","s16","10","0","0","0","R"],
40031 => ["EB22-BT50 Room Temp S3","","°C","s16","10","0","0","0","R"],
40032 => ["EB21-BT50 Room Temp S2","","°C","s16","10","0","0","0","R"],
40033 => ["BT50 Room Temp S1","","°C","s16","10","0","0","0","R"],
40045 => ["EQ1-BT64 PCS4 Supply Temp","PCS4 Only","°C","s16","10","0","0","0","R"],
40047 => ["EB100-BT61 Supply Radiator Temp","","°C","s16","10","0","0","0","R"],
40048 => ["EB100-BT62 Return Radiator Temp","","°C","s16","10","0","0","0","R"],
40050 => ["EB100-BS1 Air flow","","","s16","10","0","0","0","R"],
40051 => ["EB100-BS1 Air flow unfiltered","Unfiltered air flow value","","s16","100","0","0","0","R"],
40054 => ["EB100-FD1 Temperature limiter","","","s16","1","0","0","0","R"],
40067 => ["BT1 Average","EB100-BT1 Outdoor temperature average","°C","s16","10","0","0","0","R"],
40071 => ["BT25 external supply temp","","°C","s16","10","0","0","0","R"],
40072 => ["BF1 Flow","Current flow","l/m","s16","10","0","0","0","R"],
40074 => ["EB100-FR1 Anode Status","","","s16","1","0","0","0","R"],
40077 => ["BT6 external water heater load temp.","This includes DEW and SCA accessory","°C","s16","10","0","0","0","R"],
40078 => ["BT7 external water heater top temp.","This includes DEW and SCA accessory","°C","s16","10","0","0","0","R"],
40079 => ["EB100-BE3 Current Phase 3","","A","s32","10","0","0","0","R"],
40081 => ["EB100-BE2 Current Phase 2","","A","s32","10","0","0","0","R"],
40083 => ["EB100-BE1 Current Phase 1","","A","s32","10","0","0","0","R"],
40107 => ["EB100-BT20 Exhaust air temp.","","°C","s16","10","0","0","0","R"],
40108 => ["EB100-BT20 Exhaust air temp.","","°C","s16","10","0","0","0","R"],
40109 => ["EB100-BT20 Exhaust air temp.","","°C","s16","10","0","0","0","R"],
40110 => ["EB100-BT21 Vented air temp.","","°C","s16","10","0","0","0","R"],
40111 => ["EB100-BT21 Vented air temp.","","°C","s16","10","0","0","0","R"],
40112 => ["EB100-BT21 Vented air temp.","","°C","s16","10","0","0","0","R"],
40127 => ["EB23-BT3 Return temp S4","Return temperature for system 4","°C","s16","10","0","0","0","R"],
40128 => ["EB22-BT3 Return temp S3","Return temperature for system 3","°C","s16","10","0","0","0","R"],
40129 => ["EB21-BT3 Return temp S2","Return temperature for system 2","°C","s16","10","0","0","0","R"],
40141 => ["AZ2-BT22 Supply air temp. SAM","","ºC","s16","10","0","0","0","R"],
40142 => ["AZ2-BT23 Outdoor temp. SAM","","ºC","s16","10","0","0","0","R"],
40143 => ["AZ2-BT68 Flow temp. SAM","Heat medium flow temperature to SAM module","°C","s16","10","0","0","0","R"],
40144 => ["AZ2-BT69 Return temp. SAM","Heat medium return temperature from SAM module","°C","s16","10","0","0","0","R"],
40157 => ["EP30-BT53 Solar Panel Temp","","°C","s16","10","0","0","0","R"],
40158 => ["EP30-BT54 Solar Load Temp","","°C","s16","10","0","0","0","R"],
43001 => ["Software version","","","u16","1","0","0","0","R"],
43005 => ["Degree Minutes","","","s16","10","-30000","30000","0","R/W"],
43006 => ["Calculated Supply Temperature S4","","°C","s16","10","0","0","0","R"],
43007 => ["Calculated Supply Temperature S3","","°C","s16","10","0","0","0","R"],
43008 => ["Calculated Supply Temperature S2","","°C","s16","10","0","0","0","R"],
43009 => ["Calculated Supply Temperature S1","","°C","s16","10","0","0","0","R"],
43013 => ["Freeze Protection Status","1 = Freeze protection active","","u8","1","0","0","0","R"],
43061 => ["t. after start timer","","","u8","1","0","0","0","R"],
43062 => ["t. after mode change","Time after mode change","","u8","1","0","0","0","R"],
43064 => ["HMF dT set.","set point delta T for the heat medium flow","","s16","10","0","0","0","R"],
43065 => ["HMF dT act.","Current value of the delta T for the heat medium flow","","s16","10","0","0","0","R"],
43081 => ["Tot. op.time add.","Total electric additive operation time","h","s32","10","0","9999999","0","R"],
43084 => ["Int. el.add. Power","Current power from the internal electrical addition","kW","s16","100","0","0","0","R"],
43086 => ["Prio","Indicates what heating action (HW/heat/pool) currently prioritised 10=Off 20=Hot Water 30=Heat 40=Pool 41=Pool 2 50=Transfer 60=Cooling","","u8","1","0","0","0","R"],
43091 => ["Int. el.add. State","State of the internal electrical addition","","u8","1","0","0","0","R"],
43108 => ["Fan speed current","The current fan speed after scheduling and blocks are considered","%","u8","1","0","0","0","R"],
43122 => ["Compr. current min.freq.","The current minimum frequency of the compressor","Hz","s16","1","0","0","0","R"],
43123 => ["Compr. current max.freq.","The current maximum frequency of the compressor","Hz","s16","1","0","0","0","R"],
43124 => ["Airflow ref.","Reference value for the airflow.","","s16","10","0","0","0","R"],
43132 => ["Inverter com. timer","This value shows the time since last communication with the inverter","sec","u16","1","0","0","0","R"],
43133 => ["Inverter drive status","","","u16","1","0","0","0","R"],
43136 => ["Compr. current freq.","The frequency of the compressor at the moment","Hz","u16","10","0","0","0","R"],
43137 => ["Inverter alarm code","","","u16","1","0","0","0","R"],
43138 => ["Inverter fault code","","","u16","1","0","0","0","R"],
43140 => ["compr. temp.","Current compressor temparture","°C","s16","10","0","0","0","R"],
43141 => ["compr. in power","The power delivered from the inverter to the compressor","W","u16","1","0","0","0","R"],
43144 => ["Compr. energy total","Total compressor energy in kWh","kWh","u32","100","0","9999999","0","R"],
43145 => ["Unknown"," ",,"kWh","u32","100","0","9999999","0","R"],
43147 => ["Compr. in current","The current delivered from the inverter to the compressor","A","s16","1","0","0","0","R"],
43181 => ["Chargepump speed","","","s16","1","0","0","0","R"],
43182 => ["Compr. freq. setpoint","The targeted compressor frequency","Hz","u16","1","0","0","0","R"],
43239 => ["Tot. HW op.time add.","Total electric additive operation time in hot water mode","h","s32","10","0","9999999","0","R"],
43305 => ["Compr. energy HW","Compressor energy during hot water production in kWh","kWh","u32","100","0","9999999","0","R"],
43375 => ["compr. in power mean","Mean power delivered from the inverter to the compressor. Mean is calculated every 10 seconds.","W","s16","1","0","0","0","R"],
43382 => ["Inverter mem error code","","","u16","1","0","0","0","R"],
43416 => ["Compressor starts EB100-EP14","Number of compressorer starts","","s32","1","0","9999999","0","R"],
43420 => ["Tot. op.time compr. EB100-EP14","Total compressorer operation time","h","s32","1","0","9999999","0","R"],
43424 => ["Tot. HW op.time compr. EB100-EP14","Total compressorer operation time in hot water mode","h","s32","1","0","9999999","0","R"],
43427 => ["Compressor State EP14","20 = Stopped, 40 = Starting, 60 = Running, 100 = Stopping","","u8","1","0","0","0","R"],
43435 => ["Compressor status EP14","Indicates if the compressor is supplied with power 0=Off 1=On","","u8","1","0","0","0","R"],
43437 => ["HM-pump Status EP14","Status of the circ. pump","","u8","1","0","0","0","R"],
43514 => ["PCA-Base Relays EP14","Indicates the active relays on the PCA-Base card. The information is binary encoded","","u8","1","0","0","0","R"],
43516 => ["PCA-Power Relays EP14","Indicates the active relays on the PCA-Power card. The information is binary encoded","","u8","1","0","0","0","R"],
43542 => ["Calculated supply air temp.","","ºC","s16","10","0","0","0","R"],
44258 => ["External supply air accessory relays","Indicates the status of the relays on the external supply air accessory. The information is binary encoded. B0: relay K1 (QN40 close signal). B1: relay K2 (QN40 open signal)","","u8","1","0","0","0","R"],
44267 => ["Calc. Cooling Supply Temperature S4","","°C","s16","10","0","0","0","R"],
44268 => ["Calc. Cooling Supply Temperature S3","","°C","s16","10","0","0","0","R"],
44269 => ["Calc. Cooling Supply Temperature S2","","°C","s16","10","0","0","0","R"],
44270 => ["Calc. Cooling Supply Temperature S1","","°C","s16","10","0","0","0","R"],
44317 => ["SCA accessory relays","Indicates the status of the relays on the SCA accessory. The information is binary encoded. B0: relay K1 (Solar pump). B1: relay K2 (Solar Cooling Pump) B2: relay K3 (QN28)","","u8","1","0","0","0","R"],
44331 => ["Software release","","","u8","1","0","0","0","R"],
45001 => ["Alarm number","The value indicates the most severe current alarm","","s16","1","0","0","0","R"],
47062 => ["HW charge offset","Offset of HW charge temperature from the stop temperature","°C","s8","10","0","0","0","R/W"],
47291 => ["Floor drying timer","","hrs","u16","1","0","10000","0","R"],
47004 => ["Heat curve S4","Heat curve to use see manual for the different curves.","","s8","1","0","15","9","R/W"],
47005 => ["Heat curve S3","Heat curve to use see manual for the different curves.","","s8","1","0","15","9","R/W"],
47006 => ["Heat curve S2","Heat curve to use see manual for the different curves.","","s8","1","0","15","9","R/W"],
47007 => ["Heat curve S1","Heat curve to use see manual for the different curves.","","s8","1","0","15","9","R/W"],
47008 => ["Offset S4","Offset of the heat curve","","s8","1","-10","10","0","R/W"],
47009 => ["Offset S3","Offset of the heat curve","","s8","1","-10","10","0","R/W"],
47010 => ["Offset S2","Offset of the heat curve","","s8","1","-10","10","0","R/W"],
47011 => ["Offset S1","Offset of the heat curve","","s8","1","-10","10","0","R/W"],
47012 => ["Min Supply System 4","","°C","s16","10","50","700","200","R/W"],
47013 => ["Min Supply System 3","","°C","s16","10","50","700","200","R/W"],
47014 => ["Min Supply System 2","","°C","s16","10","50","700","200","R/W"],
47015 => ["Min Supply System 1","","°C","s16","10","50","700","200","R/W"],
47016 => ["Max Supply System 4","","°C","s16","10","50","700","600","R/W"],
47017 => ["Max Supply System 3","","°C","s16","10","50","700","600","R/W"],
47018 => ["Max Supply System 2","","°C","s16","10","50","700","600","R/W"],
47019 => ["Max Supply System 1","","°C","s16","10","50","700","600","R/W"],
47020 => ["Own Curve P7","User defined curve point","°C","s8","1","0","80","15","R/W"],
47021 => ["Own Curve P6","User defined curve point","°C","s8","1","0","80","15","R/W"],
47022 => ["Own Curve P5","User defined curve point","°C","s8","1","0","80","26","R/W"],
47023 => ["Own Curve P4","User defined curve point","°C","s8","1","0","80","32","R/W"],
47024 => ["Own Curve P3","User defined curve point","°C","s8","1","0","80","35","R/W"],
47025 => ["Own Curve P2","User defined curve point","°C","s8","1","0","80","40","R/W"],
47026 => ["Own Curve P1","User defined curve point","°C","s8","1","0","80","45","R/W"],
47027 => ["Point offset outdoor temp.","Outdoor temperature point where the heat curve is offset","°C","s8","1","-40","30","0","R/W"],
47028 => ["Point offset","Amount of offset at the point offset temperature","°C","s8","1","-10","10","0","R/W"],
47029 => ["External adjustment S4","Change of the offset of the heat curve when closing the external adjustment input","","s8","1","-10","10","0","R/W"],
47030 => ["External adjustment S3","Change of the offset of the heat curve when closing the external adjustment input","","s8","1","-10","10","0","R/W"],
47031 => ["External adjustment S2","Change of the offset of the heat curve when closing the external adjustment input","","s8","1","-10","10","0","R/W"],
47032 => ["External adjustment S1","Change of the offset of the heat curve when closing the external adjustment input","","s8","1","-10","10","0","R/W"],
47033 => ["External adjustment with room sensor S4","Room temperature setting when closing the external adjustment input","°C","s16","10","50","300","200","R/W"],
47034 => ["External adjustment with room sensor S3","Room temperature setting when closing the external adjustment input","°C","s16","10","50","300","200","R/W"],
47035 => ["External adjustment with room sensor S2","Room temperature setting when closing the external adjustment input","°C","s16","10","50","300","200","R/W"],
47036 => ["External adjustment with room sensor S1","Room temperature setting when closing the external adjustment input","°C","s16","10","50","300","200","R/W"],
47041 => ["Hot water mode"," 0=Economy 1=Normal 2=Luxury","","s8","1","0","2","1","R/W"],
47043 => ["Start temperature HW Luxury","Start temperature for heating water","°C","s16","10","50","700","470","R/W"],
47044 => ["Start temperature HW Normal","Start temperature for heating water","°C","s16","10","50","700","450","R/W"],
47045 => ["Start temperature HW Economy","Start temperature for heating water","°C","s16","10","50","700","380","R/W"],
47046 => ["Stop temperature Periodic HW","Temperature where hot water generation will stop","°C","s16","10","550","700","550","R/W"],
47047 => ["Stop temperature HW Luxury","Temperature where hot water generation will stop","°C","s16","10","50","700","520","R/W"],
47048 => ["Stop temperature HW Normal","Temperature where hot water generation will stop","°C","s16","10","50","700","500","R/W"],
47049 => ["Stop temperature HW Economy","Temperature where hot water generation will stop","°C","s16","10","50","700","430","R/W"],
47050 => ["Periodic HW","Activates the periodic hot water generation","","s8","1","0","1","1","R/W"],
47051 => ["Periodic HW Interval","Interval between Periodic hot water sessions","days","s8","1","1","90","14","R/W"],
47054 => ["Run time HWC","Run time for the hot water circulation system","min","s8","1","1","60","3","R/W"],
47055 => ["Still time HWC","Still time for the hot water circulation system","min","s8","1","0","60","12","R/W"],
47092 => ["Manual compfreq HW","Should the compressor frequency be manual set in HW?","","u8","1","0","0","0","R/W"],
47093 => ["Manual compfreq speed HW","Manual compressor frequency in HW?","Hz","u16","1","0","0","0","R/W"],
47094 => ["Sec per compfreq step","Time between changes of the copmpressor frequency","s","u8","1","0","0","0","R/W"],
47095 => ["Max compfreq step","Largest allowed change of compressor frequency in normal run","Hz","u8","1","0","0","0","R/W"],
47096 => ["Manual compfreq Heating","Should the compressor frequency be manual set in Heating?","","u8","1","0","0","0","R/W"],
47097 => ["Min speed after start","Time with minimum compressor frequency when heating demand occurs","Min","u8","1","0","0","0","R/W"],
47098 => ["Min speed after HW","Should the compressor frequency be manual set in HW?","Min","u8","1","0","0","0","R/W"],
47099 => ["GMz","Compressor frequency regulator GMz","","u8","1","0","0","0","R/W"],
47100 => ["Max diff VBF-BerVBF","Largest allowed difference between Supply and calc supply","°C","u8","10","0","0","0","R/W"],
47101 => ["Comp freq reg P","Compressor frequency regulator P","","u8","1","0","0","0","R/W"],
47102 => ["Comp freq max delta F","Maximum change of copmpressor frequency in compressor frequency regulator","Hz","s8","1","0","0","0","R/W"],
47103 => ["Min comp freq","Minimum allowed compressor frequency","Hz","s16","1","0","0","0","R/W"],
47104 => ["Max comp freq","Maximum allowed compressor frequency","Hz","s16","1","0","0","0","R/W"],
47105 => ["Comp freq heating","Compressor frequency used in heating mode","Hz","s16","1","0","0","0","R/W"],
47131 => ["Language","Display language in the heat pump 0=English 1=Svenska 2=Deutsch 3=Francais 4=Espanol 5=Suomi 6=Lietuviu 7=Cesky 8=Polski 9=Nederlands 10=Norsk 11=Dansk 12=Eesti 13=Latviesu 16=Magyar","","s8","1","0","18","0","R/W"],
47134 => ["Period HW","","min","u8","1","0","180","20","R/W"],
47135 => ["Period Heat","","min","u8","1","0","180","20","R/W"],
47136 => ["Period Pool","","min","u8","1","0","180","20","R/W"],
47138 => ["Operational mode heat medium pump"," 10=Intermittent 20=Continous 30=Economy 40=Auto","","u8","1","10","40","40","R/W"],
47206 => ["DM start heating","The value the degree minutes needed to be reached for the pump to start heating","","s16","1","-1000","-30","-60","R/W"],
47207 => ["DM start cooling","The value the degree minutes needed to be reached for the pump to start cooling","","s16","1","0","0","0","R/W"],
47208 => ["DM start add.","The value the degree minutes needed to be reached for the pump to start electric addition","","s16","1","0","0","0","R/W"],
47209 => ["DM between add. steps","The number of degree minutes between start of each electric addition step","","s16","1","0","0","0","R/W"],
47210 => ["DM start add. with shunt","","","s16","1","-2000","-30","-400","R/W"],
47212 => ["Max int add. power","","kW","s16","100","0","4500","600","R/W"],
47214 => ["Fuse","Size of the fuse that the HP is connected to","A","u8","1","1","200","16","R/W"],
47261 => ["Exhaust Fan speed 4","","%","u8","1","0","100","100","R/W"],
47262 => ["Exhaust Fan speed 3","","%","u8","1","0","100","80","R/W"],
47263 => ["Exhaust Fan speed 2","","%","u8","1","0","100","30","R/W"],
47264 => ["Exhaust Fan speed 1","","%","u8","1","0","100","0","R/W"],
47265 => ["Exhaust Fan speed normal","","%","u8","1","0","100","65","R/W"],
47266 => ["Supply Fan speed 4","","%","u8","1","0","100","90","R/W"],
47267 => ["Supply Fan speed 3","","%","u8","1","0","100","70","R/W"],
47268 => ["Supply Fan speed 2","","%","u8","1","0","100","25","R/W"],
47269 => ["Supply Fan speed 1","","%","u8","1","0","100","0","R/W"],
47270 => ["Supply Fan speed normal","","%","u8","1","0","100","60","R/W"],
47271 => ["Fan return time 4","Time from a changed fan speed until it returns to normal speed","h","u8","1","1","99","4","R/W"],
47272 => ["Fan return time 3","Time from a changed fan speed until it returns to normal speed","h","u8","1","1","99","4","R/W"],
47273 => ["Fan return time 2","Time from a changed fan speed until it returns to normal speed","h","u8","1","1","99","4","R/W"],
47274 => ["Fan return time 1","Time from a changed fan speed until it returns to normal speed","h","u8","1","1","99","4","R/W"],
47275 => ["Filter Reminder period","Time between the reminder of filter replacement/cleaning.","Months","u8","1","1","24","3","R/W"],
47276 => ["Floor drying"," 0=Off 1=On","","u8","1","0","1","0","R/W"],
47277 => ["Floor drying period 7","Days each period is active","days","u8","1","0","30","2","R/W"],
47278 => ["Floor drying period 6","Days each period is active","days","u8","1","0","30","2","R/W"],
47279 => ["Floor drying period 5","Days each period is active","days","u8","1","0","30","2","R/W"],
47280 => ["Floor drying period 4","Days each period is active","days","u8","1","0","30","3","R/W"],
47281 => ["Floor drying period 3","Days each period is active","days","u8","1","0","30","2","R/W"],
47282 => ["Floor drying period 2","Days each period is active","days","u8","1","0","30","2","R/W"],
47283 => ["Floor drying period 1","Days each period is active","days","u8","1","0","30","2","R/W"],
47284 => ["Floor drying temp. 7","Supply temperature each period","°C","u8","1","15","70","20","R/W"],
47285 => ["Floor drying temp. 6","Supply temperature each period","°C","u8","1","15","70","30","R/W"],
47286 => ["Floor drying temp. 5","Supply temperature each period","°C","u8","1","15","70","40","R/W"],
47287 => ["Floor drying temp. 4","Supply temperature each period","°C","u8","1","15","70","45","R/W"],
47288 => ["Floor drying temp. 3","Supply temperature each period","°C","u8","1","15","70","40","R/W"],
47289 => ["Floor drying temp. 2","Supply temperature each period","°C","u8","1","15","70","30","R/W"],
47290 => ["Floor drying temp. 1","Supply temperature each period","°C","u8","1","15","70","20","R/W"],
47294 => ["Use airflow defrost","If reduced airflow should start defrost","","u8","1","0","0","0","R/W"],
47295 => ["Airflow reduction trig","How much the airflow is allowed to be reduced before a defrost is trigged","%","u8","1","0","0","0","R/W"],
47296 => ["Airflow defrost done","How much the airflow has to raise before a defrost is ended","%","u8","1","0","0","0","R/W"],
47297 => ["Initiate inverter","Start initiation process of the inverter","","u8","1","0","0","0","R/W"],
47298 => ["Force inverter init","Force inverter initiation process of the inverter","","u8","1","0","0","0","R/W"],
47299 => ["Min time defrost","Minimum duration of the defrost","min","u8","1","0","0","0","R/W"],
47300 => ["DOT","Dimensioning outdoor temperature","°C","s16","10","-400","200","-180","R/W"],
47301 => ["delta T at DOT","Delta T (BT12-BT3)at dimensioning outdoor temperature","°C","s16","10","0","250","100","R/W"],
47302 => ["Climate system 2 accessory","Activates the climate system 2 accessory 0=Off 1=On","","u8","1","0","1","0","R/W"],
47303 => ["Climate system 3 accessory","Activates the climate system 3 accessory 0=Off 1=On","","u8","1","0","1","0","R/W"],
47304 => ["Climate system 4 accessory","Activates the climate system 4 accessory 0=Off 1=On","","u8","1","0","1","0","R/W"],
47305 => ["Climate system 4 mixing valve amp.","Mixing valve amplification for extra climate systems","","s8","10","1","100","10","R/W"],
47306 => ["Climate system 3 mixing valve amp.","Mixing valve amplification for extra climate systems","","s8","10","1","100","10","R/W"],
47307 => ["Climate system 2 mixing valve amp.","Mixing valve amplification for extra climate systems","","s8","10","1","100","10","R/W"],
47308 => ["Climate system 4 shunt wait","Wait time between changes of the shunt in extra climate systems","secs","s16","10","10","300","30","R/W"],
47309 => ["Climate system 3 shunt wait","Wait time between changes of the shunt in extra climate systems","secs","s16","10","10","300","30","R/W"],
47310 => ["Climate system 2 shunt wait","Wait time between changes of the shunt in extra climate systems","secs","s16","10","10","300","30","R/W"],
47317 => ["Shunt controlled add. accessory","Activates the shunt controlled addition accessory 0=Off 1=On","","u8","1","0","1","0","R/W"],
47318 => ["Shunt controlled add. min. temp.","","°C","s8","1","5","90","55","R/W"],
47319 => ["Shunt controlled add. min. runtime","","hrs","u8","1","0","48","12","R/W"],
47320 => ["Shunt controlled add. mixing valve amp.","Mixing valve amplification for shunt controlled add.","","s8","10","1","100","10","R/W"],
47321 => ["Shunt controlled add. mixing valve wait","Wait time between changes of the shunt in shunt controlled add.","secs","s16","1","10","300","30","R/W"],
47352 => ["SMS40 accessory","Activates the SMS40 accessory","","u8","1","0","1","0","R/W"],
47370 => ["Allow Additive Heating","Whether to allow additive heating (only valid for operational mode Manual)","","u8","1","0","1","1","R/W"],
47371 => ["Allow Heating","Whether to allow heating (only valid for operational mode Manual or Add. heat only)","","u8","1","0","1","1","R/W"],
47372 => ["Allow Cooling","Whether to allow cooling (only valid for operational mode Manual or Add. heat only)","","u8","1","0","1","1","R/W"],
47378 => ["Max diff. comp.","","°C","s16","10","10","250","100","R/W"],
47379 => ["Max diff. add.","","°C","s16","10","10","240","70","R/W"],
47384 => ["Date format"," 1=DD-MM-YY 2=YY-MM-DD","","u8","1","1","2","1","R/W"],
47385 => ["Time format"," 12=12 hours 24=24 Hours","","u8","1","12","24","24","R/W"],
47387 => ["HW production","Activates hot water production where applicable 0=Off 1=On","","u8","1","0","1","0","R/W"],
47388 => ["Alarm lower room temp.","Lowers the room temperature during red light alarms to notify the occupants of the building that something is the matter 0=Off 1=On","","u8","1","0","1","0","R/W"],
47389 => ["Alarm lower HW temp.","Lowers the hot water temperature during red light alarms to notify the occupants of the building that something is the matter 0=Off 1=On","","u8","1","0","1","1","R/W"],
47391 => ["Use room sensor S4","When activated the system uses the room sensor 0=Off 1=On","","u8","1","0","1","0","R/W"],
47392 => ["Use room sensor S3","When activated the system uses the room sensor 0=Off 1=On","","u8","1","0","1","0","R/W"],
47393 => ["Use room sensor S2","When activated the system uses the room sensor 0=Off 1=On","","u8","1","0","1","0","R/W"],
47394 => ["Use room sensor S1","When activated the system uses the room sensor 0=Off 1=On","","u8","1","0","1","0","R/W"],
47395 => ["Room sensor setpoint S4","Sets the room temperature setpoint for the system","°C","s16","10","50","300","200","R/W"],
47396 => ["Room sensor setpoint S3","Sets the room temperature setpoint for the system","°C","s16","10","50","300","200","R/W"],
47397 => ["Room sensor setpoint S2","Sets the room temperature setpoint for the system","°C","s16","10","50","300","200","R/W"],
47398 => ["Room sensor setpoint S1","Sets the room temperature setpoint for the system","°C","s16","10","50","300","200","R/W"],
47399 => ["Room sensor factor S4","Setting of how much the difference between set and actual room temperature should affect the supply temperature.","","u8","10","0","60","20","R/W"],
47400 => ["Room sensor factor S3","Setting of how much the difference between set and actual room temperature should affect the supply temperature.","","u8","10","0","60","20","R/W"],
47401 => ["Room sensor factor S2","Setting of how much the difference between set and actual room temperature should affect the supply temperature.","","u8","10","0","60","20","R/W"],
47402 => ["Room sensor factor S1","Setting of how much the difference between set and actual room temperature should affect the supply temperature.","","u8","10","0","60","20","R/W"],
47415 => ["Speed circ.pump Pool","","%","u8","1","0","100","70","R/W"],
47417 => ["Speed circ.pump Cooling","","%","u8","1","0","100","70","R/W"],
47442 => ["preset flow clim. sys.","Preset flow setting for climate system. 0 = manual setting, 1 = radiator, 2 = floor heating, 3 = radiator + floor heating.","","u8","1","0","3","1","R/W"],
47473 => ["Max time defrost","Maximum duration of the defrost","min","u8","1","0","0","0","R/W"],
47537 => ["Night cooling","If the fan should have a higher speed when there is a high room temp and a low outdoor temp. 0=Off 1=On","","u8","1","0","1","0","R/W"],
47538 => ["Start room temp. night cooling","","°C","u8","1","20","30","25","R/W"],
47539 => ["Night Cooling Min. diff.","Minimum difference between room temp and outdoor temp to start night cooling","°C","u8","1","3","10","6","R/W"],
47555 => ["DEW accessory","Activates the DEW accessory","","u8","1","0","1","0","R/W"],
47570 => ["Operational mode","The operational mode of the heat pump 0=Auto 1=Manual 2=Add. heat only","","u8","1","0","0","0","R/W"],
48134 => ["Operational mode charge pump","","","u8","1","10","20","20","R/W"],
48158 => ["SAM supply air curve: outdoor temp T3","The supply air curve is defined by 3 supply air temperatures at 3 different outdoor temperatures T1, T2 and T3.","°C","s16","10","-400","200","150","R/W"],
48159 => ["SAM supply air curve: outdoor temp T2","The supply air curve is defined by 3 supply air temperatures at 3 different outdoor temperatures T1, T2 and T3.","°C","s16","10","-390","190","0","R/W"],
48160 => ["SAM supply air curve: outdoor temp T1","The supply air curve is defined by 3 supply air temperatures at 3 different outdoor temperatures T1, T2 and T3.","°C","s16","10","-400","200","-150","R/W"],
48161 => ["SAM supply air curve: supply air temp at T3","The supply air curve is defined by 3 supply air temperatures at 3 different outdoor temperatures T1, T2 and T3.","°C","s16","10","160","520","220","R/W"],
48162 => ["SAM supply air curve: supply air temp at T2","The supply air curve is defined by 3 supply air temperatures at 3 different outdoor temperatures T1, T2 and T3.","°C","s16","10","160","520","220","R/W"],
48163 => ["SAM supply air curve: supply air temp at T1","The supply air curve is defined by 3 supply air temperatures at 3 different outdoor temperatures T1, T2 and T3.","°C","s16","10","160","520","220","R/W"],
48201 => ["SCA accessory","Activates the SCA accessory","","u8","1","0","1","0","R/W"],
);
return $register{$input[0]}[$input[1]];
}


Grüße Sonnenschein

Sonnenschein

#68
Hallo

Bezüglich der umwandlung von String in Array habe ich eine Lösung gefunden.

funktioniert @daten= (unpack("H*",$d_UDP) =~ /(.{2})/g);
funtkionierte nicht push (@daten, unpack("H*",$d_UDP));

Auch mit LOG.SET bin ich weitergekommen
Habe den USB Stick komplett geleert.
Ich habe eine ganz neue LOG.SET mit nur 4 Einträgen generiert (Modbus 1.09)
Die Nibe Pumpe (Firmware v8839R3)  ausgeschaltet.
Auch der Haken die SET.LOG zu ignorieren ist wie sonst auch deaktiviert.
LOG Interval 10sec.
Jetzt kommen Blöcke mit 5c00206850 bei denen vier Datensätze gefüllt sind und der Rest mit FFFF0000 gefüllt ist

Naja und die NIBE7XXX.PM habe ich noch meine Probleme weil es für mich immer noch zu abstrackt ist.
Ich finde zum Beispiel nicht wo die Daten gelesen werden, es gibt zwar eine sub NIBE_485_Read aber die wird wohl nur durch select aufgerufen. Da kann ich wohl nicht die Daten einfach reinmogeln.... Naja ein Buch mit sieben Sigeln.
Da wäre es schön Hilfe zu bekommen.

Liebe Grüße
Sonenschein.

vuffiraa

Hallo Sonnenschein,

ich hattte gestern Abend mal geschaut, ob ich das Modul auf UDP umstellen kann. Gestern hat es noch nicht geklappt, aber eigentlich sollte es möglich sein. Ich schau mal weiter.

Die 5c00206850-Blöcke sind jetzt bei dir richtig. Es werden immer alle angeforderten Werte in den Block geschrieben und dann mit FFFF0000 bis zur Maximallänge aufgefüllt.

Die Nibe-Module in Fhem kombinieren auch noch 2 Ansätze, es soll ja nicht so einfach sein...
Einerseits ist das Konzept der Module zweistufig, siehe https://wiki.fhem.de/wiki/DevelopmentModuleIntro#Funktionen_f.C3.BCr_zweistufiges_Modulkonzept
Weiterhin werden Fhem-interne Funktionen verwendet, damit Fhem bei der Kommunikation nicht blockiert. Die Verbindung zur Nibe wird in Fhem registriert und dann ruft Fhem die Funktion NIBE_485_Read, wenn Daten auf Schnittstelle ankommen, siehe https://wiki.fhem.de/wiki/DevelopmentModuleIntro#Die_wichtigsten_Funktionen_in_einem_Modul

Bald kannst du mit deinem eigenen Modul anfangen  ;)

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Sonnenschein

Hallo VuffiRaa.

naja Ich und eigene Module schreiben, da bin ich der noch nicht einmal der einäugige unter den Blinden.
Bin heute schon ziemlich aufgelaufen. Aber irgendwie scheinst Du schon gewusst zu haben, wo ich mein nächstes Problem haben werde.

Habe ich es denn jetzt zu mindest richtig verstanden?
Ein ioread in NIBE70 greift übern den "FHEM KERN" auf die Routine NIBE_485_Read  in NIBE71.(führt sie aus)
Die Routine NIBE_485_Read  greift dann mit DevIo_SimpleRead direkt auf den Serialport.
Sprich einer der Aufgaben wäre, zum Beispiel die Daten in der NIBE_485_Read auf die UDP Daten um zulenken.
NIBE _485 liefert ja nur RAW Daten wie UDP Schnittstelle. Die Aufbereitung der Daten erfolgt ja erst in NIBE70.
Oder ist das noch zu naiv?

Irgendwie sagt mir mein Bauchgefühl, dass es eine neue NIBE70_UDP.PM bedarft.
Wenn es für Dich OK ist, würde ich auch Dich warten und mich jetzt mehr darauf zu konzentrieren, das NibeGW auf einem ESP8266 zu portieren.
Da hat der erste Versuch nämlich nicht funktioniert.
Aber es wäre insgesamt eine geniale Lösung, denn so würde NIBE Pume für unter 10€ WLAN fähig gemacht werden. Die dann auf zwei verschiedene Smarthome Systemen verwaltet werden könnte und naja vielleicht schreibt noch jemand als dritte Lösung eine APP.
Die WLAN Lösung hätte noch den Vorteil die Bindung erfolgt absolut potentialfrei wäre, weil ich vor habe die 12V der Nibe Pumpe für den ESP zu verwenden und somit quasi in die Nibe Pumpe integriert wird.

Viele liebe Grüße
Sonnenschein

vuffiraa

Hallo Sonnenschein,

soweit scheinst du es verstanden zu haben. Wobei es kein Nibe70 braucht. Das war der allererste Versuch für das Modul. Momentan braucht man nur 70_NIBE_485.pm und 71_NIBE.pm.

Falls du mal etwas probieren willst. Ich habe eine neue Datei ins Git gelegt 70_NIBE_UDP.pm. Wenn du das zusammen mit 71_NIBE konfigurierst, sollten die Daten aus dem NibeGW empfangen werden. Das Lesen und Schreiben einzelner Werte klappt noch nicht.

physical module:
define NibeWP NIBE_UDP 127.0.0.1

logical module:
define Nibe NIBE
attr Nibe IODev NibeWP <-- will be set by Fhem automatically
attr Nibe modbusFile <-- optional, default <global-modpath>/export.csv


Aber Vorsicht, das Modul ist mal schnell mit der heißen Nadel gestrickt.

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Sonnenschein

Hallo VuffiRaa,

das Lesen von den Gruppen funktioniert. Vielen Dank.
Wirst Du noch an dem Schreiben von Werten arbeiten

Endschuldige bitte, ich war da wohl zu schreibfaul, mit Nibe70 meinte ich 70_NIBE_485

Wünsche Dir einen schönen Tag.
Grüße
Sonnenschein.

vuffiraa

Zitat von: Sonnenschein am 08 Januar 2019, 08:28:29
Hallo VuffiRaa,

das Lesen von den Gruppen funktioniert. Vielen Dank.
Wirst Du noch an dem Schreiben von Werten arbeiten

Endschuldige bitte, ich war da wohl zu schreibfaul, mit Nibe70 meinte ich 70_NIBE_485

Wünsche Dir einen schönen Tag.
Grüße
Sonnenschein.

Klar, so ist der Plan. So halb fertig würde das Modul ja keinen Sinn machen.
Falls dir schon Probleme auffallen, schreib einfache.

Ich habe nur leider bis zum Wochenende nicht wirklich Zeit, um weiterzumachen.
Also etwas Geduld musst du noch haben.

Gruß VuffiRaa
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

Sonnenschein

Zitat von: vuffiraa am 08 Januar 2019, 19:10:02
Klar, so ist der Plan. So halb fertig würde das Modul ja keinen Sinn machen.
Falls dir schon Probleme auffallen, schreib einfache.

Ich habe nur leider bis zum Wochenende nicht wirklich Zeit, um weiterzumachen.
Also etwas Geduld musst du noch haben.

Gruß VuffiRaa

ja klar melde ich mich, wenn mir etwas auffällt.
Was mich jetzt nicht stört, bei Status von Device Nibe stehen nur ???, aber vielleicht liegt es daran, dass das selective Lesen nocht nicht funktioniert.


Ich habe NibeGW auf eine ESP8266 portieren und ein paar UDP Nachrichten senden können.
Sonst kann ich es leider noch nicht mehr  testen, da mir der RS232 zu RS484 Wandler noch fehlt.
Hoffe der kommt bald.

Aber mir sind schon eine Optimierungsmöglichkeiten aufgefallen.
Zum Schutz der Nibe Pumpe, habe ich einen Wander mit hohem galvanischen Schutz gekauft, ist ja aber nicht nicht notwendig wenn es in die Heizung integriert wird. Die einfacheren Wandler, sind schon für 1€ zu bekommen.
Ich arbeite zur Zeit gerne mit dem WEMOS D1, weil er so einfach bei Entwicklungen ist. Allerdings wird empholen in nicht mit 3.3V zu betreiben.
Ein ESP01S ist deutich abgespeckt und kann direkt mit 3.3V betrieben werden, zudem sind die schon für 1,88€ zur bekommen.
So wie ich gesehen habe sind wohl die 12V der Pumpe in Ihrer Leistung kritisch und ich erhoffe mir noch einmal etwas Leisung zu sparen, wenn ich von 12V auf 3.3V mit eine Stepdown Wandler runter wandle. Wobei wir hier eh nur noch von mW reden.

Grüße
Sonnenschein