FHEM Befehl von Homematic CCU aufrufen

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

Vorheriges Thema - Nächstes Thema

zap

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:


  • In der CCU Weboberfläche den Menübefehl "Einstellungen / Systemsteuerung" aufrufen
  • In der folgenden Ansicht den Button "CUx Daemon" anklicken
  • Auf der CUxD Config-Seite rechts oben den Button "Geräte" anklicken
  • CUxD Gerätetyp = "28 System", Funktion = "Exec", Name und Icon nach Belieben
  • Button "Gerät auf CCU erzeugen" anklick

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.
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

Sven4597

#1
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


Wernieman

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"
- 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

Sven4597

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


Otto123

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
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

Sven4597

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.

Otto123

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
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

Sven4597

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#"'");

Otto123

#8
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?
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

Wernieman

Funktioniet die befehlszeile überhaupt in FHEM? Also in der Weboberfläche mal "set Buderus2107_USB hk2_betriebsart nacht" eingegeben?
- 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

Sven4597

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

Wernieman

Ich hatte Dir "gaaaans oben" etwas bezüglich der Portangaben in Deinem Script geschrieben .. gelesen?
- 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

jack85

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.
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

jack85

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
RaspberryPi 3 - CCU3 -  RPI-RF-MOD - Homematic - Shelly

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM