Ein fröhliches Mo-hoin!
Boah, ist FHEM spannend!
Ich bin begeisteter Newbie und bräuchte allerdings mal ein wenig Starthilfe.
FHEM ist aktuell und läuft super auf meinem Pi3. Pushover läuft und mit "set Hellpush msg Nachricht" kann ich mir über die Web-Befehlszeile auch super Nachrichten schicken. Allet jut soweit. Allerdings kriege ich nicht raus, wie ich das von einem externen Script aus triggern (richtiger Begriff?) könnte. Sicherlich irgendetwas in Richtung "system("irgendwas:Pfad-zu-fhem set Hellpush msg Nachricht");", oder? Oder so gar nicht?
Ich bin völlig ratlos...
Wer kann mir da helfen ?
Vielen Dank im Voraus!
Bitte noch mal genau über legen und dann schreiben was Du möchtest. Das kann keiner auch nur ansatzweise deuten.
Wie kann ich aus einem C-Script FHEM dazu bewegen, eine Push-Nachricht über Pushover zu versenden?
In dem Du die entsprechenden Schnittstellen verwendest. Entweder telnet oder HTTP/S Aufrufe
Bei telnet wäre es rein der set Befehl so als wenn Du ihn in die FHEMWEB Commandline ein gibst bei HTTP/S wäre es die URL samt ?cmd=set bla bla aber url codiert
Zitat von: Teccno am 26 Oktober 2017, 14:08:01
Wie kann ich aus einem C-Script FHEM dazu bewegen, eine Push-Nachricht über Pushover zu versenden?
Eins (https://forum.fhem.de/index.php/topic,71806.0.html)
Zwei (https://forum.fhem.de/index.php?topic=16457.0)
http://192.168.240.249:8083/fhem?cmd=set Relax2Go_1 on&fwcsrf=csrf_416390292470083
Mal so als Beispiel. Der csrf Token müsste vorher ausgelesen werden.
Vielen Dank für die Hinweise.
Folgede Zeile funktioniert in der Konsole:
perl /opt/fhem/fhem.pl 7072 "set Hellpush msg Test"
Das liefert mir eine Push-Nachricht mit dem Text "Test".
Nun habe ich aber ein C-Script (Ich erfasse damit die vier Tasten einer Funkfernbedienung und ordne ihnen Aktionen zu), in der ich diese obige Anweisung ausführen möchte:
...
while(1) {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
switch(value) {
case 6112268:
digitalWrite(LEDbluePIN, 1);
break;
case 6112448:
digitalWrite(LEDbluePIN, 0);
break;
case 6112259:
system("/home/shares/pi/audioplayer");
break;
case 6112304:
<<Hier sollte nun die Push-Nachricht gestartet werden>>
break;
case 0:
default:
printf("Unknown encoding");
}...
Der vierte Case ist der Teil, wo diese Anweisung ausgeführt werden sollte. Aber ein System-Befehl wie darüber geht ja nicht. Zumindest bekomme ich es nicht hin. Daher stammt meine Frage nach dem Ausführen in einem Script.
system("/home/shares/pi/audioplayer");
Sieht für mich aus wie ein System Befehl
Ja. Der funktioniert ja auch. Und darunter sollte der stehen, den ich nicht hinbekomme.
system('perl /opt/fhem/fhem.pl 7072 "set Hellpush msg Test"');
Nope.
RFSniffer.cpp:56:11: warning: character constant too long for its type
system('perl /opt/fhem/fhem.pl 7072 "set Hellpush msg Test 6"'); // digitalWrite(LEDgreenPIN, 1);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RFSniffer.cpp: In function 'int main(int, char**)':
RFSniffer.cpp:56:66: error: invalid conversion from 'int' to 'const char*' [-fpermissive]
system('perl /opt/fhem/fhem.pl 7072 "set Hellpush msg Test 6"'); // digitalWrite(LEDgreenPIN, 1);
^
In file included from /usr/include/c++/6/cstdlib:75:0,
from /usr/include/c++/6/stdlib.h:36,
from RFSniffer.cpp:10:
/usr/include/stdlib.h:677:12: note: initializing argument 1 of 'int system(const char*)'
extern int system (const char *__command) __wur;
^~~~~~
<eingebaut>: die Regel für Ziel ,,RFSniffer.o" scheiterte
make: *** [RFSniffer.o] Fehler 1
Hätte getippt, dass das geht. Oder mache ich etwas falsch?
Tausch Mal die einfachen mit den doppelten Hochkommata
So wird'n Schuh draus!!!
Vielen lieben herzlichen Dank!
Großartig.
Und dabei habe ich null Ahnung von C Programmieren ;D
Nee.
Null Ahnung bin ich.
Aber dafür kann ich super Nudeln kochen. Immerhin...