Readings aus Terminal als Dummy Reading

Begonnen von rohlande, 05 November 2017, 17:58:01

Vorheriges Thema - Nächstes Thema

rohlande

Hallo Experten,

da ich via Dummy ergo DOIF Dienste auf meinem Server starte / stoppe / restart auslösen kann, würde ich auch gern den Status der Dienste als Readings in einen Dummy schreiben.
Also den Inhalt als würde ich im Terminal abfragen.
Kann mir jemand sagen wie ich so etwas evtl. lösen könnte? Denn es sollen ja auch nicht alle Infos zu einem Dienst welcher auf dem System läuft als Readings wiedergegeben werden.

DOIF
([SW_Mosquitto:state] eq "start")
({ system("sudo service mosquitto start ") })
DOELSEIF
([SW_Mosquitto:state] eq "stop")
({ system("sudo service mosquitto stop ") })
DOELSE
([SW_Mosquitto:state] eq "restart")
({ system("sudo service mosquitto restart ") })


Terminal Abfrage zum Status:
user@fhem:~$ sudo service fhem status
[sudo] Passwort für user:
● fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem; generated; vendor preset: enabled)
   Active: active (running) since Thu 2017-11-02 20:18:46 CET; 2 days ago
     Docs: man:systemd-sysv-generator(8)
  Process: 32408 ExecStop=/etc/init.d/fhem stop (code=exited, status=1/FAILURE)
  Process: 32414 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/fhem.service
           └─9525 /usr/bin/perl fhem.pl fhem.cfg
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

amenomade

Ich verstehe die Frage prinzipiell nicht. Wenn FHEM nicht läuft, kannst Du nichts in FHEM machen... Wenn FHEM läuft, kriegst Du dann evtl. in FHEM bestätigt, dass Fhem läuft... aber Sinn der Sache?

Wenn Du wissen willst, seit wann Fhem läuft, hast du das Kommando uptime https://fhem.de/commandref.html#uptime
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

rohlande

@amenomade: es geht nicht um den Dienst von Fhem.

Das ist nur ein Beispiel wie der Dienst im Terminal dargestellt ist wenn ich diesen anbfrage.
Es geht um andere Dienste. Diese möchte ich lediglich als Reading in einem Dummy wenn möglich darstellen.

Vg Denny
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

CoolTux


my $state = qx(sudo service fhem status);


Danach hast Du das was Du in der Konsole sonst siehst in $state stehen. Musst dann halt auswerten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DeeSPe

Zitat von: CoolTux am 06 November 2017, 12:01:42

my $state = qx(sudo service fhem status);


Danach hast Du das was Du in der Konsole sonst siehst in $state stehen. Musst dann halt auswerten.

Man könnte auch die jeweiligen init Skripte anpassen und bei allen Parametern noch ein "setreading" auf einen entsprechenden dummy in FHEM machen.
Als Beispiel könnte man Homebridge aus dem Wiki zu Rate ziehen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Otto123

Hi Denny,

ich mache das "anderherum" Ich starte einfach in fhem ein bash Script
"<absoluterName mit Pfad zum Script>"
Darin mache ich sowas #!/bin/sh
# Parameter Übergabe
host=$1
name=$2
event=$3
service=<Dienst Name>
# Abfrage und Verzweigung
case "$event" in
    start|stop)
   # Sicherstellen das nur zulässige Events verwendet werden
   sudo systemctl $event $service
   sleep 2
          status=$(systemctl is-active $service)
   # Web Kommando an FHEM absetzen
   curl http://$host:8083/fhem?cmd=set%20$name%20$status > /dev/null
    ;;

    *)
      exit 1
    ;;

esac

exit 0


Damit das wirklich geht musst Du dies beachten https://wiki.fhem.de/wiki/CsrfToken-HowTo
Quelle
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Thorsten Pferdekaemper

Hi,
ok, jetzt habe ich das alles schon geschrieben während noch drei Antworten kamen. Ich denke aber, dass das zusammenpasst.

1. Möglichkeit: FHEM ruft auf
Z.B. mit einem at wird regelmäßig eine Routine (z.B. aus 99_myUtils.pm) aufgerufen, die das Betriebssystem-Kommando in Backticks aufruft, also in etwa (qx und Backticks dürften dasselbe machen):

