BIN-RPC Live Converter

Nutzung von XML RPC, Remote Script, JSON RPC, XMLAPI

Moderator: Co-Administratoren

leonsio
Beiträge: 1100
Registriert: 07.01.2012, 14:06

BIN-RPC Live Converter

Beitrag von leonsio » 31.01.2012, 15:18

Hallo,

diese Anwendung ist vor allem für die Leute interessant, die Informationen von an eine CCU angeschlossenen CUxD abfragen wollen.
Sei es zur statistischen Zwecken (Historian), oder um die Komponenten aus eigenen Skripten heraus zu steuern bzw. zu überwachen.

Die Anwendung unterstützt aber auch jedes andere Interface der CCU und ist nicht nur an den CUxD beschränkt.

Da der CUxD kein XMl-RPC versteht und nur (undokumentiertes) BIN-RPC versteht, ist es nicht möglich per XML-RPC auf die Geräte zuzugreifen.
Der BIN-RPC Converter übernimmt als Übersetzer die Aufgabe die XML-RPC Befehle in BIN-RPC umzuwandeln, und die BIN-RPC Ausgabe zurück als XML-RPC darzustellen.

Die Funktionsweise des Konverters ist Bidirektional, es können über ihn Befehle in BIN-RPC an einen XML-RPC fähigen Server geschickt werden (INIT/EVENT), als auch per XML-RPC ein BIN-RPC fähiges Gerät abgefragt werden.

Für die Befehle INIT und die dazugehörige EVENT Benachrichtigung ist CUxD in Version 0.563 oder höher notwendig, die Abfrage bzw. das Setzen der Zustände kann mit jeder CUxD Version erfolgen.

Installation:

Der Converter ist in PHP geschrieben und benötigt eine CLI Umgebung inkl. XMLRPC Extenstion (oft bereits einkompiliert).
Der Skript liest die Daten per STDIN und gibt die Ausgabe per STDOUT zurück.

Für die Socketverwaltung kann jedes beliebige Tool verwendet werden, der einer Linux Distribution beiliegt, nachfolgend findet ihr eine Installationsanleitung für xinet.d. Ob es einen Äquivalent für Windows gibt ist mir unbekannt.


1.
Converter runterlasen, entpacken und auf dem Zielsystem nach /usr/bin/ speichern
2.
Die Datei ausführbar machen

Code: Alles auswählen

chmod +x hmxmlbin
3.
unter /etc/services folgendes Eintragen (ggf Port ändern)

Code: Alles auswählen

# Local services
hmxmlbin   8701/tcp         # Homematic bin to xml proxy
4.
Unter /etc/xinet.d neue Datei "hmxmlbin" mit dem Inhalt eintragen

Code: Alles auswählen

# default: on
# description: Homematic XML-RPC to BIN-RPC converter
service hmxmlbin
{
      socket_type    = stream
      wait           = no
      user           = root
      server         = /usr/bin/hmxmlbin
      disable        = no
      port           = 8701
}
Bei Bedarf Path und Port anpassen
5.
xinet neustarten.
6.
hmxmlbin mit einem Editor (vi) öffnen und oben Einstellungen (IP/Port Homematic) anpassen.

Dat wars


// Changelog

0.1 Initial Release
0.2 Bug bei Double Berechnung, sowie bei Boolean Berechnung behoben
Dateianhänge
hmxmlbin-0.2.tgz
(5.15 KiB) 307-mal heruntergeladen
Zuletzt geändert von leonsio am 02.02.2012, 23:18, insgesamt 2-mal geändert.

CarstenH
Beiträge: 41
Registriert: 02.11.2011, 21:16
Wohnort: Taunusstein

Re: BIN-RPC Live Converter

Beitrag von CarstenH » 01.02.2012, 17:15

Hallo,
das sieht mal wieder nach einem Traumjob von Dir aus.
Darf ich noch einmal eine Verständniss Frage stellen.

Auf einem Linux Rechner wird ein neuer Dienst eingerichtet, der a) von CCU CUxD Daten erhält (XML-RPC) und diese b) an den CCU-Historian weitergibt (BIN-RPC), damit diese dort im CCU-Historian Style verarbeitet werden können ?

Deinekleine SW wird also als unabhänhinge Instanz auf einem x-ten Rechner bzw. Linux Image Installiert ?
Dafür muss der Dienst auf einem Linux eingerichtet werden und Programme auf der CCU (wie in deinem 2thread beschrieben) das diese Daten auch gesendet werden ?

Stimmt das so ?

Ich habe mir die SW mal angesehen, ich denke das kann ich auch auf eine QNAP packen...wird allerdings etwas aufwendiger das muss leider noch ein paar Tage warten (ende Februar) Anleitung wenn es mir gelingt folgt.

Danke & Grüße Carsten

leonsio
Beiträge: 1100
Registriert: 07.01.2012, 14:06

Re: BIN-RPC Live Converter

Beitrag von leonsio » 01.02.2012, 20:34

Hi

Die Software hat als Voraussetzung PHP+XMLRPC Extension, sowie XINET.D Dienst (oder einen anderen ähnlichen) QNAP hat glaube ich xinet.d dabei , ob dort php mit xmlrpc läuft kann ich dir nicht sagen.

Der Historian kann glaube ich von hause nicht mit CUxD umgehen, bzw. kennt den Typ nicht als Interface
Ich habe aber Mathias bereits angeschrieben und den Converter zugeschickt, ggf. baut er den Support in der nächsten Version ein

Im Prinzip würde aber der Weg so funktionieren:

RF/Wired/System (aktuell)

CCU <--(XMLRPC)--> Historian

