... Wenn der Nachbar auch eine KS300 hat...

Begonnen von gotmoon, 08 Mai 2015, 18:57:15

Vorheriges Thema - Nächstes Thema

gotmoon

HILFE :-D

Seit beginn an, empfange ich hin und wieder eine KS300 aus der Nachbarschaft. Schön, dachte ich mir, kann man ja nutzen. Leider war der Empfang mal da, mal nicht und die Werte konnte ich auch nicht ganz nachvollziehen. So habe ich mir eine eigene KS300 zugelegt und siehe da... die funktioniert perfekt. Sogar die Werte kommen regelmäßig. Wäre da nicht noch die KS300 vom Nachbarn, die nun ebenfalls sendet. Leider scheint es die 50 Meter weiter häufiger zu Regnen und es gibt einen Temperaturunterschied von ca. 3-6 Grad.
Dummerweise lässt sich die KS300 nicht mit einem anderen Hauscode bestücken, wie viele andere FS20 Komponenten (Quelle: ELV-Forum)
Aber es muss doch irgendwie eine Möglichkeit geben die Signale der defekten KS300 vom Nachbarn zu "ignorieren" und meine eigene dennoch zu erfassen.
Vielleicht über irgendeine andere ID, die die Geräte mitsenden?
Oder über eine erfasste Signalstärke, bei der man evtl. immer nur die jeweils höchste in einem bestimmten Zeitraum zulässt...

IRGENDWAS?

Oder gibt es eine andere Wetterstation, die ähnlich einfach zu integrieren ist und besser zu erfassen ist?

Gruß
gootmon

rudolfkoenig

Richtantenne?
Homematic-Version der KS300?

Man koennte auch in Software was dagegen machen: ein userReading erstellen, was die Werte von nur dann uebernimmt, falls das RSSI stark genug ist, und dieses userReading loggen.

gotmoon

Da ich einen CUL und einen CUNO an verschiedenen Stellen in der Wohnung verteilt habe, habe ich die Protokolle der beiden Empfänger mal vertauscht, in der Hoffnung einer der beiden würde das "fremde" Signal eben gar nicht empfangen...
-> Funktioniert leider nicht   :o

HomeMatic ist zwar irgendwie cool aber für mich noch preislich unerreichbar.

So habe ich nun also mal den RSSI mitgeloggt um herauszufinden,  ob ich da ansetzen kann.
Herausgekommen ist:

2015-05-16_14:35:46 KS300 RSSI: -54.5
2015-05-16_14:36:57 KS300 RSSI: -87

welche der beiden nun meine ist, kann ich nicht ganz sagen, ich vermute mal die mit "-87"

Wenn ich das richtig verstanden habe, so muss ich nun ein ganz eigenes LOG anlegen, welches dann mitloggt, wenn der RSSI - Wert  < 80 ist.
Aber ich verstehe irgendwie nicht, wie das mit einem UserReading zusammen hängen soll...

rabbe

#3
Zitat von: gootmon am 08 Mai 2015, 18:57:15
Seit beginn an, empfange ich hin und wieder eine KS300 aus der Nachbarschaft. Schön, dachte ich mir, kann man ja nutzen. Leider war der Empfang mal da, mal nicht und die Werte konnte ich auch nicht ganz nachvollziehen. So habe ich mir eine eigene KS300 zugelegt und siehe da... die funktioniert perfekt.

Zitat von: gootmon am 16 Mai 2015, 14:53:52

2015-05-16_14:35:46 KS300 RSSI: -54.5
2015-05-16_14:36:57 KS300 RSSI: -87

welche der beiden nun meine ist, kann ich nicht ganz sagen, ich vermute mal die mit "-87"


Falsch vermutet.
Wheezy@MeLE A2000 (A10) | FHEM 5.6 | CUL433 | CUL868 | FRITZ!Box 7362SL --- CUL_WS: AS(H)2000, S2001I(D/A), WS7000-15/16/20, S300TH, S555TH, ASH555, KS555 | CUL_TX: TX3P | FS20: FS20 STR-2 | FBAHA, FBDECT: FRITZ!Dect 200 | Calendar | ENIGMA2 | JSONMETER | PROPLANTA | SYSMON

rudolfkoenig

RSSI ist groesser, wenn das Signal staerker ist. -54 ist sehr viel staerker as -87

Ich wuerde in einem userReading anhand RSSI (z.Bsp. groesser oder kleiner als 70) das Wort meins oder seins reinbauen, und im FileLog oder SVG nach diesem Wert filtern. Ungetestet:
attr KS300 userReadings filteredState { ReadingsVal("KS300", "state", "") . (InternaVal("KS300","RSSI",0) < 70 ? " meins" : " seins") }

