Heizungssteuerung mithilfe Fhem und Arduino steuern

Begonnen von butaluk, 05 Dezember 2017, 15:54:23

Vorheriges Thema - Nächstes Thema

butaluk

Hi,
habe ich versurcht, ohne erfolg.

Gruß
   Vitalij

Thorsten Pferdekaemper

Hi,
Dein HM485_LAN device zeigt "disconnected". D.h. der Daemon läuft nicht oder irgendwas anderes geht sonst schief. Das müssen wir zuerst hinbekommen. ...also versuch mal ein "set hm485 HM485d restart" oder so (über die Oberfläche, ich weiß gerade nicht ganz genau die Syntax.)
Das Reading state sollte dann "opened" oder so anzeigen.
Falls das nicht geht: Ist der Daemon (also das Programm HM485d.pl) ausführbar? Den Pfad findest Du in Deinem Screenshot. Das Ding muss ausführbar sein, siehe auch hier:
https://wiki.fhem.de/wiki/HomeMatic_Wired#Installation_und_Upgrade_in_FHEM
Es kann damit auch andere Probleme geben, dann müsste aber was im FHEM Log erscheinen. Unter Umständen hilft "attr hm485 verbose 5", um genauer zu sehen, was denn eigentlich los ist.
Gruß,
   Thorsten
FUIP

butaluk

#17
Hallo Thorsten,

Jetzt habe ich es hin gekriegt dass der Status "opened" angezeigt wird.
Musste noch die Rechte anpassen.
https://forum.fhem.de/index.php?topic=28560.0

Wird das Arduino gestartet, sehe ich im Logfile vom FHEM dass da was geschick und epfangen wird.
2018.02.19 18:56:39 0: Featurelevel: 5.8
2018.02.19 18:56:39 0: Server started with 10 defined entities (fhem.pl:16170/2018-02-13 perl:5.024001 os:linux user:fhem pid:479)
2018.02.19 18:56:39 3: hm485: Start HM485d with command line: ./FHEM/lib/HM485/HM485d/HM485d.pl --hmwId 00000001 --serialNumber SGW0123456 --device /dev/ttyUSB0 --localPort 2000 --verbose 5
2018.02.19 18:56:40 3: hm485: HM485d was started with PID:   825
2018.02.19 18:56:40 3: hm485: Connect to HM485d delayed for 5 seconds
2018.02.19 18:56:40.451 3: HM485d: port 2000 opened
2018.02.19 18:56:40.452 3: HM485d: server waiting for client connection on port 2000
2018.02.19 18:56:40.452 3: Opening SERIAL device /dev/ttyUSB0
2018.02.19 18:56:40.499 3: SERIAL device opened
2018.02.19 18:56:40.502 3: HM485d: SERIALbaudrate=19200, databits=8, parity=even, stopbits=1, handshake=none
2018.02.19 18:56:40.502 2: HM485d: SERIAL connected to device /dev/ttyUSB0
2018.02.19 18:56:40.503 1: HM485d: Server started ...
2018.02.19 18:56:45 3: Opening hm485 device localhost:2000
2018.02.19 18:56:45.120 4: Connection accepted from HM485d_127.0.0.1_35518
2018.02.19 18:56:45.121 4: HM485d: Tx: H00,01,HMW-SOFT-GW,0.2.2,SGW0123456

2018.02.19 18:56:45 3: hm485: connected to device localhost:2000
2018.02.19 18:56:45 3: hm485 device opened
2018.02.19 18:56:45 3: hm485: Lan Device Information
2018.02.19 18:56:45 3: hm485: Protocol-Version: 01
2018.02.19 18:56:45 3: hm485: Interface-Type: HMW-SOFT-GW
2018.02.19 18:56:45 3: hm485: Firmware-Version: 0.2.2
2018.02.19 18:56:45 3: hm485: Serial-Number: SGW0123456
2018.02.19 18:56:45 3: hm485: Initialize the interface
2018.02.19 18:56:45.134 4: HM485d: Rx: FD3E30312C303030300D0A
2018.02.19 18:57:12.082 4: HM485d: Rx: FD02024B
2018.02.19 18:57:12.082 4: HM485d: Tx: FD03026100
2018.02.19 18:57:32.091 4: HM485d: Rx: FD02034B
2018.02.19 18:57:32.092 4: HM485d: Tx: FD03036100
2018.02.19 18:57:52.110 4: HM485d: Rx: FD02044B
2018.02.19 18:57:52.110 4: HM485d: Tx: FD03046100
2018.02.19 18:58:12.128 4: HM485d: Rx: FD02054B
2018.02.19 18:58:12.129 4: HM485d: Tx: FD03056100

