XML API

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

Moderator: Co-Administratoren

Stephan18
Beiträge: 15
Registriert: 17.05.2015, 22:12

XML API

Beitrag von Stephan18 » 17.05.2015, 22:29

Hallo zusammen,

Ich habe aktuell eine RWE SmartHome Zentrale und dazu ein paar Aktoren. Jetzt spiele ich jedoch mit dem Gedanken, auf HomeMatic zu wechseln, da die API-Schnittstelle der RWE einfach grottenschlecht ist und zudem gar nicht öffentlich freigegeben.

Bevor ich dies jedoch mache, habe ich 3-4 Fragen.

1.) Bietet die HomeMatic eine komplette API, über die ich Aktoren Schalten kann (Unterputzschalter ABC an/aus, Heizkörperthermostat A 20°C)
2.) Gibt es Notifications? Also kann ich jede Änderung auffangen und verabeiten? Jemand schaltet in der Küche das Licht ein, dann brauche ich über die API dazu eine Information. Bei RWE SmartHome war dies "subscribe" bei Notifications
3.) Wenn ich über die API gerne das Licht in der Küche einschalten möchte, dauert dies auch so lange wie bei der Smarthome (~3 Sekunden) ?

Dann noch was zur Bestellung.
http://www.amazon.de/dp/B00BZ6XLJ0/ref= ... =Homematic

Ist dies die Aktuellste Version?

http://www.amazon.de/gp/product/B00GHDN ... ge_o00_s00
Reicht es, wenn ich diesen Zwischenstecker dazu kaufe, um die API zu testen und mir das gesammte System mal anzusehen?
Habe ich damit alles was ich für den Start benötige? Die Station kann ich an Ethernet anschließen, wenn ich das richtig gesehen habe?

Also ich verbinde Den Stecker mit der HomeMatic und könnte dann diesen Ansteuern auch über die API?

Vielen Dank schonmal und entschuldigt die Vielen Fragen. Es ist "anfangs" schwer durchzublicken.
Es gibt doch sehr vieles und auch sehr viel Spezielles, gerade bei der HomeMatic.

Danke schön :)

svenp
Beiträge: 630
Registriert: 11.12.2012, 14:24
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal

Re: XML API

Beitrag von svenp » 18.05.2015, 10:12

Hallo

zu 1) Homematic lässt sich mit der xml api vollständig steuern und abfragen dazu muss aber das xml addon installiert werden.
2) Ja Notificationen lassen sich z.b. per Email etc. scripten, etwas fertiges hat die ccu nicht.
3) Ich kenne RWE Smarthome nicht, wenn ich bei mir das Licht schalte geht dieses unmittelbar an. 3 Sekunden musste ich noch nie warten.


Zur Bestellung: Ja es ist die aktuelle CCU2, ich würde dir aber lxccu nahelegen. Einfach mal im Forum suchen.


Zum Zwischenstecker, ja jeder Aktor lässt sich über die API steuern.

Stephan18
Beiträge: 15
Registriert: 17.05.2015, 22:12

Re: XML API

Beitrag von Stephan18 » 18.05.2015, 11:01

Hallo,

Erstmal danke für deine Antwort, das hört sich ja schon vielversprechend an.

Mit Notifications meinte ich jedoch nicht E-Mail / SMS Benachrichtigung sondern eine Nachricht über die XML API oder per Push.
Wenn z.b. Licht eingeschaltet wird, müsste mein Server (debian 7 auf raspberry) an diese Information gelangen.

Ob dies per push gemacht wird (HomeMatic ruft eine von mir angegebene URL auf: http://mein_server/push.php?type=switched&id=1&state=true)
oder aber ich bekomme diesen Zustand in der XML angezeigt.

Danke!

svenp
Beiträge: 630
Registriert: 11.12.2012, 14:24
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal

Re: XML API

Beitrag von svenp » 18.05.2015, 13:39

Dann müsste dein Debianserver regelmäßig die ccu abfragen.
Ein Push aus der CCU gibt es meines Wissens nicht.
Das merke ich auch bei der Homematic app die ich nutze. Wenn etwas geschaltet wird, aktualisiert sich der Status in der App erst wenn ich selbst auf Reload drücke oder die voreingestellte Zeit vorüber ist und ein Reload gemacht wird.

Wenn solche Zustände gepusht würden wäre es ein Riesen Vorteil. Leider wurde das bisher nicht umgesetzt und steht soweit ich weiß auch nicht auf der Agenda.

MistyReblaus
Beiträge: 180
Registriert: 15.09.2014, 22:25

Re: XML API

Beitrag von MistyReblaus » 18.05.2015, 13:52

DU kannst Dich an an die Homematic an die Werte hängen, aber bevor Du das genau so nachbaust, solltest Du Dir mal CCU.IO oder das Nachfolgeprojekt Io.Broker ansehen. Diese können die Veränderungen von Haus aus auslesen und dann Skripte ausführen, die auch z.B. ein GET auf eine beliebige Adresse machen könnten.

Stephan18
Beiträge: 15
Registriert: 17.05.2015, 22:12

Re: XML API

Beitrag von Stephan18 » 20.05.2015, 18:57

Hallo,

Danke für eure zahlreichen Antworten! Hat mir bis hier sehr weiter geholfen :)
Die Zentrale ist mittlerweile aufgebaut und nach anfänglichen Problemen in Betrieb.

Dazu ist der Zwischenstecker platziert und registriert.

Jetzt habe ich noch speziellere Fragen dazu. Habe sehr viel gegoogelt, aber keine wirkliche Antwort erhalten.

Ich möchte gerne alle Devices und Variabeln auslesen. Dazu habe ich dann rausgefunden, dass sich Variabeln nicht über die "normale" API (xmlrpc / Port 2001) auslesen lassen, sondern ich dies über den Port 8181 machen müsste. Dort erhalte ich dann aber immer nur eine Variabel (keine Liste).

Habe mir dann also die XMLAPI installiert und lese die Variabeln dort über sysvarlist.cgi aus.
Das klappt soweit auch!

Anschließend habe ich mir ein Node.js Script gebaut, welches jede Sekunde diese Variabeln ausließt (sofern das vorherige auslesen bereits beendet ist, ansonsten erst "später") und vergleiche dies dann mit den Aktuellen Werten in meinem System. Gibt es dort Unterschiede, verarbeite ich dies.
Das ist natürlich für die Zentrale aufwendig, aber ein richtigen Push gibt es anscheinend nicht ?

Über die XMLRPC API kann man nach dem "init" bei der HomeMatic sich ja Zustandsänderungen "pushen" lassen, dies gibt es aber nicht für Variabeln oder doch?

Scripte wie CCU.IO und iobroker habe ich auch getestet, sind aber viel zu aufwendig für mein Vorhaben.

Das war es eigentlich auch erstmal. Viel Text, damit man auch weiß was ich vorhabe :)

Danke !'

erniesesam

Re: XML API

Beitrag von erniesesam » 21.05.2015, 13:54

Wenn Du eh schon mit Nodejs Unterwegs bist gibt es glaube ich beim Hobbyquaker passende Module für Dich:

https://github.com/hobbyquaker/binrpc und https://github.com/hobbyquaker/homematic-xmlrpc

Ein einfaches Beispiel wie man diese Module anwenden kann (inklusive "init" um Events gepushed zu kriegen) findest Du z.B. hier: https://github.com/hobbyquaker/homemati ... r/index.js

PS.: vom sekündlichen Pollen der Rega würde ich dringend abraten. Die Rega ist recht empfindlich und einen "echten" Push-Mechanismus bietet sie leider nicht. Übrigens findest Du hier eine Menge Rega-Scripte um alles mögliche aus der Rega auszulesen: https://github.com/hobbyquaker/ccu.io/t ... egascripts

und noch was: Die XML-API ist imho vollkommen überflüssig - alles was mit XML-API geht geht auch ohne XML-API ;-)

svenp
Beiträge: 630
Registriert: 11.12.2012, 14:24
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal

Re: XML API

Beitrag von svenp » 21.05.2015, 18:40

Es wird immer gesagt das die ccu kein push hat. Warum werden dann Änderungen in der ccu auf der Webseite immer sofort dargestellt?

Denn ich habe ein Arduino Board mit ein paar Sensoren. Wenn sich die Messwerte der Sensoren ändern schickt das Board die Änderungen sofort an die ccu.

