VBus in fhem

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

Vorheriges Thema - Nächstes Thema

FHEMOL

Hat den keiner einer Idee, woran meine Fehlermeldung, siehe Post 99 vom 05.05., liegen könnte?

oldwolf

#106
Hallo FHEMOL,

dein Fehler sagt mir leider auch überhaupt nichts. Aber fangen wir mal systematisch an:
Du schreibst ja, dass du relativ neu in der Materie bist, also gehe ich mal davon aus, dass deine Konfiguration (abgesehen von vbus) mehr oder weniger den "Werkseinstellungen" entspricht?
Das würde bedeuten, dass dem neuen Modul nichts dazwischen funken kann, sprich der Fehler liegt irgendwo in einer der beiden *.pm Dateien oder in dem, was du der CFG hinzugefügt hast.
Dem entsprechend hier mal eine kleine Checkliste:

  • VBUSDEV.pm richtig angepasst: passt die "%VBUS_devices"- Konfiguration für dein Gerät?
  • VBUSLAN.pm angepasst: In Zeile 71 "$conn->write("PASS xyz")" muss das Passwort eingetragen werden, welches du auch benutzt, um per Telnet auf den VBUS-Adapter zuzugreifen. Scheint ja auch zu funktionieren, da du ja wohl schon eine Nachricht empfangen hast.
  • Die Konfiguration in der cfg richtig eingetragen, das sollte ja mit "define vbus VBUSLAN 192.168.178.10:7053" funktionieren... sofern du nicht irgendwie das autocreate kaputt gemacht hast?
Hast du nicht noch ein paar Infos mehr? Z.B. Was passiert, wenn du die Devices manuell hinzufügst? Bekommst du Fehlermeldungen direkt angezeigt beim Speichern der CFG?
Wenn das alles nichts hilft, mal eine Frage an die Perl-Spezialisten: Kann es vielleicht sein, dass bei diesem AssignIoPort() tatsächlich nur ein Parameter eingegeben werden darf? Das meckert die Fehlermeldung ja schließlich an...

Zu deiner Frage wie du die Module am besten editieren kannst:
- wenn ich keinen phsysikalischen Zugriff auf FHEM habe, sprich keinen USB-Stick abziehen kann oder FHEM nicht gestoppt werden soll, dann nehme ich entweder Total-Commander um eine FTP-Verbindung herzustellen und die Dateien mit Notepad ++ zu bearbeiten oder ich nehme Putty und verbinde mich Telnet und arbeite mit dem nano-Editor (Kommando-Zeilen basiert, macht Spaß ;) )
- ansonsten: USB-Stick raus, in den PC rein und mit Notepad ++ bearbeiten.
Ich benutze Notepad ++ weil das einfach funktioniert, bei den Micisoft-Editoren zeigt es entweder alles in einer Zeile oder die Codierung passt nicht oder es gibt andere Probleme. Deine Variante sollte meiner Meinung nach auch funktionieren, bzw. habe ich auch schon so gemacht, als FHEM noch auf der Fritz lief.



@Arno:
Ich hatte ja beschrieben, dass ich in relativ unregelmäßigen Abständen immer wieder für 24 Stunden keine Daten bekomme.
Das ist bisher am 10. oder 11. und am 27. oder 28. eines Monats passiert. In diesem Zusammenhang taucht auch immer die Fehlermeldung "wrong message length" auf, die mir sagt, dass die Nachricht (immer) 1 Zeichen zu kurz ist.

Diese Regelmäßigkeit und die Abweichung von einem Zeichen hat mich irgendwie stutzig gemacht und ich denke, den Fehler gefunden zu haben:
Als letzter Wert der vbus-Nachricht (7721 - DeltaSol E Regler) wird das Datum (genauer gesagt der Tag) übertragen. Ich kenne mich mit den Bus-Nachrichten, der Übertragung und deiner Decodierung der Nachrichten zu wenig aus, aber wenn ich mich nicht irre, sind die ganzen Werte doch irgendwie in Hex-Schreibweise notiert, richtig?
Kann es dann nicht z.B. sein, dass der Tag den Wert "0a" hat und es deshalb eine Kollision mit der nächsten Nachricht gibt, die mit "aa1000..." beginnt, also: "aa1000...0aaa1000...". Wenn dann natürlich nach dem "aa" gesucht wird, würde die erste Nachricht auf "0" enden anstellen von "0a", also genau ein Zeichen zu kurz.
Ist das halbwegs verständlich was ich meine? Und ist ein solches Problem denkbar?