CUxD (Neu)

CCU <--(BINRPC) --> Converter <--(XMLRPC) --> Historian

Inkl. Kommunikation in beide Richtungen

Über diese Schnittstelle könnten auch andere Geräte/Software mit CUxD kommunizieren, die vorher nur XMLRPC konnten (mediola/Symcon usw. usw.)
Bei einigen geht es sofort (falls die Ports der CCU nicht hartcodiert sind) bei anderen muss ggf. die Anpassung her

Gruß

Leo

leonsio
Beiträge: 1100
Registriert: 07.01.2012, 14:06

Re: BIN-RPC Live Converter

Beitrag von leonsio » 02.02.2012, 23:19

@[email protected]

Neue Version online

2 Bugs behoben

1. Double Berechnung liefert nun korrekte Werte
2. Boolean wird ordentlich erkannt

Gruß

Leo

Brenner
Beiträge: 570
Registriert: 08.08.2009, 10:29

Re: BIN-RPC Live Converter

Beitrag von Brenner » 08.02.2012, 20:06

Hallo Leo,

funktioniert das Ganze auch mit HMCompanion umd CUxD Werte ins Cacti zu bekommen?
Viele Grüße, Stefan!

leonsio
Beiträge: 1100
Registriert: 07.01.2012, 14:06

Re: BIN-RPC Live Converter

Beitrag von leonsio » 08.02.2012, 21:34

Sofern du bei HMCompanion irgendwie CUxD als Interface angeben kannst dann ja

Ich weiß nicht wie HMCompanion genau funktioniert, falls er mit init arbeitet, kannst du einfach events von CUxD abonnieren ggf. und über mein Converter an den HMCompanion zustellen lassen

Brenner
Beiträge: 570
Registriert: 08.08.2009, 10:29

Re: BIN-RPC Live Converter

Beitrag von Brenner » 08.02.2012, 21:51

Ohhhh, puhhhh, wenn ich mal den letzten Satz vollständig verstanden hätte.... :oops:


Hallo Leo ersteinmal :-)

Schön das du gerade da bist.
Ich versuche deinen Converter gerade unter Debian laufen zu lassen und hab soweit alles wie beschrieben umgesetzt, nur nicht den Schritt wegen xinit.d, weil ich nur ein init.d habe.

Wie kann ich denn testen ob das Script funktioniert? Im Historian, den ich kurz mal nebenbei laufen habe taucht das "Cux Device" nicht auf.


edit:
Ist vielleicht mein XMLRPC Server falsch? Dieser ist doch ebenfalls die CCU , oder?

Code: Alles auswählen

// Homematic CUxD order anderes Interface
$hm_host = '192.168.0.11';
$hm_port = '8701';
// XMLRPC Server wird für bidirektionalle Kommunikation gebruacht
$url = "http://192.168.0.11/hms/modules/Homematic/Server.class.php";
Viele Grüße, Stefan!

leonsio
Beiträge: 1100
Registriert: 07.01.2012, 14:06

Re: BIN-RPC Live Converter

Beitrag von leonsio » 08.02.2012, 22:34

Hi

Testen kannst du es in dem du mit Telnet versuchst locahost + das jeweilige Port angibst
Da solltest du eine Verbindung bekommen

bsp: telnet localhost 8701

Falls du sowas bekommst:

Code: Alles auswählen

Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Dann musst du die Config von inetd checken

Aber so wie es hier lese, hast du den Unterschied zwischen init.d und inetd nicht verstanden ;)

init.d: http://openbook.galileocomputing.de/uni ... de103.html
inetd: http://de.wikipedia.org/wiki/Inetd

Das eine Startet beliebige Dienste als Systemprozesse, das andere ist für die Netzwerkverbindungen zuständig und startet bei Zugriff auf einen Port (bsp. 8701) die jeweilige Anwendung.

Falls du debian benutzt mach mal

apt-get install xinetd

Anschliessend meine Anleitung befolgen, damit kriegst du zumindest den Converter zum laufen.

Zum Historian
Ich meine er arbeitet mit INIT Befehlt d.h, er "bittet" die CCU alle Events (Licht an/aus, Bewegung erkannt usw usw ) an ihn weiter zu leiten
Dies geht über XML-RPC bzw im Falle von CUxD mit BIN-RPC

ggf. reicht es aus so ein Befehl auszuführen, ich bin gerade nicht an meinem Rechner, werde morgen mal ein Skript bereitstellen womit man einfach so ein Befehl absetzen kann (bzw. siehe die jeweiligen Klassen die ich bereits veröffentlicht habe)

leonsio
Beiträge: 1100
Registriert: 07.01.2012, 14:06

Re: BIN-RPC Live Converter

Beitrag von leonsio » 09.02.2012, 08:48

hab grad nachgeschaut HMCompanion benutzt INIT Befehl, der wird erst von der nächsten CUxD Version 0.563 unterstützt
somit müsstest du dich noch ein bisschen gedulden

Gruß

Leo

Brenner
Beiträge: 570
Registriert: 08.08.2009, 10:29

Re: BIN-RPC Live Converter

Beitrag von Brenner » 09.02.2012, 08:54

Hallo Leo,

das ist natürlich schade, aber nicht änderbar.
Danke für die ausführliche Mails davor, dann werde ich Wochenende (oder eventuell heute Abend) mal testen ob ich es damit hin bekomme.


Zum Glück bin ich nicht der einzige Cacti User und es werden immer mehr. Dann steigt die Wahrscheinlichkeit das es bald funktionieren könnte. :D
Viele Grüße, Stefan!

Antworten

Zurück zu „Softwareentwicklung von externen Applikationen“