Ich habe heute folgendes beobachtet. Webseite von ccu geöffnet und auf die Variablen Seite gewechselt.
Sobald sich der Wert einer Variablen ändert wird es praktisch unmittelbar auf der Seite dargestellt.
Ich gehe doch mal davon aus das die ccu Seite nicht ständig ein Reload macht um immer die aktuellen Werte darzustellen?

erniesesam

Re: XML API

Beitrag von erniesesam » 21.05.2015, 21:30

Die Logikschicht "ReGa" (dort sind Variablen, Programme und Scripte "beheimatet") kann keinen "Push". Die Schnittstellenprozesse "rfd" und "hs485d" die die Funk und Wired Geräte anbinden haben einen Push-Mechansimus ("rpc init").
svenp hat geschrieben:Sobald sich der Wert einer Variablen ändert wird es praktisch unmittelbar auf der Seite dargestellt.
Das ist kein Push. Das WebUI pollt TCL CGI-Scripte und die rufen die Rega auf und führen dort wiederum Rega-Scripte aus. Das Polling wird sogar visualisiert, da erscheint so ein kleiner roter Punkt links oben am Homematic-Logo. Mit einer der Gründe warum es nicht zuträglich für die Rega-Stabilität ist ständig das WebUI offen zu haben oder noch schlimmer mehrere Instanzen des WebUI auf einmal zu öffnen.

Stephan18
Beiträge: 15
Registriert: 17.05.2015, 22:12

Re: XML API

Beitrag von Stephan18 » 22.05.2015, 02:14

Hallo,

Okay dann weiß ich bescheid. Dann lese ich die Variabeln regelmäßig aus und vergleiche diese mit meinen Zuständen. Dass passt schon.

Jetzt ein Problem, wo ich absolut keine Lösung finde.
Ich habe diesen Quellcode:

Code: Alles auswählen

	var rpcClient = rpc.createClient({
		host: "192.168.178.30",
		port: "2001",
		path: '/'
	});
	
	rpcClient.methodCall('init', ["htp://192.168.178.76:8085", "homeserver"], function (err, data) {
		console.log("Register for notifications done!");
		

			
	});
	
	
	var rpcServer = rpc.createServer({
		host: "192.168.178.76",
		port: "8085"
	});
	
       rpcServer.on('NotFound', function (method, params) {
       		console.log("Notfound: " + method + " und " + params);
       		callback(null, null);
        });
        
        rpcServer.on('system.multicall', function (method, params, callback) {
           callback(null, null);
        });

        rpcServer.on('system.listMethods', function (err, params, callback) {
            callback(null, ['event', 'deleteDevices', 'listDevices', 'newDevices', 'system.listMethods', 'system.multicall']);
        });

        rpcServer.on('event', function (err, params, callback) {
		console.log("Event");
		callback(null, null);
        });

        rpcServer.on('newDevices', function (err, params, callback) {
		console.log("newDevices");
		callback(null, null);
        });

        rpcServer.on('deleteDevices', function (err, params, callback) {
            console.log("deleteDevices");
            callback(null, null);
        });
        
        rpcServer.on('listDevices', function (err, params, callback) {
	        callback(null, null);
	});
Node startet damit einwandfrei. Es wird nach kurzer Zeit die Bestätigung für init ausgegeben.

Zu meinen 2 Problemen:
1.) Wenn ich jetzt z.b. einen Zwischenstecker einschalte, erhalte ich jedoch 2x einen push. In beiden steht EXAKT die gleiche Nachricht. 2 Objekte mit STATE = true / Working = false

2.) Die Zentrale produziert bei jedem Push einen Fehler:
homematic-ccu2 user.err rfd: XmlRpcClient error calling event({[methodName:"event",params:{"homeserver","LEQ0183125:1","STATE",true}],[methodName:"event",params:{"homeserver","LEQ0183125:1","WORKING",false}]}) on http://192.168.178.76:8085/RPC2:
homematic-ccu2 user.err rfd: XmlRpc transport error
Ich könnte mir vorstellen, dass der Fehler 1.) durch den Fehler 2.) hervorgerufen wird.
Die Zentrale meint "es hätte nicht geklappt" und pusht nochmal. Aber reine spekulation.

Kann mir eventuell jemand erklären, was zu tun ist, um den Fehler abzustellen?

Danke!!

Antworten

Zurück zu „Softwareentwicklung von externen Applikationen“