Gartenbewässerung

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

Vorheriges Thema - Nächstes Thema

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  ;
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  ;
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  ;
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,