Mehrere WebFront Taster in einer Zeile

Brauche bitte eure Hilfe!
Situation:
Ich habe 2 Garagentore die jeweils mit einem eigenen „AUF“, „STOP“ und „ZU“ Kontakt angesteuert werden können. Dies möchte ich mit zwei Homematic 4-Kanal Schaltaktor umsetzen. Dazu brauche ich im WebFront jeweils einen „Öffnen“, „Stoppen“ und „Schließen“ Button. Diese sollen in einer Reihe nebeneinander sein und nicht untereinander.


Wenn ich dann z.B. auf den „Öffnen“ Button drücke, soll für 2 Sekunden der 1. Kanal des Schaltaktors eingeschalten und dann wieder ausgeschalten werden. Beim Klick auf „Stoppen“ soll der 2. Kanal ein- und wieder ausgeschalten werden und das gleiche beim Schließen (3.Kanal). Dabei soll der Button für die Dauer des Einschaltens eine andere Farbe haben.
Dazu habe ich jetzt folgendes gemacht: Ich habe zwei Variablen (1x „Garage links“ und 1x „Garage rechts“) und ein eigenes Integer-Profil „Garagen“ angelegt.
Profil Garagen.png
Den beiden Integer-Variablen habe ich das Profil „Garagen“ und jeweils ein eigenes Skript zugeordnet, welches die Buttons und die Aktoren steuern soll.
Variable.png

<?

 if($IPS_SENDER == "WebFront")
{
    switch($IPS_VALUE)
    {
        case 1:
        IPS_SetVariableProfileAssociation("Garagen", 0, "Öffnen", "", 0xFFA943);
        IPS_SetVariableProfileAssociation("Garagen", 1, "", "", -1);
		IPS_RunScript(37566 /*[Fertige Skripte\Garage links AUF]*/);
		IPS_Sleep(2000);
		IPS_SetVariableProfileAssociation("Garagen", 1, "Öffnen", "", -1);
        IPS_SetVariableProfileAssociation("Garagen", 0, "", "", -1);
        break;
    }
}

?>

Mein Problem:
Der erste Befehl „Öffnen“ funktioniert einwandfrei. Ich bekomme es aber nicht hin, den beiden anderen Buttons einen anderen Kanal zuzuordnen. Zumal denke ich, dass mein Skript auch nicht wirklich richtig ist.
Als Aktion habe ich den Varibalen ein Skript zugeordnet welches so aussieht:

<?

AIOHomematicSwitch_PowerOn(43854 /*[Mediola\Homematic Geräte\Garage K1]*/);
IPS_SLEEP(2000);
AIOHomematicPowerswitch_PowerOff(43854 /*[Mediola\Homematic Geräte\Garage K1]*/);

?>

Wo liegt/liegen hier mein/e Fehler?
Danke für eure Unterstützung!

Grundsätzlich ist das richtig. Ich hab mal nachgeschaut der HM-LC-Sw4-WM wird zur Zeit im AIO Modul nur mit einer Variable und einem Kanal angelegt, das ist das Problem.

Ich baue da gleich mal ein Fix ein und gebe dann Bescheid dann sollten auch alle vier Kanäle ansteuerbar sein.

Was täten wir ohne Fonzo… :slight_smile:

Mach mal ein Update vom Modul und teste dann mal, eventuell musst Du auch noch mal den Import neu machen falls er den Typ verworfen hat.

Theoretisch sollten bei dem Typ jetzt drei Variablen im Webfront verfügbar sein um die Kanäle einzeln Ein/Aus zu schalten.

Zusätzlich gibt es neue Funktionen um die Kanäle über ein Skript anzusprechen.


AIOHomematicSwitch_Channel1On($objectid); // $objectid entspricht der Objekt ID der Instanz
AIOHomematicSwitch_Channel1Off($objectid); // $objectid entspricht der Objekt ID der Instanz
AIOHomematicSwitch_Channel2On($objectid); // $objectid entspricht der Objekt ID der Instanz
AIOHomematicSwitch_Channel2Off($objectid); // $objectid entspricht der Objekt ID der Instanz
AIOHomematicSwitch_Channel3On($objectid); // $objectid entspricht der Objekt ID der Instanz
AIOHomematicSwitch_Channel3Off($objectid); // $objectid entspricht der Objekt ID der Instanz
AIOHomematicSwitch_Channel4On($objectid); // $objectid entspricht der Objekt ID der Instanz
AIOHomematicSwitch_Channel4Off($objectid); // $objectid entspricht der Objekt ID der Instanz

