Info

Aus Home24
Wechseln zu: Navigation, Suche

CCU XML-API vs XML-RPC

XML-API

über die API werden alle Daten manuell oder per eingestellter Updatezeit vom Handy aus heruntergeladen
Vorteil:
  • es werten alle Daten abgefragt (Gewerke, Geräteinfos /-status, Räume, Favoriten, Programme und System-Variablen)
Nachteil:
  • Status der Geräte ist bis zum nächsten Update nicht aktuell

XML-RPC

über den RPC sendet die CCU nur den aktuellen Status der Geräte an das Handy
Vorteil:
  • Status der Geräte ist immer aktuell
Nachteile:
  • es wird nur der aktuelle Gerätestatus gesendet
  • Gewerke, Geräteinfos, Räume, Favoriten, Programme und System-Variablen werden nicht gesendet
  • das Handy muss immer im selben Netzwerk sein und auch erreichbar immer sein, sonst stürzt die CCU unterumständen ab

Test Phones, Tablets und TV Box

* Phones und Tablets von Usern die mich bei der Entwicklung und Tests unterstützen

Home24 - Beta Tests aktivieren [1] oder fürs Tablet [2]

Device
SDK
Prozessor
RAM
im Test von/bis
Bemerkungen/Probleme
Phones
SonyEricsson X8 2.1 600 MHz Qualcomm 128 MB 2011/02-bis heute
SonyEricsson X8 2.3 (GingerDX) 600 MHz Qualcomm 128 MB 2011/02-bis heute
Sony Xperia Sola 4.0.4 1 GHz Dual-Core 512 MB 2012/11-bis heute
Sony Xperia Miro 4.0 800 MHz Qualcomm 512 MB 2012/11-bis heute
Samsung Galaxy S3 Mini* 4.1 1 GHz Dual-Core 1 GB
Sony Xperia Z1 Compact 5.1.1 2,2 GHz Qualcomm Quad-Core 2 GB 2014/05-bis heute
Sony Xperia M 4.3 1 GHz Qualcomm Dual-Core 1 GB 2014/06-bis heute
Sony Xperia Z3 Compact* 5.0 2,5 GHz Qualcomm Quad-Core 2 GB 2015/02-bis heute
Sony Xperia E3 4.4.4 1,2 GHz Qualcomm Quad-Core 1 GB 2015/02-bis heute
Tablets
Archos 7 V2 2.1 660 MHz ARM9 256 MB 2012-bis heute - Akku seit 2014/02 defekt mit Netzteil geht es noch
- stürzt häufig ab
Archos 7c * 2.1 1,2 GHz ARM Cortex A8 256 MB
Arnova 10 2.1 600 Mhz 256 MB 2012-bis 2015/03 - lässt sich nicht mehr starten
Archos 101 Internet Tablet * 2.2 1 GHz ARM Cortex-A8
Pearl Touchlet X4 * 2.3 1 GHz 512 MB
Sony S Tablet 4.0.3 1 GHz NVIDIA Tegra 2 Dual-Core 1 GB 2012/09-bis heute
Odys Neo S8 Plus 4.1 1.6 GHz Cortex-A9 Dual-Core 1 GB 2013/05-bis heute - WLAN bricht ab und zu ab, mit Tasker bau ich die Verbindung einfach wieder auf
Odys Neo Quad 10 4.2 1.6 GHz Quad Core 1 GB 2014/09-bis heute - ab und zu leichte Denkpausen
- gefühlt langsamer als das alte Sony S Tablet
Sony Xperia Z2 Tablet (10 Zoll) 5.1.1 2.3 GHz Quad Core 3 GB 2014/09-bis heute
Sony Xperia Z3 Tablet (8 Zoll) 6.0.1 2.5 GHz Quad Core 3 GB 2015/04-bis heute
TV Box
Sony NSZ-GS7 3.2 1,2 GHz Dual-Core 1 GB 2013/bis heute
Sony Android TV 6.0.1 - - 2016/bis heute

HomeMatic Scripte

Home24-MediaPlayer system.Exec()

string stdout;
string stderr;
string url="http://192.168.1.1:50000/track=Alarm.mp3";
system.Exec ("wget -q -O /dev/null " # url, &stdout, &stderr);

Home24-MediaPlayer system.Exec() über CUxD

string url="http://192.168.1.1:50000/track=Alarm.mp3";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O - '"#url#"'");

Logikvariable schalten

var i = dom.GetObject("Anwesenheit");
if (i.State() == true) {
  i.State(false);
} else {
  i.State(true);
}

Alle Lichter aus

  • Alle Aktoren im Gewerke "Licht" ausschalten
var i = dom.GetObject("Licht");
string itemID; 
foreach(itemID, i.EnumUsedIDs()) {
  var item = dom.GetObject(itemID);
  if (item.IsTypeOf(OT_CHANNEL)) {
    var device = dom.GetObject(item.Device());
    if (device.HssType().Find("HM-LC-Sw") >= 0){ 
    item.State(0);
  }
  if (device.HssType().Find("HM-LC-Dim") >= 0){ 
    item.State(0.00);}
  }
}

maximale Temperatur in Variable speichern

var source = dom.GetObject("BidCos-RF.HM123456:1.TEMPERATURE");
var maxTemp = dom.GetObject("maximale Temperatur");
if (source.Value() > maxTemp.Variable()) {
  maxTemp.Variable(source.Value());
}

oder wenn die Variable einem Kanal zugeordnet ist

 var source = dom.GetObject("$src$"); 
 var maxTemp = dom.GetObject("maximale Temperatur");
 if (source.Value() > maxTemp.Variable()) {
   maxTemp.Variable(source.Value());
 }

Tageslänge berechnen

integer i = system.SunsetTime("%Y-%m-%d %H:%M:%S").ToTime().ToInteger() - 
system.SunriseTime("%Y-%m-%d %H:%M:%S").ToTime().ToInteger();
string x = (i-3600).ToTime().Format("%H:%M");
WriteLine(x);

LowBat Meldung der Gewerke "Batterie" in Variable "LowBat" schreiben

var myAssembly = dom.GetObject("Batterie");
string itemID;
string text = "";
foreach(itemID, myAssembly.EnumUsedIDs()){
  var item = dom.GetObject(itemID);
  var device = dom.GetObject(item.Device());
  var interface = dom.GetObject(item.Interface());
  string interface_name = interface.Name();
  string device_address = device.Address();
  device_address = device_address.StrValueByIndex(" ", 0);
  string channel_name = interface_name # "." # device_address # " 0.LOWBAT";
  var channel = dom.GetObject(channel_name);
  if ( (channel.State() == true) && (channel.Value() == true) ) {
    if ( text.Length() == 0 ) { 
      text = item.Name();
    } else { 
      text = text # ", " # item.Name(); 
    }
  }
}
var newText = dom.GetObject("LowBat");
newText.Variable(text);

Wetter.com Werte in Variablen speichern

wetter.com API

auf der CCU müssen folgende Zeichen Variablen angelegt werden WetterCom06Uhr, WetterCom06UhrText, WetterCom11Uhr, WetterCom11UhrText, WetterCom17Uhr, WetterCom17UhrText, WetterCom23Uhr und WetterCom23UhrText

wetter.tcl

 !/bin/tclsh
 load tclrega.so
 set url http //api.wetter.com/location/index/search/Berlin/project/beispielprojekt/cs/528f01f0b631d3af6f52707dc8110d15
 exec /usr/bin/wget -q -O /usr/local/etc/config/addons/www/wetter.xml $url   
 set f [open "/usr/local/etc/config/addons/www/wetter.xml"]
 set input [read $f]
 close $f
 regexp "<city>(.*?)</city>" $input dummy parents  ;
 regexp "<forecast>(.*?)</forecast>" $parents dummy child1  ;
 regexp "<time value=\"06 00\">(.*?)</time>" $child1 dummy child1_1  ;
 regexp "<tx>(.*?)</tx>" $child1_1 dummy child1_1_tx  ; 
 regexp "<w_txt>(.*?)</w_txt>" $child1_1 dummy child1_1_wtxt  ; 
 regexp "<time value=\"11 00\">(.*?)</time>" $child1 dummy child1_2  ;
 regexp "<tx>(.*?)</tx>" $child1_2 dummy child1_2_tx  ; 
 regexp "<w_txt>(.*?)</w_txt>" $child1_2 dummy child1_2_wtxt  ; 
 regexp "<time value=\"17 00\">(.*?)</time>" $child1 dummy child1_3  ;
 regexp "<tx>(.*?)</tx>" $child1_3 dummy child1_3_tx  ; 
 regexp "<w_txt>(.*?)</w_txt>" $child1_3 dummy child1_3_wtxt  ; 
 regexp "<time value=\"23 00\">(.*?)</time>" $child1 dummy child1_4  ;
 regexp "<tx>(.*?)</tx>" $child1_4 dummy child1_4_tx  ; 
 regexp "<w_txt>(.*?)</w_txt>" $child1_4 dummy child1_4_wtxt  ; 
 set rega_cmd ""
 append rega_cmd "var c1 = dom.GetObject('WetterCom06Uhr');"
 append rega_cmd "c1.State('$child1_1_tx');"
 append rega_cmd "var c2 = dom.GetObject('WetterCom06UhrText');"
 append rega_cmd "c2.State('$child1_1_wtxt');"
 append rega_cmd "var c3 = dom.GetObject('WetterCom11Uhr');"
 append rega_cmd "c3.State('$child1_2_tx');"
 append rega_cmd "var c3 = dom.GetObject('WetterCom11UhrText');"
 append rega_cmd "c3.State('$child1_2_wtxt');"
 append rega_cmd "var c5 = dom.GetObject('WetterCom17Uhr');"
 append rega_cmd "c5.State('$child1_3_tx');"
 append rega_cmd "var c6 = dom.GetObject('WetterCom17UhrText');"
 append rega_cmd "c6.State('$child1_3_wtxt');"
 append rega_cmd "var c7 = dom.GetObject('WetterCom23Uhr');"
 append rega_cmd "c7.State('$child1_4_tx');"
 append rega_cmd "var c8 = dom.GetObject('WetterCom23UhrText');"
 append rega_cmd "c8.State('$child1_4_wtxt');"
 rega_script $rega_cmd

HM-Script zum starten der wetter.tcl

 dom.GetObject("CUxD.CUX2801001 1.CMD_EXEC").State("tclsh /usr/local/etc/config/addons/www/wetter.tcl");

HomeMatic Scripte für den MediaPlayer

TTS - Temperatur vom Außensensor

!Temperatur Aussen ID der TEMPERATUR=1234
var input = dom.GetObject(1234).State();
string url="'http://192.168.1.1:50000/tts=Aussen sind es " # input.ToInteger().ToString() # " Crad'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O /dev/null " # url);

TTS - Diese Fenster sind noch offen

 ! Name des Gewerke
 var myAssembly = dom.GetObject("Fenster");
 ! Text
 string textStart = "Das ";
 string textSeparator = " und das ";
 string textEnd = " Fenster ist noch offen";
 ! Geräte/Kanal Text der entfernt werden soll z.B. bei Fenster  Wohnzimmer
 string textReplace = "Fenster  ";
 ! Ip und Port
 string url = "http //192.168.1.1 50000";
 ! Ab hier nichs mehr aendern
 integer textStartLength = textStart.Length();
 integer textReplaceLength = textReplace.Length();
 string itemID;
 foreach(itemID, myAssembly.EnumUsedIDs()) {
  var item = dom.GetObject(itemID);
  if (item.IsTypeOf(OT_CHANNEL)) {
   var device = dom.GetObject(item.Device());
   if (device.HssType().Find("HM-Sec-SC") >= 0){
    if (item.State().ToInteger() == 1){
     string itemName = item.Name().ToString();
     ! entferne den textReplace             
     if(itemName.Length() >= textReplaceLength){
      itemName = itemName.Substr(textReplaceLength, itemName.Length() - textReplaceLength);
     }
     ! pruefe ob schon ein offenes Fenster hinzugefuegt wurde
     if (textStart.Length() > textStartLength) {
      textStart = textStart # textSeparator # itemName ;
     } else {
      textStart = textStart # itemName;    
     }             
    }
   }      
  }
 }
 ! textStart groesser als am Anfang dann TTS senden
 if (textStart.Length() > textStartLength){
  string send="'" # url # "/tts=" # textStart # textEnd # "'";
  dom.GetObject("CUxD.CUX2801001 1.CMD_SETS").State("wget -q -O /dev/null " # send);
 }

Klingel Cam für Home24 und MediaPlayer

!Script über Home24
string url="'http://192.168.1.1:51003/camname=MeineCam'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O /dev/null " # url);

oder

!Script über MediaPlayer
string url="'http://192.168.1.1:50000/camname=MeineCam'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O /dev/null " # url);

Homeputer TTS

GetSite("http://192.168.178.25/tts=Klingelingeling es klingelt",50000)

Falls eine Rückgabe erfolgt, kannst du diese so in einer Zeichen-Variablen speichern:

GetSite("http://192.168.178.25/tts=Klingelingeling es klingelt",50000, NameDerVariable)