Autor Thema: Ubiquiti mFi/mPower Steckdosenleisten Wlan/Lan - neues Modul: 98_UbiquitiMP.pm  (Gelesen 40714 mal)

Offline Laffer72

  • Jr. Member
  • **
  • Beiträge: 93
@markoweb, vielen Dank für Deine Mühen mit den reconnects. Habe Deine Software auf meinen beiden Steckdosenleisen (3er und 6er) installiert und seitdem keine reconnects mehr.

Klasse Arbeit vielen Dank.

Viele Grüße

Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

Offline markoweb

  • New Member
  • *
  • Beiträge: 11
Top! Danke fürs Feedback. Auf meinen 5 mpower's ist es ebenfalls stabil.

Offline sf.fhem

  • New Member
  • *
  • Beiträge: 3
Hallo,

ich habe eine Lösung für die WiFi/Wireless Abbrüche mit WPA2 PSK gefunden.
Das Problem trifft auf, wenn man keinen mFi Controller verwendet.

Der Process "mcad" triggert den Neustart vom WiFi Client "/usr/etc/syswrapper.sh restart-wpasupplicant".

/var/log/messages:
Jan  1 00:10:32 mFi-mPower-XXXXXX user.debug syslog: ace_reporter.reporter_evdns_resolv_cb(): dns resolv failed, result=2, type=0, count=0, ttl=0
Jan  1 00:10:32 mFi-mPower-XXXXXX user.err syslog: ace_reporter.reporter_fail(): server unreachable
Jan  1 00:10:32 mFi-mPower-XXXXXX user.err syslog: ace_reporter.reporter_fail(): initial contact failed #10, url=http://mfi:6080/inform, rc=1
Jan  1 00:10:32 mFi-mPower-XXXXXX user.debug syslog: libubnt_exec.syswrapper_impl(): [EXEC] /usr/etc/syswrapper.sh restart-wpasupplicant
Jan  1 00:10:33 mFi-mPower-XXXXXX daemon.info init: process '/bin/wpa_supplicant -D atheros -i ath0 -c /etc/wpasupplicant_WPA-PSK.conf' (pid 1994) exited. Scheduling for restart
Jan  1 00:10:33 mFi-mPower-XXXXXX daemon.info init: starting pid 12646, tty '/dev/null': '/bin/wpa_supplicant -D atheros -i ath0 -c /etc/wpasupplicant_WPA-PSK.conf'
Jan  1 00:10:33 mFi-mPower-XXXXXX user.debug syslog: libubnt_exec.syswrapper_impl(): [EXEC] /usr/etc/syswrapper.sh restart-mcad
Jan  1 00:10:34 mFi-mPower-XXXXXX daemon.info init: process '/bin/mcad' (pid 1993) exited. Scheduling for restart.
Jan  1 00:10:34 mFi-mPower-XXXXXX daemon.info init: starting pid 12650, tty '/dev/null': '/bin/mcad'

Für den Workaround muss man sich mit einen SSH Client (putty etc.) mit dem User "ubnt" und dem Password "ubnt" (factory default) auf der mPower CLI einloggen.

Die Lösung ist es die Prozesse "/bin/mcad" u. "/bin/mca-monitor" zu beenden.
Diese Prozesse werden aber vom 'init' Prozess überwacht und ggf. neugestartet.

Daher in der "/etc/inittab" die folgenden Zeilen kommentieren.

/etc/inittab:
#null::respawn:/bin/mcad
#null::respawn:/bin/mca-monitor

Danach den 'init' Prozess reloaden und somit die config erneut einlesen.

# kill -SIGHUP 1

Abschließen die Prozesse 'mcad' und 'mca-monitoren beenden.

# pkill mcad
# pkill mca-monitor

Damit das Ganze nach einen Reboot funktioniert, legt man folgendes Script an.

/var/etc/persistent/rc.poststart
#!/bin/sh

