Gartenbewässerung

Begonnen von teichtaucher, 20 Juli 2016, 22:25:01

Vorheriges Thema - Nächstes Thema

teichtaucher

Hallo,
ich kann mittels Homematic hm-mod-re-8 und einer Relaisplatine meine Gartenbewässerung steuern - aber bis jetzt nur händisch. Jetzt überlege ich, wie das automatisieren kann.

Ich habe vier Kanäle, die ich steuern kann.

1) Pumpe
2) Sprinkler Kreis 1
3) Sprinkler Kreis 2
4) Wassersteckdose

Um die Bewässerung einzuschalten, muss immer die Pumpe laufen und dann eines der Ventile von 2) - 4). Am liebsten hätte ich das so, dass ich zwei Dummys definiere. Einen für die Startzeit, und einen für die Laufzeit.

Zur Startzeit vom Dummy startet dann die Pumpe und der Kreis 1. Wenn die Laufzeit abgelaufen ist, schaltet Kreis 1 ab und Kreis 2 ein. Wenn wieder die Laufzeit abgelaufen ist, schaltet Kreis 2 und die Pumpe ab.

Wie kann ich das machen? Wie definiere ich einen dummy für einen Zeitwert?

Mir schwebt so was vor:

at dummyStarzeit set Pumpe on-for-timer  dummyDauer * 2
at dummyStarzeit set SprinklerKreis1 on-for-timer dummyDauer
at dummyStarzeit + dummyDauer set SprinklerKreis2 on-for-timer dummyDauer

Kann das jemand in realen Code übersetzen?

rudolfkoenig

Ich habe die Aufgabe mit einem externen Perl-Skript geloest, eine vereinfachte und kommentierte Version ist unter contrib/garten.pl auch eingecheckt. Laeuft seit 8 Jahren unveraendert und unproblematisch.

spacy

Hallo,

Habe das bei mir per DOIF gelöst.

Habe 3 Kreise + Regensensor. Bei mir habe ich das so geregelt, es kann immer nur ein Kreis laufen. Habe über das WEB Interface die möglichkeit, die Startzeit + Dauer + Wochentag zubestimmen. Dieses wird dann für die automatische Beregnung genutzt. Ausserdem kann ich es auch manuel starten.
Wenn der Regensensor schaltet ist keine Automatische bewässerung nötig.

So sieht das dann für ein Ventil aus.

define Ventil3 dummy
attr Ventil3 alias Beregnung Vorne
attr Ventil3 devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3 eventMap on:An off:Aus
attr Ventil3 group Beregnung Vorne
attr Ventil3 room Bewässerung
attr Ventil3 sortby 1
attr Ventil3 webCmd Auto:An:Aus

define Ventil3Start dummy
attr Ventil3Start alias Beregnung Start Vorne
attr Ventil3Start group Beregnung Vorne
attr Ventil3Start room Bewässerung
attr Ventil3Start setList state:time
attr Ventil3Start sortby 3
attr Ventil3Start webCmd state

define Ventil3Dauer dummy
attr Ventil3Dauer alias Beregnungs Dauer Vorne
attr Ventil3Dauer group Beregnung Vorne
attr Ventil3Dauer room Bewässerung
attr Ventil3Dauer setList state:time
attr Ventil3Dauer sortby 4
attr Ventil3Dauer webCmd state

define Ventil3Tag dummy
attr Ventil3Tag alias Beregnungstag
attr Ventil3Tag group Beregnung Vorne
attr Ventil3Tag room Bewässerung
attr Ventil3Tag setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
attr Ventil3Tag sortby 5
attr Ventil3Tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
attr Ventil3Tag webCmd state
#attr Ventil3Tag eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6

define Ventil3An dummy
attr Ventil3An alias Zustand
attr Ventil3An devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3An group Beregnung Vorne
attr Ventil3An room Bewässerung
attr Ventil3An sortby 2

define Wasser_Vorne_Ein_Auto DOIF ([([Ventil3Start]) - ([Ventil3Start]+[Ventil3Dauer])|[Ventil3Tag:weekdays]] and [Ventil3] eq "Auto" and [Ventil1An] ne "An" and [Ventil2An] ne "An" and [Regensensor] eq "off" or [Ventil3] eq "An") (set relais PortA7 on , set Ventil3An An) DOELSE (set relais PortA7 off , set Ventil3An Aus)
attr Wasser_Vorne_Ein_Auto do always

