JeeLink v3c/ESP8266 zur Einbindung von Davis Vantage

Begonnen von habeIchVergessen, 15 November 2015, 12:13:53

Vorheriges Thema - Nächstes Thema

HCS

Zitat von: habeIchVergessen am 22 November 2015, 22:13:23
Ja, das Mapping Attribut.
Und das IODev Attribut

Zitat von: habeIchVergessen am 22 November 2015, 22:13:23
Ich wollte wissen, ob im Internals IODev nur ein Wert erscheint, wenn die KeyValueProtocol-Instance per AutoCreate erstellt wurde. Ist das so?

Nein, ein
define KVPTest KeyValueProtocol TEST 1
führt bei mir zu:
Internals:
   CFGFN
   DEF        TEST 1
   ID         TEST_1
   IODev      myJeeLinkUSB
   NAME       KVPTest
   NR         442
   STATE      Initialized
   TYPE       KeyValueProtocol
   model      TEST
Attributes:
   IODev      myJeeLinkUSB

habeIchVergessen

hatte gerade das Device gelöscht und autocreate hat das hier angelegt


fhem> list Key.*
Internals:
   CFGFN
   DEF        DAVIS 0
   ID         DAVIS_0
   IODev
   LASTInputDev davisJeeLink
   MSGCNT     3
   NAME       KeyValueProtocol_DAVIS_0
   NR         707
   STATE      Initialized
   TYPE       KeyValueProtocol
   davisJeeLink_MSGCNT 3
   davisJeeLink_RAWMSG OK VALUES DAVIS 0 Channel=3,RSSI=-81,Battery=ok,WindSpeed=0.00,WindDirection=-43,
   davisJeeLink_TIME 2015-11-22 22:35:40
   model      DAVIS
   CHANGETIME:
   Helper:
     Dblog:
       Rainsecs:
         Dbhistdatalog:
           TIME       1448228134.91748
           VALUE      -1
       Raintipcount:
         Dbhistdatalog:
           TIME       1448228132.34709
           VALUE      93
       Winddirection:
         Dbhistdatalog:
           TIME       1448228140.03193
           VALUE      -43
       Windspeed:
         Dbhistdatalog:
           TIME       1448228140.03193
           VALUE      0.00
   Readings:
     2015-11-22 22:35:40   Battery         ok
     2015-11-22 22:35:40   Channel         3
     2015-11-22 22:35:40   RSSI            -81
     2015-11-22 22:35:34   RainSecs        -1
     2015-11-22 22:35:32   RainTipCount    93
     2015-11-22 22:35:40   WindDirection   -43
     2015-11-22 22:35:40   WindSpeed       0.00
Attributes:
   room       KeyValueProtocol

HCS

Sorry, keine Ahnung, warum Du kein IODev bekommst. Evtl. hat ja justme1968 eine Idee.

Hast Du das IODev Attribut mal gesetzt und funktioniert das Mapping dann?

habeIchVergessen

hab ich handisch gesetzt und jetzt funktioniert es. wäre nie auf die Idee gekommen ein "Internals" zu beschreiben.

ich bin erstmal sehr zufrieden mit euren Ergebnissen nach nur einer Woche Arbeit.
ggf. sollten noch die Sourcen für den Sketch irgendwo ablegt werden. Wer übernimmt das?


HCS

Zitat von: habeIchVergessen am 22 November 2015, 23:47:40
ggf. sollten noch die Sourcen für den Sketch irgendwo ablegt werden. Wer übernimmt das?

Mach ein 36_DavisVantage.zip in dem die Sourcen und das compilierte .hex drin sind, dann werfe ich es in trunk/fhem/contrib/arduino/ rein.


Zitat von: habeIchVergessen am 22 November 2015, 23:47:40
ich bin erstmal sehr zufrieden mit euren Ergebnissen nach nur einer Woche Arbeit.

War ja auch eine harte Woche  ;D ;D

habeIchVergessen


Billy

@habeIchVergessen
Würde damit diese AUSSENEINHEIT ISS 6357 DAVIS VUE problemlos laufen?
http://www.ebay.de/itm/like/380534956300?ul_noapp=true&chn=ps&lpid=106

