FHEM Befehl von Homematic CCU aufrufen

Begonnen von zap, 11 Oktober 2015, 12:58:44

Vorheriges Thema - Nächstes Thema

Otto123

Zitat von: jack85 am 20 März 2024, 09:39:24Ich wärme dieses Thema noch mal auf.
Ich finde Du hast die letzten Beiträge mit der eigentlichen Anleitung ziemlich durcheinandergewürfelt.
Kannst Du denn mit der Anleitung im ersten Beitrag irgendeine Reaktion in FHEM auslösen? Vielleicht nicht gleich Telegramm sondern einfach ein set Lampe on ?

Ob der 9 Jahre alte Beitrag immer noch aktuell ist, weiß ich allerdings auch nicht. Ich meine mit dem HMCCU Modul (was in dieser Zeit vom TE kräftig entwickelt wurde) kannst Du dies auch komplett in FHEM abbilden.
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

jack85

Hallo Jörg,
danke für deine Antwort. Da ich Telegramm sowieso in Fhem schon eingerichtet habe und auch nutze, würde ich diesen Step auch gerne dort lassen. Zumal auch noch andere Aktionen bei Alarm ausgelöst werden, wie Rollladen hochfahren, Licht an usw. Ich muss Fhem nur mitteilen, dass Alarm ausgelöst wurde. Deswegen fand ich diese Anleitung hier ganz gut, funktioniert halt nicht.
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

zap

Zitat von: jack85 am 20 März 2024, 09:39:24Ich wärme dieses Thema noch mal auf.
Habe genau nach dieser Anleitung alles eingerichtet, bekomme aber immer einen exit code(127), sobald ich das auf der ccu3 ausführen will.

ZitatMar 19 20:13:16 ccu3-webui daemon.info cuxd[2594]: system(echo -e 'set TelegramBot _msg test\nquit\n' | /etc/config/addons/scripts/nc 192.168.178.61 7072) exit(127) 0s

Führe ich den diesen echo Befehl ohne das fhemcmd.sh script direkt aufder console aus, klappt es ohne Probleme. Sobald ich es aber im cuxD Device (System 28) mittels dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC") ausführe, bekomme ich immer den code 127. 

Anscheinend doch nicht genauso umgesetzt wie im 1. Beitrag. Warum verwendest Du einfache statt doppelter Hochkommas? Das verhindert vermutlich die Interpretation von \n als Steuerzeichen.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

jack85

Zitat von: Otto123 am 20 März 2024, 10:27:45
Zitat von: jack85 am 20 März 2024, 09:39:24Ich wärme dieses Thema noch mal auf.
Ich finde Du hast die letzten Beiträge mit der eigentlichen Anleitung ziemlich durcheinandergewürfelt.
Kannst Du denn mit der Anleitung im ersten Beitrag irgendeine Reaktion in FHEM auslösen? Vielleicht nicht gleich Telegramm sondern einfach ein set Lampe on ?

Ob der 9 Jahre alte Beitrag immer noch aktuell ist, weiß ich allerdings auch nicht. Ich meine mit dem HMCCU Modul (was in dieser Zeit vom TE kräftig entwickelt wurde) kannst Du dies auch komplett in FHEM abbilden.

Hallo Otto,

ja, ich habe natürlich auch einfache Befehle, wie "set Lampe on" ausprobiert. Das gleiche Ergebnis: exit code(127)
Bei diesem Fehlercode schreiben etliche User, dass es sich um Syntaxfehler handelt, bzw. Pfade nicht erreichbar sind. Deswegen auch der Gegentest direkt im Terminal. Dort funktioniert es halt. Muss dazu sagen, dass ich mich im Terminal direkt auf dem Raspberry befinde, aufdem Fhem installiert ist. Die CCU3 läuft ja im pivccu Container, wo dann auch noch der CuxD Deamon installiert ist. Nicht dass die CUXD wegen irgendwelchen Firewall-Regeln oder Ports diese Anfragen blockiert.
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

jack85

Zitat von: zap am 20 März 2024, 11:36:14
Zitat von: jack85 am 20 März 2024, 09:39:24Ich wärme dieses Thema noch mal auf.
Habe genau nach dieser Anleitung alles eingerichtet, bekomme aber immer einen exit code(127), sobald ich das auf der ccu3 ausführen will.

ZitatMar 19 20:13:16 ccu3-webui daemon.info cuxd[2594]: system(echo -e 'set TelegramBot _msg test\nquit\n' | /etc/config/addons/scripts/nc 192.168.178.61 7072) exit(127) 0s

Führe ich den diesen echo Befehl ohne das fhemcmd.sh script direkt aufder console aus, klappt es ohne Probleme. Sobald ich es aber im cuxD Device (System 28) mittels dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC") ausführe, bekomme ich immer den code 127. 

Anscheinend doch nicht genauso umgesetzt wie im 1. Beitrag. Warum verwendest Du einfache statt doppelter Hochkommas? Das verhindert vermutlich die Interpretation von \n als Steuerzeichen.

