VBus in fhem

Begonnen von sweetie-pie, 15 Januar 2013, 12:27:34

Vorheriges Thema - Nächstes Thema

Gunther

Zitat von: mahlzeit24/7 am 08 Dezember 2013, 11:57:24
Hallo Gunther,

das ist natürlich schade, dass dein netzwerk damit in die knie geht.....

zu deinen Fragen:

attr myVBUSDevice fp_Keller 50,250,0,                                                - ich hab die Temperaturen in Floorplan, wenn Du kein Floorplan nutzt, brauchst Du keine Zeile mit fp
attr myVBUSDevice fp_Plotspage 50,500,0,
attr myVBUSDevice fp_Temperaturen 307,482,1,Regler Werte
attr myVBUSDevice room HMS                                                              -müßte klar sein

was mit einfällt, wäre evtl mit dem delay rumzuexperimentieren:

define myVBUSDevice VBUS 192.168.2.19 7053 1200
attr myVBUSDevice delay 1200

die 1200 sind die sekunden bis zum nächsten Abruf, also 20 minuten

Was auch ne Möglichkeit wäre, dass ja ein neuer Prozess pro Abruf geforkt wird.

Leider habe ich keine FB zum Testen - ich mache das von meinem NAS aus, auf dem eh ein Linux läuft......

Wenn Du ne Konsolensession (ssh, oder vglb) auf die FB hinbekommst, würde ich 3 Dinge mal versuchen wollen:

1. Fenster: tail -f /var/log/syslog (gibt es bei der FB ein Syslog überhaupt?)
2. Fenster ein "top" laufen lassen
3. Fenster vbus wieder einschalten und ggf ein tail auf das vbuslog

wenn sich da direkte zusammenhänge ergeben, wäre es prima, die Stelle zu lokalisieren an denen sie auftreten, also ggf loglevel auf 5 stellen und genau beobachten.

Alternative bleibt natürlich, ab und an mit dem Servicecenter drauf zu lauschen

Herzliche GRüße

Frank

Hallo Frank,

sorry, dass ich mich nicht gemeldet habe. Habe keine Benachrichtigung vom Forum bekommen und muss leider morgen wieder ran. Schade...
Ich werde mir Deine Infos anschauen, wenn ich ein wenig Zeit dazu habe.

Viele Grüße
Gunther
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

akw

Hi,

Ich werde mich des VBUS-Adapters wieder annehmen, sobald FHEMobile wieder auf dem richtigen weg ist.
Das Modul, was ich damals gemacht hatte, war auch speziell auf meine Diemasol C zugeschnitten und muss verallgemeinert werden.
Ich bin aber gewillt, daran weiterzuarbeiten.

Ciao, Arno
FHEM-SVN auf MacMini OSX 10.7.5

FS20,FHT,HMS,CUL_WS,CUL_HM,KS300,HUE,FB_DECT

FHEMobile: www.fhemobile.de

coolsmul

Hallo Gemeinde des Wissens,

Vielen Dank erstmal für diesen Thread. Ich stöber bei Problemen mit FHEM immer mal wieder bei euch vorbei und bis jetzt konnte ich immer eine Lösung finden - bis zu meinem aktuellen Problem.
Ich habe eine Anlage von Citrin, die benutzen wie andere Hersteller auch die Resol Steuerungen. Auf der ersten Seite diesen Threads ist auch ein Link mit den Bytezuordnungen drin - die ersten paar Temperatursensoren werden bei den meisten Systemen gleich angesprochen, somit sollte das auch bei mir funktionieren. Mein FHEM läuft auf einer Fritzbox mit dem fhem-5.5-fb7390.image.
Ich benutze die modifizierte 20_VBUS.pm von Arno Willig, modifiziert durch H. Bavendiek. Die Anpassungen der GeräteIDs habe ich vorgenommen (in dieser Version muss das an 3 Stellen angepasst werden). Ich hab auf dem Vbus noch ein drittes Device (jedenfalls wenn ich davon ausgehe, das der VBus adapter die ID 1000 hat) welches ich ebenfalls in die 20_VBUS.pm eingepflegt habe
Nun zu meinem Problem:
Wenn ich die Vbus spezifischen Zeilen in der fhem.cfg aktiviere dann sehe ich nach einer kurzen initialisierungsphase lustige Werte jenseits der 2000 - 4000grad. Wenn ich die Vbus spezifischen teile der fhem.cfg auskommentiere (per webinterface) speichere und danach wieder einkommentiere, zeigt mir das Log teilweise die richtigen Werte an -aber nur teilweise.
Wo kann ich ansetzen um das Problem zu lösen?

