MQTT Payloads zusammenführen das man die Befehle schalten kann

Moin,
Habe hier eine Instar Kamera die auch über MQTT gesteuert werden kann. Ich habe nun verschiedene Topics angelegt über den MQTT Explorer um die Kamera zu steuern. Die Status Topics hat mir der MQTT Client Konfigurator selbst angelegt bzw. in die Übersicht aufgelistet.

Z.B. die …/features/ptz/move/raw habe ich folgende Befehle zur Verfügung:

{„val“:„left“}, {„val“:„right“}, {„val“:„down“}, {„val“:„up“}, {„val“:„stop“}, {„val“:„focusin“}, {„val“:„focusout“}, {„val“:„zoomout“}, {„val“:„zoomin“}, {„val“:„tour“}, {„val“:„hscan“}, {„val“:„vscan“}

Jetzt wird das ganze aber in einer Value String Variable in Symcon angelegt und kann immer nur einen Wert über die Variable setzen, aber wie mache ich das komfortabler über z.B. eines Variablen Profils um das ganze über Tasten zu steuern?

Wie leicht stehe ich auch mal wieder auf dem Schlauch und brauche nur einen kleinen Anstoß. :roll_eyes:

Wenn ich jetzt das ganze bei z.B. Tasmota nehme, dann schreibt er mir ja in die Value die JSON Werte rein und kann dann das ganze anzeigen lassen als Array und weiter verarbeiten.

Instar Wiki

LG
Stefan

Na genauso.
Ein Variable Profil für die String Variable anlegen und die gewünschten Werte als Assoziation eintragen.
Michael

Danke Michael für den Tipp, komme aber nicht weiter. Muss ja dann noch ein Aktionskript dazu anlegen, aber meine Versuche scheitern:

Versuch 1 (wobei ich nicht weiß was bei „RequestAction“ hinkommt:

<?php

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

switch ($_IPS['VALUE']) {
    case 0:
        RequestAction("left");
        break;
    case 1:
        RequestAction("right");
        break;
    case 2:
        RequestAction("down");
        break;


usw.
}

oder muss ich nach diesem Schema gehen ( anstatt $i hier $_IPS['VALUE'] einsetzen):
https://www.php.net/manual/de/control-structures.switch.php

Anderseits geht das überhaupt so wenn die Werte oben nicht in der String Variable unter Wert stehen?

Z.B. beim Shelly steht ein JSON unter Wert:

Bei Instar steht „nichts“ unter Wert:

Es sind ja aber auch verschiedene Formate, das eine ist JSON und das andere RAW.

Hallo,
komme einfach nicht weiter. Habe jetzt folgendes gemacht:

-gewünschten Topic mit dem MQTT Explorer an Symcon übertragen
-Instanz/Variable erstellt aus dem MQTT Client Konfigurator

-Profil erstellt mit den Werten

-Profil der String Variable zugeordnet
-Aktionsskript der String Variable zugeordnet

<?php

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);


if($_IPS["SENDER"] == "WebFront") {


switch($_IPS['Variable']) {
		case 22269: //String Value Variable vom Topic
			switch ($_IPS["VALUE"]){
		        case 0:
		           	RequestAction(22269, "val", "left");
		        	break;
		        case 1:
		           	RequestAction(22269, "val", "right");
					break;
		        case 2:
		           	RequestAction(22269, "val", "down");
		        	break;
		        case 3:
		           	RequestAction(22269, "val", "up");
					break;                    
		        case 4:
		           	RequestAction(22269, "val", "stop");
		        	break;
		        case 5:
		           	RequestAction(22269, "val", "focusin");
					break;
		        case 6:
		           	RequestAction(22269, "val", "focusout");
		        	break;
		        case 7:
		           	RequestAction(22269, "val", "zoomout");
					break;
		        case 8:
		           	RequestAction(22269, "val", "zoomin");
		        	break;
		        case 9:
		           	RequestAction(22269, "val", "tour");
					break;                    
		        case 10:
		           	RequestAction(22269, "val", "hscan");
		        	break;
		        case 11:
		           	RequestAction(22269, "val", "vscan");
					break;                    
			}
			break;


      }

}

