HM gegen Störsender (Alarmanlage) rüsten?

Begonnen von Bytechanger, 12 Januar 2017, 06:59:47

Vorheriges Thema - Nächstes Thema

Tom Major

Coole Idee  8)
Ich sehe du hast dich nicht gescheut den CC1101 direkt mit der RaspPi SPI anzusteuern  :)
Magst du den code dafür sharen? Wie oft sampelst du den RSSI Wert?
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

Christoph Morrison

Zitat von: Tom Major am 03 Februar 2019, 19:21:13
Coole Idee  8)
Ich sehe du hast dich nicht gescheut den CC1101 direkt mit der RaspPi SPI anzusteuern  :)
Magst du den code dafür sharen? Wie oft sampelst du den RSSI Wert?

Ich sekundiere das.

chem

#47
Das Program das auf dem RPI läuft und den C1101 über SPI programmiert ist in der Sprache go (oder auch golang genannt) geschrieben.

Entwickelt und übersetzt habe ich alles direkt auf dem RPI. Dazu muss man sich nur das go-system installieren. Zu meiner Zeit war die Version die man über apt-get bekam hoffnungslos veraltet, daher empfehle ich selber zu installieren, z.B. hier:
https://gist.github.com/simoncos/49463a8b781d63b5fb8a3b666e566bb5

Das Program funktioniert folgendermassen:
Mit der rssi.go main-routine wird ein Webserver gestartet, der auf localhost am Port 0815 horcht. Dieser wird dann von FHEM aus gepollt (alle 12 Sekunden) und liefert daraufhin drei RSSI Werte und den Alarm-Zustand zurück.

Auf FHEM muss/kann man folgendes einrichten:

define rssiRead HTTPMOD http://localhost:815/ 12

attr rssiRead requestHeader Content-Type: text/html
attr rssiRead reading1Name RSSI03SEC
attr rssiRead reading1Regex rssi03sec=([\d\.]+)
attr rssiRead reading2Name RSSI12SEC
attr rssiRead reading2Regex rssi12sec=([\d\.]+)
attr rssiRead reading3Name RSSI30SEC
attr rssiRead reading3Regex rssi30sec=([\d\.]+)
attr rssiRead reading4Name RSSIALERT
attr rssiRead reading4Regex alarm95:([a-z]+)
attr rssiRead stateFormat {sprintf("RSSI12sec %.1f dB, RSSI_30sec %.1f dB, RSSI_Alert %s", ReadingsVal($name,"RSSI12SEC",0), ReadingsVal($name,"RSSI30SEC",0), ReadingsVal($name,"RSSIALERT",0)) }


Statt alarm95 wie im Beispiel kann man auch (je nach Noise in der Umgebung) einen der anderen Alarme aktivieren (alarm100, alarm90, alarm85, alarm80). Die Zahlen sollen der RSSI Wert in -dBm sein.

Aus rssi.go wird auch der cc1101 thread gestartet der sich um den C1101 Chip kümmert. Die beiden Threads (main und cc1101) kommunizieren über drei mutex geschützte globale Variablen.

Der cc1101 thread startet und konfiguriert den C1101 und misst ungefähr alle 3 Sekunden einen RSSI Wert und bildet 3 Sekunden, 12 Sekunden und 30 Sekunden Mittelwerte. Diese 3 Werte werden mit dem WebServer geshared und der bestimmt daraus dann zusätzlich noch mehrere Alarmschwellen.

Das ist es im groben....

Ich hänge den Quelltext hier an, hoffe er lässt sich so kompilieren.


chem

Ich sehe gerade, das zip file enthält auch das ausführbare binary (auf rpi), also kompilieren nicht unbedingt erforderlich.

Für die Verdrahtung sollten die Fotos aus den vorherigen Posts reichen, ein Schematic habe ich nicht.

Tom Major

Danke für das Teilen des Codes.  :)
Die Verdrahtung der SPI am RPi sollte klar sein und die GPIO pin Benutzung ist auch in cc1101.go zu finden.

Mir schwebt ein Standalone Detector (AVR und CC1101) vor, der eine rote LED anmacht o.ä., da finde ich das know-how über das CC1101 Init/Auslesen im go sketch interessant um nicht bei 0 anzufangen..
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker