Miele@Home einbinden (XGW2000)

Dieses Skript erfordert zwingend IP-Symcon 2.5 oder neuer.

Installation:
-Eine neue Kategorie für eure Miele Geräte erstellen
-Ein Skript innerhalb dieser Kategorie erstellen und von unten per Copy&Paste einfügen
-IP-Adresse in der 3. Zeile anpassen
-Skript per Execute ausführen und schauen, ob Fehler gemeldet werden
-Ereignis erstellen, welches im beliebigem Intervall das Skript erneut ausführt (Dadurch werden die Werte aktualisiert)
-Fertig.

Hinweise:
Die Instanzen/Variablen dürfen umbenannt werden. Sie dürfen aber nicht verschoben werden. Bitte nutzt Links, wenn ihr nur einzelne Variablen in eure Visu einbinden wollt.


<?

$url="http://192.168.100.50/homebus/?language=de_DE";

$content = @file_get_contents($url);
if((strpos($http_response_header[0], "200") === false)) {
  return;
}

$result=array();
$devices=simplexml_load_string($content);

foreach($devices as $device) {
  $uid = str_replace("-", "N", $device->UID);
  $name = utf8_decode($device->name);
  $url = $device->actions->action->attributes()['URL'];
  readdevice($uid, $name, $url);
}
 
function readdevice($uid, $name, $url)
{
  $content = @file_get_contents($url);
  if((strpos($http_response_header[0], "200") === false)) {
    return;
  }

  $cid=GetDummyModule(IPS_GetParent($_IPS['SELF']), $uid, $name);

  $device=simplexml_load_string($content);
  $keys = $device->information;
  foreach($keys->children() as $key)
  {
    $id=GetStringVariable($cid, filter_characters(utf8_decode($key['name'])), utf8_decode($key['name']));
    SetValueString($id, utf8_decode($key['value']));
  }
}

function GetStringVariable($id, $ident, $name)
{
  $vid = @IPS_GetObjectIDByIdent($ident, $id);
  if ($vid === false)
  {
    $vid = IPS_CreateVariable(3);
    IPS_SetParent($vid, $id);
    IPS_SetIdent($vid, $ident);
    IPS_SetName($vid, $name);
    IPS_SetInfo($vid, "This Variable was created by Script #$id");
    IPS_SetVariableCustomProfile($vid, "~String");
  }
  return $vid;
}


function GetDummyModule($id, $ident, $name)
{
  $iid = @IPS_GetObjectIDByIdent($ident, $id);
  if ($iid === false)
  {
    $iid = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
    IPS_SetParent($iid, $id);
    IPS_SetIdent($iid, $ident);
    IPS_SetName($iid, $name);
    IPS_SetInfo($iid, "This Instance was created by Script #$id");
  }
  return $iid;
}

function filter_characters($input) {
  $search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u,-, ");
  $replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u,_,_");
  return str_replace($search, $replace, $input);
}

?>

Das Script läuft problemlos.

danke u. Gruß Sven

Tach Zusammmen,

das Script läuft prima (nachdem ich die Version 2.5 gefunden habe :D).
Jedoch hätte ich noch einen Verbesserungsvorschlag bzw. Wunsch dazu:
Nach jedem Auslesen werden die geänderten Werte neu gesetzt, jedoch unveränderte Werte bleiben stehen.
So steht z.B. beim Trockner der „Status“ auf „aus“, beim „Programm“ jedoch noch „Trocknen“ und bei der „Dauer“ noch die ursprüngliche Programmzeit.
Es wäre schön alle nicht gesetzten Variablen bei jedem Durchgang zu nullen.

Viele Grüße

Udo

Hallo,

Zunächst ein herzliches Dankeschön für das hervorragende Skript - Die dynamische Anlage der Variabelen gefällt mir sehr gut!

Das Ganze minütlich auslesen ist natürlich kein Problem - XGW2000 liefert aber auch UDP Multicasts, die eine elegantere Form eines Triggers darstellt.

In Wireshark finde ich die IP Adressen und die Ports, die beispielsweise beim öffnen des Ofens gesendet werden.

Ich bin schier am verzweifeln, diese Daten in’s IP Symcon zu übertragen. Hat jemand einen Vorschlag?

Danke

Hallo Paresy,

ich habe dein script für das xgw 2000 gefunden.
Herzlichen Dank für die Bereitstellung.
Ich bin ganz neu hier bei ip-symcon und bedanke mich schon einmal vorab für die tolle community.

Ich besitze das Miele xgw 3000.
In IP- symcon habe ich wie von dir beschriebn das script eingefügt.
Es läuft auch soweit mit dem xgw 3000, allerdings bekomme ich immer folgende Warnungen vom script:

Warning: Ident darf nur Buchstaben und Zahlen enthalten in C:\IP-Symcon\scripts\34776.ips.php on line 45

Zeile 45 lautet: IPS_SetIdent($vid, $ident);

Wenn ich mir mit echo ($ident) den Inhalt mal ansehe, bekomme ich nur Gerät und Gerätestatus ausgegeben.

Kenne mich mit php noch nicht so gut aus. Sind diese Warnungen zu vermeiden?
Was müsste ich am script ändern? Oder könntest du das script vielleicht ändern, dass die Warnunge nicht mehr kommen? Wäre dir sehr dankbar.

Gruß Sfeele

Trage mal im XGW3000 unter Zusatzname was ein.

Ich glaube das war damals das Problem.

Hallo Sven,

habe ich jetzt im xgw 3000 gemacht und Geräte aktualisiert.
Die Geräte habe ich danach aus dem Objektbaum vorsichtshalber gelöscht und das Script neu gestartet.
Leider immer noch der gleiche Fehler.
Gebe ich print $ident im script mal ein, so wird folgender Inhalt ausgegeben: Gerät und Gerätestatus,
jeweils für Waschmaschine und Trockner.
Problem ist, dass mit diesem Fehler mir der Objektbaum bei jedem Scriptdurchlauf aufgebläht wird.
Es wird bei jedem scriptdurchlauf eine neue ObjektID jeweils für Gerät und Gerätestatus neu angelegt. Alle anderen Variablen wie Phase oder Programm stehen im Objektbaum je Gerät nur einmal.
Wenn ich per zyklischen Ereignis das Script starten lasse, ist mein lizenzmäßiges Variablenlimit schnell erreicht ist.

Ich bin für jede Hilfe dankbar.

Gruß Sfeele

Habe dasselbe Problem, nach 3-maligem Aufruf sieht es so aus:

Habe mir die $ident im script mal genauer angesehen und ausgeben lassen.
Es wird jeweils „Gerät“ bzw. „Gerätestatus“ ausgegeben.
Er findet die Objekte mit den Namen nur leider nicht in der Objektliste und legt somit sofort beim erneuten Ausführen des Scripts wieder eine neue Objekt-ID an mit dem gleichen Namen.

Würde mich sehr freuen wenn sich das einer von euch mal genauer ansehen könnte. Ich komme da leider nicht weiter.

Vielen Dank für eure Mühen.

Kann es vielleicht daran liegen, dass „Gerät“ und „Gerätestatus“ Umlaute enthalten?

Guten Abend,

bei mir das gleiche, hat jemand schon eine Lösung?

DANKE

ZIPFAM