#   
# error: wifi wpa2 connection resets every two minutes. cause no mFI controller is available.
#
# /var/log/messages:
# (..)
# Jan  1 00:10:32 mFi-mPower-XXXXXX user.debug syslog: ace_reporter.reporter_evdns_resolv_cb(): dns resolv failed, result=2, type=0, count=0, ttl=0
# Jan  1 00:10:32 mFi-mPower-XXXXXX user.err syslog: ace_reporter.reporter_fail(): server unreachable
# Jan  1 00:10:32 mFi-mPower-XXXXXX user.err syslog: ace_reporter.reporter_fail(): initial contact failed #10, url=http://mfi:6080/inform, rc=1
# Jan  1 00:10:32 mFi-mPower-XXXXXX user.debug syslog: libubnt_exec.syswrapper_impl(): [EXEC] /usr/etc/syswrapper.sh restart-wpasupplicant
# Jan  1 00:10:33 mFi-mPower-XXXXXX daemon.info init: process '/bin/wpa_supplicant -D atheros -i ath0 -c /etc/wpasupplicant_WPA-PSK.conf' (pid 1994) exited. Scheduling for restart
# Jan  1 00:10:33 mFi-mPower-XXXXXX daemon.info init: starting pid 12646, tty '/dev/null': '/bin/wpa_supplicant -D atheros -i ath0 -c /etc/wpasupplicant_WPA-PSK.conf'
# Jan  1 00:10:33 mFi-mPower-XXXXXX user.debug syslog: libubnt_exec.syswrapper_impl(): [EXEC] /usr/etc/syswrapper.sh restart-mcad
# Jan  1 00:10:34 mFi-mPower-XXXXXX daemon.info init: process '/bin/mcad' (pid 1993) exited. Scheduling for restart.
# Jan  1 00:10:34 mFi-mPower-XXXXXX daemon.info init: starting pid 12650, tty '/dev/null': '/bin/mcad'
# (..)
#
# fix: disable "mcad" and "mca-monitor" daemon
#
# 1.) comment both daemons
#
# /etc/inittab:
# (..)
# #null::respawn:/bin/mcad
# #null::respawn:/bin/mca-monitor
# (..)
#
# 2.) reload "init"
#
# # kill -SIGHUP 1
#

#
# $1=> string: log message
#
log()
{
logger -p user.debug -t rc.poststart "${1}"
}

if [ -f "/etc/inittab" ]
then
sed -i -e 's/null::respawn:\/bin\/mcad/#null::respawn:\/bin\/mcad/g' -e 's/null::respawn:\/bin\/mca-monitor/#null::respawn:\/bin\/mca-monitor/g' /etc/inittab || \
log "sed failed. \"/etc/inittab\""
kill -SIGHUP 1 || log "command failed. \"kill -SIGHUP 1\""
pkill mcad && log "killed process \"mcad\"." || log "command failed. \"pkill mcad"\"
pkill mca-monitor && log "killed process \"mca-monitor\"." || log "command failed. \"pkill mca-monitor"\"
else
log "file not found. \"/etc/inittab\""
fi

Das Script ausführbar setzen und das Verzeichnis "/var/etc/persistent/" dauerhaft speichern.

# chmod 0755 /var/etc/persistent/rc.poststart
# save
Found  Active on[1] ...
Found Backup1 on[2] ...
Storing Active[2] ... [%100]
Active->Backup[1] ... [%100]
#

Nach einen Reboot dauert es ca. drei Minuten bis das Script ausgeführt wird.

Viel Spaß
« Letzte Änderung: 06 Juli 2018, 22:31:42 von sf.fhem »


Offline sf.fhem

  • New Member
  • *
  • Beiträge: 3
Hallo markoweb,

dass mit dem "nocontroller" hatte ich gesehen, fand ich etwas zu kompliziert.

Bin gerade in ein Problem vom "98_UbiquitiMP.pm" gelaufen.
Sobald ich den Ports einen Name gebe, kann der JSON Response nicht verarbeitet werden.

Auf dem mPower..

/var/etc/persistent/cfg/config_file:
port.0.model=Outlet
port.0.label=aqua-licht
port.1.model=Outlet
port.1.label=aqua-pumpe
port.2.model=Outlet
port.2.label=led-lampe


/opt/fhem/log/fhem-2018-07.log:
2018.07.06 22:45:40 1: ERROR evaluating {UbiquitiMP_BCDone('mpower01|1|status|{"sensors":[{"port":1,"output":1,"power":5.32742083,"enabled":0,"current":0.027494847,"voltage":237.317085266,"powerfactor":0.816463321,"relay":1,"lock":0,"thismonth":0},{"port":2,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":236.611645698,"powerfactor":0.0,"relay":1,"lock":0,"thismonth":0},{"port":3,"output":1,"power":17.029695034,"enabled":0,"current":0.128298997,"voltage":236.92356944,"powerfactor":0.560241581,"relay":1,"lock":0,"thismonth":0}],"status":"success"}ubnt@mpower01:/var/etc/persistent |u=154.81ubnt@mpower01:/var/etc/persistent |0.0 0.0 0.0 ubnt@mpower01:/var/etc/persistent ')}: garbage after JSON object, at character offset 484 (before "ubnt@mpower01:/var/e...") at ./FHEM/98_UbiquitiMP.pm line 551.