define Wasser_Vorne_An notify Ventil3:An { fhem "set relais PortA7 on" }
define Wasser_Vorne_Aus notify Ventil3:Aus { fhem "set relais PortA7 off" }


Vielleicht kannst es ja gebrauchen.

Gruß
Klaus

teichtaucher

Danke, das hilft mir weiter. Aber so, wie ich das verstehe regelst du den Tag, Uhrzeit und Dauer für jeden Kreis einzeln, richtig?

Ich muss mal überlegen, wie ich das mache. Ich will das ja so haben, dass erst der eine und dann der andere Kreis läuft. D.h. eine Startzeit und die Dauer ist dann für den ersten und den zweiten Kreis gültig.

spacy

Moin,

ja ich regel das für die 3 Kreise seperat.

Paul

Bei mir werden auch 3 Bereiche nacheinander beregnet. Wobei die Dauer konstant ist nur die Beregnung erst nach der Dunkelheit einsetzt.
Regen ist ein Dummy der verändert wird wenn es geregnet hat.

Du müsstest nur noch deine Pumpe im at einschalten.

*{sunset("REAL",3600)} { if ( Value ("Regen") eq "an") {fhem ("set Regner3 on-for-timer 600; define R2 at +00:11 set Regner2 on-for-timer 600; define R3 at +00:22 set Regner1 on-for-timer 600")}}
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

spacy

Ich habe mich mit meinem Garten und Landschaftsbauer unterhalten und der hat mir geraten den Rasen immer früh morgens zu wässern.
Abends ist er aufgeheizt und das Wasser kann nicht so gut ins Erdreich.
Wobei er morgens durch die kühlere Nacht aufnahme fähiger sein soll.

Michi1978

So wie du das hier geregelt hast gefällt mir das sehr gut! Gibt es noch die Möglichkeit das ganze über sunrise und sunset zu erweitern? also dass immer nur vor Sonnenaufgang und nach Sonnenuntergang gewässert wird?

Zitat von: spacy am 21 Juli 2016, 08:53:34
Hallo,

Habe das bei mir per DOIF gelöst.

Habe 3 Kreise + Regensensor. Bei mir habe ich das so geregelt, es kann immer nur ein Kreis laufen. Habe über das WEB Interface die möglichkeit, die Startzeit + Dauer + Wochentag zubestimmen. Dieses wird dann für die automatische Beregnung genutzt. Ausserdem kann ich es auch manuel starten.
Wenn der Regensensor schaltet ist keine Automatische bewässerung nötig.

So sieht das dann für ein Ventil aus.

define Ventil3 dummy
attr Ventil3 alias Beregnung Vorne
attr Ventil3 devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3 eventMap on:An off:Aus
attr Ventil3 group Beregnung Vorne
attr Ventil3 room Bewässerung
attr Ventil3 sortby 1
attr Ventil3 webCmd Auto:An:Aus

define Ventil3Start dummy
attr Ventil3Start alias Beregnung Start Vorne
attr Ventil3Start group Beregnung Vorne
attr Ventil3Start room Bewässerung
attr Ventil3Start setList state:time
attr Ventil3Start sortby 3
attr Ventil3Start webCmd state

define Ventil3Dauer dummy
attr Ventil3Dauer alias Beregnungs Dauer Vorne
attr Ventil3Dauer group Beregnung Vorne
attr Ventil3Dauer room Bewässerung
attr Ventil3Dauer setList state:time
attr Ventil3Dauer sortby 4
attr Ventil3Dauer webCmd state

define Ventil3Tag dummy
attr Ventil3Tag alias Beregnungstag
attr Ventil3Tag group Beregnung Vorne
attr Ventil3Tag room Bewässerung
attr Ventil3Tag setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
attr Ventil3Tag sortby 5
attr Ventil3Tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
attr Ventil3Tag webCmd state
#attr Ventil3Tag eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6

define Ventil3An dummy
attr Ventil3An alias Zustand
attr Ventil3An devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3An group Beregnung Vorne
attr Ventil3An room Bewässerung
attr Ventil3An sortby 2

