FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: zap am 11 Oktober 2015, 12:58:44

Titel: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: zap am 11 Oktober 2015, 12:58:44
Hier mal ein kleines Script, mit dem man FHEM Befehle aus einer Homematic CCU aufrufen kann:


#!/bin/sh

FHEM_SERVER="myfhemserver"
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


Das Script benötigt auf der CCU den Befehl netcat (nc). Die notwendigen Binaries (NetCat / nc) gibt es hier http://homematic-forum.de/forum/viewtopic.php?f=26&t=13299. Diese sollte irgendwo unterhalb von /etc/config/addons abgelegt werden (genau wie das Script selbst). Am besten ein Unterverzeichnis anlegen:


mkdir /etc/config/addons/scripts


Wenn das Script nun z.B. fhemcmd.sh heißt, sollte zunächst das Ausführungsflag gesetzt werden:


cd /etc/config/addons/scripts
chmod +x nc
chmod +x fhemcmd.sh


Zum Ausführen des Scripts aus einem CCU Programm empfiehlt sich die Verwendung eines CUxD Exec Device. Dieses wird (wenn CUxD auf der CCU installiert ist) wie folgt angelegt:


Das CUxD Exec-Device kann nun in einem Homematic Script wie folgt verwendet werden, um einen FHEM-Befehl auszuführen:


var fhemcmd = dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC");
fhemcmd.State('/etc/config/addons/scripts/fhemcmd.sh "set mydev mycmd value"');


Die Adresse des CUxD Devices muss entsprechend dem weiter oben angelegten Device angepasst werden.
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Sven4597 am 20 Januar 2021, 18:23:37
Hallo,

ich habe einen Script angelegt mit dem Namen fhemcmd.shmit dem Inhalt
Zitat#!/bin/sh

FHEM_SERVER="192.168.178.40"
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

unter /etc/config/addons/scripts sowie die nc und socat

Was ich nicht verstanden habe ist:
ZitatWenn das Script nun z.B. fhemcmd.sh heißt, sollte zunächst das Ausführungsflag gesetzt werden:
cd /etc/config/addons/scripts
chmod +x nc
chmod +x fhemcmd.sh
Wo muss das gespeichert werden?

CUxD Exec Device habe ich auch angelegt

Zitatvar fhemcmd = dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC");
fhemcmd.State('/etc/config/addons/scripts/fhemcmd.sh "set Buderus2107_USB hk2_betriebsart nacht"');

Grüße Sven

Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Wernieman am 20 Januar 2021, 18:32:24
Bei Deinem Einrichtugnsproblem kann ich Dir nicht helfen, ABER ...FHEM_PORT
Du hast in "FHEM_SERVER" einen Port definiert (8083), der dort nicht hingehört. Du hast schließlich auch die Variable "FHEM_PORT"
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Sven4597 am 21 Januar 2021, 14:44:22
Hallo,

ich habe einen Script angelegt mit dem Namen fhemcmd.sh mit dem Inhalt.
Zitat#!/bin/sh

FHEM_SERVER="192.168.178.40"
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

unter /etc/config/addons/scripts den Scriot fhemcmd.sh sowie die nc und socat

unter /etc/config/addons/scripts den script fhem.sh
Zitat
cd /etc/config/addons/scripts
chmod +x nc
chmod +x fhemcmd.sh

CUxD Exec Device habe ich auch angelegt

Zitatvar fhemcmd = dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC");
fhemcmd.State('/etc/config/addons/scripts/fhemcmd.sh "set Buderus2107_USB hk2_betriebsart nacht"');

in CUxD bekomme ich im Log die Meldung
ZitatJan 21 14:29:32 homematic-ccu3 daemon.info cuxd[30166]: system(/etc/config/addons/scripts/fhemcmd.sh "set Buderus2107_USB hk2_betriebsart nacht") exit(126) 0s

Der Staus ändert sich aber nicht in FHEM
Muss ich in FHEM noch was freischalten?
Passt der Port 7072 weil zum einloggen habe ich den Port 8083

Grüße Sven

Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Otto123 am 21 Januar 2021, 14:57:41
Hallo Sven,

hast Du denn Telnet Port 7072 definiert? Standard ist das ja nicht mehr bei FHEM ;)
Wenn also list telnetPort nichts ergibt machst Du bitte
define telnetPort telnet 7072 global


Gruß Otto
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Sven4597 am 21 Januar 2021, 15:10:14
Zitat von: Otto123 am 21 Januar 2021, 14:57:41
Hallo Sven,

hast Du denn Telnet Port 7072 definiert? Standard ist das ja nicht mehr bei FHEM ;)
Wenn also list telnetPort nichts ergibt machst Du bitte
define telnetPort telnet 7072 global


Gruß Otto