So wie es aussieht, hängt die mit den Port Name zusammen und der geänderten Prompt. "$PS1"

/var/etc/persistent/.profile:

PS1="\u@\h:\w # "


Sobald ich die "/var/etc/persistent/cfg/config_file" deaktivierte, klappen die Readings.
Die Prompt nach wie vor abgeändert.


Die Ursache liegt in der geänderten Prompt "$PS1".  :(
« Letzte Änderung: 06 Juli 2018, 23:04:37 von sf.fhem »

Offline Wuppi68

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2107
  • On the Highway to Shell
habe auch ein Problem :-(

meine 6er Steckdose:

Internals:
   BNAME      mPower Pro
   Clients    :UbiquitiOut:
   DEF        172.17.2.121
   ERRORCOUNT 0
   INTERVAL   300
   MAC        0418d6265c20
   NAME       mfi.6.1
   NR         475
   PORTS      6
   SNAME      P6E
   STATE      on on on on on on
   TYPE       UbiquitiMP
   VERSION    2.1.11
   force      0
   group_ALL  1,2,3,4,5,6
   lastcmd    GetStatus
   load       0.49 0.48 0.50
   powerd_on  2018-07-31 23:47:47
   Helper:
     DBLOG:
       all_current:
         myDbLog:
           TIME       1544046274.72009492
           VALUE      0.22
       all_energy:
         myDbLog:
           TIME       1544046274.72009492
           VALUE      3107.81
       all_month:
         myDbLog:
           TIME       1544040205.12195897
           VALUE      4.25
       all_power:
         myDbLog:
           TIME       1544046577.82967997
           VALUE      28.71
       state:
         myDbLog:
           TIME       1543955311.45292401
           VALUE      on on on on on on
       uptime:
         myDbLog:
           TIME       1544046577.82967997
           VALUE      127 days, 00:01:50
   READINGS:
     2018-12-05 22:49:37   all_current     0.22
     2018-12-05 22:49:37   all_energy      3107.81
     2018-12-05 22:49:37   all_month       4.25
     2018-12-05 22:49:37   all_power       28.71
     2018-12-05 22:49:37   all_prevmonth   0.97
     2018-12-05 22:49:37   state           on on on on on on
     2018-12-05 22:49:37   uptime          127 days, 00:01:50
   helper:
     Out1:
       lock       0
       name       Out1
       state      1
     Out2:
       lock       0
       name       Out2
       state      1
     Out3:
       lock       0
       name       Out3
       state      1
     Out4:
       lock       0
       name       Out4
       state      1
     Out5:
       lock       0
       name       Out5
       state      1
     Out6:
       lock       0
       name       Out6
       state      1
     bm:
       UbiquitiMP_Get:
         cnt        1
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        05.12. 22:46:08
         max        7.152557373046875e-06
         tot        7.152557373046875e-06
         mAr:
           HASH(0x9900a68)
           mfi.6.1
           ?
       UbiquitiMP_Set:
         cnt        720
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        05.12. 01:25:59
         max        4.98294830322265625e-05
         tot        0.0127508640289306641
         mAr:
           HASH(0x9900a68)
           mfi.6.1
           ?
Attributes:
   event-on-change-reading .*
   password   84nq3tcigiu3nq7vjtegluw
   subDevices 1
   timeout    5
   user       keinubntdefaultuser

liefert im FHEM Log folgendes:

2018.12.05 22:54:41 1: PERL WARNING: Use of uninitialized value $b in concatenation (.) or string at ./FHEM/98_UbiquitiMP.pm line 844.
2018.12.05 22:54:41 3: eval: {UbiquitiMP_BCDone('mfi.6.1|1|status|{"sensors":[{"port":1,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":236.68238306,"powerfactor":0.0,"relay":1,"lock":0,"prevmonth":3102,"thismonth":13599},{"port":2,"output":1,"power":1.139312744,"enabled":0,"current":0.02014327,"voltage":237.392728328,"powerfactor":0.238256939,"relay":1,"lock":0,"prevmonth":0,"thismonth":0},{"port":3,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":236.589660644,"powerfactor":0.0,"relay":1,"lock":0,"prevmonth":0,"thismonth":0},{"port":4,"output":1,"power":17.165691375,"enabled":0,"current":0.150175809,"voltage":237.046366691,"powerfactor":0.482200897,"relay":1,"lock":0,"prevmonth":0,"thismonth":0},{"port":5,"output":1,"power":3.128793239,"enabled":0,"current":0.029585957,"voltage":236.844130754,"powerfactor":0.446507345,"relay":1,"lock":0,"prevmonth":0,"thismonth":0},{"port":6,"output":1,"power":0.0,"enabled":0,"current":0.0,"voltage":237.050891876,"powerfactor":0.0,"relay":1,"lock":0,"prevmonth":0,"thismonth":0}],"status":"success"}|u=10973213.90|l=0.40 0.45 0.48|4092.1875 0.0 0.0 0.0 0.0 5853.125 MF.v2.1.11')}
2018.12.05 22:54:41 1: stacktrace:
2018.12.05 22:54:41 1:     main::__ANON__                      called by ./FHEM/98_UbiquitiMP.pm (844)
2018.12.05 22:54:41 1:     main::UbiquitiMP_summaryFn          called by ./FHEM/01_FHEMWEB.pm (3166)
2018.12.05 22:54:41 1:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (2969)
2018.12.05 22:54:41 1:     main::FW_Notify                     called by ./FHEM/98_apptime.pm (205)
2018.12.05 22:54:41 1:     main::apptime_getTiming             called by ./FHEM/98_apptime.pm (165)
2018.12.05 22:54:41 1:     main::CallFn                        called by fhem.pl (3523)
2018.12.05 22:54:41 1:     main::DoTrigger                     called by fhem.pl (4574)
2018.12.05 22:54:41 1:     main::readingsEndUpdate             called by ./FHEM/98_UbiquitiMP.pm (715)
2018.12.05 22:54:41 1:     main::UbiquitiMP_Status             called by ./FHEM/98_UbiquitiMP.pm (495)
2018.12.05 22:54:41 1:     main::UbiquitiMP_BCDone             called by (eval 250717)[fhem.pl:1116] (1)
2018.12.05 22:54:41 1:     (eval)                              called by fhem.pl (1116)
2018.12.05 22:54:41 1:     main::AnalyzePerlCommand            called by fhem.pl (1141)
2018.12.05 22:54:41 1:     main::AnalyzeCommand                called by fhem.pl (1063)
2018.12.05 22:54:41 1:     main::AnalyzeCommandChain           called by ./FHEM/98_telnet.pm (255)
2018.12.05 22:54:41 1:     main::telnet_Read                   called by ./FHEM/98_apptime.pm (205)
2018.12.05 22:54:41 1:     main::apptime_getTiming             called by ./FHEM/98_apptime.pm (165)
2018.12.05 22:54:41 1:     main::CallFn                        called by fhem.pl (726)

macht auch meiner 3er Dose :-(

Hat da jemand einen Rat?



PS.: Die spricht jetzt auch MQTT und der WiFi Daemon ist auch deaktiviert ...

hier --> https://github.com/magcode/mpower-tools
 
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Online Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2658
2018.12.05 22:54:41 1: PERL WARNING: Use of uninitialized value $b in concatenation (.) or string at ./FHEM/98_UbiquitiMP.pm line 844.
schau mal im Modul ob die Zeile 844 bei dir so ausschaut :
$txt = $a."title=\"".$title."\"".$b;wenn ja ändere sie einfach in
$txt = $a."title=\"".$title."\">";und acht Zeilen tiefer noch einmal.

Edit : Verrate mir bitte noch ob du mit deiner MQTT Änderung auch state verbogen hast auf 0/1 statt on/off oder ob du den f18 benutzt ? 
« Letzte Änderung: 06 Dezember 2018, 09:16:55 von Wzut »
Maintainer der Module: MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK

Offline Wuppi68

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2107
  • On the Highway to Shell
danke :-)

klappt mit Deiner Änderung
hatte vorher schon jeweils

if (! defined $b) { $b = '' };
jeweils in die Zeile davor getackert

Bei dem "neuen" F18 Style bekomme ich auch so nen "doofen" State angezeigt - ist aber nur Makulatur ...
mfi3.1
               
title="Out1 on">   
               
title="Out2 off">   
               
title="Out3 off"> 

und dazwischen die Leuchtensymbole...

Durch die MQTT anpassung habe ich nicht sonstiges daran geändert. Es geht halt nur auch via MQTT.

Danke

Ralf
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Online Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2658
if (! defined $b) { $b = '' };
ne das ist nicht so gut da dann die HTML Syntax nicht mehr stimmt, also besser ">" statt "" nehmen.
Ich muss mal meine 3er Ubi ausgraben und mit dem f18 zusammen testen.
Maintainer der Module: MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK

Offline Wuppi68

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2107
  • On the Highway to Shell
ne das ist nicht so gut da dann die HTML Syntax nicht mehr stimmt, also besser ">" statt "" nehmen.
Ich muss mal meine 3er Ubi ausgraben und mit dem f18 zusammen testen.

war ja auch nur ein erster Hack ... und habe es jetzt wieder rausgenommen
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Online Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2658
würdest du bitte nochmal testen diesmal mit diesem Block :
($a,$b) = split('title=\"on\"' , FW_makeImage($icon, "on"));
$txt  = $a;
$txt .= "title=\"".$title."\"".$b if($b);

das sollte dein erstes Problem auch lösen und F18 gleich mit erschlagen
Maintainer der Module: MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK

Offline Wuppi68

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2107
  • On the Highway to Shell
würdest du bitte nochmal testen diesmal mit diesem Block :
($a,$b) = split('title=\"on\"' , FW_makeImage($icon, "on"));
$txt  = $a;
$txt .= "title=\"".$title."\"".$b if($b);

das sollte dein erstes Problem auch lösen und F18 gleich mit erschlagen

geändert --> getestet --> für gut gefunden

Danke :top:

btw. was macht die Zeile genau mit $b? ($a,$b) = split('title=\"on\"' , FW_makeImage($icon, "on"));

Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Online Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2658
das war damals so ne Spielerei von mir das obwohl z.B. das Icon als Hilfstext "on" hat diese in "off" geändert wird beim darüberfahren mit dem Mauszeiger.
Ich glaube ich werde mir die beiden Ubi Module doch nochmal vornehmen, da ist so einiges was ich heute anders (besser ?) machen würde.   
Maintainer der Module: MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline aramis

  • Jr. Member
  • **
  • Beiträge: 93
Hallo zusammen,

ich habe ein etwas komisches Problem bei dem ich nicht mehr weiter weiß.

Die Ausgangsituation ist wie folgt:
Ich habe 2 Ubiquiti mPower Pro bei mir im Einsatz.

Was funktioniert:
Das Ansprechen der einzelnen Ports funktioniert ohne Problem.
Sobald ich die groupPorts anlege funktioniert es auch über ein notify mehre Ports auf einmal zu schalten.

Was funktioniert irgendwie nicht so ganz:
1) Bei einem Neustart des Raspberry Pis auf dem FHEM läuft wird in der Anzeige weiterhin die groupPorts angezeigt, jedoch sind keine Aktionen auf die Grupp ausführbar. Erst ein Löschen und neuanlegen der GroupPorts bringt hier die Lösung dass die Gruppe wieder schaltbar ist. Wie kann ich dieses Problem lösen? Was ich nur ungerne machen würde ist über die Linux CLI auf die cfg zugriefen und dort den GroupPort Eintrag beispielsweise zuändern. Ich habe es einmal testhalber versucht und den Eintrag gelöscht (was funktioniert) und dann neu angelegt und abgespeichert. Die GroupPorts werden zwar wieder angezeigt aber das Schalten der Gruppe funktioniert trotzdem nicht mehr. Erst das manuelle Löschen und neualegen über das WebFrontend bringt wieder abhilfe. Daher habe ich den Cron Job wieder entfernt.
2) Das Schalten mehrere Ports über ein Notify. Sprich ich möchte von Ubi1 den Out1, Out2 und Out3 schalten. Das funktioniert nicht. Ich kann jeweils nur einen Port schalten. Das Notify ansich tut. Den ich kann beispielsweise Ubi Out1, mehrere dummy schalten und auch gleichzeitig den Ubi2 Out3 schalten. Jedoch nicht mehrere Ports der gleichen Ubiquiti mPower Pro.

Kann mir hier jemand einen Tip geben?
Benötigt ihr noch weitere Infos?

Danke euch - schönes Wochenende

Viele Grüße
aramis

####################
=> ganz viele verrückte Ideen
####################

Online Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2658
Ich habe zwar ewig nicht mehr mit den Ubis gemacht, aber ich fang mal hinten an :
Mehrer Befehle kurz hintereinander gab Timingprobleme, daher ist es sinnvoll diese in Gruppen zu definieren da dies nur einen Schreib & Lesevorgang bedeutet.
Dein erstes Problem mit den Gruppen kann ich im Moment nicht so ganz nachvollziehen, k.A. da ich selbst nie Gruppen benutzt habe.
Ich kann aber die 3er Ubi mal aus der Bastelkiste holen und wieder unter Dampf setzen, denke mal nach Ostern sollte ich da etwas schlauer sein.
Maintainer der Module: MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK

 

decade-submarginal