Hauptmenü

Netzdiagramm mit SVG

Begonnen von MichlB, 02 November 2014, 22:22:25

Vorheriges Thema - Nächstes Thema

MichlB

Hallo
Ich beschäftige mich derzeit mit ner Wetterstation und da kommt natürlich das Thema Windrichtung und Häufigkeit zum Zug....
Da ich noch neu bin im fhem mal die Frage ob es mittels sag möglich ist ein netzdiagramm zu erstellen, das mir die Häufigkeit und Richtungen des Windes wiedergibt?
Danke
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

CQuadrat

Hallo Michl1003,

meinst Du etwa so etwas:
http://de.wikipedia.org/wiki/Windrose_(Meteorologie)#mediaviewer/File:Wind_rose_plot.jpg

Ich bin hier gerade am basteln. Die Daten für den Plot lasse ich per SQL-Statements (benutze DbLog) aus meinen Logdaten generieren. Daraus erzeuge ich ich dann mittels gnuplot den entsprechenden Chart. Das ganze soll - wenn es fertig ist - dann per Cron-Job regelmäßig erzeugt werden.

Wenn ich eine vorzeigbare Methode habe, kann ich das hier gerne mal vorstellen.


Viele Grüße

Christoph
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

MichlB

Wow genau sowas hab ich mir vorgestellt, wenn man das dann auch irgendwie ins fhem bekommt... Halt mic da bitte am laufenden, wäre supercool von dir danke!
Lg Michl

Ps meine Fähigkeiten im programmieren sind sehr begrenzt aber voll. Kann ich dir wo helfen?!?
1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

MichlB

hallo
ich bin jetzt einen Schritt weiter... ich habe mir einen windrichtungsanzeiger mittels AS5040 (magnetic hall sensor) gebastelt.. funktioniert super... soweit...
jetzt muss ich das teil nur mehr einbinden...

hier mal der arduino code (habs mit MYSENSORS gebastelt).
#include <SPI.h>
#include <MySensor.h>

const int ledPin = 13; //LED connected to digital pin 13
const int clockPin = 5; //output to clock
const int CSnPin = 4; //output to chip select
const int inputPin = 6; //read AS5040

int inputstream = 0; //one bit read from pin
long packeddata = 0; //two bytes concatenated from inputstream
long angle = 0; //holds processed angle value
long anglemask = 65472; //0x1111111111000000: mask to obtain first 10 digits with position info
long statusmask = 63; //0x000000000111111; mask to obtain last 6 digits containing status info
long statusbits; //holds status/error information
int DECn; //bit holding decreasing magnet field error data
int INCn; //bit holding increasing magnet field error data
int OCF; //bit holding startup-valid bit
int COF; //bit holding cordic DSP processing error data
int LIN; //bit holding magnet field displacement error data
int debug = 0; //SET THIS TO 0 TO DISABLE PRINTING OF ERROR CODES
int shortdelay = 1000; // this is the microseconds of delay in the data clock
int longdelay =1000; // this is the milliseconds between readings
#define CHILD_ID_DIR 0
//#define INTERRUPT inputPin
MySensor gw;
MyMessage msgDIR(CHILD_ID_DIR, V_DIRECTION);

void setup()
{
  gw.begin(NULL, AUTO, true, AUTO);
  Serial.begin(250000);
  pinMode(ledPin, OUTPUT); // visual signal of I/O to chip
  pinMode(clockPin, OUTPUT); // SCK
  pinMode(CSnPin, OUTPUT); // CSn -- has to toggle high and low to signal chip to start data transfer
  pinMode(inputPin, INPUT); // SDA

  // Send the Sketch Version Information to the Gateway
  gw.sendSketchInfo("Winddirection", "1.0");
  // Register all sensors to gw (they will be created as child devices)
  gw.present(CHILD_ID_DIR, S_WIND);
}

