Seite 1 von 2
Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 31. Dez 2018 13:17
von littlekenny
Hallo zusammen,
derzeit schalte ich meine Steckdosen sowie Lichtschalter über das Exec Binding von Openhab...
Funktioniert auch alles so wie es soll.
Jetzt würde ich aber gerne wenn die Steckdosen oder Lichtschalter über die Fernbedienung entsprechend geschaltet werden, dass sich der Status in Openhab entsprechend auch ändert!
Wie stelle ich das an? Hat eventuell jemand schon so was realisiert und könnte mir den Code zur Verfügung stellen?
Vielen Dank.
Lieben Gruß, littlekenny
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 31. Dez 2018 13:55
von schnitzer
Hallo,
nach all den Informationen, die ich bisher im Netz gefunden habe und auch durch eigene Erfahrungen, gibt es keine Möglichkeit bei 433mHz den Status abzufragen
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 31. Dez 2018 14:07
von littlekenny
Hallo,
hatte den Ansatz, das ich den Empänger am PI im Hintergrund laufen lasse und je nach empfangenen Code über die Rest API von Openhab den Status vom Item abändere von off auf on z.b.
Aber ich bin nicht der Programmier Profi, damit ich das umsetzten könnte...
Vielleicht hast du eine Idee über diesen Weg?
Lieben Gruß, littlekenny
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 31. Dez 2018 15:13
von frank62
... bin auch an einer Lösung interessiert. Leider meldet sich hier niemenad:
viewtopic.php?f=15&t=1040
Habe auch eine Funklösung per 433MHz und möchte genau das angesprochenen Problem per Homematic-Binding lösen.
Scheint sich nur keiner damit aus zu kennen ...

Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 31. Dez 2018 15:23
von udo1toni
Du brauchst ein Programm, welches den Funk auf 433MHz überwacht und die entsprechenden Pakete korrekt auswertet. Da die Sendeseite schon vorhanden ist, müsste die Empfangsseite eigentlich auch realisierbar sein, ich selbst nutze aber kein solchen Dosen und kann da sonst nichts beisteuern.
Es gibt von Sonoff ein 433MHz Gateway, welches mit Tasmota geflasht werden kann, eventuell könnte man das dazu nutzen (das kann dann sowohl senden als auch empfangen - an openHAB wird es dann über mqtt angebunden), ich hab aber keine Ahnung, ob es mit Intertchno kompatibel ist, oder auch mit anderen Funk-Systemen auf 433MHz.
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 31. Dez 2018 15:42
von littlekenny
Theoretisch müsste man ja nur diesen Code entsprechend anpassen und wenn z.B. Code 12345 empfangen wurde per Rest API von Openhab
(
http://localhost:9080/CMD?mein_Item_Switch=OFF) den Status ändern, somit würde ja dann z.B. der Status von on auf off gesetzt werden!
Code: Alles auswählen
/*
RFSniffer
Usage: ./RFSniffer [<pulseLength>]
[] = optional
Hacked from http://code.google.com/p/rc-switch/
by @justy to provide a handy RF code sniffer
*/
#include "../rc-switch/RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
RCSwitch mySwitch;
int main(int argc, char *argv[]) {
// This pin is not the first pin on the RPi GPIO header!
// Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/
// for more information.
int PIN = 2;
if(wiringPiSetup() == -1) {
printf("wiringPiSetup failed, exiting...");
return 0;
}
int pulseLength = 0;
if (argv[1] != NULL) pulseLength = atoi(argv[1]);
mySwitch = RCSwitch();
if (pulseLength != 0) mySwitch.setPulseLength(pulseLength);
mySwitch.enableReceive(PIN); // Receiver on interrupt 0 => that is pin #2
while(1) {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
printf("Unknown encoding\n");
} else {
printf("Received %i\n", mySwitch.getReceivedValue() );
}
fflush(stdout);
mySwitch.resetAvailable();
}
usleep(100);
}
exit(0);
}
Also dieser Teil vom Code:
Code: Alles auswählen
if (value == 0) {
printf("Unknown encoding\n");
} else {
printf("Received %i\n", mySwitch.getReceivedValue() );
}
Bei dem Teil: if (value == 0) müsste dann z.B. der Code 12345 rein und dann anstelle des printf("Unknown encoding\n"); die Ausführung
des Links für die Rest API zum ändern des Item Status.... (
http://localhost:9080/CMD?mein_Item_Switch=OFF)
Aber habe keine Ahnung wie das funktionieren könnte!
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 31. Dez 2018 17:45
von littlekenny
Keine eine Idee wie man das anstellen könnte?
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 1. Jan 2019 19:51
von frank62
Mit Homegear sollte es eigentlich ohne den ganzen RFsniffer-Aufwand funktionieren.
Die Pakete werden per Homegear ja schon empfangen, andere haben bereits mit Homegear auch das Empfangen einer FB hinbekommen, nur gibt es keinerlei Infos wie das gemacht wurde ...
Ich lese immer nur das es geht, aber wie ?
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 1. Jan 2019 23:42
von littlekenny
Hallo,
ich weiß schonmal, das es über die Rest API von openhab funktioniert und man einen curl Befehl absetzen kann an die API um den Status zu ändern.
Aber ich hab keine Ahnung wie ich das in die RFSniffer einbauen kann... Bin leider nicht der c++ Profi um das umzusetzen..
Vielleicht gibt es ja hier jemand der es könnte?
Re: Funksteckdosen - ./RFSniffer Werte speichern
Verfasst: 2. Jan 2019 01:23
von littlekenny
Hallo zusammen,
habe es hinbekommen! Also für alle die es Interessiert.
Habe den Code der RFSniffer Datei wie folgt angepasst und wenn jedesmal der Code für das Anschalten oder Ausschalten empfangen wird, wird der Status des Items über die REST API von Openhab entsprechend angepasst. Sprich wenn ich den Funkschalter betätige und wenn ich den Schalter über Openhab steuere. So wird mir auch immer der richtige Status der Lampe in Openhab angezeigt.
Wenn noch jemand nen besseren Vorschlag hat, nehme ich diesen gerne entgegen.
Code: Alles auswählen
//g++ -DRPI ../rc-switch/RCSwitch.cpp sniff.cpp -o sniff -lwiringPi
/*
RFSniffer
Usage: ./RFSniffer [<pulseLength>]
[] = optional
Hacked from http://code.google.com/p/rc-switch/
by @justy to provide a handy RF code sniffer
*/
#include "../rc-switch/RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
RCSwitch mySwitch;
int main(int argc, char *argv[]) {
// This pin is not the first pin on the RPi GPIO header!
// Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/
// for more information.
int PIN = 2;
if(wiringPiSetup() == -1) {
printf("wiringPiSetup failed, exiting...");
return 0;
}
int pulseLength = 0;
if (argv[1] != NULL) pulseLength = atoi(argv[1]);
mySwitch = RCSwitch();
if (pulseLength != 0) mySwitch.setPulseLength(pulseLength);
mySwitch.enableReceive(PIN); // Receiver on interrupt 0 => that is pin #2
while(1) {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 283955) { //Code für das einschalten der Lampe
char cmd[120]= {0};
int x = 100;
snprintf(cmd,119,"curl http://localhost:8080/classicui/CMD?licht_flur=ON",x);
system(cmd);
printf("\nReceived %i\n", mySwitch.getReceivedValue() );
} else {
char cmd[120]= {0};
int x = 100;
snprintf(cmd,119,"curl http://localhost:8080/classicuiCMD?licht_flur=OFF",x);
system(cmd);
printf("\nReceived %i\n", mySwitch.getReceivedValue() );
}
fflush(stdout);
mySwitch.resetAvailable();
}
usleep(100);
}
exit(0);
}