Vereinfachte Nutzung des Z-UNO

Na dann sollte das ja passen.
:+1::grinning:

Na mal schauen, vielleicht hat @Tobias ja noch ne tolle Idee.

Hallo zusammen,

ich steh grad irgendwie auf dem Schlauch mit der Übergabe der Werte vom Z-Uno in Richtung homee und vll. kann mir da jemand helfen.
Es werden ein paar Fragen, sorry…

Auf dem Z-Uno Board läuft ein Programm, das mir alle paar Sekunden einen Wert ausspuckt/generiert.
Konkret: eine Wattzahl, also z.B. 150 W, dann 320 W, dann 50 W, dann 1200 W, usw…
Datentyp „long“ (falls relevant).
Diese Programm läuft wunderbar und stabil.

Jetzt möchte ich eigentlich nur diesen Wert an homee übergeben.
Ich brauche keine „Rückmeldung“ von homee ans Z-Uno Board.

Was ist denn jetzt der richtige Aufruf?
Multilevel?
Also muss ich folgendes deklarieren?:
ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_MULTILEVEL(getterFunction, setterFunction))

Und dann müsste ich nur mit „getterFunction“ den jeweiligen Wert zurückgeben?
Das Abfrageintervall wird dann nur im homee bestimmt?
Ich kann die „getterFunction“ also nicht selbst aufrufen, um eine Datenübermittlung vom Z-Uno in Richtung homee zu forcieren? (bräucht ich auch gar nicht, ist nur interessehalber…).

Und wie kann ich homee sagen, dass ich den Typ „Power“ verwenden will?
Laut Aussage von @Tobias wird ja für u.a. den Typ „Power“ ein Attribut in homee angelegt.

Sorry für die vielen Fragen.

Bist du weiter gekommen @BetaTobi,
Habe mir das mal angeschaut für die Temperatur und das läuft soweit normal.

Wenn du noch nicht weiter bist dann schaue ich mal mit den Channel Meter Energy.

VG Micha

Hallo @Micha,

danke für die Rückmeldung.
Also ich bin teilweise weitergekommen.
Bisher hab ich „nur“ versucht mehr Infos zu bekommen, da ich nicht nur einfach etwas nachbasteln, sondern die Dinge auch verstehen wollte :slight_smile:
Auf jeden Fall hab ich noch keinen weiteren realen Test gestartet, aber ich erklär vielleicht mal eben genauer, was ich gemacht hab (vll. hilft es ja auch anderen).

Generell hab zwei größere Baustellen.
Einmal die korrekte Deklaration (ZUNO_SETUP_CHANNELS…) für meinen Anwendungsfall und dann die Übergabe der Werte an den Z-Wave Controller (homee bei mir).

Wegen der Deklaration hab ich im Netz zum Teil unterschiedliche Angaben für (eigentlich) gleiche Anwendungsfälle gefunden.
Was ich erst nach meinen letzten Post gefunden hab (und was mir dann weitergeholfen hat), ist die Definitionstabelle ZUNO_Definitions.h.

Dann hab ich noch weitere Beispiele gefunden.
Einmal die von dir:
zwave6fachtaster.ino
und
zuno6fachschalter.ino

Und diese aus dem Netz:
Eins
Zwei
Drei

Und wegen der Übergabe der Werte an den Z-Wave Controller war mir zunächst nicht klar, ob Werte immer nur dann übergeben werden, wenn der Controller danach fragt, oder ob man Werte immer „direkt“ an den Controller senden muss, oder beides :slight_smile:

Jetzt hab ich folgendes bisher verstanden und vll. kannst du ja kurz sagen, ob das so richtig ist, oder nicht.

Deklaration:
Da ich eine Leistung mit Einheit übergeben möchte (also z.B. 350 W), muss ich alles wie folgt angeben:
ZUNO_SETUP_CHANNELS(
ZUNO_SENSOR_MULTILEVEL(
ZUNO_SENSOR_MULTILEVEL_TYPE_POWER,
SENSOR_MULTILEVEL_SCALE_WATT,
SENSOR_MULTILEVEL_SIZE_TWO_BYTES,
SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS,
get_power_value));