Allerdings im Serail Monitor vom Arduino sehe ich nur das etwas geschickt aber nicht empfangen wird.

Wenn ich Discovery ausführe, wir folgendes in Logfile eingetragen:
2018.02.19 19:33:21.496 4: HM485d: Rx: FD0D6F53C8FFFFFFFF98000000017A
2018.02.19 19:33:21.498 5: SW: fdffffffff9800000001037a6d72
2018.02.19 19:33:21.500 3: HM485d: Tx: (111:1) I[0](0,Y,F,B)(98) 00000001 -> FFFFFFFF [3] 7A(z)  {6D72}
2018.02.19 19:33:21.601 4: HM485d: Rx: FD0D7053C8FFFFFFFF98000000017A
2018.02.19 19:33:21.603 5: SW: fdffffffff9800000001037a6d72
2018.02.19 19:33:21.605 3: HM485d: Tx: (112:1) I[0](0,Y,F,B)(98) 00000001 -> FFFFFFFF [3] 7A(z)  {6D72}
2018.02.19 19:33:21.707 4: HM485d: Rx: FD04714400FF
2018.02.19 19:33:21.707 3: Discovery mode started.
2018.02.19 19:33:22.309 5: SW: fd0000000003026c76
2018.02.19 19:33:22.311 3: HM485d: Tx: DISCOVERY(1) 00000000 -> 00000000
2018.02.19 19:33:22.323 5: SW: fd0000000003026c76
2018.02.19 19:33:22.324 3: HM485d: Tx: DISCOVERY(1) 00000000 -> 00000000
2018.02.19 19:33:22.336 5: SW: fd0000000003026c76
2018.02.19 19:33:22.337 3: HM485d: Tx: DISCOVERY(1) 00000000 -> 00000000
2018.02.19 19:33:22.348 5: SW: fd800000000302cf68
2018.02.19 19:33:22.350 3: HM485d: Tx: DISCOVERY(1) 00000000 -> 80000000
2018.02.19 19:33:22.361 5: SW: fd800000000302cf68
2018.02.19 19:33:22.363 3: HM485d: Tx: DISCOVERY(1) 00000000 -> 80000000
2018.02.19 19:33:22.374 5: SW: fd800000000302cf68
2018.02.19 19:33:22.375 3: HM485d: Tx: DISCOVERY(1) 00000000 -> 80000000
2018.02.19 19:33:22.376 4: HM485d: Tx: FD057163000000
2018.02.19 19:33:22.378 3: HM485d: Discovery: END
2018.02.19 19:33:22.379 4: HM485d: Rx: FD0D7253C8FFFFFFFF98000000015A
2018.02.19 19:33:22.381 5: SW: fdffffffff9800000001035a4d36
2018.02.19 19:33:22.382 3: HM485d: Tx: (114:1) I[0](0,Y,F,B)(98) 00000001 -> FFFFFFFF [3] 5A(Z)  {4D36}
2018.02.19 19:33:22.485 4: HM485d: Rx: FD0D7353C8FFFFFFFF98000000015A
2018.02.19 19:33:22.487 5: SW: fdffffffff9800000001035a4d36
2018.02.19 19:33:22.489 3: HM485d: Tx: (115:1) I[0](0,Y,F,B)(98) 00000001 -> FFFFFFFF [3] 5A(Z)  {4D36}


Im Anhang ist noch mal das Screen von der HM485 Config.

Gruß
   Vitalij


Thorsten Pferdekaemper

Hi,
das sieht so aus als ob Du sowohl FHEM als auch den Arduino neu gestartet hast. Mach mal folgendes:

1. FHEM starten, aber den Arduino nicht (Stecker aus dem Arduino ziehen)
2. Drei Minuten warten
3. Jetzt den Arduino starten (Stecker reinstecken)

Sollte das aus irgendwelchen Gründen nicht gehen (Arduino fest verkabelt), dann so:

1. FHEM starten
2. Drei Minuten warten
3. Reset-Taste am Arduino drücken

Wenn das Device dann immer noch nicht in FHEM angelegt wird, dann hätte ich gerne ein Level-5-Log vom HM485_LAN Device, aber nur von Schritt 3 oben.
Noch zwei Bemerkungen:
1. Ich hatte schon gesagt, dass Discovery nicht implementiert ist. Das wird auch so bleiben, wenn Du es noch ein paar Mal probierst.
2. Statt Screenshots bitte ein "list" posten. Screenshots enthalten weniger Information und sind für copy&paste ganz schlecht.