my $output = `service fhem status`;

Dann per RegEx oder wie auch immer den gewünschten Teil rausfiltern und z.B. mit

fhem("setreading <mydevice> <myreading> <myvalue>");

in das gewünschte Reading schreiben.

2. Möglichkeit: FHEM wird aufgerufen
Du schreibst Dir ein Programm außerhalb von FHEM, das z.B. per cron regelmäßig aufgerufen wird. Dieses Programm prüft, was auch immer Du prüfen willst und macht dann sowas:

perl fhem.pl 127.0.0.1:7072 "setreading <mydevice> <myreading> <myvalue>"


Wenn das Kommando schnell abgearbeitet wird, dann ist die erste Möglichkeit ganz gut. Ansonsten sollte man die zweite nehmen, da sonst FHEM blockiert. Natürlich kann man da dann auch Blocking.pm benutzen, aber das ist dann IMHO schon wieder schwieriger.

Gruß,
   Thorsten
FUIP

CoolTux

#7
Zitat von: Thorsten Pferdekaemper am 06 November 2017, 12:08:43
1. Möglichkeit: FHEM ruft auf
Z.B. mit einem at wird regelmäßig eine Routine (z.B. aus 99_myUtils.pm) aufgerufen, die das Betriebssystem-Kommando in Backticks aufruft, also in etwa (qx und Backticks dürften dasselbe machen):

my $output = `service fhem status`;


Thorsten, hast Du das mal getestet. Ich bilde mir ein das Du dann nur eine 1 bekommst als Rückgabe.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rohlande

Hui Jungs,

da habt Ihr mir jetzt Hausaufgaben mitgegeben. :-) Ich werde Eure Ideen anwenden und versuchen meinen Programmier-Technischen Horizont zu erweitern.
Der Hintergrund des ganzen ist: Ich bin ein absoluter Freund vom Telegram <--> Fhem ChatBot. Das finde ich besonders in Bezug auf "one Touch" eine echt super geniale Lösung für meine Bedürfnisse.

Da ich aber auch ab und z interessiert, was mein System so treibt, möchte ich das halt auch in Fhem haben.
Ich merke eigentlich täglich, dass mir nie die Ideen ausgehen wenn es um Fhem geht.  ;D

Vielen Dank an EUCH Zusammen.
Ich melde mich sobald ich eine Umsetzung habe und beschreibe die kurz.

Vg Denny
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

Thorsten Pferdekaemper

Zitat von: CoolTux am 06 November 2017, 12:52:44
Thorsten, hast Du das mal getestet. Ich bilde mir ein das Du dann nur eine 1 bekommst als Rückgabe.
Ja, das habe ich ausprobiert. Außerdem steht das in perldoc:
Zitat
•qx/STRING/ 
•`STRING`
A string which is (possibly) interpolated and then executed as a system command with /bin/sh or its equivalent. Shell wildcards, pipes, and redirections will be honored. The collected standard output of the command is returned; standard error is unaffected.
D.h. qx ist ein Synonym zu den Backticks. Was Du meinst ist vielleicht system(). Das gibt den "exit status" zurück.
Gruß,
   Thorsten 
FUIP

rohlande

Hallo  Experten,
@Thorsten Pferdekaemper: Gesundes neues 2018 noch. So habe den Tipp mit Nr.2 in Form eines Bash Script versucht.
Bekomme auch einen Output in Fhem und zusätzlich in einem .log auf dem System selbst.
Was mich daran stört, ist die Tatsache das ich in Fhem nicht den gesamten Output aus dem Terminal erhalte, sondern nur die 1 Zeile. Siehe Screenshots vom Terminal ergo FHEM Reading.
Im Logfile welches ich parallel dazu am System erstelle, sind auch alle Infos drin.

Könnt Ihr mir sagen woran das liegen kann??

Vg Denny
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

Thorsten Pferdekaemper

Hi,
das weiß ich gerade auch nicht. Vielleicht kommen die anderen Zeilen über stderr und nicht über stdout. ...oder setreading kann die Zeilenumbrüche nicht.
Zeig mal Dein komplettes Coding.
Gruß,
   Thorsten
FUIP