VBus in fhem

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

Vorheriges Thema - Nächstes Thema

marc2

Moin erstmal !

Ich bin eher im HM und 1w Bereich unterwegs und besitze selber keinen VBUS (meine Heizung ist noch ein analoges Schätzchen  ;)). Allerdings besitzt ein Kumpel eine Cosmo Anlage. Also flugs den Raspi mit FHEM fertig gemacht und die beiden aktuellen VBUS Module installiert. Erfreulicher Weise hat die Anbindung sofort geklappt und es kommen auch Werte. Allerdings gibt es genau die hier bereits berichteten Ausreisser. Bei dem Regler handelt es sich um einen Comso Multi. Die Werte der Sensoren scheinen aber irendwie vertauscht. Ein dritte Sache wären die folgenden Fehlermeldungen:

Use of uninitialized value in concatenation (.) or string at ./FHEM/21_VBUSDEV.pm line 437.
Use of uninitialized value in concatenation (.) or string at ./FHEM/21_VBUSDEV.pm line 437.
substr outside of string at ./FHEM/21_VBUSDEV.pm line 437.
substr outside of string at ./FHEM/21_VBUSDEV.pm line 437.
Use of uninitialized value in concatenation (.) or string at ./FHEM/21_VBUSDEV.pm line 437.
Use of uninitialized value in concatenation (.) or string at ./FHEM/21_VBUSDEV.pm line 437.
substr outside of string at ./FHEM/21_VBUSDEV.pm line 435.
Use of uninitialized value $val in hex at ./FHEM/21_VBUSDEV.pm line 442.
substr outside of string at ./FHEM/21_VBUSDEV.pm line 435.
Use of uninitialized value $val in hex at ./FHEM/21_VBUSDEV.pm line 442.


Hat jemand noch einen einen Cosmo Multi und ähnliche Erfahrungen ?

Danke & Gruß, Marc

avg123-de

#151
Hallo,

habe eben mal bei mir in die FHEM-Log-Datei rein geschaut, welche komischer weise jetzt über 3.000.000 Zeilen hat (ist innerhalb eines Tages ca. 270MB gewachsen) und dort steht immer wieder:
Zitat2014.09.03 23:01:54 1: 172.16.0.22:7053 reappeared (vbus)
2014.09.03 23:01:54 1: 172.16.0.22:7053 disconnected, waiting to reappear (vbus)
2014.09.03 23:01:54 1: 172.16.0.22:7053 reappeared (vbus)
2014.09.03 23:01:54 1: 172.16.0.22:7053 disconnected, waiting to reappear (vbus)
2014.09.03 23:01:54 1: 172.16.0.22:7053 reappeared (vbus)
2014.09.03 23:01:54 1: 172.16.0.22:7053 disconnected, waiting to reappear (vbus)
2014.09.03 23:01:54 1: 172.16.0.22:7053 reappeared (vbus)

vielleicht kann dies die Ursache meiner Ausreißer erklären!

viele Grüße und einen schönen Abend
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

oldwolf

Hallo zusammen,

@Markus, Marc:
Markus, mir kommt die Sache bei dir langsam immer seltsamer vor. Vorallem weil bei marc die ganze Sache ja (bei gleichem Regler?) zu funktionieren scheint. Vielleicht ist der Marc ja so nett und zeigt uns mal die verwendete Config und die VBUSDEV, die du dann nur noch zu kopieren brauchst, nachdem du alles (!) was mit VBUS zu tun hat aus deiner Konfiguration gelöscht hast.
Was mir auch noch eingefallen ist:
Gib mal den Befehl "list" ein und schau nach, ob "VBUSLAN" auftaucht und ob dort irgendein Device mit Status "(opened)" steht. Oder vielleicht sogar mehrere?

@Alexander, Marc:
Ich nehme mal an, dass die Ausreißer bei euch irgendwie die selbe Ursache haben. Vielleicht könntet ihr mal folgendes probieren:
Befehl "list" => ein Device unter VBUSDEV auswählen (wie viele Devices habt ihr da?) => dann die Seite dort so aktualisieren bis ihr einen Ausreißer seht (die Werte werden unten angezeigt und immer aktualisiert), dann postet ihr mal das was unter "_RAWMSG" steht... dann wieder aktualisieren, bis die Werte wieder passen und nochmal die "_RAWMSG" kopieren.
Ich will mal sehen, was der Regler so sendet und ob es sich ggf. nur um einen Rechenfehler handelt oder um eine falsch verstandene Nachricht. Das was der Marc an Fehlern gepostet hat, sieht eher danach aus, dass da vereinzelt Nachrichten nur in Stücken ankommen.

