OWX asynchron überarbeitet

Begonnen von ntruchsess, 30 Juni 2013, 00:55:59

Vorheriges Thema - Nächstes Thema

T.ihmann

Zitat von: fhem-challenge am 18 August 2014, 13:48:26
Anonsten "resettet" meine "Not-"Funktion den Firmata...


Wo kommt diese Not-Funktion denn hin, in 99MyUtils.pm ? Und wie wird sie gestartet ?

fhem-challenge

#331
Zitat von: T.ihmann am 27 August 2014, 10:42:18
Wo kommt diese Not-Funktion denn hin, in 99MyUtils.pm ? Und wie wird sie gestartet ?

Das kann beliebig gemacht werden.

Da ich davon ausgehe, dass die Funktion irgendwann wieder überflüssig wird, habe ich diese ganz bewusst nicht in der 99MyUtils.pm abgelegt.

Die Funktion rufe ich lediglich periodisch mit "trigger check_owc_async" auf (alle 5 Minuten im Rahmen von anderen periodischen Überprüfungen in FHEM, die ich dort mache) auf.

Du kannst die Funktion so verwenden, lediglich "doWarning($iodev,"OWX_ASYNC meldet sich nicht und wurde neu gestartet")" solltest Du raus nehmen, da das eine meiner 99Utils... Funktionen für die Alarmierung ist, die Du sicherlich nicht hast (und auch nicht brauchst).

Oder Du machst einfach ein ...

define check_owx +*00:05:00 trigger check_owx_async

... für ein Check, alle 5 Minuten.


Weiter Voraussetzung für die Funktion ist natürlich, dass Du am OW-Bus auch Sensoren hast, die vom Typ (TYPE=OWTHERM) sind, sonst findet die Funktion nicht das zugehörige "iodev". Also wenn du klassischer Weise DS18B20 o.Ä. hast, und die dann seit x-Sekunden kein Event mehr auslösen.

Viele Grüße!

Andreas

check_owx_async {
my @@device=devspec2array("TYPE=OWTHERM");
my $must_reset = 0;
my $watch_time = "900";
my $iodev = "";
foreach(@@device)
{
my $state_time = $defs{$_}{READINGS}{"temperature"}{TIME};
my $last_activity_since = int(time - time_str2num($state_time));
if ($last_activity_since > $watch_time)
{
my $iodev_ow = AttrVal($_,"IODev","");
$iodev = AttrVal($iodev_ow,"IODev","");
fhem ("get $_ temperature");
$must_reset = 1
}
}
if ($must_reset == 1)
{
if ($iodev)
{
fhem ("set $iodev reset");
Log 3,"Warnung: $iodev wird neu gestartet, da OWX_ASYNC nicht erreichbar ist"
}
doWarning($iodev,"OWX_ASYNC meldet sich nicht und wurde neu gestartet")
}
}

Achim

Hallo,

meine Antwort passt nicht so ganz zu dem Thema, das Problem wurde hier aber kurz angesprochen (und ich habe es in keinem anderen Thread gefunden)

http://forum.fhem.de/index.php/topic,13580.msg161589.html#msg161589

die Zeileattr Wohnzimmer_LF_DS1 stateFormat {sprintf("Luftfeuchte: %.1f /% Temperatur: %.1f °C",ReadingsVal($name,"relHumidity",0), ReadingsVal($name,"temperature",0))}verursacht folgende Fehlermeldung im fhemlog
Zitat2015.02.01 17:13:47 1: PERL WARNING: Invalid conversion in sprintf: "% T" at (eval 775) line 1.
Nach langem Suchen, Testen und Lesen habe ich in "Einführung in Perl, Ausgabe 6" (nicht lachen...) auf Seite 95 die Lösung gefunden. Das %-Zeichen wird nicht durch den Backslash zum "normalen" ASCII Zeichen sondern durch ein zweites %-Zeichen. Folgende Zeile bringt keine Fehlermeldung mehr:attr Wohnzimmer_LF_DS1 stateFormat {sprintf("Luftfeuchte: %.1f %% Temperatur: %.1f °C",ReadingsVal($name,"relHumidity",0), ReadingsVal($name,"temperature",0))}

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