Bekomme immer die Meldung:

Variable is marked as read-only and cannot be changed

Das sind die passenden Befehle vom Instar Wiki:

{„val“:„left“}, {„val“:„right“}, {„val“:„down“}, {„val“:„up“}, {„val“:„stop“}, {„val“:„focusin“}, {„val“:„focusout“}, {„val“:„zoomout“}, {„val“:„zoomin“}, {„val“:„tour“}, {„val“:„hscan“}, {„val“:„vscan“}

Warum hast du ein Aktionsskript angelegt?
Das brauchst du nicht.
Und das geht auch nicht, weil RequestAction ruft ja wieder das Aktionsskript auf.
Ein SetValue auf eine Statusvariable war noch nie erlaubt (readonly).
Das Profil ist doch auch falsch?!
Wenn das topic …raw angelegt ist und eine String Variable ist, dann braucht es ein Profil wo die Rohwert ( z.b. {„val“:„left“}) als Assoziation auf den lesbaren wert zeigen (z.b. Links).
Michael

Ok…
Ich habe es jetzt im JSON Format angelegt, so zumindest mal im MQTT Explorer. Wenn ich es in RAW anlege sind die Befehle „left, right, stop usw.“.

Habe das Profil jetzt so abgeändert:

Wenn ich im Webfront schalte rührt sich nichts.

Und wenn du beim topic der Instanz das /raw weglässt?
Michael

In der Instanz ist kein raw.

image

Jetzt weiß ich nicht was ich genau gemacht habe, aber jetzt wird mir plötzlich eine Value Variable zusätzlich angezeigt und da das Profil hinterlegt und dann funktioniert es. Habe die schritte versucht zu wiederholen mit einem anderen Topic und da kommt nur wieder eine „val“ Variable.

Es scheint als würde ich da grundlegend was verkehrt zu machen. Habe mir wieder das Video angeschaut aus der Doku und das ist nichts anderes.

Ich glaube ich habe es gefunden, muss wohl in der Instanz auf String umstellen.

Die mqtt Instanzen können json decodieren, aber nicht automatisch versenden.
Ja, der Typ String ist korrekt. Dann wird das Json nicht zerlegt und du hast die ‚Value‘ Variable und kannst über diese beliebige Strings empfangen und versenden.
Das die Strings dann ein json enthalten, ist Symcon dann egal.
Michael

1 „Gefällt mir“

Danke dir Michael für die Hilfe.

Hätte aber noch eine Frage dazu. Kann ich mehrere Befehle aus verschiedene Instanzen zusammenführen über ein Skript? Das ich nicht über jeden Status eine Variable brauche.

Z. B diese hier:

…das die in einer Zeile stehen im Webfront.

Ja, du kannst im Script dann RequestAction (ID von height Variable, '{"val":"223"}'); benutzen und somit mehrere Befehle auf verschiedene Instanzen (Topics) ausführen.

Das lässt sich nicht vermeiden. Aber du musst die ja nicht im WebFront anzeigen. Da sein müssen sie aber, damit das RequestAction auf die Variable funktioniert.

Das wäre dann eine selbst angelegte Variable mit eigenen Profil und Aktionsskript. Dort kannst du dann die ganzen RequestAction auf die Variablen ausführen.
Michael

1 „Gefällt mir“

Moin Michael,
dein Post oben richtet sich ja für die Variablen bei den ich einen Befehl absetzen kann, das ist soweit klar. Wie mache ich das aber um die Werte der einzelnen Status Variablen in einer Reihe anzeigen zu lassen mit Text z.B.
Empfindlichkeit: 65 | Bereichs Höhe: 120 | Bereichs Breite: 200 | X-Achse: 65 | Y-Achse: 506

Habe mal verschiedene Dinge probiert, aber erfolglos.

u.a. hatte ich gedacht über GetValue und SetValue…