Ich hab die modifizierte Datei benutzt um das Problem mit den zusammenbauen der Bytes die ausgelesen werden zu umgehen. in der Version von H. Bavendiek ist das meiner Meinung nach einfacher. Mit Arnos Version bekommen ich dir Richtigen Werte, weiß aber nicht, wie ich meine Steuerung mit den anderen Temperatursensoren ansprechen kann. Programmieren ist keine Stärke von mir :-)

Jetzt noch meine 20_VBus.pm
Zitat
# $Id$
# VBUS Support for FHEM
# (c) Arno Willig <akw@bytefeed.de>
#
# modified H.Bavendiek 02/2013
# - non-blocking
# - negative Messwerte
# - Device - COSMO Multi
#

package main;

use strict;
use warnings;
use Time::HiRes qw(gettimeofday);
use IO::Socket::INET;
use IO::Select;
use Blocking;


my %vbus_devices = (
        "1000" => "VBUS Adapter",
#       "5177" => "Diemasol C"
        "3173" => "SLR",
        "3f73" => "Unknown Device"
);


sub VBUS_Initialize($)
{
        my ($hash) = @_;

        Log 1, "VBUS_Initialize";

# Provider
#       $hash->{ReadFn}  = "VBUS_Read";
#       $hash->{ReadyFn} = "VBUS_Ready";
#       $hash->{Clients} = ":VBUS:";

# Consumer
        $hash->{DefFn}   = "VBUS_Define";
        $hash->{UndefFn} = "VBUS_Undef";
#      $hash->{GetFn}   = "VBUS_Get";
        $hash->{AttrList}= "model:vbus delay loglevel:0,1,2,3,4,5,6";
}

#####################################
sub VBUS_Define($$)
{
        my ($hash, $def) = @_;
        my $name=$hash->{NAME};
        my @a = split("[ \t][ \t]*", $def);

        Log 3, "VBUS Define: $a[0] $a[1] $a[2] $a[3] $a[4]";
        return "Define host and port as parameters" if (@a < 3);

        my $host = $a[2];
        my $port = $a[3];
        my $delay = $a[4];
        $attr{$name}{delay}=$delay if $delay;


        $hash->{Host} = $host;
        $hash->{Port} = $port;
        $hash->{STATE} = "initialized";

        #Trigger Update nach 60 Sekunden
        InternalTimer(gettimeofday()+60, "VBUS_GetStatus", $hash, 0);

        return undef;
}

sub VBUS_GetStatus($)
{
        my ($hash) = @_;
        my $name  = $hash->{NAME};
        my $host  = $hash->{Host};
        my $port  = $hash->{Port};
        my $delay = $attr{$name}{delay}||120;

        # In der Routine DEVICE_GetUpdate werden dann die Readings vom Geraet geholt
        # und der Timer wird mit dem gleichen Befehl erneut gestartet. [fhemwiki]
        InternalTimer(gettimeofday()+$delay, "VBUS_GetStatus", $hash, 0);

        BlockingCall("VBUS_FetchData", $hash, "VBUS_DecodeData" );

        #Log 3,"$name: Benede nun Eltern-Prozess";

        return;

}