Gruß,
   Thorsten


FUIP

butaluk

Hallo Thorsten,

Es hat geklappt!
Das Arduino wurde erkannt und als neues Gerät im FHEM angelegt.
Danke für deine Unterstützung!

Habe deinen Tutorial soweit durch. Hast dir wirklich mühe gegeben das ganze auf die Beine zu stellen.

Mir ist aufgefallen dass die lange Tastendrücke funktionieren nicht. Habe die "HBWSwitch.h" in der Lid vergliechen, die sind identisch.

Wie kann man die XML umstricken dass beim Tastendruck der Status vom Taster angezeigt wird (on; off), anstatt den Zähler hoch zu zählen?

Und noch eine Frage. Ich möchte 1Wire Temperatur Sensoren an das Arduino anschließen und die Temperatur am Fhem übermitteln. Hast du einen Beispiel?

Gruß
   Vitalij

Thorsten Pferdekaemper

Zitat von: butaluk am 20 Februar 2018, 07:25:54
Mir ist aufgefallen dass die lange Tastendrücke funktionieren nicht. Habe die "HBWSwitch.h" in der Lid vergliechen, die sind identisch.
Die HBWSwitch hat nichts mit Tastendrücken zu tun. Das wäre dann HBWKey. ...und was meinst Du mit "funktionieren nicht". Was erwartest Du und was passiert?

Zitat
Wie kann man die XML umstricken dass beim Tastendruck der Status vom Taster angezeigt wird (on; off), anstatt den Zähler hoch zu zählen?
Das wäre dann kein Taster mehr, sondern ein Kontaktsensor oder so. Es reicht auch nicht, die XML umzubauen. Da muss noch mehr passieren. Ich habe dazu leider momentan kein Beispiel. Hier gibt es was ähnliches:
https://github.com/ThorstenPferdekaemper/HBWired/tree/master/HBW-Sen-Key-12
Da wird zumindest ein "Key release" gesendet.

Zitat
Und noch eine Frage. Ich möchte 1Wire Temperatur Sensoren an das Arduino anschließen und die Temperatur am Fhem übermitteln. Hast du einen Beispiel?
Ja, aber das ist nicht auf die neuen Libraries umgebaut. Schau mal hier, vielleicht kannst Du was damit anfangen:
https://github.com/kc-GitHub/HM485-Lib/tree/thorsten/HBW-1W-T10
Außerdem hat der 6fach-Taster einen Temperatursensor:
https://github.com/haus-bus/HBW-Devices/tree/HM-Wired
Zu letzterem gebe ich aber keinerlei weitere Kommentare oder Support, da mich das Verhalten der beteiligten Personen sehr geärgert hat.
Gruß,
   Thorsten
FUIP

butaluk

Hi,

Zitat...und was meinst Du mit "funktionieren nicht".
Ich meine wenn die Taste lange gedrückt wird, ändert sich nichts in dem Status.

ZitatDie HBWSwitch hat nichts mit Tastendrücken zu tun.
In deinem Tutorial hast du geschrieben...
Zitatwomöglich hat jemand auch lange Tastendrücke ausprobiert. Im Prinzip hätte das funktionieren sollen, hat es aber nicht.
Da war noch ein Fehler in der HBWSwitch.h, der jetzt korrigiert ist.
Aufgrund dessen habe ich die "HBWSwitch.h" Datei aus dem Tutorial mit der Datei aus Librari verglichen.

Thorsten Pferdekaemper

Ah, ok. Das kann sein, dass das im Zusammenhang mit "Keys" nach "Switches" war. Da hatte ich wohl einen Fehler bei der Konfiguration, der dazu geführt hat, dass in dem Fall tatsächlich die langen Tastendrücke nicht gehen.
Kannst Du mal ein "list" des Tasterkanals schicken?
Ist das genau das Device aus dem Tutorial?
Gruß,
   Thorsten
FUIP

butaluk

Hallo Thorsten,

habe gestern mich mit der XML bescheftigt und bisschen rum gespielt, jetzt funktioniert das mit dem "long-press".
Auf der Arduino Seite habe ich nichts verändert.
Vorher lief es aber nicht.
ZitatIst das genau das Device aus dem Tutorial?
Ja.