gotmoon

Ja, leuchtet ein :-D

Ich bin ja nicht gaaaanz doof, komme mir aber grad so vor... :-[

Folgendes habe ich nun gemacht:
Da bei mir in der KS300 bei Internals "CUL_0_RSSI" steht habe ich den Code hierauf angepasst
filteredState { ReadingsVal("KS300", "state", "") . (InternalVal("KS300","CUL_0_RSSI",0) < 70 ? " meins" : " seins") }

Aber: nun kommt immer "meins" und es gibt keine Unterscheidung.

Da bei den Internals aber auch als Zahl "-55" und "-87" auftaucht, dachte ich mir, ich probiere es mal mit korrekter Mathematik
filteredState { ReadingsVal("KS300", "state", "") . (InternalVal("KS300","CUL_0_RSSI",0) > -70 ? " meins" : " seins") }

... funktioniert ebenso nicht... jetzt kommt immer "seins"

Übrigens: Das gleiche funktioniert auch genau so mit 
InternalVal("KS300","RSSI",0)

irgendeine Idee ?

gotmoon

... es ist zum Mäuse melken und ich komme noch nicht recht drüber weg...
Meine letzten Versuche liegen zwar schon etwas zurück aber geschafft habe ich es deswegen noch nicht...  :-\

Mittlerweile jedoch habe ich auch einen MaxCube (Max LAN Adapter geflashed als CUN), der auch auf SlowRF läuft.

Nun habe ich also 2 Empfänger für die KS300 und in der tat empfängt mal der eine, mal der andere das Signal.
Der erste (CUL_0) steht mit großer Antenne ziemlich dicht an der KS300 und empfängt nebenbei auch die defekte vom Nachbar.
Der zweite (maxcube) etwas entfernt und mit kleinerer Antenne, sollte aber nur meine eigene KS 300 empfangen.

Nun war meine Idee, einfach CUL_0 alles was  von KS300 kommt einfach ignorieren so lassen -> funktioniert leider nicht, da der ignore Befehl nicht Empfangs-Device bezogen, sondern Systemweit funktioniert.
Oder aber man könnte versuchen das filteredstate am "LASTInputDev" fest zu machen...
Hier mein Entwurf, der aber einen Fehler wirft...
filteredState { (InternalVal("KS300","LASTInputDev","") = "maxcube" ? " meins" : "") . (InternalVal("KS300","LASTInputDev","") = "maxcube" ? ReadingsVal("KS300", "state", "") : "") }
Zitat
Error evaluating KS300 userReading filteredState: Can't modify non-lvalue subroutine call in scalar assignment at (eval 5799) line 1, near """) "

Für eine neue KS300 als HM-Version bin ich noch nicht bereit. Gibt es denn nicht doch einen Weg das Ganze mit ein wenig Software zu tunen ?

JoWiemann

#7
Hallo,

soweit ich weiß dürfen beim "Inline IF" keine Leerzeichen verwendet werden.

Also

<Bedingung> ? <wahr> : <falsch>

ist nicht richtig.

Richtig:

<Bedingung>?<wahr>:<falsch>


Auch versuchst Du zwei Zeichenkette mit dem Zuweisungsoperator = zu vergleichen. Hierfür muss in Perl eq (equal) oder ne (not equal) verwendet werden. Für numerische Vergleiche entsprechend ==, <>, <, >.

Also für Deinen Fall

filteredState { (InternalVal("KS300","LASTInputDev","")eq"maxcube"?"meins":"") . (InternalVal("KS300","LASTInputDev","")eq"maxcube"?ReadingsVal("KS300", "state", ""):"") }


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

gotmoon

Ja wunderbar ! Vielen Dank :-D

Wenigstens die Fehlermeldung ist nun weg.
Aber woran kann es liegen, dass auch wenn das LASTInpugDev nicht "maxcube" sondern in meinem Fall "CUL_0" ist, dennoch filtered State so herauskommt als wäre es "maxcube" gewesen. Sprich: Die IF-Abfrage funktioniert einfach egal was da kommt und siebt nicht aus, so wie sie soll...
Das gleiche Problem hatte ich ja vorher schon bei der Abfrage des RSSI Werts... Es kam einfach alles durch ohne zu differenzieren.

Irgendeine Idee wo ich ansetzen kann?

JoWiemann

Hallo,

hatte bei copy/paste vergessen == durch eq zu ersetzen. Zieh das doch bitte noch nach.

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

gotmoon

Toll. Es scheint nun zu funktionieren.
Vielen lieben dank !