Gib dann mal Rückmeldung um sich das schalten lässt.

Wenn ich den Import neu starte kommt:

So auf die Schnelle ein Bugfix. Sollte wohl bei Dir gehen an sich fehlt da aber noch einen Funktion die sämtliche Homematic Types zuordnet aber für die paar Aktoren die Du hast ist das jetzt von Hand drinnen.

Jetzt funktionierts. Ich habe den gesamten Homematic-Baum gelöscht und neu angelegt.
Interessanterweise kommen immer die „Garagen K1, K2 usw.“ automatisch, ohne dass ich sie benannt habe. Wird das wo gespeichert?
Sieht dann so aus:

Und lässt sich auch was schalten auf den anderen Kanälen?

Ich hab jetzt folgendes Zwischenergebnis:
Homematic neu anlegen --> Alle Geräte werden importiert (und automatisch mit Namen benannt?)
Schaltaktor --> Es werden alle 4 Kanäle als eigenes Objekt angelegt (dies war auch vorher so). Zusätzlich werden jetzt zu jedem Kanal „Error“, „Status“, „Status Kanal 2“, „Status Kanal 3“ und „Status Kanal 4“ angelegt. Ist das so richtig? Müsste beim „Kanal 2“ nicht der Status von 1, 3 und 4 angezeigt werden, beim „Kanal 3“ Status von 1, 2 und 4 usw.?
Kanäle schalten --> Wenn ich die ObjektID K1, K2, K3 oder K4 in Verbindung mit deinen neuen Befehlen verwende, kann ich mit jeder ObjektID jeden Kanal schalten, verwende ich zB. ObjektID 55696, kann ich jeden Kanal schalten. Ist das so richtig? Theoretisch bräuchte ich ja dann nur mehr 1 ObjektID zB K1 19390. Zwar schalten alle Kanäle, jedoch bleibt der Wert immer auf „AUS“, das heißt, der Status wird nicht verändert.
Zur Veranschaulichung hier nochmals der aktuelle Screenshot.

Ich hab noch mal nachgeschaut. In NEO bzw. der device_db existieren anscheinend 4 Geräte jeweils mit Kanal 1 - 4. An sich ist das ja aber ein einziges Gerät mit einer Seriennummer und 4 Kanälen. Daher hatte ich mal unter einer Instanz 4 Variablen gelegt.
Jetzt ist halt die Frage was mehr Sinn macht. Aus meiner Sicht ist es das sinnvollste in IP-Symcon dann eine einzige Geräte Instanz anzulegen mit 4 Kanälen zum schalten, dann hat diese auch eine Objekt ID.

Dann würde ich beim Import zusätzlich die Seriennummer prüfen und diese auch nur einmal importieren falls diese mehrfach vorkommt. Anhand des Typs kann dann die Anzahl der Kanäle festgelegt werden die ein Gerät besitzt.

Oder hast Du einen besseren Vorschlag?

Ansonsten musst Du mal Rückmeldung geben was im Debug Fenster als Rückmeldung steht dann kann ich die Rückmeldung vom Gateway auch an die Instanz durchleiten und den Status aktualisieren. Das ist bei unidirektionalen Systemen wie FS20 ja nicht notwendig hier wird der Status nur simuliert weil es keine Rückmeldung vom Aktor gibt.

Ich habe mal die Ident bei Homematic abgeändert diese besteht jetzt aus der Seriennummer und der Homematic Adresse und ist damit eindeutig. Das 4 Kanal Aktor sollte dann nur noch als ein Gerät angelegt werden. Du musst dazu erstmal ein Update durchführen. Vorher einmalig alle importierten Homematic Instanzen des AIO Gateway löschen und dann nochmals neu Importieren. Die Ident Änderung sollte eine einmalige Sache gewesen sein ein neuer Import zu einem späteren Zeitpunkt ist dann also nicht mehr notwendig war aber jetzt einmalig nötig damit der 4 Kanal Aktor nicht als mehrere Instanzen angelegt wird.

