Hallo allerseits!
Ich hänge und würde mich freuen wenn Ihr mir helfen könntet!
Mein neuer Staubsaugerroboter (VR200) kann nicht nur On und Off, sondern startCleaning (normales Vollprogramm), oder startSpot (nur ein kleines Feld). Wenn er dann saugt, kennt er z.B. sendToBase, oder pause.
Nun suche ich einen Weg, wie ich immer nur mit 2 webCmd Anzeigen zurecht komme, die dynamisch entweder Full und Spot, oder Pause und Dock anzeigen. Je nach dem ob das Reading des Roboters "stateId" "2" oder etwas anderes ist.
Aber vielleicht ist auch webCmd das falsche Kommando dafür?
Hier mein alter stand, der aber keine Dynamic beinhaltet und daher alle 4 webCmds immer gleichzeitig anzeigt, was ich gerne ändern möchte...
devStateIcon Idle:Botvac_VR200@black Unknown:Botvac_VR200@red House.Cleaning:Botvac_VR200@red .*:noIcon@red
eventMap /startCleaning Eco:Start/pause:Pause/sendToBase:Dock/startSpot:Spot/
webCmd Start:Spot:Pause:Dock
webCmd ist ein Attribut.
Du musst ein Notify auf die Statusänderung machen und dort dann 'attr SaugerName webCmd Start:Spot' bzw. 'attr SaugerName webCmd Pause:Dock' "ausführen"...
Beispiel:
define nChangeWebCmd notify SaugerName:Cleaning attr attr SaugerName webCmd Pause:Dock
Nicht copy&paste, sondern nur zur Erläuterung...
Allerdings wird dir dann immer ein ? bei Save Config angezeigt und die nicht gespeicherte Einstellung bei webCmd geht nach einem Neustart verloren...
Was willst du denn eigentluch erreichen?
Gruß, Joachim
Hallo Joachim!
Ich nutze meist ein iPhone um fhem zu steuern. Auf dem schmalen Bildschirm kann ich keine 4 webCmd anzeigen, zumindest nicht schön. Da ich Pause/Dock ohnehin nicht brauche wenn der Roboter steht, würde ich die Option gerne ausblenden. So spare ich Platz und finde es auch "intelligenter"...
Jedes mal das webCmd Attribut umzuschießen ist tatsächlich eine Idee, auf die ich nicht gekommen wäre. Danke!
Einen "eleganteren" Weg, à la valueFormat im ReadingsGroup (in dem ich auch Perl nutzen kann) gibt es hier nicht, oder?
Doch in ReadingsGroup geht sowas.
Ich habe etwas ähnliches bzgl. Heizungsthermostate.
Ich poste mal was ich habe, vielleicht kannst du es ja brauchen:
sub my_SetHeatingModeIcon($)
{
my ($Device) = @_;
my $Icon = "%sani_heating_automatic\@black%set $Device controlMode manual";
my $Reading = ReadingsVal($Device, "controlMode", "undef");
if($Reading eq "manual" || $Reading eq "set_manual")
{$Icon = "%sani_heating_manual\@black%set $Device controlMode auto"}
elsif($Reading eq "party" || $Reading eq "set_party")
{$Icon = "%sani_heating_calendar\@black%set $Device controlMode auto"}
elsif($Reading eq "auto" || $Reading eq "set_auto")
{$Icon = "%sani_heating_automatic\@black%set $Device controlMode manual"}
else
{$Icon = "message_attention\@red"}
# Log3(undef, 1, "my_SetHeatingModeIcon Device: $Device Reading: $Reading return: $Icon");
return $Icon;
}
define rgClimateStatus readingsGroup <Raum>,<Ist>,<Soll>,<>,<>,<Luft>,<Taupunkt>,<> NAME=Thermometer_Heizung_T1:temperature,temperature@Thermometer_Heizung_T2,<>,<>,<>,<>,<> NAME=Aussenthermometer:temperature,<>,<>,<>,humidity,dewpoint,<> NAME=Wand.*_Climate:measured-temp,desired-temp,<{my_HeatingUpDown($DEVICE,"up")}@desired-temp>,<{my_HeatingUpDown($DEVICE,"down")}@desired-temp>,humidity,dewpoint,<{my_SetHeatingModeIcon($DEVICE)}@controlMode>
Abhängig vom aktuellen Zustand der Heizung (manuell/automatik) wird das entsprechende Icon und der Befehl in den anderen Modus angezeigt...
Gruß, Joachim
OK, Danke Jochen!
Dann muss ich wohl entweder auf ReadingsGroup umsteigen (was ich eigentlich nicht wollte, aber vielen Dank für deinen Code, damit kann ich mich heran wagen...), oder deinen 1. Vorschlag nutzen.
Bitte gerne!
Viel Erfolg!
Gruß, Joachim