meine Windows Phone App - ipsControl

Hallo,

wie schon mal angekündigt, habe ich eine Windows Phone App gebaut. Eigentlich wollte ich schon viel weiter sein, aber im Moment fehlt mir die Zeit hier viel zu investieren. Aber da ich die Windows Phone User nicht länger warten lassen wollte, stelle ich meine bisherige Version als Beta zur Verfügung. Ich habe mit einigen Personen getestet, aber es gibt bestimmt noch viele Problemchen :slight_smile:

Disclaimer: Die App ipsControl ist eine rein private Entwicklung von mir, ich übernehme keine Garantie oder Gewähr! Es war nicht mein Ziel dem Team der Symcon GmbH die Arbeit für eine Windows App abzunehmen, sondern für mich endlich eine App für das Windows Phone zu haben. Dadurch weiche ich auch vom IPS UI Konzept ab, die App kann (vermutlich) nicht ohne Konfiguartionsanpassung genutzt werden. Ich wollte nicht das Webfront nachbauen, sondern einen schnellen Client als App, der die Dinge „besser“ löst, welche mich an der iOS App gestört haben. Wer das nicht akzeptieren kann, sollte die App nicht installieren und lieber auf eine Version der Symcon GmbH warten!

Alle anderen starten hier :wink:

Was kann die App NICHT?

  • Wochenplaner & Events darstellen oder bearbeiten
  • Customer Icons darstellen
  • sich im „Notification Control“ registrieren
  • Darstellen „Farbauswahl“

Was kann die App, was die iOS App nicht kann?

  • Push Benachrichtigungen mit LiveTiles, Toast Nachrichten
  • Cortanaintegration (mit der Steuerung reden - „Haussteuerung, schalte das Licht im Wohnzimmer an“)
  • mjpeg Streams darstellen (was WP im Browser nicht kann), muss dazu als Medienobjekt angelegt werden

Was muss ich machen um die App zu nutzen?

  • ein Windows Phone 8.1 nutzen (Update für Windows 10 kommt, aktuelle Betabuild braucht aber wohl wieder Anpassungen)
  • Download der App hier
  • mobile Webfrontkonfiguration einrichten wie auch für iOS / Android (siehe IPS Doku) „Aktiviere Mobile iOS/Android“
  • Einstellungen vornehmen (siehe weitere Posts)

Hinweis: Die App orientiert sich am Windows Phone UI, dadurch habe ich mich entschieden, in der obersten Ebene Kategorien oder Links aus Kategorien darzustellen. Diese kann mann dann durchwischen, alle anderen Objekte erzeugen eine Fehlermeldung! Mein Ziel war ein möglichst schlankes UI zu bauen, nicht das Webfront nachzubauen.


Darstellung in IPS:
Kategorie.JPG

Push Notifications & Cortana erkläre ich in den nächsten Posts.

Ich empfehle dringend die Verbindnung zum Telefon über das Internet über eine gesicherte SSL Verbindung herzustellen (Windows Phone akzeptiert aber nur „echte Zertifikate“ z.B. von StartSSLâ„¢ Certificates & Public Key Infrastructure). Andernfalls gehen die Daten im Klartext über das Internet!

Bei Fragen, Anregungen & Fehlern gerne hier im Forum, PM oder per Mail an ipscontrol@outlook.com

Grüße
Seb.

Um die PushNotifications zu nutzen muss das folgende getan werden:

  • Anlegen einer String Variable (Beschreibung ist egal) pro WindowsPhone welches man benachrichtigen möchte
  • Variable ID in den Einstellungen der App unter „Interaktionen“ - „IPS VariableID für den Remotekanal“ eintippen und oben die Pushbenachrichtigungen aktivieren
  • Sound kann im Benachrichtigungszenter von Windows Phone beliebig verändert werden

Welche Benachrichtigungen gibt es?
Toast - Sichtbar im Benachrichtigungscenter, so wie all die anderen Apps auch
Tile - Text auf dem LiveTile (wenn man die App auf den Startscreen gepinnt hat und die Größe der Kachel ausreicht)
Badge - Nummer auf dem LiveTile (so wie Anzahl ungelesener Mails usw., wenn man die App auf dem Startscreen gepinnt hat)