#####################################
sub VBUS_Undef($$)
{
        Log 3,"****** VBUS_Undef";
        my ($hash, $name) = @_;
        RemoveInternalTimer($name);
        return undef;
}

############## Temp-Convert #########
sub VBUS_ConvTemp($$)
{
        my ($hash,$bytestring) = @_;
        my $name = $hash->{NAME};

        my $temp;

        #Werte uebernahmen, Reverse Byte order
        my $val1=ord(substr($bytestring,1,1));
        my $val2=ord(substr($bytestring,0,1));

        #Log 5,"$name ConvTemp: Debug: 1.Byte:[$val1] 2.Byte:[$val2]";

        if($val1 < 129 ) { # positver Wert
                $temp = ( $val1 * 256 + $val2 ) / 10.;
        }else{  # negativer Wert
                $temp = (-65536 + ( $val1 * 256 + $val2 )) / 10.;
        }

        return $temp;

}

sub VBUS_FetchData($)
{
        my ($hash) = @_;
        my $name  = $hash->{NAME};
        my $host  = $hash->{Host};
        my $port  = $hash->{Port};

        #Log 3,"$name Ich bin das Kind! Debug: Host:[$host] Port:[$port]";

        my $socket = IO::Socket::INET->new(PeerAddr=>$host, PeerPort=>$port, timeout=>2, blocking=>1);
        if (!$socket) {
                $hash->{STATE} = "disconnected";
                Log 1,"$name: Error opening Connection to $host";
                return $name."|Error opening Connection";
        }

        # +HELLO
        $socket->autoflush(1);
        $socket->getline();
        $socket->write("PASS vbus\n");
        $socket->getline();
        $socket->write("DATA\n");
        $socket->getline();

        my $i;
        my $idx;
        my $protoVersion="0";
        my $dst_addr="0";
        my $src_addr="0";
        my $command;
        my $frameCount;
        my $checksum;
        my $line = "";

        for ($i=0;$i<3 && ($protoVersion!="10"||$dst_addr!="1000"||$src_addr!="3f73"||$src_addr!="3173");$i++) {
                # Find beginning
                $idx=-1;
                while ($idx<0) {
                #Log 3,"$name: Try $i Find beginning";
                        $line .= $socket->getline();
                        $idx = index($line,chr(hex("aa")));
                }
                $line = substr($line,$idx); ## if ($idx>0);

                # Find end
                $idx=-1;
                while ($idx<0) {
                        my $hahn = unpack('H*',$line);
                #Log 3,"$name: Try $i Find end $hahn";
                        $line .= $socket->getline();
                        $idx = index($line,chr(hex("aa")),1)
                }

                $dst_addr = unpack('H*',substr($line,1,2)); # byte order
                $src_addr = unpack('H*',substr($line,3,2)); # byte order
                $protoVersion = unpack('H*',substr($line,5,1));
                $command = unpack('H*',substr($line,6,2)); # byte order
                $frameCount = ord(substr($line,8,1));
                $checksum = ord(substr($line,9,1));
                #Log 3,"$name: Src: $src_addr Dst: $dst_addr Proto: $protoVersion CMD: $command FC: $frameCount CRC: $checksum";
                $line = substr($line,1);
        }
        $line = chr(hex("aa")).$line;
        $line = substr($line,0,$idx);
        $socket->close();

        my $devtype = $vbus_devices{$src_addr};  # TODO OR "Unknown: ".$src_addr

        if ($protoVersion != "10"||$dst_addr != "1000"||$src_addr!="3f73"||$src_addr!="3173") {
                Log 3,"$name: No valid message found after $i tries. Aborting.";
                return $name."|No valid message found";
        }

        my $payload = "";
        for (my $i = 0; $i < $frameCount; $i++) {
                my $septett  = ord(substr($line,10+$i*6+4,1));
                my $checksum = ord(substr($line,10+$i*6+5,1));
                my $crc = (0x7f - $septett) & 0x7f;
                for (my $j = 0; $j<4;$j++) {
                        my $ch = ord(substr($line,10+$i*6+$j,1));
                        $ch |= 0x80 if ($septett & (1 << $j));
                        $crc = ($crc - $ch) & 0x7f;
                        $payload .= chr($ch);
                }
                if ($crc != $checksum) {
                        Log 3,"$name: Checksum failed! Aborting.";
                        return $name."|Checksum failed";
                }
        }

        #Log 3,"$name Beende das Kind erfolreich...";

        return $name."|".$payload;

}

