[gelöst] Messwerte von LAN Sensor empfangen (ARDUINO-->LAN-->FHEM)

Begonnen von chesee, 02 März 2015, 23:41:51

Vorheriges Thema - Nächstes Thema

chesee

Das senden von Aufrufen an meinen Arduino via Gethttp habe ich nun erfolgreich getestet.

Nun möchte ich gern den umgekehten Weg gehen.
Ein Arduino soll als Client einen Messwert am FEHM Server ablegen.

Ich denke, ich brauch dazu ein Dummy Device mit einem Reading für den Messwert.
Ich konnte aber nicht finden, wie ich ein Reading anlege und wie ich den Wert übergeben bekomme.

Eine fertige Lösung erwarte ich nicht, sondern nur einen Tipp, wo ich weiter komme.  :-\

schka17

Mit  setreading kannst du readings anlegen und updaten


Sent from my iPad using Tapatalk
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

Wzut

#2
Zitat von: chesee am 02 März 2015, 23:41:51
Nun möchte ich gern den umgekehten Weg gehen.
Lege dir in FHEM zuerst einen Dummy an der einen Messwert bekommen soll. ( Bsp define MessDummy dummy )

dann schau dir mal von den Arduino Ethernet Beispielen den Sketch WebClient an.
Statt wie dort erwas bei Google zu holen schickst du den GET Request an deinen FHEM Server ( du tust dann so als ob du das Kommando direkt im Webinterface eingegeben hättest , die Syntax im Browser :
http://FHEM_IP:8083/fhem?cmd.MessDummy=set%20MessDummy%20Messwert
die andere Variante wäre mit dem Demo Sketch Telnet Client. Diesen etwas umbauen, d.h. Verbindung zum FHEM Server auf Port 7072 aufbauen und dann einfach mit print.client("set MessDummy Messwert\n");  den Messwert übertragen und Verbindung trennen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

chesee

Danke für die Hilfe.
Die FHEM Referenz ist in manchen Punkten recht knapp gehalten.

Reading setzen und ändern funktioniert ohne Probleme
setreading MessDummy state off
setreading MessDummy state on

Hier noch eine Frage - Existieren für das Reading noch irgendwelche Konventionen oder kann ich das nennen wie ich will. Sowas wie Variablentypen existieren wohl auch nicht?

Eine Telnet Verbindung auf Port 7072 bekomme ich nicht auf. Da muss ich sicher noch was einrichten.

Das wichtigste für mich ist aber das Setzen des Messwertes über den Webaufruf.
http://192.168.1.4:8083/fhem?cmd.MessDummy=set%20MessDummy%20on bzw off funktioniert
Woher

wenn ich ein weiteres Reading anlege mit setreading MessDummy Messwert 123
dachte ich den Wert damit zu ändern
http://192.168.1.4:8083/fhem?cmd.MessDummy=set%20MessDummy%20Messwert%20456 oder
http://192.168.1.4:8083/fhem?cmd.MessDummy=set%20Messwert%20456
aber leider kommt immer
Unknown command http://192.168.1.4:8083/fhem?cmd.MessDummy=set%20MessDummy%20Messwert%20456, try help.

wie adressiere ich denn das richtige reading, wenn ich mehrere angelegt habe?

der-Lolo



Crawler

Kannst mir vielleicht deinen Sketch zeigen? bin gerade an der gleichen Geschichte dran scheitere aber  :'(
// Demo using DHCP and DNS to perform a web client request.
// 2011-06-08 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

int strom = 2;
int watt = 1;
char *wattAsString;
   
byte Ethernet::buffer[700];
static uint32_t timer;

const char server[] PROGMEM = "192.168.178.1:8083";

// called when the client request is complete
static void my_callback (byte status, word off, word len) {
  Serial.println(">>>");
  Ethernet::buffer[off+300] = 0;
  Serial.print((const char*) Ethernet::buffer + off);
  Serial.println("...");
}

void setup () {
  pinMode(strom, INPUT);
  pinMode(gas, INPUT);
  Serial.begin(57600);
  Serial.println(F("\n[webClient]"));

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip); 
  ether.printIp("DNS: ", ether.dnsip); 

  if (!ether.dnsLookup(server))
    Serial.println("DNS failed");
   
  ether.printIp("SRV: ", ether.hisip);
}

void loop () {
  ether.packetLoop(ether.packetReceive());
    if (millis() > timer) {
    timer = millis() + 5000;
    Serial.println(); 
    Serial.println("<<< REQ ");
    Serial.print("watt=");
    Serial.println(watt);
    itoa(watt, wattAsString, 10);
    Serial.print("wattAsString=");
    Serial.println(wattAsString);
    ether.browseUrl(PSTR("/fhem?cmd.watt=set%20watt%20"), wattAsString, server, my_callback);
    }
  if (digitalRead(strom) == HIGH) {
    watt = watt + 1;
  }
}

Das Problem ist es wird kein Wert in fhem geändert und über den Seriellen Monitor bekomme ich nach dem ersten Aufruf von browseURL einen negativen 5 stelligen Wert in der Variable watt und eine Endlosschleife.
FHEM auf Raspi + HMLan + 14 Aktoren + OBIS(Strom) über GPIO

Totte10

Hallo,

könnte jemand für mich seinen funktionieren Code einmal posten.
Ich bin auch sehr an der Lösung interessiert.

beste Grüße

Thorsten