Funksteckdosen - ./RFSniffer Werte speichern

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49
Answers: 0

Funksteckdosen - ./RFSniffer Werte speichern

Beitrag 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
Zuletzt geändert von littlekenny am 2. Jan 2019 03:09, insgesamt 1-mal geändert.

schnitzer
Beiträge: 38
Registriert: 29. Dez 2018 10:17
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

Beitrag 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

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

Beitrag 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

frank62
Beiträge: 5
Registriert: 30. Dez 2018 13:17
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

Beitrag 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 ... :(

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Funksteckdosen - ./RFSniffer Werte speichern

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

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

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

Beitrag von littlekenny »

Keine eine Idee wie man das anstellen könnte?

frank62
Beiträge: 5
Registriert: 30. Dez 2018 13:17
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

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

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

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

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49
Answers: 0

Re: Funksteckdosen - ./RFSniffer Werte speichern

Beitrag 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. :D

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


}

Antworten