define Wasser_Vorne_Ein_Auto DOIF ([([Ventil3Start]) - ([Ventil3Start]+[Ventil3Dauer])|[Ventil3Tag:weekdays]] and [Ventil3] eq "Auto" and [Ventil1An] ne "An" and [Ventil2An] ne "An" and [Regensensor] eq "off" or [Ventil3] eq "An") (set relais PortA7 on , set Ventil3An An) DOELSE (set relais PortA7 off , set Ventil3An Aus)
attr Wasser_Vorne_Ein_Auto do always

define Wasser_Vorne_An notify Ventil3:An { fhem "set relais PortA7 on" }
define Wasser_Vorne_Aus notify Ventil3:Aus { fhem "set relais PortA7 off" }


Vielleicht kannst es ja gebrauchen.

Gruß
Klaus

tagedieb

Guten Morgen  zusammen

Da ich auch in den Morgenstunden beregne UND bei Bedarf zusätzlich abends, habe ich mir folgende Variante erstellt

Komplettberegnung:ein set MotionBeregnung off; set Masterventil01re on;
set Versenkregner04li on; sleep 600;
set Versenkregner04li off;
set Versenkregner02re on; sleep 600;
set Versenkregner02re off;
set Pipeline03li on; set Pipeline03re on; sleep 300;
set Pipeline03li off; set Pipeline03re off;
set Versenkregner04ob on; sleep 900;
set Versenkregner04ob off;
set Pipeline03li on; sleep 300;
set Pipeline03li off;
set AquaContour01li on; set Perlschlauch02li on;set Hochbeet02ob on; sleep 900;
set Hochbeet02ob off;set Perlschlauch02li off; set AquaContour01li off;
set Versenkregner04re on; sleep 600;
set Versenkregner04re off;
set Pipeline03li on; set Pipeline03re on; sleep 300;
set Pipeline03li off; set Pipeline03re off;
set HintHecke03ob on;set AquaCountour04re on; sleep 900;
set HintHecke03ob off;set AquaCountour04re off;
set Pipeline03re on; sleep 600;
set Pipeline03re off; set Masterventil01re off;
set Komplettberegnung aus; set MotionBeregnung on


Komplettberegnung ist ein Dummy und kann per Regensensor und per Zeit eingestellt werden
die Motion Bewegung ist zum Einstellen bestimmter Beregner, wenn fremde Tiere sich in dem Bereich bewegen
so habe ich alle 8 Kreise nacheinander( kann sie  aber auch einzeln schalten) und FHEM kann eine bestimmte Zeit, auf das Ende der Beregnung den Rasenmäher losschicken, wenn der Rasen trocken ist

Vielleicht gibt dir das auch Ideen für deine Bewässerung

Ich wünsche einen schönen Tag
tagedieb
FHEM 5.6 auf Cubitruck
CUL und Cul 868 und 2 HM LAN an Zbox
Remoteserver auf 2.Zboxi
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-SW1-FM,HM-LC-SW4-PCB,HM-LC-Sw1PBU-FM,HM-PB-2-WM55,HM-PB-6-WM55,HM-SCI-3-FM,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SC-2,HM-SEC-TIS,HM-WDS10-TH-O u.viele mehr
diverse IT Empfänger und LW3

Nighthawk

Hallo Rudi,

könntest Du evtl. dein Script etwas näher erläutern,
ich komme da mit meinen rudimentären Perl - Programmierkenntnissen nicht auf Anhieb klar.


Danke und Gruß
Alex

fiedel

Zitat von: Nighthawk am 14 Mai 2018, 16:27:02
Hallo Rudi,

könntest Du evtl. dein Script etwas näher erläutern,
ich komme da mit meinen rudimentären Perl - Programmierkenntnissen nicht auf Anhieb klar.


Danke und Gruß
Alex

Jetzt ist er bestimmt eingeschnappt...  ;D :-X
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

OliS.

Du könntest das eigentlich ganz leicht mit einem DOIF lösen. Habe ich zumindest bei mir so gemacht. Bei mir starten die einzelnen Ventilkreise auch nacheinander, in Abhängigkeit der jeweiligen Laufzeit der Kreise. Das Ganze habe ich über das Wait-Attribut gelöst.

So in der Art:

([Startzeit])
(set Kreis1 on-for-timer [Laufzeit])
(set Kreis2 on-for-timer [Laufzeit])
...

attr <doif> wait [Laufzeit],[Laufzeit]...)


Bei mir ist die Startzeit grundsätzlich sunrise. Ich setze bei Bedarf abends für die einzelnen Kreise die Laufzeit von "aus" auf eine bestimmte Dauer.

Oli
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

Nighthawk

#12
Hallo Oli,
mit Doif habe ich aktuell auch den Ablauf der Timer am laufen, diese Aktion muss ich aber jedes Mal manuell anstossen.
Was ich aber gern haben würde ist eine Automatik die sich nach dem "gefallenen" Regen umd evtl. Sonneneinstralung bzw. Temperatur richtet.
Da Rudi ja schon ein funktionierendes Script hat, muss ich ja das Rad nicht neu erfinden, sondern nur verstehen.

rudolfkoenig

ZitatJetzt ist er bestimmt eingeschnappt
Nee, so einfach geht es nicht, hatte aber in den letzten Tagen wenig Zeit.

Zitatkönntest Du evtl. dein Script etwas näher erläutern,
Und ich dachte, es sei ausfuehrlich kommentiert :)

Ausgangspunkt:
- ein Temperatur und Regenmesser (bei mir ein KS300), dessen Tagesdaten in der Datei $avg gespeichert sind. Format in der Datei ist
YYYY-MM-DD_HH:MM:SS ks300DeviceName avg_day: T: 8.1  H: 98  W: 2.9  R: 2.5
("uebliches" KS300 Format). Daraus werden die Durchschnitt-Temperaturen und die Regenmengen der letzten $navg Zeilen mit avg_day rausgefischt, und auch der Name des KS300 Sensors, um die Werte des aktuellen Tages direkt in FHEM abzufragen.

- eine Pumpe und 7 Ventile (Anzahl ist nicht festgelegt). Typ ist nicht relevant, nur dass es on und off kann

- die Ventiltabelle mit den relativen Zeiten.

Nach dem im Header beschriebenen Formel wird aus Temperatur und Regenmenge der letzten $navg Tage + heute ein Faktor berechnet. Bei jedem Ventil ist eine Zeit hinterlegt, der mit diesem Faktor multipliziert wird. Falls die errechnete Zeit ueber $min (5Minuten) liegt, dann wird das Ventil eingeschaltet, sonst wird diese Zeit in gardencoll.log zwischengespeichert, und auf die Zeit morgen draufaddiert.

Da meine FS20-Ventilschalter schlecht erreichbar waren, habe ich alle Befehle mit 1sec Abstand zweimal gesendet.

Man kann alles testen, wenn man das Programm mit dem "test" Argument ausfuehrt.
Also man aendert Parameter, ruft "perl garden.pl test" auf, und schaut, ob die berechneten Werte einem passen.Achtung: das Programm liegt in contrib, d.h. ich plane keinen aktiven Support dafuer.
Ich habe sie auch seit laengerem nicht getestet, sie ist laut SVN 11+ Jahre alt. :)

Meine aktuell verwendete (und nicht veroeffentlichte) Version habe ich vor 8+ Jahren erweitert:
- mehrere Ventile parallel
- verwendet on-for-timer statt on
- Temperatur und Regenmenge weiter zurueckliegenden Tage wird weniger gewichtet

Nighthawk

Hallo Rudi,

vielen Dank für die Erklärung, ich spiele mal das ganze durch.

Jewe

#15
Hallo,

habe das gestern ausprobiert. Gefällt mir ganz gut. allerdings habe ich noch ein Problem festgestellt.

Das Usergeading weekdays funktioniert so nicht. Woher bekomme ich weekday2number ?

attr Ventil3Tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}

oder muss die auskommentierte zeile doch rein ?
#attr Ventil3Tag eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6

EDIT : Hat sich erledigt. Beim kopieren auf dem Tablet haben sich andere Leerzeichen eingeschlichen. Diese habe ich entfernt. Nun funktioniert es.


Zitat von: spacy am 21 Juli 2016, 08:53:34
Hallo,

Habe das bei mir per DOIF gelöst.