Übergabe der Werte:
Dazu muss ich noch eine Funktion deklarieren, z.B.:
int get_power_value() {
return my_value;
}

Jetzt gibts zwei Möglichkeiten:
Enweder der Controller fragt selbst nach, dann wird die Funtion „int get_power_value“ aufgerufen, der Wert übergeben und gesendet.
Oder ich „erzwinge“ diese Übermittlung, in dem ich z.B. in der „loop-Anweisung“ die Funktion „zunoSendReport(1);“ aufrufe (geht dann aber nur max. alle 30 s).

Ist das so korrekt, oder hab ich irgendwo einen Denkfehler drin?

Viele Grüße,

Torben

Hallo @BetaTobi,

Grundsätzlich alles richtig verstanden.
Ich würde die Sensorwerte immer als sendreport senden.
Eine aktive Abfrage von seitens des Controller habe ich noch nicht durchgespielt.
Ich würde ein separates Void xxx() für das Delay einbauen und den dann im Loop aufrufen.
So hast du einen festen Wert für den Abruf oder du sendest den Report nach einer prozentualen Veränderung des value.
Ich würde darauf achten das zwave nicht mit Nachrichten zu fluten. In einem Versuch habe ich gemerkt das es hier mit dem Report nicht so schnell geht, daher zeitliche Verzögerungen einbauen.

VG Micha

Danke @Micha,

ich werds dann mal real durchtesten und mich wieder melden (mit einer hoffentlich positiven Rückmeldung :slight_smile: ).

Viele Grüße,

Torben

Cool!
Läuft :slight_smile:
Danke @Micha und alle anderen, die mir direkt oder indirekt geholfen haben :slight_smile:

Noch zwei Kleinkram-Fragen:
Ein Geräteprofil kann mich nicht hinterlegen, oder?
Ist jetzt nur ne kosmetische Fragen…

Und warum gibts bei mir den Punkt „Bewegungsalarm“? :thinking:
Jemand ne Idee?

Nein das Geräteprofil ist im homee fest gelegt. Der Bewegungsalarm kommt bei allen Geräten, die kein Profil haben.

Jut, danke.
Stört ja auch nicht wirklich :slight_smile:

Ich komme schon gar nicht soweit.

Gestern ist der Z-UNO bei mir eingetroffen, habe das IDE installiert und das Beispiel ZWave2IR in den Z-Uno geladen.

Zum anlernen drücke ich dreimal den BTN-Button.
Beim Z-Uno blinkt dann auch die rote LED, aber homee kann da nix finden.

Was mache ich da noch falsch?

Gelöst.

Ich habe unter Werkzeuge ==> Frequenz stand noch Russisch.
Hab’s umgestellt auf Europa und schon funktioniert alles.

2 „Gefällt mir“

Hallo in die Runde, ich hätte auch mal eine Frage an die Z-UNO Benutzer und zwar hab ich ein Problem das sich der Z-UNO nach einer Stromunterbrechung nichts wieder am Homee anmeldet sondern erst nachdem ich den Reset-Button noch einmal gedrückt habe. In meinem Szenario ist das ein wenig unpraktisch da ich mit dem Z-Uno eine Bewässerungssteuerung gebaut habe und ich nicht ohne weiteres an das Board komme.

Habt ihr Ideen?

Ich nutze das Standard Script was man sich auf der Webseite zusammen basteln kann.

Gruß Toni

Hallo @3ltonno wie sieht es denn mit dem erneuten abfragen aus ?
Hast du das mal probiert?
Ansonsten im Code schauen das beim starten eine Nachricht gesendet wird.

Hast du eventuell einen zweiten Z-UNO, mit dem du das Verhalten einmal ausprobieren kannst?
Oder alternativ mal einen anderen Code (testweise) auf den aktuellen Z-UNO laden, um ein Software- oder Hardware-Problem besser einzugrenzen?

Welchen Code hast du genutzt ?
Dann wüde ich das mal testen.

Ich glaube das ich den Code drin hab, für einmal Feuchtsensor, Temperatursensor und 4x Relais.
Wie gesagt ich hab da nur bedingt Ahnung von und hab den online Generator von Z-uno genommen.