Erstellen eines Script „WindowsNotificationClass“ mit folgendem Code

<?
	class WindowsNotification
	{
   	private $header1 = 'Content-Type: text/xml';
		private $header2 = 'X-WNS-Type: ';
   	private $header3 = 'Authorization: Bearer ';
   	private $header4 = 'X-WNS-Tag: ';
   	private $deviceURI;
    	private $authToken;
    	private $Debug = false;
    	private $WNSMsgToken = "abc";

    	function __construct($ObjID)
    	{
			$deviceToken = GetValueString($ObjID);
			$data = explode("###",$deviceToken);
			if (count($data) > 1)
			{
				$this->deviceURI = $data[0];
				$this->authToken = $data[1];
			}
    	}
    	
    	public function EnableDebug($Debug)
    	{
    	   $this->Debug = $Debug;
		}
		
		public function SetWNSMsgToken($Token)
    	{
    	
    	   $this->WNSMsgToken = "abc".$Token;
		}


		public function sendBagdeNotification($Value)
	 	{
	 	   $headers = array($this->header1,$this->header2.'wns/badge',$this->header3.$this->authToken);
	 	   $body = '<?xml version="1.0" encoding="utf-8"?><badge version="1" value="'.$Value.'"/>';
	 	   if ($this->Debug)
	 	   {
	 	      echo "headers
";
	 	      print_r($headers);
	 	      echo "body
".$body."
";
			}
	 	   $response = $this->sendNotification($headers,$body);
	 	   return $response;
	 	}

		 public function sendToastNotification($text1,$text2)
	 	 {
	 	   $headers = array($this->header1,$this->header2.'wns/toast',$this->header3.$this->authToken);
	 	   $body = '<?xml version="1.0" encoding="utf-8"?><toast><visual><binding template="ToastText02">'.
	 	   '<text id="1">'.$text1.'</text><text id="2">'.$text2.'</text>'.
			'</binding></visual></toast>';
			
			if ($this->Debug)
	 	   {
	 	      echo "headers
";
	 	      print_r($headers);
	 	      echo "body
".$body."
";
			}
	 	   $response = $this->sendNotification($headers,$body);
	 	   return $response;
	 	}
	 	 	public function sendTileNotification($text1,$text2,$text3, $text4)
	 	 {
			$text1 = utf8_encode($text1);
			$text2 = utf8_encode($text2);
			$text3 = utf8_encode($text3);
			$text4 = utf8_encode($text4);
			
			$body_medium = '<binding template="TileSquare150x150PeekImageAndText03" fallback="TileSquarePeekImageAndText01">'.
       			  '<image id="1" src="ms-appx:///assets/House-white.100.png" alt="ipsControlImage"/>'.
       			  '<text id="1">'.$text1.'</text><text id="2">'.$text2.'</text><text id="3">'.$text3.'</text><text id="4">'.$text4.'</text>'.
     				  '</binding>';
     		$body_large = '<binding template="TileWide310x150PeekImageAndText02" fallback="TileWidePeekImage02">'.
       			  '<image id="1" src="ms-appx:///assets/House-white.100.png" alt="ipsControlImage"/>'.
       			  '<text id="1">'.$text1.'</text><text id="2">'.$text2.'</text><text id="3">'.$text3.'</text><text id="4">'.$text4.'</text>'.
     				  '</binding>';
			
	 	   $headers = array($this->header1,$this->header2.'wns/tile',$this->header4.$this->WNSMsgToken,$this->header3.$this->authToken );
	 	   $body = '<tile><visual version="2">'.$body_medium.$body_large.'</visual></tile>';


			if ($this->Debug)
	 	   {
	 	      echo "headers
";
	 	      print_r($headers);
	 	      echo "body
".$body."
";
			}
	 	   $response = $this->sendNotification($headers,$body);
	 	   return $response;
	 	}
	 	
	 	public function sendTileNotification_gross($text1,$text2,$text3)
	 	 {

	 	   $headers = array($this->header1,$this->header2.'wns/tile',$this->header4.$this->WNSMsgToken,$this->header3.$this->authToken );
	 	   $body = '<tile><visual version="3"><binding template="TileWide310x150IconWithBadgeAndText">'.
	 	      '<image id="1" src="ms-appx:///assets/House-white.100.png" alt="ipsControlImage"/>'.
	 	   	'<text id="1">'.$text1.'</text><text id="2">'.$text2.'</text><text id="3">'.$text3.'</text>'.
			'</binding></visual></tile>';

			if ($this->Debug)
	 	   {
	 	      echo "headers
";
	 	      print_r($headers);
	 	      echo "body
".$body."
";
			}
	 	   $response = $this->sendNotification($headers,$body);
	 	   return $response;
	 	}
	 	public function sendTileNotification_mittel($text1,$text2,$text3)
	 	 {

	 	   $headers = array($this->header1,$this->header2.'wns/tile',$this->header4.$this->WNSMsgToken,$this->header3.$this->authToken );
	 	   $body = '<tile><visual version="3"><binding template="TileSquare150x150IconWithBadge">'.
	 	      '<image id="1" src="ms-appx:///assets/House-white.100.png" alt="ipsControlImage"/>'.
	 	   	'</binding></visual></tile>';

			if ($this->Debug)
	 	   {
	 	      echo "headers
";
	 	      print_r($headers);
	 	      echo "body
".$body."
";
			}
	 	   $response = $this->sendNotification($headers,$body);
	 	   return $response;
	 	}
	 	public function sendTileNotification_klein($text1,$text2,$text3)
	 	 {
	 	   $headers = array($this->header1,$this->header2.'wns/tile',$this->header4.$this->WNSMsgToken,$this->header3.$this->authToken );
	 	   $body = '<tile><visual version="3"><binding template="TileSquare71x71IconWithBadge"><image id="1" src="ms-appx:///assets/House-white.100.png" alt="ipsControlImage"/></binding></visual></tile>';


			if ($this->Debug)
	 	   {
	 	      echo "headers
";
	 	      print_r($headers);
	 	      echo "body
".$body."
";
			}
	 	   $response = $this->sendNotification($headers,$body);
	 	   return $response;
	 	}
	 	
	 	private function sendNotification($headers,$body)
	 	{
	 	 	if ($this->Debug)
	 	   {
	 	      echo "URL:
".$this->deviceURI."
";
			}
			
			if ($this->deviceURI != "")
			{
		 		// use Client URL Library
				$ch = curl_init();
				// set an options for a cURL transfer
				// look options here:  http://www.php.net/manual/en/function.curl-setopt.php
				// and what are needed here: http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202970(v=vs.92).aspx
				curl_setopt($ch, CURLOPT_URL, $this->deviceURI);
				curl_setopt($ch, CURLOPT_POST, true);
				curl_setopt($ch, CURLOPT_HEADER, true);
				curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
				curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
				// perform a cURL session
				$response = curl_exec($ch);

				// Check for errors
				if($response === FALSE)
				{
				  echo "Error in WindowsNotifications->sendNotifications: ".curl_error($ch);
				}
				// close a cURL session
				curl_close($ch);
				if($response === FALSE)
					return "Error in WindowsNotifications->sendNotifications: ".curl_error($ch);
				else
			   return true;
			}
			else
				return "Error in WindowsNotifications->sendNotifications: DeviceURI is null! Will skip message";
		

			
		}

	}