Habe 3 Kreise + Regensensor. Bei mir habe ich das so geregelt, es kann immer nur ein Kreis laufen. Habe über das WEB Interface die möglichkeit, die Startzeit + Dauer + Wochentag zubestimmen. Dieses wird dann für die automatische Beregnung genutzt. Ausserdem kann ich es auch manuel starten.
Wenn der Regensensor schaltet ist keine Automatische bewässerung nötig.

So sieht das dann für ein Ventil aus.

define Ventil3 dummy
attr Ventil3 alias Beregnung Vorne
attr Ventil3 devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3 eventMap on:An off:Aus
attr Ventil3 group Beregnung Vorne
attr Ventil3 room Bewässerung
attr Ventil3 sortby 1
attr Ventil3 webCmd Auto:An:Aus

define Ventil3Start dummy
attr Ventil3Start alias Beregnung Start Vorne
attr Ventil3Start group Beregnung Vorne
attr Ventil3Start room Bewässerung
attr Ventil3Start setList state:time
attr Ventil3Start sortby 3
attr Ventil3Start webCmd state

define Ventil3Dauer dummy
attr Ventil3Dauer alias Beregnungs Dauer Vorne
attr Ventil3Dauer group Beregnung Vorne
attr Ventil3Dauer room Bewässerung
attr Ventil3Dauer setList state:time
attr Ventil3Dauer sortby 4
attr Ventil3Dauer webCmd state

define Ventil3Tag dummy
attr Ventil3Tag alias Beregnungstag
attr Ventil3Tag group Beregnung Vorne
attr Ventil3Tag room Bewässerung
attr Ventil3Tag setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
attr Ventil3Tag sortby 5
attr Ventil3Tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
attr Ventil3Tag webCmd state
#attr Ventil3Tag eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6

define Ventil3An dummy
attr Ventil3An alias Zustand
attr Ventil3An devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3An group Beregnung Vorne
attr Ventil3An room Bewässerung
attr Ventil3An sortby 2

define Wasser_Vorne_Ein_Auto DOIF ([([Ventil3Start]) - ([Ventil3Start]+[Ventil3Dauer])|[Ventil3Tag:weekdays]] and [Ventil3] eq "Auto" and [Ventil1An] ne "An" and [Ventil2An] ne "An" and [Regensensor] eq "off" or [Ventil3] eq "An") (set relais PortA7 on , set Ventil3An An) DOELSE (set relais PortA7 off , set Ventil3An Aus)
attr Wasser_Vorne_Ein_Auto do always

define Wasser_Vorne_An notify Ventil3:An { fhem "set relais PortA7 on" }
define Wasser_Vorne_Aus notify Ventil3:Aus { fhem "set relais PortA7 off" }


Vielleicht kannst es ja gebrauchen.

Gruß
Klaus

Heimbastler

Hi Jewe,

ich habe die gleichen defines im Einsatz. Leider habe ich auch bei dem "tag-dummy" irgendwelche Probleme:


defmod r2 dummy
attr r2 alias Sprenger hinten
attr r2 devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest
attr r2 eventMap on off
attr r2 group Sprenger hinten
attr r2 room ESPEasy,Garten
attr r2 sortby 02
attr r2 webCmd :

defmod r2_time dummy
attr r2_time alias set Timer
attr r2_time devStateIcon .*:rc_BLANK
attr r2_time group Sprenger hinten
attr r2_time icon hourglass
attr r2_time room Garten
attr r2_time setList state:time
attr r2_time sortby 04
attr r2_time webCmd state

defmod r2_auto dummy
attr r2_auto alias Automatik
attr r2_auto devStateIcon off:ios-off:on on:ios-on-for-timer-blue:off
attr r2_auto eventMap on off
attr r2_auto group Sprenger hinten
attr r2_auto icon time_timer
attr r2_auto room Garten
attr r2_auto sortby 06
attr r2_auto webCmd :

defmod r2_start dummy
attr r2_start alias Start Zeit-Automatik
attr r2_start devStateIcon .*:rc_BLANK
attr r2_start group Sprenger hinten
attr r2_start icon time_timer
attr r2_start room Garten
attr r2_start setList state:time
attr r2_start sortby 08
attr r2_start webCmd state

