Hauptmenü

Arduino anbindung

Begonnen von Markus79, 14 März 2016, 09:27:20

Vorheriges Thema - Nächstes Thema

Markus79

Bin neu hier und hab gleich mal eine Frage.

Ich möchte im ersten Ausbauschritt 30 Werte von meinem Arduino Mega 2560 mit Ethernet Shield2 an meinen Raspberry Pi 3 mir FHEM senden.

Mit dem Arduino hab ich schon Grundkenntnisse mit FHEM bin ich noch absoluter Anfänger.

Ich suche noch eine einfache Möglichkeit wie ich die Werte sende und Empfange.

Habe leider keine Anleitung oder Beispiele gesehen wie es geht.

FIRMATA oder ähnliches möchte ich nicht nehmen weil auf dem Arduino auch noch Steuerungsaufgaben laufen sollen.

FHEM soll erst mal nur für die Visualisierung und Trendaufzeichnung sein.

Ich weiß das mir hier niemand die Fertige Lösung geben kann aber wäre froh über ein Beispiel oder eine Anleitung wie die Kommunikation funktioniert.

Vielen Dank im Voraus

Markus

cs-online

Hallo,

hast Du die Möglichkeit, deinen Arduino über Netzwerk HTTP senden zu lassen ?  z.B.


HTTP://IP:8083/fhem?cmd=setreading%20DEINDEVICE%20state%20DEINWERT


dann kannst Du DEINDEVICE als Dummy anlegen und mit DEINWERT als Inhalt befeuern... Dann also 30 Devices anlegen und regelmäßig einschreiben lassen...

Wäre so eine Idee, wenn man Firmata nicht nehmen will...

Grüße

Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

justme1968

schau dir mal das KeyValueProtokoll an.

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

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

Markus79

Zitat von: cs-online am 14 März 2016, 12:28:44
Hallo,

hast Du die Möglichkeit, deinen Arduino über Netzwerk HTTP senden zu lassen ?  z.B.


HTTP://IP:8083/fhem?cmd=setreading%20DEINDEVICE%20state%20DEINWERT


dann kannst Du DEINDEVICE als Dummy anlegen und mit DEINWERT als Inhalt befeuern... Dann also 30 Devices anlegen und regelmäßig einschreiben lassen...

Wäre so eine Idee, wenn man Firmata nicht nehmen will...

Grüße

Christian

Also inzwischen kann ich die Daten an FHEM senden. Habe aber glaub noch ein Fehler im Datenaufbau.

Zitat
BUF
HTTP://192.168.2.40:8083/fhem?cmd=setreading%20AHM_T01%20state%20DEINWERT HTTP://192.168.2.40:8083/fhem?cmd=setreading%20AHM_T01%20state%20DEINWERT HTTP://192.168.2.40:8083/fhem?cmd=setreading%20AHM_T01%20state%20DEINWERT
FD
5
NAME
WEB_192.168.2.41_1025
NR
80
PEER
192.168.2.41
PORT
1025
SNAME
WEB
SSL
STATE
Connected
TEMPORARY
1
TYPE
FHEMWEB


Sende wohl doch zu viel an FHEM.

Hier noch das aktuelle Arduino Programm
#include <Ethernet2.h>
#include <SPI.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 41 };
byte server[] = { 192, 168, 2, 40 }; // Google

EthernetClient client;

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting...");

  if (client.connect(server, 8083)) {
    Serial.println("connected");
    //client.println("GET /search?q=arduino HTTP/1.0");
    //client.println();
    //client.println("HTTP://IP:8083/fhem?cmd=setreading%20AHM_T01%20state%20DEINWERT");
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    Serial.println("==servver ist da");
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
  client.println("HTTP://192.168.2.40:8083/fhem?cmd=setreading%20AHM_T01%20state%20DEINWERT");
  Serial.println("HTTP://192.168.2.40:8083/fhem?cmd=setreading%20AHM_T01%20state%20DEINWERT");
  Serial.println("====weitere Runde");
  delay(10000);
 
 
}


Markus

justme1968

wenn du wirklich den HTTP weg gehst solltest du &XHR=1 nicht vergessen sonst sendet fhem jedes mal eine web seite als antwort.

ansonsten schau dir noch mal das vorgeschlagene KeyValueProtocol an. damit ist die arduino und die fhem seite besser getrennt und du bekommst auch keine probleme wenn du z.b. die devices auf fhem seite umbenennst. das ganze funktioniert auch transparent seriell oder übers netz.

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

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

Markus79

Habe ich das mit dem KeyValueProtocol  richtig verstanden? (Hab wohl noch einen Fehler drin)

Übertragung per Netzwerk
"OK VALUES TEST 01=22"

und in FHEM
define TEST KeyValueProtocol <Type> 01

über  <Type> habe ich noch nichts gefunden.

Sollten erstmal nur Temperatur, Luftfeuchte und Prozentwerte übertragen werden.


MFG
Markus

justme1968

was dein sketch senden muss ist:OK VALUES <type> <id> <key1>=<value1>,<key2>=<value2>,...

<type> ist der device typ deines sensors. kannst du dir ausdenken
<id> ist eine eindeutige sensor id um mehrere sensoren zu unterscheiden


in fhem legst du ein JeeLink device an. entweder als serielles device oder als netzwerk device. die KeyValueProtokoll devices für die einzelnen sensoren werden automatisch angelegt wenn du autocreate aktiv hast. fhem baut die verbindung auf und wartet auf die werte.

beispiele für die arduino seite findest du im lacrosse gateway und im davis sketch.

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

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