Nur mal interessehalber.

Gruß Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

habeIchVergessen

hab bei Wetterladen.de gekauft.
auf das 868MHz Funkmodul sollte geachtet werden (also nicht die US/AU Version).

Ein JeeLink v3c (RFM69CW) ist erforderlich. RFM12B Funkchips reichen nicht!

HCS

Zitat von: habeIchVergessen am 23 November 2015, 19:53:33
anbei die Sourcen für den Sketch
Habe es eingecheckt.

@habeIchVergessen: Ideal wäre, wenn Du Deinen Beitrag #1 ganz oben überarbeiten und kurz beschreiben würdest, wozu es gut ist und wie man es verwendet.
Dann muss sich ein interessierter Anwender nicht durch die 97 Posts kämpfen, um herauszufinden, wie er es einsetzen kann.

habeIchVergessen

#99
Beschreibung unterstützer Sketch-Kommandos:


  • Frequenz-Band auswählen <band>b (Es wird nur eine fest programmierte Liste von Frequenzen ausgewählt)

    • 0 - US (915 MHz; 51 Einträge)
    • 1 - AU (915 MHz; 51 Einträge)
    • 2 - EU (868 MHz; 5 Einträge; default)
  • Packet Dump <packet>p

    • 0 - ausschalten (default)
    • 1 - empfangene Pakete (inkl. CRC)
    • 2 - verworfene Pakete
    • 3 - alle Pakete
  • Station konfigurieren <id>,<type>s

    • id - Davis verwendet die IDs 0-7 (wird beim Einrichten des Sensors gewählt)
    • type - Typ der Station

      • 0 - Vantage Pro 2
      • 1 - Temperatur
      • 2 - Luftfeuchtigkeit
      • 3 - Temperatur + Luftfeuchtigkeit
      • 4 - Windmesser
      • 5 - Regenmesser
      • 6 - Leaf Station
      • 7 - Soil Station
      • 8 - Leaf + Soil Station
      • 9 - SensorLink
      • 10 - Station ausschalten
      • 16 - Vantage Vue (im Testbetrieb)
  • Empfang von Nachrichten steuern [enable]r

    • 0 - auschalten
    • 1 - einschalten (default)
  • LED [enable]l

    • 0 - auschalten (default)
    • 1 - einschalten
  • Version v

habeIchVergessen

#100
generelle Informationen zum Sketch:

Bevor Nachrichten für die konfigurierten Stationen empfangen werden, findet eine initiale Prüfung zum Vorhandensein dieser statt. Sofern eine Station nicht sendet, endet diese Phase nicht! Dies ist in der Arbeitsweise des Protokolls (Davis) begründet. Es wird zu einem bestimmten Zeitpunkt das Senden der Station X auf Frequenz Y (Eintrag aus Liste zu Band) erwartet. Mit zunehmender ID werden die Sendeabstände größer.

habeIchVergessen

#101
[aktualisiert 29.06.2016]
UserReadings werden als kommaseparierte Liste angegeben. Das Device VantageVue muss ggf. in den Beispielen angepasst werden.

Taupunkt (nicht exakt berechnet)
DewPoint:(Temperature.*|Humidity.*) { sprintf("%.2f", ReadingsVal("VantageVue", "Temperature", 0) - (100 - ReadingsVal("VantageVue", "Humidity", 99)) / 5.0);; }
gefühlte Temperature
WindChill:(WindSpeed.*|Temperature.*) { my $wc;; my $ws = (ReadingsVal("VantageVue", "WindSpeed", 0) ** 0.16);; my $temp = ReadingsVal("VantageVue", "Temperature", 0);; my $calc = 13.12 + 0.6215 * $temp - 11.37 * $ws + 0.3965 * $temp * $ws;; $wc = sprintf("%.2f", $calc) if ($calc < $temp);; }
Windgeschwindigkeit
WindForce:WindSpeed.* { my $wf;; my $ws=ReadingsVal("VantageVue", "WindSpeed", 0.00);; $ws=~s/(\d+)\.\d+/$1<1?0:($1<6?1:($1<12?2:($1<20?3:($1<29?4:($1<39?5:($1<50?6:($1<62?7:($1<75?8:($1<89?9:($1<103?10:($1<117?11:12)))))))))))/eg;; $wf=sprintf("%d", $ws);; }
Luftdruck
Pressure { ReadingsVal("YahooWetter", "pressure", "") }