sub VBUS_DecodeData($)
{

        my ($string) = @_;
        my ($name, $payload) = split("\\|", $string, 2);

        my $hash = $defs{$name};

        my $command = unpack('H*',$payload);

        #Log 3,"VBUS_DecodeData: Starte Auswertung!";
        #Log 3,"VBUS_DecodeData: name=[$name]";
        #Log 3,"VBUS_DecodeData: hash=[$hash]";
        #Log 3,"VBUS_DecodeData: payload=[$command]";

        my $temp_s1 = VBUS_ConvTemp($hash,substr($payload,0,2));
        my $temp_s2 = VBUS_ConvTemp($hash,substr($payload,2,2));
        my $temp_s3 = VBUS_ConvTemp($hash,substr($payload,4,2));
        my $temp_s4 = VBUS_ConvTemp($hash,substr($payload,6,2));
        my $temp_s5 = VBUS_ConvTemp($hash,substr($payload,8,2));
        my $temp_s6 = VBUS_ConvTemp($hash,substr($payload,10,2));
        my $temp_s7 = VBUS_ConvTemp($hash,substr($payload,12,2));
        my $temp_s8 = VBUS_ConvTemp($hash,substr($payload,14,2));
        my $temp_s9 = VBUS_ConvTemp($hash,substr($payload,16,2));
        my $temp_s10 = VBUS_ConvTemp($hash,substr($payload,18,2));

        Log 4,"$name: Temperature sensor 1    $temp_s1 (Celsius)";
        Log 4,"$name: Temperature sensor 2    $temp_s2 (Celsius)";
        Log 4,"$name: Temperature sensor 3    $temp_s3 (Celsius)";
        Log 4,"$name: Temperature sensor 4    $temp_s4 (Celsius)";
        Log 4,"$name: Temperature sensor 5    $temp_s5 (Celsius)";
        Log 4,"$name: Temperature sensor 6    $temp_s6 (Celsius)";
        Log 4,"$name: Temperature sensor 7    $temp_s7 (Celsius)";
        Log 4,"$name: Temperature sensor 8    $temp_s8 (Celsius)";
        Log 4,"$name: Temperature sensor 9    $temp_s9 (Celsius)";
        Log 4,"$name: Temperature sensor 10   $temp_s10 (Celsius)";


        my $radiation = (ord(substr($payload,21,1))*256 + ord(substr($payload,20,1))) / 10.;
        my $impulse = (ord(substr($payload,23,1))*256 + ord(substr($payload,22,1))) / 10.;
        my $digi_in = (ord(substr($payload,25,1))*256 + ord(substr($payload,24,1)));

        Log 4,"$name: Irradiation CS          $radiation (W/m2)";
        Log 4,"$name: Impulse 1 V40           $impulse";
        Log 4,"$name: Digital Input           $digi_in";


        my $ps_relay1 = ord(substr($payload,26,1));
        my $ps_relay2 = ord(substr($payload,27,1));
        my $ps_relay3 = ord(substr($payload,28,1));
        my $ps_relay4 = ord(substr($payload,29,1));
        my $ps_relay5 = ord(substr($payload,30,1));
        my $ps_relay6 = ord(substr($payload,31,1));
        my $ps_relay7 = ord(substr($payload,32,1));

        Log 4,"$name: Pump speed relay 1      $ps_relay1 (%)";
        Log 4,"$name: Pump speed relay 2      $ps_relay2 (%)";
        Log 4,"$name: Pump speed relay 3      $ps_relay3 (%)";
        Log 4,"$name: Pump speed relay 4      $ps_relay4 (%)";
        Log 4,"$name: Pump speed relay 5      $ps_relay5 (%)";
        Log 4,"$name: Pump speed relay 6      $ps_relay6 (%)";
        Log 4,"$name: Pump speed relay 7      $ps_relay7 (%)";


        my $val = "T1: ".$temp_s1." T2: ".$temp_s2." T3: ".$temp_s3." T7: ".$temp_s7." T8: ".$temp_s8." T9: ".$temp_s9;
        my $val = $val." R1: ".$ps_relay1." R3: ".$ps_relay3." R5: ".$ps_relay5." R6: ".$ps_relay6." R7: ".$ps_relay7;
        my $val = $val." T10: ".$temp_s10;

        readingsBeginUpdate($hash);
        readingsBulkUpdate($hash,"state",$val);
        readingsBulkUpdate($hash,"Kollektortemperatur",$temp_s1);
        readingsBulkUpdate($hash,"Waermetauscher Solar oben",$temp_s2);
        readingsBulkUpdate($hash,"Waermetauscher Solar unten",$temp_s3);
        readingsBulkUpdate($hash,"nicht belet",$temp_s4);
        readingsBulkUpdate($hash,"Nachheizung Heizkreise",$temp_s5);
        readingsBulkUpdate($hash,"Nachheizung Warmwasser",$temp_s6);
        readingsBulkUpdate($hash,"temp07",$temp_s7);
        readingsBulkUpdate($hash,"nicht belegt",$temp_s8);
        readingsBulkUpdate($hash,"Aussenfuehler",$temp_s9);
        readingsBulkUpdate($hash,"Vorlauf Heizkreis 1",$temp_s10);
        readingsBulkUpdate($hash,"relay1",$ps_relay1);
        readingsBulkUpdate($hash,"relay2",$ps_relay2);
        readingsBulkUpdate($hash,"relay3",$ps_relay3);
        readingsBulkUpdate($hash,"relay4",$ps_relay4);
        readingsBulkUpdate($hash,"relay5",$ps_relay5);
        readingsBulkUpdate($hash,"relay6",$ps_relay6);
        readingsBulkUpdate($hash,"relay7",$ps_relay7);
        readingsEndUpdate($hash, 1);                    #calls DoTrigger on its behalf. should be 1 for polling devices.


        Log GetLogLevel($name,3), "$name: VBUS $val";

}
1;