stromer-12

Zitat von: Achim am 01 Februar 2015, 17:46:23
die Zeileattr Wohnzimmer_LF_DS1 stateFormat {sprintf("Luftfeuchte: %.1f /% Temperatur: %.1f °C",ReadingsVal($name,"relHumidity",0), ReadingsVal($name,"temperature",0))}verursacht folgende Fehlermeldung im fhemlogNach langem Suchen, Testen und Lesen habe ich in "Einführung in Perl, Ausgabe 6" (nicht lachen...) auf Seite 95 die Lösung gefunden. Das %-Zeichen wird nicht durch den Backslash zum "normalen" ASCII Zeichen sondern durch ein zweites %-Zeichen.

Nur du hast gar kein Backslash verwendet, sondern einen Slash.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Achim

Hallo,

ist ein Schreibfehler in meiner Mail. Ich habe es auch noch einmal mit einem Backslash getestet. Mit Backslash gibt es auch den Error.

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

bads

#335
Ich kämpfe mit dauernden Abstürzen bei OWX_AYNC.

Die Anbindung an FHEM erfolgt über die Configurable-Firmate auf einem NANO mit einem Ethernet Shield ENC28J60. Soweit läuft alles etwa 3-4 Stunden durch, dann bricht die Verbindung zum Nano ab.

Bei Ausführen des Befehls "set FRMDevice reset", schmiert dann FHEM gnadenlos ab. Im Log ist nichts zu sehen, obwohl "verbose 5" beim FRM-Device gesetzt wurde.

Solange die Verbindung läuft, kann ein "set FRMDevice reset" ausgeführt werden und FHEM stürzt nicht ab. Der Effekt tritt erst auf, wenn die Verbindung abgebrochen ist.

Jetzt glaube ich nicht, dass meine Konfiguration ungewöhnlich ist, aber ich weiss im Moment nicht so richtig weiter.

Irgendwelche Ideen?

[EDIT] Das sind die internals gerade nach einem Neustart von FHEM und Reset vom Nano (Strom ab und an)

Zitat
Internals:
   DEF        3030 global
   DeviceName 3030
   FD         5
   NAME       FRMHeizung
   NOTIFYDEV  global
   NR         281
   NTFY_ORDER 50-FRMHeizung
   PORT       3030
   STATE      listening
   TYPE       FRM
   Readings:
     2015-02-27 09:38:06   error           Unhandled sysex command
Attributes:
   model      nano
   verbose    5

Internals:
   ALARM      0
   ASYNC      1
   DEF        DS18B20 992590060000
   ERRCOUNT   1
   INTERVAL   300
   IODev      OWio1
   NAME       Temp.HZ.FBVorlauf
   NOTIFYDEV  global
   NR         283
   NTFY_ORDER 50-Temp.HZ.FBVorlauf
   OW_FAMILY  28
   OW_ID      992590060000
   PRESENT    0
   ROM_ID     28.992590060000.23
   STATE      defined
   TYPE       OWTHERM
   owg_temp
   owg_th
   owg_tl
   Readings:
     2015-02-27 12:13:07   alarm           0
     2015-02-27 12:18:19   present         0
     2015-02-27 12:49:00   state           defined
     2015-02-27 12:13:17   temperature     29.4375
   Tempf:
     factor     1
     offset     0
Attributes:
   IODev      OWio1
   event-on-change-reading state
   interval   300
   model      DS18B20
   room       OWX
   tempConv   onread
   tempHigh   75
   tempLow    18

Internals:
   ALARM      0
   ASYNC      1
   DEF        DS18B20 6FFC8F060000
   ERRCOUNT   1
   INTERVAL   60
   IODev      OWio1
   NAME       Temp.HZ.Vorlauf
   NOTIFYDEV  global
   NR         284
   NTFY_ORDER 50-Temp.HZ.Vorlauf
   OW_FAMILY  28
   OW_ID      6FFC8F060000
   PRESENT    0
   ROM_ID     28.6FFC8F060000.EC
   STATE      defined
   TYPE       OWTHERM
   owg_temp
   owg_th
   owg_tl
   Readings:
     2015-02-27 12:13:07   alarm           0
     2015-02-27 12:18:19   present         0
     2015-02-27 12:49:00   state           defined
     2015-02-27 12:13:19   temperature     54.6875
   Tempf:
     factor     1
     offset     0