defmod r2_dauer dummy
attr r2_dauer alias Dauer Zeit-Automatik
attr r2_dauer devStateIcon .*:rc_BLANK
attr r2_dauer group Sprenger hinten
attr r2_dauer icon time_timer
attr r2_dauer room Garten
attr r2_dauer setList state:time
attr r2_dauer sortby 10
attr r2_dauer webCmd state

defmod r2_tag dummy
attr r2_tag alias Tage Zeit-Automatik
attr r2_tag devStateIcon .*:rc_BLANK
attr r2_tag group Sprenger hinten
attr r2_tag icon time_timer
attr r2_tag room Garten
attr r2_tag setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
attr r2_tag sortby 12
attr r2_tag stateFormat &nbsp;;
attr r2_tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
attr r2_tag webCmd state

defmod r2_automatik DOIF ([([r2_start]) - ([r2_start]+[r2_dauer])|[r2_tag]] and [r2_auto] eq "on") (set r2_timer disable , set r2 on) DOELSE (set r2_timer initialize , set r2 off)
attr r2_automatik do always




setstate r2_tag &nbsp;;
setstate r2_tag 2018-07-25 22:23:08 state Mo,Mi,Fr
setstate r2_tag 2018-07-25 22:23:08 weekdays Error evaluating r2_tag userReading weekdays: Undefined subroutine &main::weekday2number called at (eval 383032) line 1.\


weekdays Error evaluating r2_tag userReading weekdays: Undefined subroutine &main::weekday2number called at (eval 383032) line 1.\

Du hattest im Nachtrag beschrieben das sich beim copy/paste Leerzeichen eingeschlichen haben. Habe schon jede Zeile im dummy und doif gecheckt und kann den Fehler nicht finden. Kannst Du vlt beschreiben wo genau ich noch mal checken müsste?

Danke,
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Jewe

Hallo Alex,

hast Du in die 99myUtils.pm das hier eingefügt ?

#### Weekday 2 number
#
sub weekday2number($){
my $weekdays = shift;
    my %weekdaymap = ("So" => 0, "Mo" => 1, "Di" => 2, "Mi" => 3, "Do" => 4, "Fr" => 5, "Sa" => 6, "WE" => 7, "!WE" => 8);
    my $weekdaykeys = join("|", keys(%weekdaymap));
    $weekdays =~ s/($weekdaykeys)/$weekdaymap{$1}/g;
    $weekdays =~ s/,//g;

return $weekdays;
}


Jens

Heimbastler

Hallo Jewe,

natürlich nicht :-X
Jetzt habe ich das in das template übertragen und in 99_myUtils.pm gespeichert und fhem neu gestartet.



##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;
j
use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

#### Weekday 2 number
#
sub weekday2number($){
my $weekdays = shift;
    my %weekdaymap = ("So" => 0, "Mo" => 1, "Di" => 2, "Mi" => 3, "Do" => 4, "Fr" => 5, "Sa" => 6, "WE" => 7, "!WE" => 8);
    my $weekdaykeys = join("|", keys(%weekdaymap));
    $weekdays =~ s/($weekdaykeys)/$weekdaymap{$1}/g;
    $weekdays =~ s/,//g;

return $weekdays;

1;


Leider bekomme ich diese Fehlermeldung:

"use" not allowed in expression at ./FHEM/99myUtils.pm line 9, at end of line syntax error at ./FHEM/99myUtils.pm line 9, near "j use strict" BEGIN not safe after errors--compilation aborted at ./FHEM/99myUtils.pm line 10.



Line 10 ist use warnings.


Danke für Deine Hilfe
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

nils_

- nach package mein steht ein "j" welches nicht dahin gehört.
- und am ende vor der "1;" fehlt die schließende geschweifte Klammer.


dann sollten deine Fehlermeldungen (hoffentlich) verschwinden ;)
viele Wege in FHEM es gibt!

Heimbastler

Hallo wieder,

das war es!!!!
VIELEN DANK

hier abschliessend noch mal meine Konfiguration:


################################################
####                        Rx                        ##################
####       relais dummy                        ##################
################################################

define r1 dummy
attr r1 alias Perlschlauch
attr r1 devStateIcon on:ios-on-green:off off:ios-off:on
attr r1 eventMap on off
attr r1 group Perlschlauch
attr r1 icon humidity
attr r1 room ESPEasy,Garten
attr r1 sortby 01
attr r1 webCmd :