Voraussetzung:
define YahooWetter Weather 638242 3600 de
attr YahooWetter event-on-update-reading pressure


intern verwendete Readings

_IsRaining { (ReadingsVal("VantageVue", "RainAmount", 0) > 0.0 ? 1 : 0) }


Reading für RainAmount

define VantageVue_RainAmount NOTIFY (VantageVue:RainTipCount.*) { my $dev="VantageVue";; my $ra=0;; my $rtc=ReadingsVal($dev, "RainTipCount", 0);; my $lrtc=ReadingsVal($dev, "_LastRainTipCount", "");; if ($lrtc eq "") { $lrtc=$rtc;;  fhem "setreading $dev _LastRainTipCount " . $lrtc;; };; $ra=($rtc + ($lrtc > $rtc ? 0x80 : 0x00) - $lrtc) * 0.2;; fhem "setreading $dev RainAmount " . $ra;; $lrtc=ReadingsVal($dev, "_LastRainTipCountTotal", "");; if ($lrtc eq "") { $lrtc=$rtc;;  fhem "setreading $dev _LastRainTipCountTotal " . $lrtc;; };; $ra=ReadingsVal($dev, "RainAmountTotal", 0);; $ra+=($rtc + ($lrtc > $rtc ? 0x80 : 0x00) - $lrtc) * 0.2;; fhem "setreading $dev RainAmountTotal " . $ra;; fhem "setreading $dev _LastRainTipCountTotal " . $rtc;; }

Regenmenge (bei mir hat der Löffel 0.2 mm => * 0.2; ggf. anpassen)

Reading für RainAmount (inkl. alte Werte aus DbLog lesen)

define VantageVue_RainAmount NOTIFY (VantageVue:RainTipCount.*) { my $spoon=0.2;; my $db="dbHistDataLog";; my $dev="VantageVue";; my $rtcName="RainTipCount";; my $raName="RainAmount";; my $ra=0;; my $dbrtc;; my $rtc=ReadingsVal($dev, $rtcName, 0);; my $lrtc=ReadingsVal($dev, "_Last${rtcName}", "");; if ($lrtc eq "") { $dbrtc=fhem("get $db ReadingsVal $dev $rtcName -1 ") if (defined($db));; $lrtc=($dbrtc != -1 ? $dbrtc : $rtc);; Log(3, "VantageVue_RainAmount: $dbrtc $lrtc");; fhem "setreading $dev _Last${rtcName} $lrtc";; };; $ra=($rtc + ($lrtc > $rtc ? 0x80 : 0x00) - $lrtc) * $spoon;; fhem "setreading $dev $raName $ra";; $lrtc=ReadingsVal($dev, "_Last${rtcName}Total", "");; if ($lrtc eq "") { $dbrtc=fhem("get $db ReadingsVal $dev $rtcName -1 ") if (defined($db));; $lrtc=($dbrtc != -1 ? $dbrtc : $rtc);; Log(3, "VantageVue_RainAmount: $dbrtc $lrtc");; fhem "setreading $dev _Last" . $rtcName . "Total " . $lrtc;; };;  $ra=ReadingsVal($dev, "RainAmountTotal", "");;  $ra=fhem("get $db ReadingsVal $dev ${raName}Total -1 ") if ($ra eq "" && defined($db));; $ra+=($rtc + ($lrtc > $rtc  ? 0x80 : 0x00) - $lrtc) * $spoon;; fhem "setreading $dev ${raName}Total " . $ra;;  fhem "setreading $dev _Last${rtcName}Total " . $rtc;; }


nach 15 min. _LastRainTipCount mit RainTipCount synchronisieren

define VantageVue_RainCheck at +*00:01 { my $dev="VantageVue";; my $ra=ReadingsVal($dev, "RainAmount", 0);; if ($ra > 0 && time_str2num(ReadingsTimestamp($dev, "RainAmount", "")) < time() - 900) { my $rtc=ReadingsVal($dev, "RainTipCount", 0);; fhem("setreading $dev _LastRainTipCount $rtc");; fhem("setreading $dev RainAmount 0");; };; }

