FHEM+Arduino Firmata via Ethernet+RF 433 Mhz Sender+Baumarkt-Funksteckdosen

Begonnen von blueberry63, 08 April 2014, 16:16:31

Vorheriges Thema - Nächstes Thema

Christian.

Hmmm... so hatte ich mir das nicht vorgestellt... Und wenn wir RCSwitch dazulegen, könnte es mit in den Standard? Das wäre mir dann eigentlich lieber, nachdem ich das schon so vorbereitet habe. Was ist denn Dein Favorit?
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

ntruchsess

mein Favorit wäre eigentlich ein Konzept für beliebige Firmata-erweiterungen außerhalb des Standards zu haben. An sich nicht schwer, aber das sollte (auf FRM-Seite) sauber durchdacht sein um keine neuen Hürden zu generieren.

RCSwitch-unterstützung würde ich schon in den Standard aufnehmen (allerdings ohne die RCSwitch-library. Die würde ich nur inkludieren, wenn man sie tatsächlich verändert hätte). In das RCSwitch-feature muss halt ein Hinweis rein, wo man die Library herbekommt (das RCSwitch-feature braucht eh noch ein bischen Dokumentation im Sourcecode, sonst weiß niemand, wozu das eigentlich gut ist.... Dann eine Headerdatei zur ConfigurableFirmata, über die man das Compilieren der Features, die externe Abhängigkeiten haben, explizit per '#define ENABLE_FEATURE_XXX' oder so anschaltet an- und ausschalten kann. In den betreffenden Features wird die gleiche Haederdatei als erstes mit eingebunden gefolgt von einem '#ifdef ENABLE_FEATURE_XXX', das den code des Features quasi abschaltet, wenn man das Feature nicht enabled hat. Das wäre aus meiner Sicht der einfachste Weg.

Gruß,

Norbert
while (!asleep()) {sheep++};

Christian.

Die Idee, Erweiterungen auch ohne Anpassungen am Standard vornehmen zu können, gefällt mir. Ich fühlte mich anfangs nicht so wohl dabei, in Constants, Protocol und Platform Anpassungen machen zu müssen. So eine Art Plugin-Konzept wäre schön. Dann müsste man Pin-Mode, Command usw.aber irgendwie weiter oben (im 20_FRM-Modul) angeben können. Das meintest Du hoffentlich.

Kurzer Zwischenstand zum Thema Empfang: das habe ich lokal implementiert, sowohl Arduino- als auch FHEM-seitig. Erste Tests funktionieren prima. Ich habe für den Test ein Modul geschrieben, das den Tristate-Code und alle Empfangsparameter als Readings enthält.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

ntruchsess

Zitat von: Christian. am 09 Mai 2014, 07:44:08
Dann müsste man Pin-Mode, Command usw.aber irgendwie weiter oben (im 20_FRM-Modul) angeben können. Das meintest Du hoffentlich.

ja genau, weiter oben eben. Die nötige Funktionalität ist in der Perl-firmata ja zugänglich. Idealerweise im jeweiligen FRM-Client-modul.
Zum Empfangen muss halt ein Sysex-listener in 10_FRM rein, der die empfangenen Sysex-messages an die jeweiligen 20_FRM_Client-module dispatched. Oder man erweitert das Sysex-listener-konzept der Perl-firmata, dass man je einen Listener pro Sysex-command registrieren kann, dann könnten die 20_FRM_Client-module direkt empfangen (gefällt mir eigentlich besser, schau ich mir heute nachmittag mal näher an, sollte nicht schwer sein, dass in die Perl-firmata aufzunehmen).

Gruß,

Norbert
while (!asleep()) {sheep++};

Christian.

Ich habe den Empfang jetzt fertig. Auch bei den Sende-Komponenten habe ich noch ein bisschen weitergemacht, es werden jetzt alle 3 Varianten von RCSwitch unterstützt (Code als String, long und TriState-String). Alle Änderungen habe ich jetzt auch bei GitHub hochgeladen.

Norbert, wenn Du ein Konzept für die Erweiterung von perl-firmata hast, passe ich meinen Code gerne nochmal an. Ansonsten warte ich jetzt auf Reaktionen vom Firmata-Team.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Christian.

Aus meiner Sicht ist das RCSwitch-Feature jetzt sowohl auf Arduino- als auch auch FHEM-Seite auf einem stabilen Stand. Man kann Daten senden, empfangen und RCSwitch konfigurieren. Der Code ist dokumentiert. Wer es ausprobieren möchte, ist herzlich dazu eingeladen. Der Code befindet sich in den Projekten auf GitHub, jeweils im Branch rcswitch. Der Einfachheit halber habe ich den aktuellen Stand auch als Archiv angehängt.

Wie geht es jetzt weiter?

  • Die FHEM-Seite könnte in Richtung 10_IT erweitert werden, z.B. durch ein ganz neues Modul oder Anpassung von 10_IT.
  • Das RCSwitch-Feature könnte in den Firmata-Standard aufgenommen werden. Das haben Norbert und ich bereits begonnen, mal sehen, wann und wie es da weiter geht.

Ich freue mich über Feedback.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

blueberry63

Hallo Christian,

ich habe mal einen schnellen Versuch gemacht, einen Sketch zusammenzubauen. Beim komplilieren bekomme ich folgenden Fehler:
Zitat
ConfigurableFirmata:270: error: 'stream' was not declared in this scope

Habe ich etwas beim Einfügen Deiner Programmteile in die Arduino IDE falschgemacht?

UPDATE: habe den Fehler gefunden: hatte gleichzeitig "define remote_ip" + "#define remote_host "server.local" aktiviert


Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

blueberry63

Hallo Michael,

kannst Du kurz zeigen, welche Module für die Ansteuerung der Funksteckdosen unbedingt not wendig sind. Ich liste mal alle Module auf und Du könntest Deine Version darunter schreiben. Ich denke, daß wird vielen anderen helfen, ihr Sketche abzuspecken.


//ETHERNET Begin
// für WIZ5100
#include <SPI.h>
#include <Ethernet.h>
oder (für ENC28J60)
//#include <Dhcp.h>
//#include <Dns.h>
//#include <ethernet_comp.h>
//#include <UIPClient.h>
//#include <UIPEthernet.h>
//#include <UIPServer.h>
//#include <UIPUdp.h>
//ETHERNET End

#include <Firmata.h>
#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;

#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

#include <utility/AnalogInputFirmata.h>
AnalogInputFirmata analogInput;

#include <utility/AnalogOutputFirmata.h>
AnalogOutputFirmata analogOutput;

#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
#include <utility/ServoFirmata.h>
ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
#include <utility/I2CFirmata.h>
I2CFirmata i2c;

#include <utility/OneWireFirmata.h>
OneWireFirmata oneWire;

#include <utility/StepperFirmata.h>
StepperFirmata stepper;

#include <RCSwitch.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
#include <utility/RCOutputFirmata.h>
RCOutputFirmata rcOutputFirmata;

#include <utility/FirmataExt.h>
FirmataExt firmataExt;

#include <utility/FirmataScheduler.h>
FirmataScheduler scheduler;

#include <utility/EncoderFirmata.h>
EncoderFirmata encoder;



Danke
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

blueberry63

Hallo Michael, hallo Norbert,

bei der Verwendung eines ENC28J60 Ethernet Shields bekommt man die Software wohl kaum in einen Arduino geladen. Bei meinem Test (nur kompiliert, nicht mit HW getestet) habe ich folgende Module geladen:


#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
#include <utility/ServoFirmata.h>
ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3

#include <RCSwitch.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
#include <utility/RCOutputFirmata.h>
RCOutputFirmata rcOutputFirmata;



ENC28J60 Ethernet shield (nur #include <UIPEthernet.h>):
"Binäre Sketchgröße: 32.078 Bytes (von einem Maximum von 32.256 Bytes)"

WIZ5100 Ethernet shield:
"Binäre Sketchgröße: 22.666 Bytes (von einem Maximum von 32.256 Bytes)"

(Das ist schon ein grasser Unterschied!)

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Wzut

32K sind verdammt knapp - siehe meine Probleme beim NET-IO mit dem Atmega32 -> http://forum.fhem.de/index.php/topic,16681.msg151072.html
Mit den dortigen Tipps von Norbert passte der Sketch dann , allerdings war das Ding  sehr unzuverlässig im Dauerbetrieb
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

blueberry63

@Christian,

wie sieht denn die Definition der Geräte in FHEM aus? Immer noch so:

Zitat
define ARD433 FRM 3030 global

define STD_A1 FRM_RC 7
attr STD_A1 DIP 1110010000
attr STD_A1 IODev ARD433

define STD_A2 FRM_RC 7
attr STD_A2 DIP 1111010000
attr STD_A2 IODev ARD433
attr STD_A2 SubDev 1

Ich würde dann heute Abend testen.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Christian.

Bei mir sieht die Konfiguration ungefähr so aus (ohne Gewähr, bin grad unterwegs):
define firmata FRM COM9@57600
define sender FRM_RCOUT 7
attr sender IODev firmata


Senden geht per set, z.B.
set sender tristateCode 00FFF00FFF0F
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Christian.

Ich habe 20_FRM_RCOUT so erweitert, dass es als IODev für 10_IT verwendet werden kann.

Beispiel-Konfiguration:
define firmata FRM COM9@57600
define rc_sender FRM_RCOUT 4
attr rc_sender IODev firmata
define schalter IT 00F0FF0FFF 0F 00
attr schalter IODev rc_sender


on, off und on-till konnte ich erfolgreich testen.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

papa

Zitat von: Christian. am 16 Mai 2014, 22:21:12
Ich habe 20_FRM_RCOUT so erweitert, dass es als IODev für 10_IT verwendet werden kann.

Cool. Ich hoffe, ich komme in der nächsten Woche mal zu testen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Bastelbernd

Hallo Christian,
das Senden funktioniert schon prima  :D
gerade getestet mit der 10_IT.
Wie sieht das mit dem Empfangen aus ?
Habe das in der Configurablen Firmata hinzugefügt.
Aber leider kommt in der FRM_RCIN nichts an.
Geht das noch nicht ?.
Ansonsten bis jetzt prima Arbeit.

Gruß Bernd 
FHEM auf Server mit Mainboard ASRock J3160B,Gehause Mini ITX E-3002+ SSD
Viessmann(optolink) HM-CFG-USB(HMLAN), PoKeys57E
Jeelik(Arduino)+LaCrosse, Nextion
Firmata+Arduino+1Wire+2xDS2423+IN+OUT
Electrolama zig-a-zig-ah!,Zigbee2MQTT