// Global variables
byte pin3SensorMultilevelState;
byte pin4SensorMultilevelState;
byte pin5SensorMultilevelState;
byte pin6SensorMultilevelState;
byte pin13SwitchBinaryState = 0;
byte pin14SwitchBinaryState = 0;
byte pin15SwitchBinaryState = 0;
byte pin16SwitchBinaryState = 0;
// Z-Wave channels
ZUNO_SETUP_CHANNELS(
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_GENERAL_PURPOSE_VALUE, SENSOR_MULTILEVEL_SCALE_PERCENTAGE_VALUE, SENSOR_MULTILEVEL_SIZE_ONE_BYTE, SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS, pin3SensorMultilevelGetter),
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_GENERAL_PURPOSE_VALUE, SENSOR_MULTILEVEL_SCALE_PERCENTAGE_VALUE, SENSOR_MULTILEVEL_SIZE_ONE_BYTE, SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS, pin4SensorMultilevelGetter),
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_GENERAL_PURPOSE_VALUE, SENSOR_MULTILEVEL_SCALE_PERCENTAGE_VALUE, SENSOR_MULTILEVEL_SIZE_ONE_BYTE, SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS, pin5SensorMultilevelGetter),
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_GENERAL_PURPOSE_VALUE, SENSOR_MULTILEVEL_SCALE_PERCENTAGE_VALUE, SENSOR_MULTILEVEL_SIZE_ONE_BYTE, SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS, pin6SensorMultilevelGetter),
  ZUNO_SWITCH_BINARY(pin13SwitchBinaryGetter, pin13SwitchBinarySetter),
  ZUNO_SWITCH_BINARY(pin14SwitchBinaryGetter, pin14SwitchBinarySetter),
  ZUNO_SWITCH_BINARY(pin15SwitchBinaryGetter, pin15SwitchBinarySetter),
  ZUNO_SWITCH_BINARY(pin16SwitchBinaryGetter, pin16SwitchBinarySetter)
);
void setup() {
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(13, OUTPUT);
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
  pinMode(16, OUTPUT);
}
void loop() {
  pin3SensorMultilevelState = (byte) (13 * analogRead(3) / 133) + 0; // Math in integer numbers
  zunoSendReport(1); // report every 30 seconds
  pin4SensorMultilevelState = (byte) (13 * analogRead(4) / 133) + 0; // Math in integer numbers
  zunoSendReport(2); // report every 30 seconds
  pin5SensorMultilevelState = (byte) (13 * analogRead(5) / 133) + 0; // Math in integer numbers
  zunoSendReport(3); // report every 30 seconds
  pin6SensorMultilevelState = (byte) (13 * analogRead(6) / 133) + 0; // Math in integer numbers
  zunoSendReport(4); // report every 30 seconds
  digitalWrite(13, pin13SwitchBinaryState ? HIGH : LOW);
  digitalWrite(14, pin14SwitchBinaryState ? HIGH : LOW);
  digitalWrite(15, pin15SwitchBinaryState ? HIGH : LOW);
  digitalWrite(16, pin16SwitchBinaryState ? HIGH : LOW);
  delay(20);
}
// Getters and setters
byte pin3SensorMultilevelGetter() {
  return pin3SensorMultilevelState;
}
byte pin4SensorMultilevelGetter() {
  return pin4SensorMultilevelState;
}
byte pin5SensorMultilevelGetter() {
  return pin5SensorMultilevelState;
}
byte pin6SensorMultilevelGetter() {
  return pin6SensorMultilevelState;
}
void pin13SwitchBinarySetter(byte value) {
  pin13SwitchBinaryState = value;
}
byte pin13SwitchBinaryGetter() {
  return pin13SwitchBinaryState;
}
void pin14SwitchBinarySetter(byte value) {
  pin14SwitchBinaryState = value;
}
byte pin14SwitchBinaryGetter() {
  return pin14SwitchBinaryState;
}
void pin15SwitchBinarySetter(byte value) {
  pin15SwitchBinaryState = value;
}
byte pin15SwitchBinaryGetter() {
  return pin15SwitchBinaryState;
}
void pin16SwitchBinarySetter(byte value) {
  pin16SwitchBinaryState = value;
}
byte pin16SwitchBinaryGetter() {
  return pin16SwitchBinaryState;
}