Den Port habe ich eingerichtet wie du geschrieben hast.
Leider geht es immer noch nicht.
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Otto123 am 21 Januar 2021, 15:36:55
Kannst Du von einer anderen Maschine oder dem FHEM Server selbst im Terminal mal die Funktion testen?
echo -e "set Buderus2107_USB hk2_betriebsart nacht\nquit\n" | nc 192.168.178.40 7072

nc ist normal vorhanden
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Sven4597 am 21 Januar 2021, 15:44:19
Zitat von: Otto123 am 21 Januar 2021, 15:36:55
Kannst Du von einer anderen Maschine oder dem FHEM Server selbst im Terminal mal die Funktion testen?
echo -e "set Buderus2107_USB hk2_betriebsart nacht\nquit\n" | nc 192.168.178.40 7072

nc ist normal vorhanden

da bekomme ich ein Bye...
mymachine:~ $ echo -e "set Buderus2107_USB hk2_betriebsart nacht\nquit\n" | nc 192.168.178.40 7072
Bye...

Habe noch eine andere Möglichkeit gefunden spricht da was dagegen?
Zitatstring tmpA= "http://192.168.178.40:8083/fhem?cmd=set Buderus2107_USB hk2_betriebsart nacht";
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("wget -q -O - '"#tmpA#"'");
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Otto123 am 21 Januar 2021, 15:51:14
Zitatda bekomme ich ein Bye...
Und in FHEM passiert nix? Also der Befehl set Buderus2107_USB hk2_betriebsart nacht wir nicht ausgeführt? Stimmt der denn so? In der FHEM Befehlszeile getestet?
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Wernieman am 21 Januar 2021, 17:07:38
Funktioniet die befehlszeile überhaupt in FHEM? Also in der Weboberfläche mal "set Buderus2107_USB hk2_betriebsart nacht" eingegeben?
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Sven4597 am 21 Januar 2021, 17:17:25
Zitat von: Wernieman am 21 Januar 2021, 17:07:38
Funktioniet die befehlszeile überhaupt in FHEM? Also in der Weboberfläche mal "set Buderus2107_USB hk2_betriebsart nacht" eingegeben?

ja das geht
Titel: Antw:FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Wernieman am 21 Januar 2021, 17:40:42
Ich hatte Dir "gaaaans oben" etwas bezüglich der Portangaben in Deinem Script geschrieben .. gelesen?
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 20 März 2024, 09:39:24
Ich 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.

Habe auch schon versucht den echo Befehl direkt in dem cuxD Device:1 zu hinterlegen und von dort aus auszuführen. Selbe Ergebnis.

Hat hier vieleicht jemand schon Erfahrung mit diesem Fehler gehabt? Habe auchschon im Homematic Forum eine Anfrage platziert, jedoch keine Antwort erhalten.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 20 März 2024, 09:50:06
Hintergrundinformation zu meinem Anwendungsfall:
Ich habe eine Alarmanlage über Homematic->CCU3(pivccu)->Fhem realisiert. Funktioniert für mich soweit ganz gut.
Jetzt möchte ich beim Auslösen eines Alarms eine Nachricht an Telegramm Kontakte versenden. Das würde ich dann in Fhem machen. Ist das der richtige Weg, dieses über das cuxD Device zu machen, oder gibt es da bessere Lösungen? Ich hätte das lieber über ein notify in Fhem selber gelöst, weiß jetzt aber nicht, wie ich Fhem mitteile, dass der Alarm in der CCU3 ausgelöst wurde.
Ich sehe aber bestimmt den Wald vor lauter Bäumen nicht
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: JoWiemann am 20 März 2024, 10:19:25
Zitat von: jack85 am 20 März 2024, 09:50:06Ich sehe aber bestimmt den Wald vor lauter Bäumen nicht

Hallo,

ich habe mal eine Suchmaschine den Wald lichten lassen. War gar nicht so schwer.

https://digitaldad.de/2020/09/07/so-sendet-deine-ccu-dir-telegram-nachrichten-aufs-smartphone/

Grüße Jörg
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag 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.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 20 März 2024, 11:28:25
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.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag 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.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 20 März 2024, 11:40:15
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.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 20 März 2024, 11:42:28
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.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: zap am 20 März 2024, 16:21:35
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.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 20 März 2024, 19:34:40
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"');
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 20 März 2024, 20:26:23
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]
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: zap am 21 März 2024, 13:06:36
Habe ich noch nie gesehen. Ich stelle das nochmal bei mir nach ...
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: zap am 21 März 2024, 17:13:19
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.
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: jack85 am 21 März 2024, 20:04:53
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*
Titel: Aw: FHEM Befehl von Homematic CCU aufrufen
Beitrag von: Wernieman am 21 März 2024, 22:53:35
Wobei das dann aber eventuell nicht persistent ist, d.h. z.B. ein docker compose down würde alles zunichtemachen ...