Viele Grüße & Danke
Robin

akw

Zitat von: oldwolf am 15 Mai 2014, 18:55:53
Kann es dann nicht z.B. sein, dass der Tag den Wert "0a" hat und es deshalb eine Kollision mit der nächsten Nachricht gibt, die mit "aa1000..." beginnt, also: "aa1000...0aaa1000...". Wenn dann natürlich nach dem "aa" gesucht wird, würde die erste Nachricht auf "0" enden anstellen von "0a", also genau ein Zeichen zu kurz.

Hmm, eigentlich sollte byteweise gesucht werden (also immer zwei Hexadezimalzeichen auf einmal), aber ich schaue mir das mal an.

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

markus25

Hallo zusammen,
ich will mich hier mal mit anhängen.
Ich habe eine CosmoMulti mit VBUS Lan adapeter und wollte mir die .pm von weiter vorne im Betrag in meine Installation kopieren, es kommt aber immer irgend welche Fehlermeldungen, es gibt auch einen SVN Link der funktioniert aber auch nicht, kann mir jemand einen funktionierenden Link posten.

Vielen Grüße
Markus

FHEM auf Raspi3 HMLAN und Cuno, Resol per VBus und Jeelink

markus25

Hallo zusammen,
ich hab jetzt eine Konfig gefunden, jetzt bekomm ich schon mal was zu sehen, aber die Werte passen überhaupt nicht.
Anbei die Werte die ich bekomme.

STATE

T1: 2925.3 T2: 2853 T3: 830.6 T7: 829.5 T8: 2848.3 T9: 2827 R1: 0 R3: 0 R5: 0 R6: 0 R7: 0 T10: 2544.5

VG
Markus
FHEM auf Raspi3 HMLAN und Cuno, Resol per VBus und Jeelink

oldwolf

Hallo Markus,

hier scheinen wohl alle im Urlaub zu sein.
Wenn du vielleicht noch etwas konkreter werden kannst, kann man dir vielleicht auch helfen.

Zitat von: markus25 am 30 Juli 2014, 20:40:52
wollte mir die .pm von weiter vorne im Betrag in meine Installation kopieren
Welche VBUSDEV.pm hast du dir denn kopiert? (Antwort#, Datum)
Ist da deine CosmoMulti überhaupt drin?

Zitat von: markus25 am 30 Juli 2014, 20:40:52
es kommt aber immer irgend welche Fehlermeldungen
Geht das genauer? Wo kommen Fehlermeldungen? Beim Herunterladen? Im FHEM?
Fehlermeldungen beinhalten oft nützliche Infos... kannst du die Fehlermeldungen vielleicht mal hier einfügen?

Zitat von: markus25 am 08 August 2014, 23:37:08
ich hab jetzt eine Konfig gefunden, jetzt bekomm ich schon mal was zu sehen, aber die Werte passen überhaupt nicht.
Wie sieht die Config denn aus? Meinst du die *.cfg oder die VBUSDEV.pm?
Alles was in die *.cfg rein muss, hättest du nicht suchen müssen. Das wurde hier oft genug beschrieben. Ein VBUSDEV.pm zu finden, die die eigene Anlage enthält, halte ich eher für Glück... und ob es dann noch funktioniert?

Bin mal gespannt, welche Infos du so für mich hast.



@Arno:
Zitat von: akw am 30 Mai 2014, 13:32:23
Hmm, eigentlich sollte byteweise gesucht werden (also immer zwei Hexadezimalzeichen auf einmal), aber ich schaue mir das mal an.
Scheint ganz so, als wüsste das dein Programm selbst auch nicht so genau.   ;)
Kurz nach meinem letzten Beitrag hier habe ich mich mal ans Werk gemacht und versucht, den Fehler zu beseitigen. Ich weiß noch, dass ich irgendwie die Länge der Zeichenkette überprüfen lasse und wenn der Wert um 1 zu klein ist, schreibe ich noch ein "a" ans Ende. Den Code hab ich leider nicht hier, werde ich aber am Wochenende mal raussuchen.
Seither läuft meine Anlage auch am 10./11. und 27./28. eines Monats vollkommen problemlos und fehlerfrei. Ok, zumindest nehme ich den Fehler nicht mehr wahr. :D