@Alexander:
Greifst du parallel mit dem RESOL Service-Center auf den VBUS zu?

Viele Grüße
Robin

avg123-de

Hallo Robin,

ich habe unter VBUSDEV ein Device.
Bei _RAWMSG:

-Ausreißer:                    aa15002174100001073d0108000000000000020a0000de02ae0200000000010b000000000000[/li][/list]
-bei passenden Werten:  aa100021741000010f3ade02ad020d01b822b82288fcf1d888fcf1d800000b00000000000000ea1a01000100000001000000010000000000000000000000c90078046a533301

Mit der Resol Service-Center Software greife ich gleichzeitig nicht zu.

viele Grüße und einen schönen Abend
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

markus25

Hallo Oldwolf,
ich hatte noch ein anderes Problem das ich die 20_VBUSLAN.pm nicht eingetragen hatte, was ich aber schon vorgestern korrigiert habe, jetzt kann ich den VBUS Lanadapter auch anlegen er steht aber immer auf disconnect.

Eintrag der Definition des Devices:

Internals
CFGFN   
Clients         :VBUSDEV:
DEF              192.168.1.12:7821
DeviceName  192.168.1.12:7821
NAME            vbus
NEXT_OPEN   1410038322
NR                104
PARTIAL
STATE           disconnected
TYPE              VBUSLAN


Eintrag beim ausführen von List:

VBUSLAN:
  vbus                 (disconnected)



Eintrag in Log:
2014.09.06 23:04:32 3: Opening vbus device 192.168.1.12:7821
2014.09.06 23:04:32 3: Can't connect to 192.168.1.12:7821: Connection refused


Ich hoffe ich kann einbischen zur Aufklärung meines Problems beitragen:-(

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

oldwolf

Hallo zusammen,

@ Alexander:

Es ist wie ich vermutet hatte: Dein Modul versucht Nachrichten zu verstehen, die gar nicht für das Modul gedacht sind. Normalerweise beginnen die RAWMSG mit "aa1000". Dabei ist "aa" immer das Symbol für den Beginn einer neuen Nachricht. Danach folgt die Zieladresse, wobei die "1000" (bzw. eigentlich 0010) für Broadcast steht, das heißt deine Steuerung sendet die Daten einfach in die Welt. Die Zieladresse "1500" ist mir unbekannt, beinhaltet aber scheinbar andere Informationen für ein anderes Gerät.
Das Problem ist: das Modul sollte das eigentlich selbstständig merken und die Nachricht ignorieren... aber das passiert ja nicht.
Wir können mal was probieren. Jetzt kommt der Teil, bei dem ich einfach mal mehrere Sachen durchprobiere, ohne zu wissen was ich tue ;) Kann also passieren, dass du kurzfristig mal keine Werte mehr bekommst oder so ähnlich. Was ich dir vorschlage, kann ich ja leider nicht vorher testen. (Eine Sicherungskopie der VBUSDEV könnte helfen ;) )
Falls dir das zu unsicher ist, musst du den Arno bitten sich hier um dein Anliegen zu kümmern (du bist ja nicht der einzige mit diesem Fehler).
Solltest du mutig genug sein, dann trage mal in der Sub-Funktion VBUSDEV_Parse($$) nach dem ersten "return" (ist bei mir Zeile 387 in der VBUSDEV.pm) folgenden Code ein:
return undef if ($src_addr != "1000");
Danach sollte die komplette Sub-Funktion so aussehen:
sub VBUSDEV_Parse($$)
{
my ($iodev, $msg, $local) = @_;
my $ioName = $iodev->{NAME};


my $dst_addr = substr($msg,4,2).substr($msg,2,2);
my $src_addr = substr($msg,8,2).substr($msg,6,2);
my $protoVersion = substr($msg,10,2);

my $devtype = $VBUS_devices{$src_addr};

return "" unless defined $devtype;
return undef if ($src_addr != "1000");

my $hash = $modules{VBUSDEV}{defptr}{$src_addr};
if(!$hash) {
my $ret = "UNDEFINED VBUSDEV_$src_addr VBUSDEV $src_addr";
Log3 $ioName, 3, "$ret, please define it";
DoTrigger("global", $ret);
return "";
}


foreach my $mod (keys %{$modules{VBUSDEV}{defptr}}) {
my $hash = $modules{VBUSDEV}{defptr}{"$mod"};
$attr{$hash->{NAME}}{model} = $devtype->{name};

my $command = substr($msg,14,2).substr($msg,12,2);
my $payload = substr($msg,20);
VBUSDEV_ParsePayload($hash, $devtype, $command, $payload);

return $hash->{NAME};
}
return "";
}