vielen Dank
mfg
Daniel

sweetie-pie

Hallo,

du must mal auskommentieren:

        Log 3,"VBUS_DecodeData: Starte Auswertung!";
        Log 3,"VBUS_DecodeData: name=[$name]";
        Log 3,"VBUS_DecodeData: hash=[$hash]";
        Log 3,"VBUS_DecodeData: payload=[$command]";


und die Payload angucken. Da muss Du die Werte finden und die Auswertung anpassen.
Poste doch mal die Payload...

Gruß
  Holger

coolsmul

Hallo Holger,

ich glaube ich habe ein kleinen Eintrag übersehen, die Fribo bekommt keine Verbindung zum Vbus Lan Adapter - ich hab diesen jetzt der Einfachheit halber in das gleiche Netzt gehängt wie die FriBo - somit sollten Routingpobleme ausgeschlossen werden. Ein weiterer Punkt der aufgefallen ist, ist der Port den der VBus-Lan Adapter benutzt, hier wird der 6432 als UpnP benutzt, diesen hab ich dann in die fhem.cfg eingetragen - leider läuft dann das 20_VBUS.pm in einen Fehler und der Prozess hängt sich auf -> Systemauslastung nahe 100%.

Hier ein Beispiel aus dem Log mit alten Port:

2014.01.21 11:20:28 3: Solarthermie: No valid message found after 3 tries. Aborting.
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 1    2849.4 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 2    3024 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 3    2774.5 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 4    2570.5 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 5    2793.6 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 6    2954.1 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 7    2494.7 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 8    2595.9 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 9    2614.4 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Temperature sensor 10   3006.3 (Celsius)
2014.01.21 11:20:28 4: Solarthermie: Irradiation CS          2571 (W/m2)
2014.01.21 11:20:28 4: Solarthermie: Impulse 1 V40           0
2014.01.21 11:20:28 4: Solarthermie: Digital Input           0
2014.01.21 11:20:28 4: Solarthermie: Pump speed relay 1      0 (%)
2014.01.21 11:20:28 4: Solarthermie: Pump speed relay 2      0 (%)
2014.01.21 11:20:28 4: Solarthermie: Pump speed relay 3      0 (%)
2014.01.21 11:20:28 4: Solarthermie: Pump speed relay 4      0 (%)
2014.01.21 11:20:28 4: Solarthermie: Pump speed relay 5      0 (%)
2014.01.21 11:20:28 4: Solarthermie: Pump speed relay 6      0 (%)
2014.01.21 11:20:28 4: Solarthermie: Pump speed relay 7      0 (%)
2014.01.21 11:20:28 3: Solarthermie: VBUS T1: 2849.4 T2: 3024 T3: 2774.5 T7: 2494.7 T8: 2595.9 T9: 2614.4 R1: 0 R3: 0 R5: 0 R6: 0 R7: 0 T10: 3006.3