Gruß
  Vitalij

butaluk

#24
Hallo Thorsten,

Danke für den Tipp!
ZitatDas wäre dann kein Taster mehr, sondern ein Kontaktsensor oder so. Es reicht auch nicht, die XML umzubauen. Da muss noch mehr passieren. Ich habe dazu leider momentan kein Beispiel. Hier gibt es was ähnliches:
https://github.com/ThorstenPferdekaemper/HBWired/tree/master/HBW-Sen-Key-12
Genau das was ich suche.

Bezüglich 1-Wire, hast du eventuell Lust mich bei der Umsetzung zu unterstützen?
Wäre echt Toll!

Gruß
  Vitalij

butaluk

Hallo zusammen.

Habe mir jetzt einen HBW Gerät mit Thorstens Hilfe gebaut.
Das Gerät hat 9 Ausgang Kanäle, die zum ansteuern der Fußbodenheizung Ventile verwendet werden.

Lege die beiden Dateien hier raus falls einer so etwas braucht.
#define HMW_DEVICETYPE 0xAB

#define HARDWARE_VERSION 0x01
#define FIRMWARE_VERSION 0x0100
#define NUM_CHANNELS 9

#include "HBWSoftwareSerial.h"
#include "HBWired.h"
#include "HBWSwitch.h"
#include "HBWKey.h"

#define RS485_RXD 4   // Receive-Pin
#define RS485_TXD 2   // Transmit-Pin
#define RS485_TXEN 3  // Transmit-Enable
#define PIN_ARRAY uint8_t pins[NUM_CHANNELS] = {5, 6, 7, 8, 9, 10, 11, 12, 13}; //Hier zu verwendete Pins eintragen.

struct hbw_config {
  uint8_t  logging_time;     // 0x0001
  uint32_t central_address;  // 0x0002 - 0x0005
  // NEU: Mehrere switches
  hbw_config_switch switchcfg[NUM_CHANNELS];  // 0x0006 - 0x0016
  // NEU: Mehrere keys
  //hbw_config_key keycfg[2];        // 0x000E - 0x0011
} config;


HBWSoftwareSerial rs485(RS485_RXD, RS485_TXD);
HBWDevice* device = NULL;

//NEU (9 Kanaele)
HBWChannel* channels[NUM_CHANNELS];

void setup()
{
  Serial.begin(19200);
  rs485.begin();
  // create channels
   PIN_ARRAY
  // NEU: Definition mehrerer Kanaele pro Typ
  for(uint8_t i = 0; i < NUM_CHANNELS; i++){
      channels[i] = new HBWSwitch(pins[i], &(config.switchcfg[i]));
   };
  //channels[0] = new HBWSwitch(5,&(config.switchcfg[0]));
  //channels[1] = new HBWSwitch(6,&(config.switchcfg[1]));
  //channels[2] = new HBWSwitch(7,&(config.switchcfg[2]));
  //channels[3] = new HBWSwitch(8,&(config.switchcfg[3]));
  //channels[4] = new HBWSwitch(9,&(config.switchcfg[4]));
  //channels[5] = new HBWSwitch(10,&(config.switchcfg[5]));
  //channels[6] = new HBWSwitch(11,&(config.switchcfg[6]));
  //channels[7] = new HBWSwitch(12,&(config.switchcfg[7]));
  //channels[8] = new HBWSwitch(13,&(config.switchcfg[8]));

  device = new HBWDevice(HMW_DEVICETYPE, HARDWARE_VERSION, FIRMWARE_VERSION,
                         &rs485,RS485_TXEN,sizeof(config),&config,
                         // NEU (9 Kanaele)
                         NUM_CHANNELS,channels,
                         &Serial,
                         NULL, NULL);
  hbwdebug(F("B: 2A\n"));
}


void loop()
{
  // call the HBW loop
  device->loop();
};

Die Lib's für Arduino können von Thorstens Tutorial bezogen werden.

Und XML
<?xml version="1.0"?>
<device eep_size="1024" version="01">
<supported_types>
<type priority="2" id="HIZUNG-AKTOR-DO-9" name="Heizung Aktor mit 9 Digitalen Ausgaengen">
<parameter const_value="0xAB" size="1" index="0"/>
<parameter const_value="0" size="1" index="1"/>
</type>
</supported_types>