Viele Grüße
Robin

markus25

Hallo Oldwolf,
bezüglich deiner Anmerkung, ich bin ab Montag auch im Urlaub 
Erstmal danke für deine Hilfe, ich habs schon fast aufgegeben, denn programmieren ist nicht das meine, hab sozusagen keinen Plan.

Zu deinen ersten zwei fragen und meinem Post vom 30.07, ich hab keine Ahnung mehr welche config ich da rein kopieren wollte.

Die 20_Vbus.pm habe ich  wie im Antwort 47 vom 14.01.14 von coolsmul erstellt und diese dann über meine FHEM.cfg angebunden, was dann auch ohne Fehlermedungen funktioniert hat.

Hier ist der Code meiner 20_Vbus.pm

Hier ist der code meiner 20_Vbus.pm



# $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 = (ord(substr($payload,1,1))*256 + ord(substr($payload,0,1))) / 10.;
        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;


Hoffe das ich deine Fragen beantworten konnte und würde mich auf eine Rückinfo freuen.

VG
Markus

FHEM auf Raspi3 HMLAN und Cuno, Resol per VBus und Jeelink

Franz Tenbrock

#112
Hallo
gerade beim stöbern auf diesen Thread gestossen.
Ich habe auhc eine thermische Solaranlage und ziehe gerade auf einen cubie um.
Bin leider Anfänger in Linux und FHEM.

Was schade ist das immer wieder tolle Module irgendwie untergehen. Das Suchen in den langen Threads ist schwierig weil die Zusammenhänge weit verstreut sind.
Kann man nicht einen neune Thread aufmachen und das wichtigste im ersten Post zusammenfassen?
Ich würde mir sogar eine neue Steuerung kaufen, nur welche dann.
Also Geräde die bisher laufen; Kosten , Module.

diese beiden wurden zb erwähnt:
Diemasol A EC190 zB ca 200 Eur0
DeltaSol® BX   ca 150 Euro

Dann braucht man ja noch einen Vbus???
PC-connection set for RESOL controller with VBus®, with software RSC
hab eine für kanpp 60 Euro gefunden

Es steigen doch hier immer mehr Leute ein und gerade die Solaranlagen können doch wenn sie optimal eingestellt sind ne Menge Geld sparen.

Nur mal so als Anregung

den hier könnt ich günstig bekommen würde der gehen ?
Solarregler DeltaSol® BS PLUS
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

oldwolf

#113
Hallo,


@Markus:

Zunächst mal zu deinem Problem. Wenn du wirklich die Dateien von Post #47 hast, dann hast du nicht weit genug gelesen. In Post #59 hat Arno sein neues Modul vorgestellt. Das läuft m.E. wesentlich besser und ist deutlich leichter einzurichten.
Du kopierst dir am besten mal die 20_VBUSLAN.pm von Arno (Post #59 vom 04. März), dort ist auch beschrieben wie du das ganze einrichtest. Eine kleine Hürde gibt es dann noch: deine CosmoMulti ist noch nicht in der 21_VBUSDEV.pm, die ich in Post #93 angefügt habe. Die kannst du dir nach der Anleitung von Arno im oben genannten Post selbst erstellen oder vielleicht komme ich ja noch dazu bis du aus deinem Urlaub zurück bist.
[EDIT:]
Hab die 21_VBUSDEV.pm ergänzt und angehängt, s.u.



@Franz:

Welche Steuerung du benötigst hängt natürlich von deiner Solaranlage ab. Soweit ich weiß können alle Steuerungen, die im RESOL-ServiceCenter unterstützt werden, auch mit FHEM angesprochen werden. Und da sind wirklich viele drin. Wenn du mir verrätst, welche Steuerung (Hersteller, Bezeichnung) du jetzt benutzt, kann ich mal nachschauen, ob deine Steuerung dort auftaucht. Dann könnte man es mal damit probieren, ohne dass du eine neue Steuerung kaufen musst.

Die DeltaSol BS PLUS wird z.B. von Olaf (olgo59) verwendet, der hat aber damit Probleme, die sich bisher nicht erklären ließen (siehe ab Post #94). Theoretisch sollten aber alle von dir genannten Steuerungen funktionieren. Ob ein fehlerloser Betrieb in der Realität und in deinem speziellen Einzelfall auch möglich ist, kann dir natürlich vorher niemand garantieren.

Ich habe folgende Hardware am laufen und bin damit bislang sehr zufrieden:

Den Lan-Adapter brauchst du meiner Meinung nach unbedingt (gibt auch welche für USB, etc. aber das Modul kann nur LAN).

Noch ein Wort zum Einsparpotenzial:
Du kannst mit diesem Modul bislang deine Anlage nur überwachen, eine Fernsteuerung oder das Ändern von Einstellungen ist noch nicht möglich.


@Arno:

Hier übrigens meine Anpassungen der 20_VBUSLAN.pm. Seither funktioniert das Modul tadellos (egal an welchem Datum) :D
In der Funktion VBUSLAN_Read habe ich an den folgenden Zeilen (Zeile 131 ff.)

if ($len != length($msg)) {
   Log 4,"$name: Wrong message length: $len != ".length($msg);
} else {
   ...

... diese Änderungen vorgenommen:

if ($len != length($msg) && length($msg) != 223) {
    Log 4,"$name: Wrong message length: $len != ".length($msg);
} else {
   if(length($msg) == 223) {
      $msg = $msg."a";
   }
   ...

Geht natürlich nur bei der DeltaSol E, bei der nächsten Anlage mit ähnlichen Ausfallerscheinungen geht das nicht, aber vielleicht hilfts dir ja.


@all:
Ich habe auf Wunsch von Markus die Cosmo Multi in die 21_VBUSDEV integriert. Wäre gut, wenn jemand mal berichten könnte, ob das funktioniert.
Inzwischen sind also folgende Steuerungen vorhanden:

  • 7751 - DiemasolC
  • 7321 - Vitosolic200
  • 7721 - DeltaSol E (Regler)
  • 7722 - DeltaSol E (Wmz)
  • 4212 - DeltaSolC
  • 7331 - SLR
  • 427B - DeltaSol_BS_2009
  • 7821 - CosmoMulti (Regler)
  • 7822 - CosmoMulti (WMZ)
Um mir und euch das Leben beim Übernehmen der XML-Daten einfacher zu machen, bastle ich derzeit an einer Excel-Tabelle. In diese muss nur der entsprechende Teil aus der XML-Datei, die im Installationsordner des Service-Centers liegt, kopiert werden und als Ergebnis kommt der fertige Block raus, der dann in die 21_VBUSDEV kopiert werden kann. Bin derzeit noch am Testen, falls Interesse besteht, einfach kurz melden, dann lade ich die Datei hoch.



Viele Grüße
Robin




avg123-de

Hallo,

habe diesen Thread sehr aufmerksam gelesen und bin beeindruckt.
Wir haben einen Deltasol BX installiert und ich möchte nun auch über das hier vorgestellt Modul mit Hilfe von VBus die Daten auslesen und in FHEM anzeigen.

@oldwolf
Ich wäre an der Excel-Tabelle sehr interessiert, da der Deltasol BX in der 21_VBUSDEV.pm noch nicht drin ist und mir so das anpassen der XML-Daten leichter fiele.

viele Grüße
avg123-de
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

oldwolf

#115
Hallo avg123... oder hast du auch einen richtigen Namen? ;)

Gerne kann ich dir die Excel-Tabelle schicken. Ich hab es in der 2013-Version geschrieben, müsste aber auch in anderen Excel-Versionen funktionieren... hoffe ich!
Verwendung wie folgt:

  • XML-Datei suchen und mit einem Editor (z.B. Notepad ++) öffnen.
  • Manchmal sind mehrere Steuerungen in einer Datei, manchmal nicht. Also den richtigen Abschnitt finden und von <packet> bis </packet> kopieren.
  • In Excel in der Zelle B2 einfügen. Achtung: mehr als 248 Zeilen können nicht verarbeitet werden. Ggf. aufteilen!
  • Name der Steuerung in A1 eintragen (geht auch ohne <!-- ... ->)
  • Zelle K1 kopieren und in Word einfügen. Dieser Zwischenschritt ist notwendig, da beim direkten Einfügen in den oben genannten Editor die Anführungszeichen doppelt erscheinen.
  • Text von Word in die 21_VBUSDEV.pm kopieren. Das Kopierte sollte am besten ganz oben oder ganz unten zwischen den Klammern von "my %VBUS_devices =" stehen.
  • Ergänzte 21_VBUSDEV.pm im Forum posten ;)

Über eine kurze Rückmeldung oder Verbesserungshinweise wäre ich dankbar!

Grüße
Robin

avg123-de

#116
Hallo,

vielen Dank für die schnelle Antwort.
Habe ein bisschen rumprobieren müssen, da es mehr als 248 Zeilen waren, aber ansonsten klappt das mit der Excel-Tabelle ganz gut.

Da mein VBus noch auf dem Postweg ist und ich somit meinen "Code", den ich aus der XML-Datei "gebastelt" habe noch nicht testen konnte, stelle ich meine 21_VBUSDEV.pm noch nicht hier rein.
Da ich wie bereits erwähnt etwas basteln musste, würde ich mich freuen wenn jemand mal darüber schauen könnte, ob nicht grobe Fehler drin sind.
Wenn mein VBus dann geliefert wurde probiere ich es direkt aus und stellen dann auch wenn es funktioniert meine 21_VBUSDEV.pm online.

"7421" => {"name" => "DeltaSol_BX", "cmd" => 0100, "fields" => [
{ "offset" => 0, "name" => "Temperatur_Sensor_1", "name lang="en"" => Temperature sensor 1, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 2, "name" => "Temperatur_Sensor_2", "name lang="en"" => Temperature sensor 2, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 4, "name" => "Temperatur_Sensor_3", "name lang="en"" => Temperature sensor 3, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 6, "name" => "Temperatur_Sensor_4", "name lang="en"" => Temperature sensor 4, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 8, "name" => "Temperatur_Sensor_5", "name lang="en"" => Temperature sensor 5, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 10, "name" => "Temperatur_RPS", "name lang="en"" => Temperature RPS, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 12, "name" => "Druck_RPS", "name lang="en"" => Pressure RPS, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 14, "name" => "Temperatur_VFS", "name lang="en"" => Temperature VFS, "bitSize" => 15, "factor" => 0.1 },
{ "offset" => 16, "name" => "Durchfluss_VFS", "name lang="en"" => Flow VFS, "bitSize" => 15, "factor" => 1 },
{ "offset" => 24, "name" => "Drehzahl_Relais_1", "name lang="en"" => Relais 3, "bitSize" => 8, "unit" => "%" },
{ "offset" => 25, "name" => "Drehzahl_Relais_2", "name lang="en"" => Relais 2, "bitSize" => 8, "unit" => "%" },
{ "offset" => 26, "name" => "Drehzahl_Relais_3", "name lang="en"" => Relais 3, "bitSize" => 8, "unit" => "%" },
{ "offset" => 27, "name" => "Drehzahl_Relais_4", "name lang="en"" => Relais 4, "bitSize" => 8, "unit" => "%" },
{ "offset" => 22, "name" => "PWM_1", "name lang="en"" => PWM 1, "bitSize" => 8, "unit" => "%" },
{ "offset" => 23, "name" => "PWM_2", "name lang="en"" => PWM 2, "bitSize" => 8, "unit" => "%" },
{ "offset" => 16, "name" => "Durchfluss_VFS", "name lang="en"" => Flow VFS, "bitSize" => 15, "factor" => 1 },
{ "offset" => 18, "name" => "Durchfluss_V40", "name lang="en"" => Flow V40, "bitSize" => 15, "factor" => 1 },
{ "offset" => 48, "name" => "Wärmemenge", "name lang="en"" => Heat qty., "bitSize" => 31, "factor" => 1 },
{ "offset" => 54, "name" => "Systemzeit", "name lang="en"" => System time, "bitSize" => 16, "format" => t },
{ "offset" => 56, "name" => "Datum", "name lang="en"" => Date, "bitSize" => 32 },
{ "offset" => 52, "name" => "Version", "bitSize" => 16, "factor" => 0.01 },
{ "offset" => 28, "name" => "Betriebssekunden_Relais_1", "name lang="en"" => W R1, "bitSize" => 32, "unit" => "s" },
{ "offset" => 32, "name" => "Betriebssekunden_Relais_2", "name lang="en"" => W R2, "bitSize" => 32, "unit" => "s" },
{ "offset" => 36, "name" => "Betriebssekunden_Relais_3", "name lang="en"" => W R3, "bitSize" => 32, "unit" => "s" },
{ "offset" => 40, "name" => "Betriebssekunden_Relais_4", "name lang="en"" => W R4, "bitSize" => 32, "unit" => "s" },
{ "offset" => 46, "name" => "Status", "name lang="en"" => Status, "bitSize" => 16 },
{ "offset" => 46, "name" => "Blockierschutz_1", "bitSize" => 1, "bitPos" => 0 },
{ "offset" => 46, "name" => "Blockierschutz_2", "bitSize" => 1, "bitPos" => 1 },
{ "offset" => 46, "name" => "Blockierschutz_3", "bitSize" => 1, "bitPos" => 2 },
{ "offset" => 46, "name" => "Blockierschutz_4", "bitSize" => 1, "bitPos" => 3 },
{ "offset" => 46, "name" => "Initialisierung", "bitSize" => 1, "bitPos" => 4 },
{ "offset" => 46, "name" => "Füllung", "bitSize" => 1, "bitPos" => 5 },
{ "offset" => 46, "name" => "Stabilisierung", "bitSize" => 1, "bitPos" => 6 },
{ "offset" => 46, "name" => "Pumpenverzögerung", "bitSize" => 1, "bitPos" => 7 },{ "offset" => 47, "name" => "Überwärmeabfuhr", "bitSize" => 1, "bitPos" => 0 },
{ "offset" => 47, "name" => "Nachlauf", "bitSize" => 1, "bitPos" => 1 },
{ "offset" => 47, "name" => "Thermische_Desinfektion", "bitSize" => 1, "bitPos" => 2 },
{ "offset" => 47, "name" => "Systemkühlung", "bitSize" => 1, "bitPos" => 3 },
{ "offset" => 47, "name" => "Speicherkühlung", "bitSize" => 1, "bitPos" => 4 },
{ "offset" => 47, "name" => "Spreizung", "bitSize" => 1, "bitPos" => 5 },
{ "offset" => 47, "name" => "Frostschutz", "bitSize" => 1, "bitPos" => 6 },
{ "offset" => 47, "name" => "Kollektorkühlung", "bitSize" => 1, "bitPos" => 7 },
{ "offset" => 20, "name" => "Einheit", "name lang="en"" => Unit, "bitSize" => 8 },
{ "offset" => 44, "name" => "Fehler", "name lang="en"" => Error, "bitSize" => 16 },
{ "offset" => 44, "name" => "Fehler_S1", "bitSize" => 1, "bitPos" => 0 },
{ "offset" => 44, "name" => "Fehler_S2", "bitSize" => 1, "bitPos" => 1 },
{ "offset" => 44, "name" => "Fehler_S3", "bitSize" => 1, "bitPos" => 2 },
{ "offset" => 44, "name" => "Fehler_S4", "bitSize" => 1, "bitPos" => 3 },
{ "offset" => 44, "name" => "Fehler_S5", "bitSize" => 1, "bitPos" => 4 },
{ "offset" => 44, "name" => "Fehler_S6", "bitSize" => 1, "bitPos" => 5 },
{ "offset" => 44, "name" => "Fehler_S7", "bitSize" => 1, "bitPos" => 6 },
{ "offset" => 44, "name" => "Fehler_S8", "bitSize" => 1, "bitPos" => 7 },
{ "offset" => 45, "name" => "Fehler_S9", "bitSize" => 1, "bitPos" => 0 },
{ "offset" => 45, "name" => "Fehler_V40", "bitSize" => 1, "bitPos" => 1 },
{ "offset" => 45, "name" => "Leckage", "bitSize" => 1, "bitPos" => 2 },
{ "offset" => 45, "name" => "Überdruck", "bitSize" => 1, "bitPos" => 3 },
{ "offset" => 45, "name" => "Durchflussfehler", "bitSize" => 1, "bitPos" => 4 },
]},


Habe die XML-Datei auch noch einmal angehangen!

viele Grüße
Alexander
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

Franz Tenbrock

#117
@oldwolf
Habe nun endlich nachsehen können
Ist eine sunset solar triton
ist sicher 12 Jahre alt,
wohl eher ohne Bus ...

welche neue Stuerung bietet wohl den besten Benefit mit fhem?
sozusagen Preis Leistungs Sieger
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

oldwolf

Hallo

auf den ersten Blick konnte ich deine Steuerung nicht in der Liste finden. Aber wahrscheinlich hast du Recht und die ist einfach zu alt.

Ob es eine Steuerung gibt, die gegenüber FHEM mehr "kann", weiß ich nicht. Jede Steuerung hat natürlich eine unterschiedliche Anzahl von Sensoren und Relais, deren Zustand du über Arno's Modul auslesen (und vielleicht irgendwann beeinflussen) kannst. So gesehen bringt eine Steuerung, die viele Relais und viele Sensoren hat, eben den Vorteil, dass du mehr Daten auslesen kannst. Aber was nützt es dir, wenn du z.B. 30 Sensoren und 20 Relais auslesen könntest, deine Anlage aber so aufgebaut ist, dass du nur 10 Relais steuerst und 10 Sensoren brauchst. Ich bin daher der Meinung, dass die Steuerung, die am besten zu der Größe deiner Solaranlage passt, den besten Benefit bringt.

Hier ist übrigens eine Liste mit Anlagen, die das VBUS-Protkoll verwenden und somit theoretisch auch mit Arnos Modul ausgelesbar sein sollten:
http://hobbyelektronik.org/w/images/0/04/VBus-Protokollspezifikation.pdf (Abschnitt G: Bekannte Adressen)
http://tubifex.nl/wordpress/wp-content/uploads/2013/05/VBus-Protokollspezification_en_270111.pdf (Abschnitt G: Known addresses)

Viele Grüße

virus1976

Hallo,

verfolge den Thread schon lange - jetzt im Urlaub bei regenwetter hatte ich endlich zeit selber zu starten - als newbie auf dem gebiet.
FHEM läuft bei mir am Beagle Bone - läuft soweit gut.
Meine RESOL Steuerung = Deltasol BX PLUS (code 7112) & ein Erweiterungsmodul EM1 (code 6651)

Über die Resol Service center SW erhalte ich daten - habe aus entsprechenden XML files auch die 21_VBUSDEV.pm angepasst.

Ergebnis: die selben Fehlermeldungen wie FHEMOL (Antwort#99):

2014.08.31 17:26:29 3: Opening vbus device 10.0.0.17:7053
2014.08.31 17:26:29 3: vbus device opened
2014.08.31 17:26:29 1: reload: Error:Modul 21_VBUSDEV deactivated:
Too many arguments for main::AssignIoPort at ./FHEM/21_VBUSDEV.pm line 239, near "$iodev) "

2014.08.31 17:26:29 0: Too many arguments for main::AssignIoPort at ./FHEM/21_VBUSDEV.pm line 239, near "$iodev) "

2014.08.31 17:26:29 0: ERROR: Cannot autoload VBUSDEV
2014.08.31 17:26:29 3: vbus: Unknown code aa15001271100001084e020a00001f01050200000000010b000000000000020800000000000000ffffff, help me!
2014.08.31 17:26:29 1: reload: Error:Modul 21_VBUSDEV deactivated:
Too many arguments for main::AssignIoPort at ./FHEM/21_VBUSDEV.pm line 239, near "$iodev) "


Ausserdem ist in meiner fhem.cfg keine Spur von irgendwelchen vbus daten:

attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global statefile ./log/fhem.save
attr global verbose 3
attr global updateInBackground

define telnetPort telnet 7072 global

define WEB FHEMWEB 8083 global

define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen

define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix touchpad

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog

define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log

define eventTypes eventTypes ./log/eventTypes.txt

# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create


Kann es eventuell sein, dass das Modul mit der Mehrzahl von verschiedenen Reglern/Komponenten überfordert ist???

Hier mal ein Screenshot der Servicecenter Software - wo alle Komponenten unter "Protokollinformationen" angezeigt werden (Anhang).
Ich habe zur Sicherheit jede einzelne davon in meine 21_VBUSDEV.pm integriert... (meine VBUSDEV.pm deshalb auch im Anhang).