Kannst ja mal Rückmeldung geben ob das klappt und sich schalten lässt.

Hab jetzt alle Instanzen nochmals gelöscht und neu importiert. Der Aktor ist, wie du erwähnt hast, jetzt nur 1x angelegt - passt. Folgendes konnte ich nach ausführlichen Tests feststellen: Die einzelnen Kanäle lassen sich mit den gennanten Befehlen einwandfrei schalten. Es ändert sich aber kein Status in der Tabelle „Wert“ (nur wenn manuell die Variable geändert wird). Die Befehle in der Befehlsliste sind mehrfach hinterlegt. Der Befehl „PowerOn“ und „PowerOff“ hat die selbe Funktion wie „Channel1On“ und „Channel1Off“.

Unklar ist mir jetzt noch, wie ich die Umsetzung mit den 3 virtuellen Tastern im WebFront durchführen kann. Die einzelnen Kanäle sind ja Boolean-Variablen. Stimmt mein Skript oder muss ich dieses grundlegend ändern?

Instanzfunktionen.png

Welche Tabelle meinst Du? Das die Befehle mehrfach hinterlegt sind ist ein Problem von IP-Symcon keinen Ahnung wie man das wegbekommt. Eventuell durch einen Neustart vom IP-Symcon Dienst.

Das ist so gewollt.

Das muss ich mal sehen weis ich auf Anhieb auch nicht. Wichtig wäre das Du mal schaust was der Aktor zurückmeldet damit man das dann noch ergänzen kann. das gleiche gilt für die anderen Aktoren auch damit auch die Rückmeldung noch ergänzt werden kann.

Ganz unten wo überall „AUS“ steht ist der Aktor. Der Zustand ändert sich beim Schalten der einzelnen Kanäle nicht. Dort wo eine Zeit steht, habe ich die Variable manuell geändert.

Wie prüfe ich das?

Indem Du das Debug Fenster des IO oder des Splitters öffnest (der grüne Käfer) dann geht ein Fenster auf. Unten links HEX Ansicht deaktivieren. Im Fenster siehst Du sämtliche Meldungen die das Gateway an IP-Symcon sendet.

Beiden Debug Fenster bleiben leer. Weder bei AIO Splitter noch bei AIO Gateway kommen Daten wenn ich die Geräte bediene. Hab es per Skript, per manuellem Schalten am Gerät und per „Befehl testen“ probiert.

Wo läuft denn IP-Symcon auf welchem Betriebssystem?
Falls es Linux bzw. ein Raspberry ist must Du einmalig ein Skript ausführen siehe Lösung UDP Socket

Server läuft bei mir auf einem Raspberry
Habe das UDP-Socket angelegt und das Skript ausgeführt, jedoch kommt ein Fehler :confused:
Welche Ports sind zu hinterlegen?

Der UDP Socket musst Du nicht anlegen der sollte bereits existieren, das ist die übergeordnete Instanz des AIO Splitters.
Das rote ist kein Fehler sondern ein Bug in IP-Symcon auf dem Raspberry. Funktionieren tut das trotzdem wenn alles richtig eingetragen ist.

Unter Sende Host steht die IP des AIO Gateways.
Sende als auch Empfangs Port sollte unverändert auf 1902 eingestellt sein.

Richtig, hab ich jetzt gefunden.

Es steht aber „Aktueller Wert 255.255.255.255 ist nicht verfügbar“. Im Screenshot von Nall-chan steht nur „Aktueller Wert 255.255.255.255“. Habe auch getestet, ob der Logfile mitgeschrieben wird - keine Reaktion.
Muss das Feld „Empf.Host“ leer sein (wie im Screenshot) oder muss ich dort meine Server-IP auswählen?

Das passt

Auch richtig eingestellt, wobei im Screenshot die Rede von Sende-Port 1 und Empf.-Port 50001 ist.