Grafiken

# temp log
define VantageVue_Temp SVG dbHistDataLog:davis_temp:HISTORY
attr VantageVue_Temp label "Außen-Temperatur Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr VantageVue_Temp plotfunction VantageVue
attr VantageVue_Temp room EG
attr VantageVue_Temp sortby 2
# wind log
define VantageVue_Wind SVG dbHistDataLog:davis_wind:HISTORY
attr VantageVue_Wind label "Windgeschwindigkeit Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr VantageVue_Wind plotfunction VantageVue
attr VantageVue_Wind room EG
attr VantageVue_Wind sortby 3
attr VantageVue_Wind fixedrange hour
# rain log
define VantageVue_Rain SVG dbHistDataLog:davis_rain:HISTORY
attr VantageVue_Rain label "Regen pro 15 min. Max $data{max1}"
attr VantageVue_Rain plotfunction VantageVue
attr VantageVue_Rain room EG
attr VantageVue_Rain sortby 4

Dippy98

Hallo,

so ich habe nun dank habichvergessen meine Vantage Pro 2 mit externen Sender für den Windmesser ordnungsgemäß einrichten können.

Wichtig in diesen Fall ist, daß beide eine unterschiedliche Device ID zugewiesen bekommen. In meinen Fall hat die Vantage Pro ID=1 und der Windmesser ID=0.
Somit ergibt sich ein attr VantagePro initCommands 0,4s 1,0s r für den Jeelink. VantagePro ist in diesen Fall der Name des Jeelink.

Da es ja nun 2 Devices gibt. Bei mir einmal "Vantage_Pro" und für den Wind "Vantage_Wind". Um die nun readings vom "Vantage_Wind" im "Vantage_Pro" anzeigen, zu lassen, habe ich ein Userreadings für den "VantagePro" eingetragen.

attr Vantage_Pro userReadings WindDirection { ReadingsVal("Vantage_Wind", "WindDirection", 0) },WindSpeed { ReadingsVal("Vantage_Wind", "WindSpeed", 0) },_LastRainTipCount:InternalUseOnly { my $lrtc=ReadingsVal("Vantage_Pro", "_LastRainTipCount", -1);; $lrtc=ReadingsVal("Vantage_Pro", "RainTipCount", 0) if ($lrtc==-1);; },_IsRaining { (ReadingsVal("Vantage_Pro", "RainAmount", 0) > 0.0 ? 1 : 0) },RainAmount { my $ra=0;; my $rtc = ReadingsVal("Vantage_Pro", "RainTipCount", 0);; my $lrtc = ReadingsVal("Vantage_Pro", "_LastRainTipCount", -1);; $ra=($rtc + ($lrtc > $rtc ? 0x80 : 0x00) - $lrtc) * 0.2 if($lrtc != -1);; },WindChill:(WindSpeed|Temperature) { my $wc;; my $ws = (ReadingsVal("Vantage_Pro", "WindSpeed", 0) ** 0.16);; my $temp = ReadingsVal("Vantage_Pro", "Temperature", 0);; my $calc = 13.12 + 0.6215 * $temp - 11.37 * $ws + 0.3965 * $temp * $ws;; $wc = sprintf("%.2f", $calc) if ($calc < $temp);; },WindForce:WindSpeed { my $wf;; my $ws=ReadingsVal("Vantage_Pro", "WindSpeed", 0.00);; $ws=~s/(\d+)\.\d+/$1<1?0:($1<6?1:($1<12?2:($1<20?3:($1<29?4:($1<39?5:($1<50?6:($1<62?7:($1<75?8:($1<89?9:($1<103?10:($1<117?11:12)))))))))))/eg;; $wf=sprintf("%d", $ws);; }

Des weiteren habe ich noch die UserReadings von habichvergessen eingepflegt.

Vielleicht hilft das den ein oder anderen weiter.

Vielen Dank nochmal an habichvergessen für den super Support.

Viele Grüße
Christian

habeIchVergessen

#103
Firmware Version 0.2 im Anhang.

@HCS: kannst du bitte die Datei einchecken.

HCS