Attributes:
   IODev      OWio1
   event-on-change-reading state
   interval   60
   model      DS18B20
   room       OWX
   tempConv   onread
   tempHigh   75
   tempLow    18

Internals:
   ALARM      0
   ASYNC      1
   DEF        DS18B20 1E3A90060000
   ERRCOUNT   1
   INTERVAL   300
   IODev      OWio1
   NAME       Temp.HZ.Zuluft
   NOTIFYDEV  global
   NR         285
   NTFY_ORDER 50-Temp.HZ.Zuluft
   OW_FAMILY  28
   OW_ID      1E3A90060000
   PRESENT    0
   ROM_ID     28.1E3A90060000.5F
   STATE      defined
   TYPE       OWTHERM
   owg_temp
   owg_th
   owg_tl
   Readings:
     2015-02-27 12:13:07   alarm           0
     2015-02-27 12:18:19   present         0
     2015-02-27 12:49:00   state           defined
     2015-02-27 12:13:18   temperature     12.625
   Tempf:
     factor     1
     offset     0
Attributes:
   IODev      OWio1
   event-on-change-reading state
   interval   300
   model      DS18B20
   room       OWX
   tempConv   onread
   tempHigh   75
   tempLow    5

Internals:
   DEF        9
   INTERFACE  firmata
   IODev      FRMHeizung
   NAME       OWio1
   NOTIFYDEV  global
   NR         282
   NTFY_ORDER 50-OWio1
   PIN        9
   PRESENT    0
   ROM_ID     FF
   STATE      Init Failed: OWio1, FRMHeizung is not connected
   TYPE       OWX_ASYNC
   dokick     ignored
   interval   60
   ALARMDEVS:
   DEVS:
   Tasks:
Attributes:
   IODev      FRMHeizung
   buspower   parasitic
   dokick     1
   interval   60
   room       OWX

FHEM 5.5 auf Banana-PI, Raspberry PI mit FHEM2FHEM, ENOCEAN PI, ELTAKO FTK, ELTAKO FHF, HMLAN, HM-SEC-MDIR, HM-SEC-SC2, 1-Wire, Fussboden-Heizungssteuerung mit Selbstbau HM-Mod-Re-8 + Stellantriebe 230V

Achim

Hallo,

aus eigener Erfahrung liegt das Problem nicht auf der FHEM Seite sondern auf der Arduino/Firmata Seite. Wie viel freien Speicher hast du für lokale Variablen nach dem Kompilieren des Sketches? 400 Bytes würde ich jetzt mal als Minimum ansehen. Und die neuste Version (2.06) von Norbert verwenden.
In der Message http://forum.fhem.de/index.php/topic,16681.msg150242.html#msg150242 sind die Links zu der benötigten Firmware gelistet.

Viele Grüße
Achim

1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

bads

Hallo Achim,

ich nutze Configurable Firmata V2.06. Nach dem Compilieren kommt:

.tmp\FirmataWorks.cpp.hex
Binäre Sketchgröße: 24.344 Bytes (von einem Maximum von 30.720 Bytes)

Das sollte doch ausreichen? Ich habe fast alles auskommentiert, UDP ausgeschaltet etc., alles was irgendwo einmal als hilfreich kommentiert wurde um Speicher zu sparen.

Guido
FHEM 5.5 auf Banana-PI, Raspberry PI mit FHEM2FHEM, ENOCEAN PI, ELTAKO FTK, ELTAKO FHF, HMLAN, HM-SEC-MDIR, HM-SEC-SC2, 1-Wire, Fussboden-Heizungssteuerung mit Selbstbau HM-Mod-Re-8 + Stellantriebe 230V

Achim

Hallo Guido,

nicht die Sketchgröße ist entscheidend sondern Teile der "zweiten Zeile"
ZitatDer Sketch verwendet 23.162 Bytes (75%) des Programmspeicherplatzes. Das Maximum sind 30.720 Bytes.
Globale Variablen verwenden 1.545 Bytes (75%) des dynamischen Speichers, 503 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

bads

