AskSin++ Library

Begonnen von papa, 08 September 2016, 11:11:25

Vorheriges Thema - Nächstes Thema

Psi

Das mit dem delay ist weiterhin unklar.

Nutze ich delay=0 oder delay=0x00ff, dann bekomme ich


SetLevel: C8 0041 0000 (bzw 00FF)
Ramp/Level: 40/200
// Ablauf der Rampe ...
Ramp/Level: 50/0
// Ablauf der Rampe ...


Bei delay=0xffff funktioniert es wie erwartet. Wo ist denn der Code der dafür zuständig ist?




Psi

Ahh vielen Dank! Kapiert!

Nur

Ramp/Level: 40/200
setState
setState UpdateSate
setState DELAY_NO
setState
setState UpdateSate
setState DELAY_NO
setState
setState UpdateSate
setState RAMP
Ramp/Level: 50/0
setState
setState UpdateSate


ist noch komisch wenn delay != 0 && delay != 0xffff. Das zweite "Ramp/Level: 50/0" sollte ausbleiben.
Hier fallen wir wohl in if ( state == AS_CM_JT_RAMPON || state == AS_CM_JT_RAMPOFF ) { rein?
Sieht für mich erst mal nach nem Bug aus aber da (zumindest ich) kein delay brauche ist weitere Investigation nicht nötig.

Vielen Dank für die Erklärungen !!!

papa

#1413
Nein das ist kein Bug - bei 0x00ff kommt nach der Umrechnung 0 raus. Wenn die 30 Sekunden delay haben willst, musst Du ((30 * 10) << 5) übergeben. Alternativ kannst Du auch  (((15 * 10) << 5) | 0x01) nehmen.

Edit: Mist ist doch ein Bug in der Umrechnung - da gibt es nen Überlauf.

Edit2: Ist gefixt
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Psi

In der Tat :)

Dennoch: sdev.channel(1).set(200, 0b01000001, 0b01000001);


Ramp/Level: 40/200
...
Ramp/Level: 50/0


Aber wegen mir müssen wir hier nicht weiter graben, meine Anforderung ist erfüllt.

Beetle2003

Hallo,

Ich habe mehrere HMSCI-3 aufgebaut.
Bei jedem benötige ich eine unterschiedliche Tasteranzahl.
Diese ist von 1. Bis 3.
In dem Sketch gibt es folgenden Eintrag

// Anzahl Kanäle (3 - 7)
#define CHANNEL_COUNT 3
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {14, 15, 16, 17, 3, 6, 9 };

Wie mache ich die Abfrage, dass ich je nach Wetz in CHANNEL-COUNT eine unterschiedliche Pin Config hinterlegen kann und wo Stelle ich die angezeigten Channels ein.

Wenn ich die Konfig manuell anpasse, funktioniert das, möchte es automatisch doch es werden immer 3 Channels angezeigt. Die nicht konfigurierten reagieren nicht. Wäre schön wenn diese auch nicht sichtbar wären.

Danke Euch.

papa

FHEM legt immer alle Channel für das Device an. Das ist in der HMConfig hart verdrahtet.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Beetle2003

Zitat von: papa am 21 Februar 2020, 22:54:12
FHEM legt immer alle Channel für das Device an. Das ist in der HMConfig hart verdrahtet.

Danke

Wie setzte ich die Anordnung der Eingänge im Sketch um
Für 1 Taster

#define CHANNEL_COUNT 1
// Pin für Kanal        1   2   3
uint8_t sens_pins[] = {15, 14, 16 };

Für 2 Taster

#define CHANNEL_COUNT 2
// Pin für Kanal        1   2   3
uint8_t sens_pins[] = {14, 16, 15 };

Für 3 Taster

#define CHANNEL_COUNT 3
// Pin für Kanal        1   2   3
uint8_t sens_pins[] = {15, 14, 16 };

Wie baue ich die 3 Einstellungen in eine Abfrage ein, damit ich die Konfiguration nicht jedes Mal die Pins anpassen muss.

papa

Ich glaube, ich verstehe nicht, was Du meinst.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Beetle2003

#1419
Zitat von: papa am 22 Februar 2020, 16:28:52
Ich glaube, ich verstehe nicht, was Du meinst.

Hallo,

wie baue ich eine If then elsif Abfrage in einen Scatch ein?

#define CHANNEL_COUNT 1

if (CHANNEL_COUNT == 1) {
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {15, 14, 16, 17, 3, 6, 9 };
}
else if (CHANNEL_COUNT == 2) {
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {14, 16, 15, 17, 3, 6, 9 };
}
else {
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {14, 15, 16, 17, 3, 6, 9 };
}

Fehlermeldung:
Arduino: 1.8.9 (Windows 10), Board: "Arduino Pro or Pro Mini, ATmega328P (3.3V, 8 MHz)"