################################################
####                        Rx_auto               ##################
################################################

define r1_auto dummy
attr r1_auto alias Automatik
attr r1_auto devStateIcon off:ios-off:on on:ios-on-for-timer-blue:off
attr r1_auto eventMap on off
attr r1_auto group Perlschlauch
attr r1_auto icon time_timer
attr r1_auto room Garten
attr r1_auto sortby 06
attr r1_auto webCmd :

################################################
####                        Rx_time               ##################
################################################

define r1_time dummy
attr r1_time alias set Timer
attr r1_time devStateIcon .*:rc_BLANK
attr r1_time group Perlschlauch
attr r1_time icon hourglass
attr r1_time room Garten
attr r1_time setList state:time
attr r1_time sortby 04
attr r1_time webCmd state

################################################
####                        Rx_start               ##################
################################################

define r1_start dummy
attr r1_start alias Start Zeit-Automatik
attr r1_start devStateIcon .*:rc_BLANK
attr r1_start group Perlschlauch
attr r1_start icon time_timer
attr r1_start room Garten
attr r1_start setList state:time
attr r1_start sortby 08
attr r1_start webCmd state

################################################
####                        Rx_dauer             ##################
################################################

define r1_dauer dummy
attr r1_dauer alias Dauer Zeit-Automatik
attr r1_dauer devStateIcon .*:rc_BLANK
attr r1_dauer group Perlschlauch
attr r1_dauer icon time_timer
attr r1_dauer room Garten
attr r1_dauer setList state:time
attr r1_dauer sortby 10
attr r1_dauer webCmd state

################################################
####                        Rx_tag                ##################
################################################

define r1_tag dummy
attr r1_tag alias Tage Zeit-Automatik
attr r1_tag devStateIcon .*:rc_BLANK
attr r1_tag group Perlschlauch
attr r1_tag icon time_timer
attr r1_tag room Garten
attr r1_tag setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
attr r1_tag sortby 12
attr r1_tag stateFormat &nbsp;;
attr r1_tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
attr r1_tag webCmd state

################################################
####                        Rx_do                                              ####
#### relais dummy schaltet relais an ESPEasy              ####
################################################

define r1_do DOIF ([r1] eq "on") ##wenn dummy-schalter für r1 on\
(set ESPEasy_Wemos_Z_relay1 PCFGpio 1 0) ##dann relay1 on\
\
DOELSEIF ([r1] eq "off") ##wenn dummy-schalter für r1 off\
(set ESPEasy_Wemos_Z_relay1 PCFGpio 1 1) ##dann relay1 off
attr r1_do disable 0
attr r1_do do always

################################################
####                        Rx_timer                                            ###
#### timer schaltet nach xZeit den relais dummy aus um###
#### dauerberegnung bei manuellem einschalten zu      ###
#### verhindern                                                                ###
################################################

define r1_timer DOIF ##DOIF indirekte Zeitangaben\
([+[r1_time]]) (set r1 off)
attr r1_timer disable 0
attr r1_timer do always

################################################
####                        Rx_automatik                                    ###
#### schaltet relais dummy nach zeit und dauer und       ###
#### deaktiviert timer kurzfristig                                       ###
################################################

define r1_automatik DOIF ([([r1_start]) - ([r1_start]+[r1_dauer])|[r1_tag:weekdays]] and [r1_auto] eq "on") (set r1_timer disable , set r1 on) DOELSE (set r1_timer initialize , set r1 off)
attr r1_automatik do always





in der 99myUtils.pm steht:

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

#### Weekday 2 number
#
sub weekday2number($){
my $weekdays = shift;
    my %weekdaymap = ("So" => 0, "Mo" => 1, "Di" => 2, "Mi" => 3, "Do" => 4, "Fr" => 5, "Sa" => 6, "WE" => 7, "!WE" => 8);
    my $weekdaykeys = join("|", keys(%weekdaymap));
    $weekdays =~ s/($weekdaykeys)/$weekdaymap{$1}/g;
    $weekdays =~ s/,//g;

return $weekdays;
}


1;


Anbei die Benutzeroberfläche.


Danke noch mal und viel Spaß für Nachahmer
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,