void loop()
{
// CSn needs to cycle from high to low to initiate transfer. Then clock cycles. As it goes high
// again, data will appear on sda
  digitalWrite(CSnPin, HIGH); // CSn high
  digitalWrite(clockPin, HIGH); // CLK high
  delay(longdelay);// time between readings
  digitalWrite(ledPin, HIGH); // signal start of transfer with LED
  digitalWrite(CSnPin, LOW); // CSn low: start of transfer
  delayMicroseconds(shortdelay); // delay for chip initialization
  digitalWrite(clockPin, LOW); // CLK goes low: start clocking
  delayMicroseconds(shortdelay); // hold low
  for (int x=0; x <16; x++) // clock signal, 16 transitions, output to clock pin
  {
    digitalWrite(clockPin, HIGH); //clock goes high
    delayMicroseconds(shortdelay); //
    inputstream =digitalRead(inputPin); // read one bit of data from pin
//Serial.print(inputstream, DEC);
    packeddata = ((packeddata << 1) + inputstream);// left-shift summing variable, add pin value
    digitalWrite(clockPin, LOW);
    delayMicroseconds(shortdelay); // end of one clock cycle
  }
// end of entire clock cycle
//Serial.println(" ");
  digitalWrite(ledPin, LOW); // signal end of transmission
// lots of diagnostics for verifying bitwise operations
//Serial.print("packed:");
//Serial.println(packeddata,DEC);
//Serial.print("pack bin: ");
//Serial.println(packeddata,BIN);
  angle = packeddata & anglemask; // mask rightmost 6 digits of packeddata to zero, into angle.
//Serial.print("mask: ");
//Serial.println(anglemask, BIN);
//Serial.print("bin angle:");
//Serial.println(angle, BIN);
//Serial.print("angle: ");
//Serial.println(angle, DEC);
  angle = (angle >> 6); // shift 16-digit angle right 6 digits to form 10-digit value
//Serial.print("angleshft:");
//Serial.println(angle, BIN);
//Serial.print("angledec: ");
//Serial.println(angle, DEC);
  angle = angle * 0.3515; // angle * (360/1024) == actual degrees
  Serial.print("angle: "); // and, finally, print it.
  Serial.println(angle, DEC);
//Serial.println("--------------------");
//Serial.print("raw: "); // this was the prefix for the bit-by-bit diag output inside the loop.
  if (debug)
  {
    statusbits = packeddata & statusmask;
    DECn = statusbits & 2; // goes high if magnet moved away from IC
    INCn = statusbits & 4; // goes high if magnet moved towards IC
    LIN = statusbits & 8; // goes high for linearity alarm
    COF = statusbits & 16; // goes high for cordic overflow: data invalid
    OCF = statusbits & 32; // this is 1 when the chip startup is finished.
    if (DECn && INCn) { Serial.println("magnet moved out of range"); }
    else
    {
      if (DECn) { Serial.println("magnet moved away from chip"); }
      if (INCn) { Serial.println("magnet moved towards chip"); }
    }
    if (LIN) { Serial.println("linearity alarm: magnet misaligned? Data questionable."); }
    if (COF) { Serial.println("cordic overflow: magnet misaligned? Data invalid."); }
  }
  float V_DIRECTION = angle;
  gw.send(msgDIR.set(V_DIRECTION, DEC));
  packeddata = 0; // reset both variables to zero so they don't just accumulate
  angle = 0;
  gw.process();
  //gw.sleep(INTERRUPT,CHANGE);
  gw.sleep(longdelay);
}



und hier mein FHEM-Code.

define MYSENSOR_111 MYSENSORS_DEVICE 111
attr MYSENSOR_111 IODev SerialGate
attr MYSENSOR_111 alias Windrichtung
attr MYSENSOR_111 group Sensoren
attr MYSENSOR_111 mapReading_direction 0 direction
attr MYSENSOR_111 mapReading_gust 0 gust
attr MYSENSOR_111 mapReading_wind 0 wind
attr MYSENSOR_111 mode repeater
attr MYSENSOR_111 room 03_Umwelt
attr MYSENSOR_111 stateFormat {sprintf("%.0f",ReadingsVal("MYSENSOR_111","direction",0))."°"}


der nächste schritt ist nun ein wind-speed sensor.. auch mit dem AS5040... mal schaun...

1x PI 2B+ FHEM - Heizung
1x Pi 3b+ - FHEM - Haussteuerung
1x Pi 3 - MagicMirror
2x Pi B - Musicbox

justme1968

schau dir mal die logProxy beispiele im wiki an. im polar mode müsste auch so etwas möglich sein.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968