<paramset id="HIZUNG-AKTOR-DO-9_dev_master" type="MASTER">
<parameter id="LOGGING_TIME">
<logical type="float" unit="s" default="5.0" max="25.5" min="0.1"/>
<physical size="1.0" type="integer" interface="eeprom">
<address index="0x0001"/>
</physical>
<conversion type="float_integer_scale" offset="0.0" factor="10"/>
</parameter>
<parameter id="CENTRAL_ADDRESS" hidden="true">
<logical type="integer"/>
<physical size="4" type="integer" interface="eeprom">
<address index="0x0002"/>
</physical>
</parameter>
<enforce id="CENTRAL_ADDRESS" value="1"/>
</paramset>

<!-- NEU: frames -->
<frames>
<frame id="LEVEL_SET" type="#x" channel_field="10" direction="to_device">
<parameter size="1.0" index="11.0" type="integer" param="LEVEL"/>
</frame>
<frame id="LEVEL_GET" type="#S" channel_field="10" direction="to_device"/>
<frame id="INFO_LEVEL" type="#i" channel_field="10" direction="from_device" event="true">
<parameter size="1.0" index="11.0" type="integer" param="LEVEL"/>
</frame>
</frames>

<channels>
<channel index="0" type="MAINTENANCE" count="1" class="maintenance" ui_flags="internal">
</channel>
<channel index="1" type="SWITCH" count="9" physical_index_offset="-1">
        <!-- NEU: Beschreibung des Kanals -->
      <paramset id="hmw_switch_ch_master" type="MASTER" address_step="2" address_start="0x06">
<parameter id="LOGGING">
<logical type="option">
<option id="OFF"/>
<option id="ON" default="false"/>
</logical>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0"/>
</physical>
</parameter>
</paramset>
<paramset id="hmw_switch_ch_values" type="VALUES">
<parameter id="STATE" operations="read,write,event" control="SWITCH.STATE">
<logical type="boolean" default="false"/>
<physical type="integer" interface="command" value_id="LEVEL">
<set request="LEVEL_SET"/>
<get request="LEVEL_GET" response="INFO_LEVEL"/>
<event frame="INFO_LEVEL"/>
</physical>
<conversion type="boolean_integer" true="200" false="0" threshold="1"/>
</parameter>
</paramset>
</channel>
</channels>

</device>


Gruß
   Vitalij

Thorsten Pferdekaemper

Zitat von: butaluk am 21 Februar 2018, 21:34:27
Bezüglich 1-Wire, hast du eventuell Lust mich bei der Umsetzung zu unterstützen?
Wäre echt Toll!
Also so wirklich viel Zeit habe ich momentan nicht übrig.
Was fehlt Dir denn dabei? Hier gibt es eine Umsetzung mit den alten Libraries:
https://github.com/kc-GitHub/HM485-Lib/tree/thorsten/HBW-1W-T10
Da sollte klar werden, wie das mit dem 1-Wire Krams geht. Die Sachen in den XMLs hat sich nicht geändert, da das sowieso vorgegeben ist.
Gruß,
   Thorsten
FUIP

butaluk

Hallo Thorsten,
ZitatWas fehlt Dir denn dabei?

Ich wollte die 1-Wire Funktion in die "HIZUNG-AKTOR-DO-9" Funktion, die ich gepostet habe, integrieren.
Das HBW-1W-T10 Gerät in dem von dir gepostetem Link sieht ganz schön kompliziert aus.

Gruß
   Vitalij

Morgennebel

Warum willst Du überhaupt 1-Wire mit Arduinio machen? Warum selbstfrickeln?

Nimm nen USB-Stick und fertig...

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Thorsten Pferdekaemper

Zitat von: butaluk am 26 Februar 2018, 18:13:05
Ich wollte die 1-Wire Funktion in die "HIZUNG-AKTOR-DO-9" Funktion, die ich gepostet habe, integrieren.
Das ist schon klar. Ich meinte nur, ob Dein Problem der 1-Wire-Teil, das XML oder der HBW-spezifische Teil im Arduino ist.
Das HBW-1W-T10 ist etwas komplex, da es die alten Libraries verwendet. Dich dürfte aber erstmal nur alles interessieren, was "onewire" (oder so ähnlich) im Namen hat.
Was Du aus dem XML brauchst müsste nach der Erklärung zum XML aus dem Tutorial einigermaßen klar sein.
...dann bleibt nur noch ein selbstgebastelter Sensor-Kanal, der so ähnlich wie ein Taster-Kanal aussieht (also HBWKey oder so), nur dass er die Temperatur anstatt den Tastendruck sendet.
Gruß,
    Thorsten
FUIP