Ist klar, die Kommunikation über diesen Port liefert keine Daten (oder gibt es einen API Port den ich nicht ändern kann) - lustigerweise und zu meiner Verteidigung  :-[ läuft das VBUS.pm von Arno Willig mit diesen Einstellungen und liefert die Werte  - ich verstehe bei diesem Modul die Zusammensetzung der Daten nicht, die ich abgreifen will - das ist bei deinem? Modul einfacher.

Stelle ich den richtigen Port ein kommt folgende Fehlermeldung und der Kindprozess hängt sich auf:

Use of uninitialized value in concatenation (.) or string at ./FHEM/20_VBUS.pm line 165, <GEN38> line 31.
Use of uninitialized value in concatenation (.) or string at ./FHEM/20_VBUS.pm line 165, <GEN38> line 31.
Use of uninitialized value in concatenation (.) or string at ./FHEM/20_VBUS.pm line 165, <GEN38> line 31.
Use of uninitialized value in concatenation (.) or string at ./FHEM/20_VBUS.pm line 165, <GEN38> line 31.
.
.
.


Wollen wir per PN oder Mail weitermachen, ich glaube das sprengt den Rahmen dieses Threads spezifische Probleme zu diskutieren?

Vielen Dank
mfg
Daniel

limats

Hallo zusammen,

ich hab weiter oben ja schon mal den Grund für die negativen Temperaturen geschrieben. Hab komplett vergessen, den Code für den Workaround nachzuschieben.

Das Ende der Methode VBUS_FetchData bzw. der Anfang der Methode VBUS_DecodeData muss folgendermaßen abgeändert werden:

        Log 3,"$name Beende das Kind erfolreich...";

        return $name."|".unpack('H*',$payload);

}