Was passiert nachdem du das geändert hast?

@Markus:
Wieso nutzt du den Port 7821? In der Konfig musst du immer schreiben:
define vbus VBUSLAN <ip>:7053
Dabei ist 7053 nicht die Adresse von deinem Regler, sondern der Telnet-Port des VBUSLAN-Adapters.
Das VBUS-Modul horcht mit obiger Definition einfach deinen VBUSLAN-Adapter ab und entziffert die Nachrichten. Wenn dabei festgestellt wird, dass eine Nachricht von einer Quelle kommt, die du unter "my %VBUS_devices =" definiert hast, dann wird das VBUSDEV-Device angelegt und du erhälst die Werte. Und mit dem richtigen Port sollte das auch endlich mal funktionieren.

Grüße
Robin

avg123-de

Hallo Robin,

ich hatte jetzt mal
return undef if ($src_addr != "1000"); in die VBUSDEV.pm eingefügt.
Hiernach werden mir keiner Werte mehr übermittelt, _RAWMSG existiert dann nicht mehr und bei den Sensoren stehen dann nur noch die Ausreißer-Werte (jetzt aber dauerhaft).

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

marc2

Hi !

Zitat von: oldwolf am 06 September 2014, 18:30:46
@Markus, Marc:
Markus, mir kommt die Sache bei dir langsam immer seltsamer vor. Vorallem weil bei marc die ganze Sache ja (bei gleichem Regler?) zu funktionieren scheint. Vielleicht ist der Marc ja so nett und zeigt uns mal die verwendete Config und die VBUSDEV ...

Die die Anlage nicht bei mir steht, komme ich da nicht jederzeit ran. Ich werde meinem Kumpel bei Gelegenheit ein OpenVPN
auf den Router packen, damit ich remote auf den Raspi komme. Dann kann ich mehr Input liefern ! Aber schon einmal vielen Dank
für die Antwort !

Gruß, Marc

oldwolf

Hallo,

Zitat von: avg123-de am 07 September 2014, 12:13:36
Hiernach werden mir keiner Werte mehr übermittelt, _RAWMSG existiert dann nicht mehr und bei den Sensoren stehen dann nur noch die Ausreißer-Werte (jetzt aber dauerhaft).

Ach, das wolltest du nicht so haben? :D Wenigstens gibt es jetzt keine Sprünge mehr!
Ist ja auch blöd... anstelle von $src_addr sollte dort natürlich auch $dst_addr stehen. Und wenn das nicht klappt, dann probiers mal mit
return "" if ($dst_addr != "1000");
anstelle der oben genannten Zeile (undef zu Anführungszeichen geändert).

Grüße
Robin

avg123-de

Hallo Robin,

habe die Zeile jetzt von return undef if ($src_addr != "1000");
zu

return "" if ($dst_addr != "1000");

geändert, die Werte sind jetzt zwar die richtigen (Ausreißer werden nicht angezeigt), jedoch existiert _RAWMSG auch hier nicht.
In die .log-Datei kommen somit keine Daten und bei den Werten die ich angezeigt bekomme steht hinter die Uhrzeit 12:57:34, jedoch ist jetzt bei mir 15:29.

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

oldwolf

Hallo,

habe gerade gesehen, dass die Reihenfolge der Bits (oder was auch immer das ist) an der Stelle schon vertauscht ist. Sprich: Probier mal aus der "1000" eine "0010" zu machen.

Gruß
Robin

avg123-de

Hallo Robin,

danke, es scheint jetzt zu klappen, werde es jetzt ein bisschen beobachten und dann meine Erfahrung mitteilen!

viele Grüße und einen schönen Restsonntag
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

avg123-de

#162
Hallo,

bis jetzt läuft bei mir alles einwandfrei und ich habe jetzt keine Ausreißer mehr drin, danke!

Ich wollte jetzt einmal Fragen, ob ich die einzelnen Werte (z.B. "Temperatur_Sensor_1",...) auch als Device in FHEM anzeigen lassen kann.
Ich hatte jetzt schon einmal etwas rumprobiert mit:
define Temperatur readingsGroup .*:Temperatur_Sensor_1
attr Temperatur room Heizung
(Ergebnis unten als Screenshot), jedoch ist dies nicht das was ich will.
Ich stelle mir das so vor, das ich ein Device habe, dass mir nur die aktuell gemessene Temperatur wiedergibt (ohne Datum und Uhrzeit) und welches ich auch verwenden kann, um z.B. einen Aktor anzusteuern wenn die Temperatur eine gewisse Grenze erreicht hat.