#339
Ähem :(

Bei mir ist keine zweite Zeile. Ich nutze IDE 1.06. Muss das irgendwo eingestellt werden?

[EDIT] Mit dem Programm avr-size bekomme ich anscheinend den Wert, wenn ich mcu korrekt angegeben habe

avr-size -C --mcu=atmega328 FirmataWorks.cpp.elf
AVR Memory Usage
----------------
Device: atmega328

Program:   24344 bytes (74.3% Full)
(.text + .data + .bootloader)

Data:       1568 bytes (76.6% Full)
(.data + .bss + .noinit)


Danke
Guido
FHEM 5.5 auf Banana-PI, Raspberry PI mit FHEM2FHEM, ENOCEAN PI, ELTAKO FTK, ELTAKO FHF, HMLAN, HM-SEC-MDIR, HM-SEC-SC2, 1-Wire, Fussboden-Heizungssteuerung mit Selbstbau HM-Mod-Re-8 + Stellantriebe 230V

Achim

Hallo Guido,

ich verwende die 1.6.0 Version. Ich habe erst vor kurzem die "alten" 1.0.x Versionen gelöscht. Ich bin mir nicht  sicher ob dies ein Feature der neuen IDE ist oder ob man das konfigurieren kann.

Viele Grüße
Achim
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais

bads

Gestern kam das in China bestellte W5100 Ethernet Shield für den Nano. Mit diesem Shield ist der Speicherverbrauch etwa
10% geringer.

Trotzdem ist nach 8 Stunden mit obiger Konfiguration Schluss und der Arduino antwortet nicht mehr, auch nicht mit PING mehr zu erreichen. Ein "set FRMDevice reset" bringt FHEM auch sofort zum Absturz.

Zitat
avr-size -C --mcu=atmega328 WZ5000.cpp.elf
AVR Memory Usage
----------------
Device: atmega328

Program:   23578 bytes (72.0% Full)
(.text + .data + .bootloader)

Data:       1338 bytes (65.3% Full)
(.data + .bss + .noinit)

Es sieht für mich nach einem Memory-Leak in der Configurable-Firmata aus, wo ich aber ohne Kenntnisse des Codes nicht weiter komme.

Hat denn jemand eine funktionierende 1-Wire/Configurable Firmata Konfiguration, die über Wochen oder Monate ohne Probleme funktioniert? Wenn ja, wie habt ihr das hinbekommen?

Danke
FHEM 5.5 auf Banana-PI, Raspberry PI mit FHEM2FHEM, ENOCEAN PI, ELTAKO FTK, ELTAKO FHF, HMLAN, HM-SEC-MDIR, HM-SEC-SC2, 1-Wire, Fussboden-Heizungssteuerung mit Selbstbau HM-Mod-Re-8 + Stellantriebe 230V

Tweak

Sorry für den etwas überflüssigen Beitrag, aber ich wollte einfach mal Danke sagen für diese ausgezeichnete Erweiterung!
Durch das OWX_ASYNC haben sich bei mir so viele Probleme von selbst erledigt das ist einfach nur perfekt!

Ich frage 26 Temp-Sensoren + ein paar Zähler über einen Busmaster ab das war zuvor eine "Katastrophe" wenn ich das im Vergleich zu jetzt mal so sagen darf.

Wirklich top Arbeit!

Lg
Manuel

Prof. Dr. Peter Henning

 >:( Die "Katastrophe" bitte sonstwohin stecken - in den einzelnen Modulen von OWX steckt nämlich genausoviel Arbeit, wie in der asynchronen Erweiterung.

pah

Tweak

Zitat von: Prof. Dr. Peter Henning am 21 März 2015, 10:10:22
>:( Die "Katastrophe" bitte sonstwohin stecken - in den einzelnen Modulen von OWX steckt nämlich genausoviel Arbeit, wie in der asynchronen Erweiterung.

pah

Hallo pah,
So war das doch nicht gemeint. Ich meinte das eher in Bezug auf meine Installatiobsweise! Ohne das owx gäbe ja gar kein asynchrones.
Bitte daher nicht falsch verstehen.
ihr leistet hier wirklich ganz große Arbeit! Und zwar alle!

LG