?>

Ich habe mir dann jeweils ein Script für Toast & Tile Benachrichtigungen gebaut. Beispiele folgen hier…
Beispielscript für ToastBenachrichtigungen (getriggert über eine Variableveränderung):

<?
	includescript(37603 /*[Test\ipsControl\PushNotification\WindowsNotificationClass]*/);

	function includeScript($scriptID)
 	{
		$s = IPS_GetScript($scriptID);
  		include($s['ScriptFile']);
 	}
 

 	if ($_IPS['SENDER'] == "Variable") //Trigger kam von Variable
 	{
 	  
  	   if ($_IPS['VARIABLE'] == 31609 /*[System\HM Statusmeldungen\Messages]*/)
 	   {
	
         $Devices = IPS_GetChildrenIDs ( 38012 /*[Test\ipsControl\PushNotification\Devices]*/ );
		
			foreach($Devices as $Device)
         {
          
         	$WNShub = new WindowsNotification($Device);
 				$WNShub->EnableDebug(false);
				$WNShub->sendToastNotification("ipsControl,$_IPS['VALUE']);
			}
		}
	}
	elseif ($_IPS['SENDER'] == "Execute") //Trigger kam von Variable
 	{

  	   

         $Devices = IPS_GetChildrenIDs ( 38012 /*[Test\ipsControl\PushNotification\Devices]*/ );

			foreach($Devices as $Device)
         {

         	$WNShub = new WindowsNotification($Device);
 				$WNShub->EnableDebug(true);
				$WNShub->sendToastNotification("ipsControl",GetValueInteger(31609 /*[System\HM Statusmeldungen\Messages]*/));

			}



	}
	
 
?>

Beispielscript für LiveTile Benachrichtigung:

<?

	include(IPS_GetScriptFile(37603 /*[Test\ipsControl\PushNotification\WindowsNotificationClass]*/));

 	if ($_IPS['SENDER'] == "Variable") //Trigger kam von Variable
 	{

  	   if ($_IPS['VARIABLE'] == 31609 /*[System\HM Statusmeldungen\Messages]*/)
 	   {

         $Devices = IPS_GetChildrenIDs ( 38012 /*[Test\ipsControl\PushNotification\Devices]*/ );

			foreach($Devices as $Device)
         {

         	$WNShub = new WindowsNotification($Device);
 				$WNShub->EnableDebug(false);
				$WNShub->sendTileNotification("blub","blub1","blub2");

			}


		}
	}
	elseif($_IPS['SENDER'] == "TimerEvent") //Trigger war ein TimerEvent
	{
		$light=GetValue(17849 /*[System\Wetterberechnung\Lichtmenge]*/);
		$light=(int)($light*100);
		$light="Licht: ".$light."%";
	   $Temp_outside="Temperatur: ".GetValue(58965 /*[Räume\Heizungskeller\Wetterstation\WMRS200 Temperatur- und Feuchtigkeitssensor (Außen)\Temperatur]*/) ."°C";

		$rain = GetValueInteger(47494 /*[Räume\Garten\Regensensor\Kanal 1\STATE]*/);
		if ($rain)
		   $rainTXT = "es regnet aktuell!";
		else
			$rainTXT = "";

		$text2="Wohnzimmer: ".GetValue(38295 /*[Räume\Wohnzimmer\Heizung\Wandthermostat\Werte\TEMPERATURE]*/) ."°C";
		$text3="Büro: ".GetValue(45595 /*[Räume\Büro\Heizung\Regelung\Werte\ACTUAL_TEMPERATURE]*/) ."°C";
	   $WindowOpen = GetValueInteger(36341 /*[System\Fenster Offen Anzeige\iWindowOpen]*/);
	   if ($WindowOpen > 0)
	      $WindowOpenTXT = $WindowOpen." Fenster geöffnet";
		else
		   $WindowOpenTXT = "";

	   $Devices = IPS_GetChildrenIDs ( 38012 /*[Test\ipsControl\PushNotification\Devices]*/ );

		foreach($Devices as $Device)
      {

	      	$WNShub = new WindowsNotification($Device);
				$WNShub->EnableDebug(false);
				$WNShub->SetWNSMsgToken("1");
				$WNShub->sendTileNotification("Wetter",$Temp_outside,$light,$rainTXT);
				$WNShub->SetWNSMsgToken("2");
				$WNShub->sendTileNotification("Räume",$text2,$text3,$WindowOpenTXT);

		}
	}
	elseif($_IPS['SENDER'] == "Execute")
	{
		$light=GetValue(17849 /*[System\Wetterberechnung\Lichtmenge]*/);
		$light=(int)($light*100);
		$light="Licht: ".$light."%";
	   $Temp_outside="Temperatur: ".GetValue(58965 /*[Räume\Heizungskeller\Wetterstation\WMRS200 Temperatur- und Feuchtigkeitssensor (Außen)\Temperatur]*/) ."°C";

		$rain = GetValueInteger(47494 /*[Räume\Garten\Regensensor\Kanal 1\STATE]*/);
		if ($rain)
		   $rainTXT = "es regnet aktuell!";
		else
			$rainTXT = "";

		$text2="Wohnzimmer: ".GetValue(38295 /*[Räume\Wohnzimmer\Heizung\Wandthermostat\Werte\TEMPERATURE]*/) ."°C";
		$text3="Büro: ".GetValue(45595 /*[Räume\Büro\Heizung\Regelung\Werte\ACTUAL_TEMPERATURE]*/) ."°C";
	   $WindowOpen = GetValueInteger(36341 /*[System\Fenster Offen Anzeige\iWindowOpen]*/);
	   if ($WindowOpen > 0)
	      $WindowOpenTXT = $WindowOpen." Fenster geöffnet";
		else
		   $WindowOpenTXT = "";
	   
	   $Devices = IPS_GetChildrenIDs ( 38012 /*[Test\ipsControl\PushNotification\Devices]*/ );

		foreach($Devices as $Device)
      {

      	$WNShub = new WindowsNotification($Device);
			$WNShub->EnableDebug(false);
			$WNShub->SetWNSMsgToken("1");
			$WNShub->sendTileNotification("Wetter",$Temp_outside,$light,$rainTXT);
			$WNShub->SetWNSMsgToken("2");
			$WNShub->sendTileNotification("Räume",$text2,$text3,$WindowOpenTXT);
	
		}
	}
   
	
?>

Einen LiveTile durch einen langen Druck auf die App in der Appliste „Aus Startseite“ erstellen

Windows Phone liefert Cortana mit, die beste Assistentin im Smartphone Sektor :slight_smile: Wie cool wäre es, wenn man einfach so mit seiner Haussteuerung reden könnte?

Was braucht man?

  • Windows Phone 8.1, einige Geräte haben schon die Alpha Version von Cortana aktiviert (wer es noch nicht hat sollte noch ein wenig warten)
  • irgendwo im Objektbaum der zur mobilen Konfiguration gehört (ich habe es unter Räume gepackt, siehe oben) eine versteckte Variable vom Typ String anlegen (hier wird die Sprachbefehlekonfiguration gespeichert)
  • irgendwo (kann außerhalb des zur Konfiguration gehörenden Objektbaums sein) ein Script „VoiceControlClass“ anlegen mit folgendem Inhalt:
<?
	class VoiceControl
	{
   	private $id;
    	private $Content = "";
    	private $Debug = false;

    	function __construct($ObjID)
    	{
			$this->id = $ObjID;
    	}

    	public function EnableDebug($Debug)
    	{
    	   $this->Debug = $Debug;
		}
		public function AddVoiceCommand($Actor,$Room,$Instance,$VarID)
    	{
    	   $value = $Actor."#".$Room."#".$Instance."#".$VarID;
    	   if (strlen($this->Content) > 0)
    	   {
    	   	$this->Content = $this->Content."°".$value;
    	   	if ($this->Debug)
    	   	echo "append '".$value."' to existing content
";
    	   }
			else
			{
				$this->Content = $value;
				if ($this->Debug)
				echo "add '".$value."' as new content
";
			}
		}
		public function writeData()
		{
			if ($this->Debug)
			{
			 $array = explode("°",$this->Content);
			 echo "working on ".count($array)." sets of data
";
			 }
		    $utf8 = utf8_encode($this->Content);
  			 $base64 = base64_encode($utf8);
  			 SetValueString($this->id,$base64);
		}
	}
		

?>

Dann noch ein Script zu erstellen der Sprachkommandos anlegen (auch außerhalb des Objektbaums):

<?

	include(IPS_GetScriptFile(13888 /*[Test\ipsControl\VoiceControl\VoiceControlClass]*/));

 	$VoiceControl = new VoiceControl(33576 /*[Test\ipsControl\VoiceControl]*/);
 	$VoiceControl->EnableDebug(true);
	$VoiceControl->AddVoiceCommand("Licht","Büro","27673","15476");
	$VoiceControl->AddVoiceCommand("Licht","Wohnzimmer","28396","12008");
	$VoiceControl->AddVoiceCommand("Rollo","Büro","36198","25111");
	$VoiceControl->AddVoiceCommand("Rollo","Wohnzimmer zur Terasse","20797","49234");
	$VoiceControl->AddVoiceCommand("Rollo","Wohnzimmer zur Seite","13445","14677");
	$VoiceControl->AddVoiceCommand("Radio","Küche","0","19382");
	$VoiceControl->AddVoiceCommand("Heizung","Büro","53879","53424");
	$VoiceControl->AddVoiceCommand("bin","weg","0","38991");
	$VoiceControl->AddVoiceCommand("Chef","da","0","12345");

	$VoiceControl->writeData();
  
?>

hinter …new new VoiceControl(xxx) gibt man die VariableID ein wo die Sprachbefehlkonfiguration geschrieben werden soll.
Der Sprachbefahl auf dem Handy sieht wie folgt aus:
"Haussteuerung oder ipsControl, schalte/dimme/ändere das „WAS“ in „WO“ [optional] auf „WERT“
Die Zahlen sind jeweils die Instanz bzw. die Variable was geschaltet werden soll (analog z.B. HM_WriteInteger…)

  • Script einmal ausführen, dann wird die Konfig in die Variable geschrieben
  • in der App unter Interaktion die VariableID für die Konfiguration eingeben und „Cortana verwenden“ aktivieren
  • danach einmal „Sparchbefehle einlesen“ drücken oder App neu starten, dann sollte in der App die Anzahl der gefunden Befehle stehen

Hinweis: hier ist noch ein wenig Fehlerhandling nötig, wenn z.B. Sprachbefehle nicht richtig erkannt wurden - kommt noch :slight_smile:

Zum nutzen dann einfach die Suchtaste lang drücken und z.B „Haussteuerung, was kann ich sagen“ sprechen oder aber eben einen Befehl wie oben beschrieben

Hier noch eine komplette Anleitung von User Marco: https://www.symcon.de/forum/attachment.php?attachmentid=30982&d=1443854925 (Danke dafür!!)

Falls Probleme auftreten, kann man in der App ein kleines DebugLog aktivieren.
Dazu in den Einstellungen die Weltkugel antippen, dort dann Debug „anschalten“.

Es werden dann alle internen Variablen mitgeschrieben (außer User/Passwörter) und die letzten ausgeführten Funktionen (10-20, wird ständig wieder überschrieben und die Anzahl hängt vom Handy ab).

Im Fehlerfall kann man die Daten dann als „Debug speichern“ (gleiches Menü) und dann „Logfile versenden“ ein Mail mit den Daten erzeugen (entweder an sich selbst oder direkt an mich, dann bitte aber mit einer Beschreibung des Problems).


Das Debuglog kostet einwenig Performance, da alle Funtionen eine erweiterte Protokollierung durchlaufen müssen, weshalb die Verwendung nur bei Fehlern empfohlen wird.

Ich habe die App gleich mal probiert (unter WP 8.1 und 10) und muss ein wirkliches Lob aussprechen! Läuft! :smiley: Super!

Anbindung ging problemlos, und mein Webfront war gleich zu sehen!

Für eine Beta-Version wirklich toll! Ich hatte mir auch schon überlegt, eine App zu programmieren, das kann ich mir jetzt sparen :slight_smile:

Grüße,
Martin

PS: Was mir beim ersten kurzen Test aufgefallen ist: Wenn man einen Schalter zweimal hintereinander betätigt (d.h. Aus -> Ein -> Aus), dann klappt das „Aus“ nicht, da muss man eine Ebene zurück und nochmal auf die Seite mit dem Schalter, dann geht es.

Danke Martin :slight_smile:

Liegt der Schalter den du verwendest in einer Unterebene (Kategorie - Unterkategorie - Schalter)?
Der Updatethread um alle paar Sekunden Änderungen zu verarbeiten wird im Moment nur für die Hauptebene gestartet, der Rest kommt aber auch noch :slight_smile:

Grüße
Seb.

genau so ist es. Dann arbeitet es im Moment ja erwartungskonform :wink:

Grüße
Martin

Hallo Seb

endlich gibt es mal was für uns vernachlässigten WindowsPhone User. :smiley: Vielen Dank für Deine Arbeit.

Ich habe die App Direct mal getestet. Leider schmiert Sie beim Laden der Konfiguration ab. Mann kann noch kurz die Tabs sehen, dann wars dass.
Ich habe mal den Debug Log angehängt.

StopCurrentUpdateThread, Dispose existing Thread
Clear ItemIDRelation
LoadItem Data for id:0
Send with id(2) Msg: WFC_GetSnapshotEx(52754,0)
process id: 23673 with parent: 0
process id: 26995 with parent: 0
process id: 29743 with parent: 0
process id: 39326 with parent: 0
process id: 19261 with parent: 0
process id: 40659 with parent: 0
process id: 47435 with parent: 0
process id: 48684 with parent: 0
process id: 54004 with parent: 0
process id: 58844 with parent: 0
process id: 17639 with parent: 0
process id: 22211 with parent: 0
process id: 45338 with parent: 0
process id: 44395 with parent: 0
process id: 38193 with parent: 0
process id: 20850 with parent: 0
process id: 56875 with parent: 0
application/json; charset=utf-8
got Msg with: 2690 bytes
result processing for ID0
result processing for ID58844
result processing for ID56875
result processing for ID54004
result processing for ID48684
result processing for ID47435
result processing for ID45338
result processing for ID44395
result processing for ID40659
result processing for ID39326
result processing for ID38193
result processing for ID29743
result processing for ID26995
result processing for ID23673
result processing for ID22211
result processing for ID20850
result processing for ID19261
result processing for ID17639
try to restore savestate
restore savestate compleded
StartUpdateThread
StartUpdateThread, start Thread
ERROR in RunUpdateThreadMainPage! curPage is Null, stop Thread
StopCurrentUpdateThread
StopCurrentUpdateThread, Dispose existing Thread
StopCurrentUpdateThread
StopCurrentUpdateThread, Dispose existing Thread

Hoffe es Hilft weiter.

Vielen Dank

Oliver

Hallo,

endlich nimmt sich mal einer WP an.

Ich bin nur leider zu doof. Ich scheitere bereits beim Connect.

Es kommt immer nur die Meldung Instanz #0 existiert nicht.

Gruß
Mike

Hi,

ich würde mal vermuten ihr habt in Eurer Webkonfig in IPS was gemacht was ich so nicht erwarte.
@Oliver: kannst du mir zum Log bitte noch die Cache Dateien schicken (kann man in dem gleichen Dialog vorher noch Debug speicher" drücken), gerne auch direkt als Mail (ipscontrol@outlook.com). So habe ich eine Chance zu verstehen wie deine Umgebung aussieht und was dort das Problem ist.

@Mike: bei dir stürzt es bei der Auswahl der Webkonfig ab oder wo genau?

Grüße
Seb.

@Seb.

Mail ist raus.

Ich habe mal einen neuen WebFrontConfigurator angelegt, mit nur ein paar Items. Leider wird dieser in der Auswahl erst gar nicht angezeigt.
Muss ich da noch was beachten ?

LG

Oli

EDIT : Nach aktivieren des Mobile Zugriffs für IOS, wird der neue WFC angezeigt, DIe App schmiert aber trotzdem ab.

Hallo,

ich kann mich jetzt meine Vorschreiber nur anschließen.

Nach Aktivierung von iOS/Android funktioniert es jetzt.
Leider cracht aber die APP nach einmaligem schalten eines Aktors.

Gruß
Mike

Könnt ihr mir die Logs (vorher „Debug speichern“ klicken) bitte an ipscontrol@outlook.com schicken?

App starten, Debug aktivieren, App crashen lassen, App neu starten und möglichst innerhalb von 2Sek auf den Settingsbutton klicken (dann kommt nicht so viel neues dazu). Debug speicher und Logfile versenden…

Was wollt ihr den schalten (Hersteller des Aktors)? Ich habe bisher nur mit Homematic getestet, sollte aber eigentlich keinen unterschied machen.

Danke und Grüße
Seb.

Hallo,

die App crascht schon beim Starten.
Es sind keine Settings mehr möglich.
Ich habe eine neue Webfront mit nur einem Homematic Aktor angelegt.

Gruß
Mike

Hallo Seb,

ich bin auch dabei und werde das Thema gespannt verfolgen. Es hört sich sehr viel versprechend an, vielen Dank für deine Arbeit. Allerdings stürzt bei mir ebenfalls die App gleich nach dem Start ab. Nachdem ich sie neu installiert hatte, hat es alles geladen, dann konnte ich einmalig licht ein ausschalten, dann wars wieder zu ende.

Also mach weiter so, ich denke es warten noch mehrere Windows Fans auf diese App. Ich bin mir sicher, bald sprechen wir mit dem Haus.

Mach weiter so.
Grüße Helmut

Hallo zusammen,

könnt ihr mir mal beschreiben wie Euer Objektbaum aussieht? Ich kann das Problem nur mit Euren Beschreibungen nicht nachstellen.

Sieht das bei Euch so aus?
Unbenannt.JPG
Dev-Test2 ist der Einsprung den ich in der mobilen Konfiguartion eingestellt habe.

Grüße
Seb.

Hallo,

genau so sieht es aus.

Gruß
Mike

muah, bei mir geht das genau so :frowning:

Also, ihr startet die App, seht kurz was (Sync der Daten vom IPSServer) und dann stürzt die App ab?
Oder stürzt die App direkt beim laden ab?

Könnt ihr mal mit einem anderen Objekt probieren, also z.B. einfach eine Textvariable hinlegen anstelle dem Schalter?
Wenn das auch nicht hilft, bitte nochmal die APP deinstallieren und neu installieren.
Sofern ich verstehe wo das Probem ist, würde ich es ja fixen :frowning:

Grüße
Seb.

Hallol Sebi,

habe jetzt mit ein paar einfachen Variablen und Schaltern experimentiert. Die App geht jetzt recht lange und alles wird schön angezeigt. Es gab noch ein paar abstürze, leider kann ich es aber nicht genauer eingrenzen. Nach einer neuinstallation geht’s wieder.

Jetzt habe ich die Cortana getestet. Der Sprachbefehl wird erkannt und auch an die App gegeben. Ich bin begeistert.

Mein Problem ist jetzt aber, dass ich leider das mit den Zahlen in den VoiceCommands nicht gerafft habe. Ich habe mal meinen Baum angehängt. Und würde gerne ein Skript starten oder die Boolean Variable Schalten. Ist das machbar? Was muß ich dann als Zahlen angeben??

Vielen Dank für die weiteren Infos
Grüße Helmut

Hallo,

ich habe gestern eine Version mit mehr Fehlerhandling beim „Schalter“ gebaut und bei Microsoft eingereicht. Hoffe das es morgen dann als Update verteilt wird und das Problem zumindest dort behoben ist. Sollte das funktionieren ändere ich auch das Handling bei allen anderen „Schaltern, Slidern…“ (Version 0.9.7 sollte den Fix enthalten).

Was Cortana angeht, so ist das eigentlich recht einfach. Stell dir vor die Funtion welche von der App dann ausgeführt wäre HM_WriteValueString…

Meine Logik fragt nach „Raum“, „Aktorname“, dann kommt die InstanzID des HM Aktors und dann die ObjektID die geschrieben werden soll (bei HM wäre es die der zugehörigen STATE Variable).
Wenn ich mich richtig erinner, müssen die Variable dazu nicht zwangsläufig unterhalb des „webfront mobile objektbaums“ liegen (kann mich aber auch irren).
Das Ausführen eines Scripts funktioniert über die InstanzID „0“ und als ObjektID die zum Script das gestartet werden soll. Eine Variable kann man aktuell nicht direkt ändern, müsste ich mal testen ob die Funktion die ich da verwende das ermöglicht, sind leider alle nicht dokumentiert und nur durch reverse Engineering nutzbar :slight_smile:

Hoffe das hilft?

Grüße
Seb.