Status eines Dummys kann nicht mehr gesetzt werden

Begonnen von Pati_Alpha, 28 Mai 2020, 22:59:21

Vorheriges Thema - Nächstes Thema

Pati_Alpha

Hey,

ich habe für meine Homebridges folgende Dummys:
defmod Homebridge01 dummy
attr Homebridge01 alias Homebridge 1
attr Homebridge01 cmdIcon restart:rc_REPEAT stop:rc_STOP status:rc_INFO start:rc_PLAY
attr Homebridge01 devStateIcon running:rc_dot@green:stop stopped:rc_dot@red:start stopping:audio_stop .*starting:audio_repeat
attr Homebridge01 group Homebridges
attr Homebridge01 icon it_router
attr Homebridge01 room Steuerungstechnik
attr Homebridge01 setList start:noArg stop:noArg restart:noArg status:noArg
attr Homebridge01 userReadings status:(start|stop|restart|status) {\
  my $cmd = ReadingsVal($NAME,"state","");;\
  my $hb = $NAME;;\
  my @qx = `ssh 10.0.0.123 -l pi 'sudo systemctl $cmd homebridge01'`;;\
  my $set;;\
  if ($cmd eq "status" && @qx)\
  {\
    my $s = $qx[2];;\
    chomp $s;;\
    $s =~ s/[\r\n\t;;]/ /g;;\
    $set = "status $s";;\
    if ($s =~ /running|active/)\
    {\
      $set .= ";;setreading $hb state running";;\
    }\
    elsif ($s =~ /failed|stopped/)\
    {\
      $set .= ";;setreading $hb state stopped";;\
    }\
  }\
  elsif ($cmd eq "start" && !@qx)\
  {\
    $set = "state starting;;sleep 1;;set $hb status";;\
  }\
  elsif ($cmd eq "stop" && !@qx)\
  {\
    $set = "state stopping;;sleep 1;;set $hb status";;\
  }\
  elsif ($cmd eq "restart" && !@qx)\
  {\
    $set = "state restarting;;sleep 1;;set $hb status";;\
  }\
  elsif (@qx)\
  {\
    my $e = join " - ",@qx;;\
    chomp $e;;\
    $e =~ s/[\r\n\t;;]/ /g;;\
    $set = "error $e";;\
  }\
  fhem "setreading $hb $set" if ($set);;\
  return;;\
}
attr Homebridge01 webCmd start:restart:stop:status


Bisher hat das Ding dann nach dem restart oder status Befehl zB ein grünes Icon in den Status gesetzt.
Jetzt steht im Status nur noch "status" und im Log steht folgendes:
2020.05.28 22:55:16 1: 'setreading Homebridge01 status    Active: active (running) since Thu 2020-05-28 22:55:15 CEST  1s ago' called form userReadings is prohibited

Das scheint mir irgendwie eine neue Einschränkung in FHEM zu sein?
Kann ich das irgendwie umgehen?

Der Befehl wird aber noch ausgeführt!

Vielen Dank euch! :)

Grüße
Patrick

betateilchen

Zitat von: Pati_Alpha am 28 Mai 2020, 22:59:21
Das scheint mir irgendwie eine neue Einschränkung in FHEM zu sein?

Genau so ist es. Die Änderung wurde aus gegebenem Anlass im April eingebaut.

https://forum.fhem.de/index.php/topic,110391.0.html

Zitat von: Pati_Alpha am 28 Mai 2020, 22:59:21
Kann ich das irgendwie umgehen?

Ja. Indem Du darüber nachdenkst, ob Dein bisheriges Vorgehen tatsächlich sinnvoll ist, oder ob es nicht logischere Wege gibt, die readings zu setzen, ohne dies aus einem vom reading selbst ausgelösten event zu tun.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Pati_Alpha

Ich hab den Code selbst aus dem Forum. Habt ihr Tipps, wie ich das umbauen kann? Evtl. in ein anderes Reading schreiben und das dann im webCmd anzeigen lassen?

rudolfkoenig

Wenn ich es richtig verstehe: der Konstrukt reagiert auf eine Statusaenderung eines dummies in FHEM, loest dann per SSH ein Befehl aus, und setzt den Status des gleichen dummies je nach Ergebnis des Befehls.

my @qx = `ssh 10.0.0.123 -l pi 'sudo systemctl $cmd homebridge01'`
Das blockiert FHEM fuer eine (je nach Umstaenden) mehr oder minder lange Zeit.

Ich wuerde per notify ein Shellskript aufrufen:
define hb_ntfy1 Homebridge01:(start|stop|restart|status) "hb_script.sh"

Per "" gestartete Befehle werden im Hintergrund gestartet, mit STDIN/STDOUT nach fhem.log umgeleitet.

hb_skript.sh fuehrt  das o.g. ssh aus, und teilt das Ergebnis FHEM per
perl fhem.pl localhost "trigger Homebridge01 result XXX"
mit, was man in FHEM per userreading umformen, und per stateFormat anzeigen lassen kann.

Pati_Alpha

Hey Rudolf,

sieht nach einer guten Idee aus! Ich werd das mal ausprobieren - und das Ergebnis bei Erfolg hier für die Nachwelt teilen. ;)

Danke dir!

Pati_Alpha


MadMax-FHEM

Eventuell ist auch das eine Lösung: https://forum.fhem.de/index.php/topic,79952.msg719659.html#msg719659

Ich habe es damals (gut musste etwas anpassen, weil noch initd-Script [wie hier!?]) für alexa-fhem (ähnliche/gleiche Code-Basis laut Andre [justme1968]) genutzt.
Ging sehr gut!

Neuerdings übernimmt das Starten/Stoppen etc. ja das Alexa-Modul :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Pati_Alpha

Haha, wie geil: genau darauf bin ich auch grade gestoßen, als ich nachschauen wollte, wie man das von mir vorher verlinkte auf Systemd statt init.d umbastelt!

Getestet: läuft! Einzeiler! Geil!! :) Danke!

MadMax-FHEM

Na dann kannst du ja ein [gelöst] vor den Thread knallen...
...und weiter machen...

Viel Spaß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)