Hallo,
da ich bei der Einarbeitung aktuell einige Probleme mit den Beispielen im Forum hatte (bzw. wenig CSharp Beispiele zu finden sind), möchte ich kurz meine Erfahrungen dokumentieren und einen Beispielcode liefern (vielleicht hilfts Jemanden):
Unter Visual Studio 2008 muss der Webservice als Webservice und NICHT als Service eingebunden werden, sonst funktionieren die per WDSL generierten Routinen nicht (per wdsl.exe generierte proxys funktionierten bei mir unter visual studio 2008 leider auch nicht)!
Mein funktionierender Testcode:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using fs20cmd.IIPSFHT;
using fs20cmd.IIPSFS20;
using fs20cmd.IIPSSOAPServer;
using fs20cmd.IIPSInstanceManager;
namespace fs20cmd
{
class Program
{
static void Main(string args)
{
// Tests der verschiedenen Services
// SOAP Server
IIPSSOAPServerservice proxy = new IIPSSOAPServerservice();
string message = proxy.StartSession(TIPSFilterType.ftExcludeFilter);
// Hum, damit kann man irgendwie nicht so viel machen...oder ich verpasse etwas?
Console.WriteLine("Debug: {0}",message);
// Instancen ausgeben
Console.WriteLine("Instances:");
IIPSInstanceManagerservice instance = new IIPSInstanceManagerservice();
ushort[] aListe = instance.GetInstanceList();
foreach (ushort element in aListe)
{
Console.WriteLine("ID: {0}", element);
}
ConsoleKeyInfo key;
// Mit fs20 Service verbinden
IIPSFS20.IIPSFS20service fs20device = new IIPSFS20.IIPSFS20service();
// Id der zu schaltenden Steckdose
fs20device.TIDHeaderValue = new IIPSFS20.TIDHeader();
fs20device.TIDHeaderValue.ID = 20196;
// 1 = einschalten für 10 sekunden, 0= ausschalten, q=quit
do
{
key = Console.ReadKey();
if (key.KeyChar.Equals(Convert.ToChar("q"))) return;
else if (key.KeyChar.Equals(Convert.ToChar("0")))
fs20device.SwitchMode(false);
else fs20device.SwitchDuration(true, 10);
} while (true);
}
}
Hallo, danke für Dein Beispiel. Soweit war ich heute morgen auch gerade gekommen
Was mir aber fehlt (hat auch nichts mit C# zu tun): wie kann ich in der Instancen-Liste erkennen, von welchem Typ eine Instanz ist?
Was ich möchte, ist sowas wie ein- und ausschalten realisieren, egal ob das device über fs20 oder xComfort angeschlossen ist. dazu müßte ich eben eine Fallunterscheidung einbauen, je nach type.
Kann mir jemand einen Tipp geben? Ist alles etwas schlecht dokumentiert. Oder man findet es schlecht. Wo könnte ich sowas denn nachlesen oder ein Beispiel finden?
Ok, d.h. per GetInstance / ModulInfo bzw. getObject / ObjectType. Was anderes finde ich nicht. Was ich auch nicht finde, ist eine Übersicht welche String-Konstanten werden denn zurückgegeben, wenn ich nach ModulName frage?
Okay, das kann ich evtl. über die Modulverwaltung rauskriegen …
Hab ich was vergessen?
Was ich mir überlege, ist für MediaPortal ein natives Plugin zu schreiben mit dem man ähnlich wie im WebFront über den Baum navigieren und die Devices steuern kann.
Oder hat jemand sowas schon? ipshomecontrol mal ausgenommen, weil mir dass nicht so wirklich gefällt (Optik und Funktionalität).
cool dies ist exakt mein Beweggründ mit C SHarp die Soap Schnittstelle auszuprobieren und den o.g. Code zu schreiben. :eek:
Ich habe bisher leider auch nur einen Beispielcode für ein Mediaportal Plugin in C Sharp und die o.g. Zeilen. Halt mich gerne auf dem Laufenden oder binde mich gerne direkt mit ein!!
ich hab jetzt ein Plugin laufen, was für meine Zwecke schon ganz gut funktioniert. Es ist nicht so generisch wie das WebFront, sondern nutzt recht
einfach den Skin-Editor von Mediaportal selber.
Das ganze geht so:
[li] man nutzt den Skin-Editor von Media-Portal und stellt sich ein oder mehrere Screen zusammen, die die Steuerung ergeben sollen.
[/li][li] bei bestimmten Controls in den Skins gibt’s ein paar magische Eigenschaften (Description): man trägt einfach die IP-Symcon ID ein und schon installiert das Plugin den passenden Handler, der beim Anklicken, das richtige tun.
[/li]Beispiel: ein ToogleButton -> ein Ein-Aus-Schalter mit Zustands-Visualisierung.
Damit ist zwar etwas Handarbeit nötig, aber man kann sich die Oberfläche ganz individuell zusammen bauen.
Bislang geht’s allerdings nur mit FS20-Aktoren und Script-Instanzen ist aber relativ leicht erweiterbar.
Bzgl. des Skin-Editors bin ich fast der Meinung, dass man dies bei entsprechender Dokumentation so belassen könnte.
Die meitsen Ip-Symcon Anwender sind ja durchaus technisch versiert und arbeiten sich da schnell ein.
Laß mir gerne den Code zukommen, dann teste ich das Plugin am Wochenende mal und sehe mir den Code an.
Grüße, Benjamin
gerade „hänge“ ich ein bisschen: Wie kann ich denn auf ein Ereignis reagieren? Das ich ein Event erzeugen kann ist schon klar. Aber ich will nicht nur ein Script auf IPS starten, sondern mein remote C# Client soll das mirkriegen.
Also konkret wenn sich in ips eine Variable ändert, dann soll ein Stück C# angesprungen werden. Wie mache ich das denn? (die remote console kann sowas ja).
jetzt muss ich das nur halbwegs sinnvoll in den MP Plugin-Code integrieren. dann ändert sich auch der angezeigte status, wenn ich das nicht selber schalte
Was in deinem Beispiel nicht vorkommt sind CustomProfiles, oder?
Ausserdem gibt’s in C# wegen der strengeren Typisierung doch etwas mehr Code zu schreiben (Associations auf Bool z.B. da die Wert der Association immer double sind???)
Ein weiteres Problem über das ich gestoplert bin: Das Encoding passt nicht. Wenn ich mit einem ~Temperature Profile formatiere kommt das °C nicht richtig rüber, stattdessen wird ??C ausgeben (ist vielleicht UTF-8 encoded, wird aber nicht so aufgefasst).