sub VBUS_DecodeData($)
{

        my ($string) = @_;
        my ($name, $command) = split("\\|", $string, 2);

        my $hash = $defs{$name};

        my $payload = pack('H*',$command);

        Log 3,"VBUS_DecodeData: Starte Auswertung!";
        Log 3,"VBUS_DecodeData: name=[$name]";
        Log 3,"VBUS_DecodeData: hash=[$hash]";
        Log 3,"VBUS_DecodeData: payload=[$command]";


Rest bleibt gleich.

Gruß,
Leo
Fhem auf BBB:
HM-CFG-USB für div. HM-Sensoren, CUL+WMBUS für EnergyCam, Nanocul für IT, Arduino Mega 2560 als 1-wire-Gateway und für div. digitale Ein-/Ausgänge, Volkszähler-USB-IR-Lesekopf mit SMLUSB, Solarsteuerung über VBUS

danni-k

Hallo,

mit der Änderung von Leo hab ich nun seit einigen Tagen auch keine Ausreisser mehr. Danke!

An die Vitosolic200-Besitzer hab ich mal noch ne Frage: liest jemand auch den Wärmenengenzähler auf source-adress 7326 mit aus? Und wenn ja, wie? Über das selbe Perlmodul parallel oder quasi über ein weiteres Perlmodul?

Gruss, danni-k

Gesendet von meinem HTC Desire mit Tapatalk 2


akw

Hi,

falls Interesse besteht, würde ich ein neues VBUS-Modul beginnen.
Ich würde gerne Provider+Consumer trennen, so dass es ein Modul für den VBUS-Adapter gibt und eines für das daran angeschlossene Gerät.
(vgl. CUL / FS20 oder FBAHA / FBDECT).
Dann könnte man das zweite Modul für jede Endhardware anpassen. Ich habe zum Beispiel eine Diemasol C, es gibt jemand mit COSMO Multi, usw.

In das VBUS-Adapter Modul könnte man auch "set"-Befehle einbauen. Über VBUS kann man z.B. problemlos auch Befehle senden (Relais an/aus schalten usw).

Besteht Interesse?

Ciao, Arno
FHEM-SVN auf MacMini OSX 10.7.5

FS20,FHT,HMS,CUL_WS,CUL_HM,KS300,HUE,FB_DECT

FHEMobile: www.fhemobile.de

mahlzeit24/7

Hi Arno,

Ich glaube, dein Vorschlag ist richtig toefte und würde einigen das leben sicher wesentlich erleichtern.

Herzliche gruesse

Frank

danni-k

Super Idee!
Hatte mit meiner vitosolic auch ewig rumgemacht. Aber ganz rund läufts immer noch nicht...


Gesendet von meinem HTC Desire mit Tapatalk 2


Gunther

Ich bin auch extrem interessiert! Leider bin ich eher Anwender. Unterstütze aber gerne wenn ich kann. Habe eine Vitosolic 200.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Brun

Ich wäre auch dafür!
Wir haben momentan zwei VBus Geräte und ein drittes soll noch hinzu kommen. Das wäre dann um einiges einfacher.


Gruß Brun

akw

Hi,

ich habe angefangen mit dem Modul.
Es wird so laufen, dass das Server-Modul den VBUS-Datenstrom dekodiert (Septett draufrechnen/Checksumme prüfen usw.).
Anschliessend wird eine RawMessage mit dem Hex-String ausgegeben, die das Client-Modul dann empfangen kann.
Ich möchte, dass man nur das Server-Modul von Hand anlegen muss und die Clients sich dann per Autocreate selbst erzeugen.
Erste Versuche sind ganz vielversprechend, aber es wird noch ein paar Tage dauern, bis ich was posten kann.

Ich habe aus der Window-Software (Resol Service Center) die XML-Files für die verschiedenen Anlagen extrahiert und werde versuchen einen Converter zu schreiben, mit dem sie automatisch in eine Perl-Datenstruktur umgebaut werden können.

Ciao, Arno
FHEM-SVN auf MacMini OSX 10.7.5

FS20,FHT,HMS,CUL_WS,CUL_HM,KS300,HUE,FB_DECT

FHEMobile: www.fhemobile.de

mahlzeit24/7

Klasse Arno,

danke für das update

Viele GRüße


Frank

akw

Hi,

ich habe eine erste Version der Module fertig. Bevor ich sie ins SVN hochlade, würde ich sie gerne an ein paar "Freiwilligen" testen. ;-)

