MQTT Werte schaltbar machen

Hallo, ich arbeite gerade an einer MQTT Klimaanlagensteuerung.

Ich kann z.B. ein on oder off an home/ac/cmnd/power senden um die Klimaanlage ein oder auszuschalten. Soweit so gut. Wie kann ich das ganze nun im Webfront steuerbar machen?

Mittels home/ac/cmnd/fanspeed kann ich dann die einzelnen Stufen wie low,high,medium und co abrufen. Wenn ich das ganze im Webfront verlinke kann ich lediglich die Werte manuell eingeben und absenden (das funktioniert auch).

Wie kann ich das ganze umsetzen?

Ich würde eine intensity (float oder int) Variable im Webfront nutzen und dann im Hintergrund mit einem Script auf eine Änderung triggern. Dort setzt du dann die beiden MQTT Variablen.

Hallo, ich hab mal versucht ein String Profil anzulegen. Z.b. für die Lüftergeschwindigkeit 0(Low), 1(Medium),2(High)

Wenn ich das der String Variable unterhalb des MQTT Device zuordne kann ich es sogar auswählen (In den Eigenschaften des MQTT Device) Jedoch erhalte ich folgende Fehlermeldung.

Was genau mache ich noch falsch? Ich habe mir ein Case Script bauen wollen.

Assoziationen für String-Variablen sollten nicht möglich sein. Das die Konsole dies aktuell zulässt ist ein Fehler und wird zeitnah korrigiert.

Wenn deine Werte sowieso numerisch kodiert sind, dann solltest du den Typen vielleicht als Integer einstellen. Der Typ ist an der Stelle Symcon-intern. Alle MQTT-Werte sind Strings und werden dann passend zum eingestellten Typen konvertiert, sofern möglich.

Ich habe es hinbekommen. Ich habe jeweils eine Variable (zum Schalten im Webfront) erstellt und lasse die mittels Actionscript dann die Commnds an das MQTT Device schicken.

Das ganze funktioniert aber leider nur ein eine Richtung. Wie kann ich es bewerkstelligen, dass die MQTT Variable (die sich eben auch ändert, wenn man das Gerät anderweitig bedient) dann auch wiederum den wert in die Steuervariable einträgt?

Hier z.B. das Actionscript für die Lüftergeschwindigkeitsvariable

<?php

if($IPS_SENDER == "WebFront")
{
    SetValue($IPS_VARIABLE, $IPS_VALUE);
}

switch($IPS_VALUE)
{
  case 0:
RequestAction(13620, "low");
break;

case 1:
RequestAction(13620, "medium");
break;

case 2:
RequestAction(13620, "high");
break;

}  
?>

13620 ist hier die Value unterhalb des MQTT Device.

Leider sind die Werte, welche von dem Klimagerät gesendet werden keine Boolean oder Integer Werte. Es handelt sich leider um String Werte.

Beispielsweise low,medium,high für die Lüfterstufen.

Wenn ich mich von unterwegs nicht vertippt habe, sollte es so funktionieren.
Wenn das Script unterhalb deiner Hilfsvariablen liegt.
Dann noch ein Ereignis anlegen, bei Aktualisierung von der MQTT String Variable, und als Ziel das Script.
Es ist dann AktionsSkript welches den Wert per MQTT versendet, als auch Script welches die Aktionsvariable nachführt, sobald der neue Wert per MQTT eintrifft.


<?php

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

{

switch($_IPS['VALUE'])

{

case 0:

RequestAction(13620, "low");

break;

case 1:

RequestAction(13620, "medium");

break;

case 2:

RequestAction(13620, "high");

break;

} 
}
if($_IPS['SENDER'] == "Variable")

{
$VarId=IPS_GetParent($_IPS['SELF']);

switch($_IPS['VALUE'])

{

case 'low':
$Value=0;
break;

case 'medium':
$Value=1;
break;

case 'high':
$Value=2;
break;
}
SetValue($VarId,$Value);
}
?>

Hallo Nall-Chan, ich habe die Änderungen mal eingefügt. Ich kann nun jedoch nicht mehr via Webfront schalten, weshalb weiß ich auch nicht genau. Die Werte lassen sich nicht ändern. Leider funktioniert auch der Rückweg nicht. Ich habe ein Ereignis (TYP Änderung) an die entsprechende MQTT Status Variable gehangen und als Ziel das Script gewählt. Ich kann in deinem Script, was so aussieht als müsste es eigentlich funktionieren jedoch keinen Fehler erkennen :frowning:

Korrektur!

Doch es funktioniert! Ich habe den Fehler dann anhand des Codes finden können. Es lag am Parent. Die Variable lag unterhalb vom Script, ich habe die nun das Script in die Variable gelegt und nun klappt es !

TOP ich danke dir!