Habe das mit einfachen und doppelten Hochkommas getestet. Leider das gleiche Ergebnis.
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

zap

#20
Also das funktioniert ganz sicher nicht:

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC")

Wenn, dann

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State('Befehl')

Und nicht vergessen: Der gesamte Befehl muß in einfachen Hochkomma eingeschlossen sein.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

jack85

Damit wir uns nicht missverstehen, ;D  Ich habe alles nach der Anleitung wie oben beschrieben eingerichtet:

Im Verzeichniss /etc/config/addons/scripts folgende Dateien hinterlegt:
ls -l
Zitat-rwxr-xr-x 1   215    Mar 19    18:31    fhemcmd.sh
-rwxr-xr-x 1    43337    May 21  2013    nc
-rwx--x--x 1   294908    May 24  2013    socat


cat fhemcmd.sh
Zitat#!/bin/sh

FHEM_SERVER="192.168.178.61"
FHEM_PORT=7072
NCPATH="/etc/config/addons/scripts"

if [ $# -ne 1 ]; then
   echo "Usage: fhem.sh Command"
   exit 1
fi

echo -e "$1\nquit\n" | $NCPATH/nc $FHEM_SERVER $FHEM_PORT

Im Skript in der CCU3 folgendes hinterlegt:
Zitatvar fhemcmd = dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC");
fhemcmd.State('/etc/config/addons/scripts/fhemcmd.sh "set TelegramBot _msg test"');
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

jack85

Ich sehe grade, ich kriege einen Error Log Eintrag im cuxD Deamon, wenn ich ich das Scrippt in der CCU3 speichere:
ZitatMar 20 20:23:30 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: system.SetSessionVar("sessionCTV", "true"); [ExecError():iseESPexec.cpp:12907]
Mar 20 20:23:41 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: system.SetSessionVar("sessionCTV", "true"); [ExecError():iseESPexec.cpp:12907]
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

zap

Habe ich noch nie gesehen. Ich stelle das nochmal bei mir nach ...
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

zap

#24
Das funktioniert bei mir, sowohl einfache als auch komplizierte Variante:

Komplizierte Variante:

string chnName = "system_exec:1";
string dpName = "CMD_EXEC";
string fhem = "/usr/local/scripts/fhem.sh 'set HMIP_PS_000213C9909359_2 on'";
object chnObj = channels.Get(chnName);
if(chnObj) {
   var dp = chnObj.DPByHssDP(dpName);
   if(dp) {
      WriteLine("Executing command " # fhem # " on " # chnName # "." # dpName);
      dp.State(fhem);
   }
   else {
      WriteLine("Datapoint " # dpName # " not found");
   }
}
else {
   WriteLine("Channel " # chnName # " not found");
}

Einfache Variante (in etwa Deine Version):

var fhemcmd = dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC");
if(fhemcmd) {
   fhemcmd.State('/usr/local/scripts/fhem.sh "set HMIP_PS_000213C9909359_2 off"');
}
else {
   WriteLine("CMD_EXEC not found");
}

Und dieser fhem.sh:

#!/bin/sh

FHEM_SERVER="xxx"
FHEM_PORT=7072
NC_PATH="/usr/bin"

if [ $# -ne 1 ]; then
    echo "Usage: fhem.sh Command" >/tmp/fhem.log
    exit 1
fi

echo -e "$1\nquit\n" >/tmp/fhem.log

echo -e "$1\nquit\n" | $NC_PATH/nc $FHEM_SERVER $FHEM_PORT

Kannst Du nochmal prüfen, dass alle Dateien (fhemcmd.sh, nc) an den angegebenen Orten vorhanden und ausführbar sind? Die Flags bitte mal auf 755 setzen, z.B. "chmod 755 nc".
Haben auch die übergeordneten Verzeichnisse die "x" Flags gesetzt?

Returncode 127 besagt, dass ein Befehl/eine Datei nicht gefunden wurde oder nicht ausführbar ist.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

jack85

Hallo zap und an alle anderen involvierten,

riesen riesen riesen Sorry von mir an dieser Stelle. Ich hatte einen krassen Denkfehler.

Habe diese Anleitung hier wie beschrieben ausgeführt. Also alle Dateien unter den angegebenen Pfaden hinterlegt. Nur dabei gar nicht dran gedacht, das ich mich auf dem Raspberry befinde und nicht auf der CCU. Da diese in einem Container mit einer eigenen IP läuft, musste ich erstmal ssh auf der ccu aktivieren, mich dahin verbinden und dort alles nach dieser Anleitung durchführen. Dann funktioniert es halt auch auf Anhieb.

Das ist mir jetzt mega peinlich *schäm*
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

Wernieman

Wobei das dann aber eventuell nicht persistent ist, d.h. z.B. ein docker compose down würde alles zunichtemachen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html