Ihr müsst Euer altes 20_VBUS.pm zur Seite legen und die beiden Module ins FHEM/ Verzeichnis kopieren und FHEM neustarten.
Dann müsst Ihr den LAN Adapter definieren:
define vbus VBUSLAN 192.168.178.65:7053
(Eure IP eintragen. Das Passwort ist noch fest auf 'vbus' gestellt, wird aber später konfigurierbar.)
Das Modul wird die entsprechenden VBUSDEV-Devices per autocreate erstellen.
Achtung: Ich habe bislang nur die DiemasolC (7751) und die Vitosolic200 (7321) eingebaut.
Andere Regler werden ohne Änderung nicht erkannt!

Es ist aber recht einfach, andere Regler einzubinden. Es gibt eine PERL-Struktur, in der alle Daten gespeichert sind. Für die DiemasolC sieht sie so aus:


"7751" => {"name" => "DiemasolC", "cmd" => "0100", "fields" => [
{ "offset" =>  0,"name" => "temperature_T01","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" =>  2,"name" => "temperature_T02","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" =>  4,"name" => "temperature_T03","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" =>  6,"name" => "temperature_T04","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" =>  8,"name" => "temperature_T05","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" => 10,"name" => "temperature_T06","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" => 12,"name" => "temperature_T07","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" => 14,"name" => "temperature_T08","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" => 16,"name" => "temperature_T09","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" => 18,"name" => "temperature_T10","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
{ "offset" => 20,"name" => "temperature_T11","bitSize" => 15,"factor" => 0.1,"unit" => "°C" },
  { "offset" => 22,"name" => "volumeflow", "bitSize" => 15,"factor" => 0.1,"unit" => "l/min"},
  { "offset" => 24,"name" => "speed_R01", "bitSize" => 8, "unit" => "%"},
  { "offset" => 25,"name" => "speed_R02", "bitSize" => 8, "unit" => "%"},
  { "offset" => 26,"name" => "speed_R03", "bitSize" => 8, "unit" => "%"},
  { "offset" => 27,"name" => "relais_R04", "bitPos" => 0, "bitSize" => 1 },
  { "offset" => 27,"name" => "relais_R05", "bitPos" => 1, "bitSize" => 1 },
  { "offset" => 27,"name" => "relais_R06", "bitPos" => 2, "bitSize" => 1 },
  { "offset" => 27,"name" => "relais_R07", "bitPos" => 3, "bitSize" => 1 },
  { "offset" => 27,"name" => "relais_R08", "bitPos" => 4, "bitSize" => 1 },
  { "offset" => 27,"name" => "relais_R09", "bitPos" => 5, "bitSize" => 1 },
  { "offset" => 28,"name" => "heatquantity", "bitSize" => 32, "factor" => 0.001,"unit" => "kWh" },
]},


Diese Daten bekommt man aus den XML-Dateien im RESOL ServiceCenter. (Windows/Java-Software).
Wenn "bitSize" => 1 gesetzt ist, setzt mein Modul die 1 und 0 automatisch in "on" und "off" um. Das mach ich aber noch konfigurierbar.
WICHTIG: Die "name"-Einträge dürfen keine Leerzeichen enthalten! Sie sollten bei allen Reglern möglichst ähnlich sein.

Bitte teilt mir mit, welche Regler Ihr verwendet, damit ich sie einbauen kann, oder noch besser, ergänzt die Struktur selbst und postet sie hier, damit ich sie integrieren kann.


Achja, nochwas: Meine Diemasol liefert im Sekundentakt Daten. Ich habe im Modul automatisch die Attribute event-min-interval auf 120 Sek. gesetzt und event-on-change-reading aktiviert. Das heißt: Es gibt nur Daten, wenn sich ein Wert ändert ODER 120 Sek. vergangen sind. Kann man auch höher stellen, 300 Sek. sollten gut sein.



Falls es Probleme gibt, lasst es mich wissen!


Ciao, Arno
FHEM-SVN auf MacMini OSX 10.7.5

FS20,FHT,HMS,CUL_WS,CUL_HM,KS300,HUE,FB_DECT

FHEMobile: www.fhemobile.de