HM-SCI-3-FM:29:1: error: expected unqualified-id before 'if'

if (CHANNEL_COUNT == 1) {

^~

HM-SCI-3-FM:33:1: error: expected unqualified-id before 'else'

else if (CHANNEL_COUNT == 2) {

^~~~

HM-SCI-3-FM:37:1: error: expected unqualified-id before 'else'

else {

^~~~

exit status 1
expected unqualified-id before 'if'


Danke

papa

Du kannst hier kein if nehmen, da sonst die Pindefinition nur innerhalb der Klammern gültig ist. Du willst ja auch nicht zur Laufzeit - sondern zur Übersetzungszeit testen. Da brauchst Du das Präprozessor-Kommando #if.
#define CHANNEL_COUNT 1

#if CHANNEL_COUNT == 1
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {15, 14, 16, 17, 3, 6, 9 };
#elif CHANNEL_COUNT == 2
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {14, 16, 15, 17, 3, 6, 9 };
#else
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {14, 15, 16, 17, 3, 6, 9 };
#endif

Siehe auch https://de.wikibooks.org/wiki/C-Programmierung:_Pr%C3%A4prozessor##if
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

RaspiLED


WikiBooks, cool kannte ich noch nicht ;-)

Also hier:
https://de.m.wikibooks.org/wiki/C-Programmierung:_Pr%C3%A4prozessor

Gruß Arnd


Signalduino (Nano, ESP, ...), CUL (Busware, Nano, Maple, ...), Homematic (HM-MOD-UART-RPI, ESP, Maple, ...), LaCrosseGateway (LGW, ESP, ...), 1-wire, ESPEasy, Bravia, Yamaha, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Beetle2003

Zitat von: papa am 23 Februar 2020, 16:52:03
Du kannst hier kein if nehmen, da sonst die Pindefinition nur innerhalb der Klammern gültig ist. Du willst ja auch nicht zur Laufzeit - sondern zur Übersetzungszeit testen. Da brauchst Du das Präprozessor-Kommando #if.
#define CHANNEL_COUNT 1

#if CHANNEL_COUNT == 1
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {15, 14, 16, 17, 3, 6, 9 };
#elif CHANNEL_COUNT == 2
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {14, 16, 15, 17, 3, 6, 9 };
#else
// Pin für Kanal        1   2   3   4  5  6  7
uint8_t sens_pins[] = {14, 15, 16, 17, 3, 6, 9 };
#endif

Siehe auch https://de.wikibooks.org/wiki/C-Programmierung:_Pr%C3%A4prozessor##if

Hallo papa,

vielen Dank für Deine Hilfe und den Link.


Beetle2003

Zitat von: Beetle2003 am 23 Februar 2020, 18:12:57
Hallo papa,

vielen Dank für Deine Hilfe und den Link.

Funktioniert so.

molnitza

#1424
Hallo liebe Leute,

ich bin zur Zeit etwas am Verzweifeln. Ich habe mir ein HM-WDS40-TH-I-BME280 gebaut. Dabei bin ich wie folgt vorgegangen:

1. Die lowfuses auf E2 geändert .
avrdude -p m328p -c avripsmkii -U lfuse:w:0xE2:m

2. Externen Quarz durch eines mit 32kHz ersetzt.
https://www.reichelt.de/uhrenquarz-metallgehaeuse-2x2x6mm-6pf-32-768-ms1v-6-p85043.html?&trstct=pos_0&nbc=1

3. Arduino mit FreqTest.ino geflasht und drei Zyklen laufen lassen.
https://github.com/pa-pa/AskSinPP/blob/master/examples/FreqTest/FreqTest.ino

4. HM-WDS40-TH-I-BME280/HM-WDS40-TH-I-BME280.ino geflasht, wobei ich USE_RTC einkommentiert und Device Serial gändert habe.
https://github.com/jp112sdl/Beispiel_AskSinPP/blob/master/examples/HM-WDS40-TH-I-BME280/HM-WDS40-TH-I-BME280.ino

5. Sensor in Betrieb genommen und mit der Zentrale gepairt.

Bis hierhin funktioniert alles problemlos. Der Sensor wird gefunden und sendet fleißig Daten.
Mein nächster Schritt war den Sensor mit einem HM-CC-RT-DN zu pairen. Nur scheint hier irgendetwas nicht zu stimmen. Pairen lassen sich die Geräte. Nur blinkt im Anschluss das Funksymbol auf dem Display des HM-CC-RT-DN und die Temperaturen werden nicht übernommen, was nach meiner Meinung wieder auf falsche Timings hindeutet.

Hat jemand eine Idee?
Hier noch die serielle Ausgabe mit Zeitstempel: https://pastebin.com/4em9Ywbb