viele Grüße und einen schönen Abend
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

markus25

Hallo Oldwolf,
super für deine Hilfe, jetzt kann ich den Vbus Adapter anlegen und er steht dann auch auf opened, solange ich die 21_VBUSDEV.pm nicht angelegt habe.
Wenn ich aber vorher deine 21_VBUSDEV.pm aus der Antwort 135 nehme und anlege bekomme ich wieder die Fehlermeldung beim Anlegen
Too many arguments for main::AssignIoPort at ./FHEM/21_VBUSDEV.pm line 355, near "$iodev) "
und im Logfile wird
2014.09.08 00:38:49 1: reload: Error:Modul 21_VBUSDEV deactivated:
Too many arguments for main::AssignIoPort at ./FHEM/21_VBUSDEV.pm line 355, near "$iodev) "

angezeigt.
Sollte ich jetzt den Vbus Lanadapter wieder anlegen bleibt mein FHEM Server hängen und ich muss die  21_VBUSDEV.pm händisch aus dem Verzeichnis raus löschen und den RASPI neu starten, das FHEM wieder funktioniert.
Wenn ich aber aus der Zeile 355 $iodev raus lösche werden mir zwei Adapter angelegt und einmal die Werte angezeigt die aber auch nicht alle stimmen.
Kann das daran liegen das ich noch zwei Heizkreismodule angeschlossen habe und die auch über den VBUS Adapter laufen?

Ich kann euch nicht sagen wie super das ist, das Ihr mir helft, ich hätte schon längst aufgegeben.  ;D

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

oldwolf

Hallo,

@Alexander:
Gibt bestimmt eine Möglichkeit, aber da kenne ich mich zu wenig aus. Wenn ich am Wochenende mal etwas Zeit habe, versuche ich das mal.

@Markus:
Ich hab irgendwie das Gefühl, dass dein System dich nicht mag ;) Wenn du die VBUSLAN.pm drin hast und die VBUSDEV.pm nicht, dann kommst du soweit, dass das VBUSLAN-Device auf "opened" steht... Wenn du das mal soweit machst und dann das Device mal aufrufst, dann kommt ja das Ergebnis von Antwort #154 nur eben mit opened. Steht dann in der Zeile PARTIAL was drin?

Ich habe ein paar Vermutungen, woran es liegen könnte, aber so langsam gehen mir die Ideen aus. Hier mal ein kleiner Fahrplan:

  • Da ich nicht weiß, was du bei deiner vorletzten Antwort damit meinst:
    Zitatich hatte noch ein anderes Problem das ich die 20_VBUSLAN.pm nicht eingetragen hatte
    Kopiere die originale VBUSLAN.pm von Arno (ist irgendwo ganz weit vorne in diesem Thema) und ändere nur (!!!) das Passwort. Damit wäre dann ausgeschlossen, dass versehentlich irgendwas geändert wurde und somit nicht mehr alle Infos in der VBUSDEV.pm landen können.
  • Kopiere die VBUSDEV.pm von Antwort #135 in dein Verzeichnis und freue dich, dass alles funktioniert... falls nicht, weiter mit Schritt 3
  • Was passiert, wenn du die besagte Zeile 355 aus der VBUSDEV.pm komplett entfernst (einfach ein # davor schreiben)? ... vermutlich nichts, außer dass es nicht mehr tut.
  • Füge in die VBUSDEV.pm in Zeile 354 den Ausdruck ein:
Log3 $name, 1, "$name: I/O device is $iodev";
(Bin mal gespannt, ob das funktioniert oder nur noch mehr Fehler hervorruft...)
Vorausgesetzt, dass nach der oben genannten Änderung nicht schon tausend andere Fehler kommen: Versuche den VBUSLAN anzulegen und warte auf das Autocreate des VBUSDEV ... und dann schaust du mal in der Log-Datei, ob du irgenwo den Ausdruck "I/O device is " findest und kopierst die Zeile hier her. Es kann sein, dass du ggf. vorher das "attr global verbose 3" von 3 auf 5 setzen musst.

Wenn dann immer noch keine Reaktion kommt, vielleicht einfach mal FHEM neu aufsetzen (sofern der Aufwand vertretbar ist).
Wenn das auch nichts hilft, hab ich hier aus der Ferne zumindest momentan keine Ideen mehr. Dann müssen die Spezis ran.


Viele Grüße
Robin