Fix für HMCCU mit mehr als einer CCU im RPC-Mode "rpcproc"

Begonnen von truckl, 08 Februar 2019, 15:35:45

Vorheriges Thema - Nächstes Thema

truckl

Hallo Zusammen,

und erst mal vielen Dank für ihre Arbeit an die Autoren der HMCCU Schnitstelle.

Ich habe heute versucht eine zweite CCU an der selben FHEM-Instanz in Betrieb zu nehmen (steht in einem benachbarten Haus welches per WLAN angebunden ist).

Dabei habe ich festgestellt, daß sich zwar ein zweites HMCCU device anlegen läßt:

define ccu_nr2 HMCCU <IP> 2

Allerdings lassen sich im Mode "rpcproc" für dieses Device dann keine RPC-Prozesse anlegen: Es wird versucht diese mit dem selben Namen wie für die erste HMCCU anzulegen. Das führt natürlich zu einer Fehlermeldung "Device already exists".

Kurz gesagt: Es scheint als ob die CCUNum beim Erzeugen der RPC-Devices nicht berücksichtigt wird.

Das folgende diff löst das Problem in meiner Umgebung.
Über die Art und Weise wie genau nun Device-Name und -Alias inklusive CCUNum gebildet werden, läßt sich natürlich diskutieren. Ich hab's etwas kompilzierter gemacht, weil ich wollte daß sich die Namen für die erste CCU nicht ändern (die gab's ja bei mir schon).


diff --git a/FHEM/88_HMCCU.pm b/FHEM/88_HMCCU.pm
old mode 100644
new mode 100755
index aa85ed1..6bfca3b
--- a/FHEM/88_HMCCU.pm
+++ b/FHEM/88_HMCCU.pm
@@ -5181,12 +5181,17 @@ sub HMCCU_GetRPCDevice ($$$)

        # Create RPC device
        if ($create) {
-               my $alias = "CCU RPC";
+               my $alias = "CCU ";
+        $alias .= " ".$hash->{CCUNum} if ($hash->{CCUNum} > 1);
+        $alias .= " RPC";
+
                my $rpccreate = "d_rpc $rpcdevtype ".$hash->{host};
-               $rpcdevname = "d_rpc";
                if (defined ($ifname)) {
-                       $rpcdevname = makeDeviceName ("d_rpc".$ifname);
-                       $alias .= " $ifname";
+            my $deviceNameBuilder = "d_rpc".$ifname;
+            $deviceNameBuilder .= "_".$hash->{CCUNum} if ($hash->{CCUNum} > 1);
+
+                       $rpcdevname = makeDeviceName ($deviceNameBuilder);
+            $alias .= " $ifname";
                        $rpccreate = "$rpcdevname $rpcdevtype $rpchost $ifname";
                }


Vielleicht hilft's ja dem ein oder anderen. Oder Verwantwortlichen für HMCCU wollen es übernehmen ...


Kurt

zap

Danke für die Info. Das Erzeugen der RPC Server hat noch einen weiteren Bug, der aber nur unter bestimmten Voraussetzungen auftritt.

Ich habe den Code bereits überarbeitet. Ist im nächsten Update drin. Kommt die Tage.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

truckl

Danke, zap, für das schnelle Feedback !

Wie wird denn der neue Device-Name für die RPC-Devices in der finalen Version aussehen?

Nur damit ich weis, wo ich beim nächsten Update dann ggf. manuell eingreifen muß.

zap

Das neue Namensschema sieht so aus:

d_rpcNNNMMMInterface

NNN = 3. Segment der CCU-IP-Adresse
MMM = 4. Segment der CCU-IP-Adresse
Interface = Name der Schnittstelle

Beispiel: CCU-IP = 192.168.1.100, Interface = BidCos-RF
=> d_rpc001100BidCos-RF
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB