Virtual Device on / off Homematic Aktor

Hallo zusammen.

Ich bin gerade dabei mein Smarthome von Homematic auf Fibaro HC2 umzustellen. Bis ich alle Autoren getauscht hab, dauert etwas. Deswegen suche ich nach einer Möglichkeit meine vorhandenen Autoren über das HC2 zu steuern.

Ich habe zum Testen mal ein Virtuelle Device mit zwei Buttons angelegt mit dem ich einen Homematic Autor steuern will.

Auf den ersten Button habe ich folgendes gelegt (LUA)

Homematic = Net.FHttp("10.23.0.10")
HWSReponse = Homematic:GET("/addons/xmlapi/statechange.cgi?ise_id=2454&new_value=true")

und auf den zweiten:

Homematic = Net.FHttp("10.23.0.10")
HWSReponse = Homematic:GET("/addons/xmlapi/statechange.cgi?ise_id=2454&new_value=false")

Das Funktioniert schon mal. Ich kann meinen Homematic Aktor ein und aus schalten.

Mein Problem ist jetzt das ich keine Ahnung hab wie ich den Main Loop realisieren soll. Ich will ja auch wissen ob ich das Licht über den Taster ein oder aus geschaltet habe.

Kann mir da jemand ein Paar tips geben?

Mit den Http Befehl

/addons/xmlapi/state.cgi?datapoint_id=2458

Kann ich mir im Browser den Status anzeigen lassen.

Der Browser zeigt dann folgendes an:

<state>
<datapoint ise_id=“2458” value=“false”/>
</state>

Ich bin für jeden Tipp dankbar, bevor ich ganz verzweifle :wink:

Mein zweites Problem ist, dass ich jetzt im Dashboard mein VD sehe. Dort sehe ich aber nur einen Button. Wenn ich diesen betätige, geht das Licht an, aber nicht mehr aus. Erst wenn ich auf das Device Klicke sehen ich beide Buttons. Kann man das ändern das ich beide Buttons sehe?

Viele Grüße

Stefan

Hi,

du kannst die Adresse genauso per GET ansprechen. In dem Response wird dann die XML geschrieben. Diese kannst du dann auslesen. Würde es nicht im Main-Loop machen, da dieser nach einer bestimmten Zeit nicht mehr reagiert. Mach es lieber in einem Button, den du mit einer anderen Szene drückst.

Hast du auch eine Möglichkeit dir das per json zurückgeben zu lassen? Die könntest du einfach mit json.decode dekodieren.

In den Einstellungen des virtuellen devices und den einzelnen Buttons gibt es rechts oben in der Ecke einen kleinen Punkt “Main”. Wenn dieser markiert ist, dann siehst du das auch auf dem Webinterface.

Gruß

Hi, vielen dank für die Antwort.

Das mit dem Main habe ich schon gesehen, aber ich kann immer nur einen Button als Main definiere. Entweder An oder Aus.

Ich habe gerade nochmal nachgeschaut, es gibt auch eine JSON-RPC Schnittstelle. Wird das vom HC2 auch unterstützt?

Ok, das wusste ich nicht das der hängen bleibt. Ist das ein Bug der gefixit wird? Ich verstehe nich ganz wie du das meinst mit dem Button den ich über eine Szene drücke. Wer soll dann den Zustand abfragen?

Grüße Stefan

Hui, stimmt.

Sorry, dann geht das nicht :frowning:

Was heißt unterstützt. Du musst das dekodieren und dann kannst du auf den response zurückgreifen. Wie oben geschrieben, geht das mit mit json.decode. Ist eine LUA-Funktion. Müsste mal den JSON-response sehen.

Ob der Bug gefixt wird. Bestimmt irgendwann. Zeitpunkt unbekannt. Du kannst den Code aus dem Main-Loop in einen Button verschieben und dann mit einer Szene regelmäßig den Button drücken. Dann holt dieser den Status neu.

Gruß

So, dass mit dem JSON bekomme ich nicht hin. Ich habe jetzt aber noch eine andere Möglichkeit gefunden den Zustand ohne XML zu bekommen. Das Funktioniert auch soweit.

Momentan sieht es so aus. Ich habe einen Button, wenn ich den drücke geht das Licht an oder aus. Den Zustand frage ich über den Main Loop ab.

selfId = fibaro:getSelfId()
HomematicIP = fibaro:get(selfId, "IPAddress")
HomematicPort = fibaro:get(selfId, "TCPPort")
vDeviceID = fibaro:getSelfId(); 
Homematic = Net.FHttp(HomematicIP,HomematicPort)
status = Homematic:GET("/addons/db/state.cgi?item=2458");
--fibaro:debug(status);
function getIcon(status) 
  if(status == "true") then return 6
  else return 5 end                      
end

if (status == "true") then
 Homematic:GET("/addons/xmlapi/statechange.cgi?ise_id=2454&new_value=false")
  else
  Homematic:GET("/addons/xmlapi/statechange.cgi?ise_id=2454&new_value=true")
end
newstatus = Homematic:GET("/addons/db/state.cgi?item=2458");

--fibaro:debug(newstatus);
function getIcon(newstatus) 
  if(newstatus == "true") then return 6
  else return 5 end                      
end
fibaro:call(vDeviceID, "setProperty", "currentIcon", getIcon(newstatus))

Mainloop:

selfId = fibaro:getSelfId()
HomematicIP = fibaro:get(selfId, "IPAddress")
HomematicPort = fibaro:get(selfId, "TCPPort")
vDeviceID = fibaro:getSelfId(); 
delay = 3000
--Homematic = Net.FHttp("10.23.0.10")
--fibaro:debug("This devicenumber is :" .. selfId);
Homematic = Net.FHttp(HomematicIP,HomematicPort)
status = Homematic:GET("/addons/db/state.cgi?item=2458");
fibaro:debug(status);
function getIcon(status) 
  if(status == "true") then return 6
  else return 5 end                      
end
fibaro:call(vDeviceID, "setProperty", "currentIcon", getIcon(status))

Soweit so gut, jetzt habe ich das nächste Anfängerproblem. Wie bekomme ich das Virtuelle Device in eine Szene. Es wird dort nicht angezeigt.

Grüße Stefan

Ok, hat sich erledigt. Man sieht das Vd nicht in der ersten Zeile der Szene sondern erst wenn man auf “then” umstellt werden die VD´s angezeigt.