"Batch" Abarbeitung mehrerer RPC Befehle

Hallo,

ich habe eine Frage bezüglich der Abarbeitung mehrerer XML-RPC Funktionsaufrufe.
Ich habe eine Android-App programmiert, mit der ich die Steuerung meiner Thermostate
über HomeGear tätige. Das funktioniert auch soweit schon recht gut. Ich habe nun Kategorien angelegt, über die ich auf einmal mehrere Thermostate steuern möchte.
Beispiel:
Kategorie Schlafen - Schlafzimmerthermostat
Kategorie Wohnen - Arbeitszimmer-, Küche und Esszimmer
Kategorie Abwesend - Alle Thermostate
Das klappt alles sehr gut, aber wenn ich eine Kategorie wechsel, muss ich alle anderen Thermostate zurücksetzen auf einen Wert. z.B 14°C. Das dauert nun schon recht lange, da ich ja immer eine Antwort für jedes Thermostat abwarten muss. Wenn ich nun von unterwegs meiner Wohnung mitteilen will, dass ich heimkomme besteht eben das Problem eines Abbruchs.
Schön wäre es, einen “Sammel”-Befehl abzusetzen und später ab und zu zu schauen, wurde es denn ausgeführt.
Hat vielleicht hier jemand eine Idee, wie ich das besser umsetzen könnte?

Viele Grüße

Elmar

Moin,

wie waere es, wenn Du die Kategorien ueber Systemvariablen steuerst? Dann braeuchtest Du nur einen Aufruf fuer die Systemvariable, den Rest kann dann node-blue erledigen.

  • Micha

Moin @Micha

ich verwende node-blue nicht, Ich verwende einen XML-RPC Client in meinem Programm. Ich steuere meine Thermostate direkt über XML-RPC Aufrufe, d.h. z.B. setValue(peerid, Channel…). Ich habe nun in meinem Programm einen eigenen ‘Job-Thread’ eingerichtet, d.h. ich schreibe nur anforderungen in eine Liste und die werden dann im Hintergrund abgearbeitet. Unter Windows funktioniert das auch schon ganz gut nur unter Android gibt es ein Problem.

Hi @fishermans,

Ok, ohne node-blue wird das natuerlich schwierig :wink:
Hast du es schon mit system.multicall() (siehe https://ref.homegear.eu/rpc.html#systemmulticall) versucht?

– Micha

hallo @Micha

das wäre natürlich die Alternative, die Funktion habe ich noch gar nicht gesehen.
Ist allerdings nicht ganz einfach zu implementieren, aber das werde ich versuchen…

Vielen Dank für den Hinweis!!!

Elmar

Hallo @fishermans,

system.multicall() ist eine Möglichkeit. Außerdem kannst du setValue() (https://ref.homegear.eu/rpc.html#setValue) für den Parameter wait false übergeben, dann wartet setValue() nicht auf eine Antwort vom Wandthermostaten bevor es das Funktionsergebnis zurückgibt. Mit den Wandthermostaten und Stellantrieben besteht das Problem, dass diese ein Verfahren namens “Wake on Radio” verwenden, welches pro Paket etwa 370 ms bzw. bis zur Antwort etwa 500 ms in Anspruch nimmt. Ein weiteres Problem mit Wake on Radio ist, dass immer alle Wake-on-Radio-Geräte aufgeweckt werden, was ziemlich an den Batterien nagt. Daher würde ich dir empfehlen, Wake on Radio abzuschalten (der Parameter heißt BURST_RX, https://ref.homegear.eu/device.html?directory=HomeMatic+BidCoS&file=rf_tc_it_wm-w-eu.xml&familyLink=homematicbidcos&name=HM-TC-IT-WM-W-EU#affixSubsubsection0_0_2).

Viele Grüße

Sathya

1 Like

Hallo @sathya

wenn ich das richtig versehe, werden bei jedem Aufruf von setValue() alle Geräte aus dem
Schlaf aufgeweckt, d.h. wenn ich z.B. alle 10 Heizkörper auf “abwesend” stellen möchte,
werden alle Thermostate 10 mal “aufgeweckt”. Das ist natürlich nicht sehr sinnvoll. Wie funktioniert das denn dann ohne “Wake on Radio”? Fragen die Thermostate dann regelmäßig selber nach, ob sich etwas verändert hat? Bei getValue ist es dann ja vermutlich genaus so, mit “requestFromDevice” wecke ich dann auch wieder alle auf.
Sinnvoll ist dann wirklich die “Wake on Radio” Funktion abzuschalten.
Vielen Dank für diese wichtigen Infos!

Viele Grüße

Elmar

Hallo @fishermans,

Wie funktioniert das denn dann ohne “Wake on Radio”? Fragen die Thermostate dann regelmäßig selber nach, ob sich etwas verändert hat?

Genau. Es wird alle 2 - 3 Minuten von den Geräten ein Paket gesendet, auf das Homegear bei neuen Daten antworten kann.

Bei getValue ist es dann ja vermutlich genaus so, mit “requestFromDevice” wecke ich dann auch wieder alle auf.

Ja.

Sinnvoll ist dann wirklich die “Wake on Radio” Funktion abzuschalten.

Leider lässt sich diese nicht vollständig auf den Geräten deaktivieren. Diese lauschen auch nach Deaktivierung auf WoR-Pakete (aus meiner Sicht ein ziemlich doofer Bug). Zumindest sendet Homegear dann aber keine WoR-Pakete mehr, so dass nicht mehr alle Geräte aufwachen. Leider verbraucht aber auch der WoR-Modus selbst bei Nichtnutzung mehr Strom als notwendig wäre.

Viele Grüße

Sathya