sigo client api init

This commit is contained in:
Rainer Gümpelein 2022-03-26 10:19:13 +01:00
parent d67f354bb4
commit 709521c892
5 changed files with 193 additions and 19 deletions

View file

@ -875,8 +875,8 @@ sub booking_update(){
#6 = "canceled"|3 = "occupied"|1 = "available"
if($state && $state =~ /$dbt->{copri_conf}->{bike_state}->{6}|$dbt->{copri_conf}->{bike_state}->{3}|$dbt->{copri_conf}->{bike_state}->{1}/ && $record_pos->{cc_id} && $record_pos->{cc_id} > 0){
#set rent state if lock_system 2=Ilockit
if($record_pos->{int11} eq "2"){
#set rent state if lock_system 2=Ilockit || 3=sigo
if($record_pos->{int11} && ($record_pos->{int11} == 2 || $record_pos->{int11} == 3)){
my $update_pos = {
table => "contenttranspos",
#int10 => "$state_key",
@ -1061,7 +1061,7 @@ sub booking_update(){
$update_cc->{txt17} = $Ilockit_GUID if($Ilockit_GUID);
}
#end Ilockit
#end Ilockit || sigo
}else{
$bw->log("smartlock type not defined, int11:",$record_pos->{int11},"");
}
@ -1390,7 +1390,7 @@ sub rentals(){
my $bike_id = $return->{$id}->{bike};
$bike_id = $1 if($bike_id =~ /(\d+)/);
#generate always new keys. keep in mind, keys saved in contenttranspos are overwritten
if($withkey && $record->{$id}->{int11} && $record->{$id}->{int11} eq "2"){
if($withkey && $record->{$id}->{int11} && $record->{$id}->{int11} == 2){
my @K_select = ();
@K_select = `cd /var/www/copri4/main/src/scripts && export CLASSPATH='.:/usr/share/java:/usr/share/java/postgresql.jar' && java Ilockauth $varenv{dbname} $bike_id`;
$bw->log("rentals java Ilockauth $bike_id | syshost:$varenv{syshost}",\@K_select,"");
@ -1469,21 +1469,25 @@ sub bikes_available(){
$return->{$id}->{description} = Encode::encode('utf-8', Encode::decode('iso-8859-1', $record->{$id}->{txt01}));
$return->{$id}->{state} = "$dbt->{copri_conf}->{bike_state}->{$record->{$id}->{int10}}";
$return->{$id}->{bike_charge} = "$record->{$id}->{int19}" if($record->{$id}->{int19});
$return->{$id}->{system} = "Ilockit";
$return->{$id}->{lock_state} = "locked" if($record->{$id}->{int20} == 1);
$return->{$id}->{lock_state} = "unlocked" if($record->{$id}->{int20} == 2);
$return->{$id}->{lock_state} = "locking" if($record->{$id}->{int20} == 3);
$return->{$id}->{bike_group} = ["$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{main_id}"];
if($record->{$id}->{int11} eq "2"){
$return->{$id}->{lock_state} = "locked" if($record->{$id}->{int20} == 1);
$return->{$id}->{lock_state} = "unlocked" if($record->{$id}->{int20} == 2);
$return->{$id}->{lock_state} = "locking" if($record->{$id}->{int20} == 3);
$return->{$id}->{system} = "Ilockit";
$return->{$id}->{Ilockit_GUID} = "$record->{$id}->{txt17}";
$return->{$id}->{Ilockit_ID} = "$record->{$id}->{txt18}";
$return->{$id}->{bike_group} = ["$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{main_id}"];
#if($users_serviceapp->{int09})
#shareetool
if($q->param('authcookie') && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} == 187 && scalar(@{$user_tour} >= 1)){
my @service_code = split(/\s/,$record->{$id}->{txt23});
$return->{$id}->{service_code} = [@service_code];
}
}elsif($record->{$id}->{int11} eq "3"){
$return->{$id}->{system} = "sigo";
}
if(ref($tariff_content) eq "HASH"){
foreach my $tid (sort { $tariff_content->{$a}->{barcode} <=> $tariff_content->{$b}->{barcode} } keys (%$tariff_content)){
$bw->log("bikes_available tariff_content tariff_description $tariff_content->{$tid}->{int12} && $auth->{txt30} =~ /$tariff_content->{$tid}->{barcode}/ BIKE:",$return->{$id}->{bike},"");
@ -1575,19 +1579,22 @@ sub bikes_all(){
$return->{$id}->{state} = "$dbt->{copri_conf}->{bike_state}->{$record->{$id}->{int10}}";
$return->{$id}->{service_state} = "0";
$return->{$id}->{system} = "Ilockit";
$return->{$id}->{lock_state} = "locked" if($record->{$id}->{int20} == 1);
$return->{$id}->{lock_state} = "unlocked" if($record->{$id}->{int20} == 2);
$return->{$id}->{lock_state} = "locking" if($record->{$id}->{int20} == 3);
$return->{$id}->{bike_group} = ["$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{main_id}"];
if($record->{$id}->{int11} eq "2"){
$return->{$id}->{lock_state} = "locked" if($record->{$id}->{int20} == 1);
$return->{$id}->{lock_state} = "unlocked" if($record->{$id}->{int20} == 2);
$return->{$id}->{lock_state} = "locking" if($record->{$id}->{int20} == 3);
$return->{$id}->{system} = "Ilockit";
$return->{$id}->{Ilockit_GUID} = "$record->{$id}->{txt17}";
$return->{$id}->{Ilockit_ID} = "$record->{$id}->{txt18}";
$return->{$id}->{bike_group} = ["$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{main_id}"];
#shareetool
if($q->param('authcookie') && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} == 187 && scalar(@{$user_tour} >= 1)){
my @service_code = split(/\s/,$record->{$id}->{txt23});
$return->{$id}->{service_code} = [@service_code];
}
}elsif($record->{$id}->{int11} eq "3"){
$return->{$id}->{system} = "sigo";
}
$op_return->{$dbt->{operator}->{$varenv->{dbname}}->{oprefix} . $id} = $return->{$id};
}

View file

@ -0,0 +1,131 @@
package APIsigoclient;
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
#Client for sigo
#
#use lib qw(/var/www/copri-bike/shareeapp-fr01/src);
use warnings;
use strict;
use POSIX;
use Exporter;
our @ISA = qw (Exporter);
use POSIX;
use CGI;
use JSON;
use LWP::UserAgent;
use DateTime;
use Time::Piece;
use Scalar::Util qw(looks_like_number);
use Config::General;
use Lib::Config;
use Mod::DBtank;
use Mod::Basework;
use Data::Dumper;
my $cf = new Config;
my $dbt = new DBtank;
my $bw = new Basework;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
my $api_file = "/var/www/copri4/shareeconf/apikeys.cfg";
my $aconf = Config::General->new($api_file);
my %apikeyconf = $aconf->getall;
my $ua = LWP::UserAgent->new;
$ua->agent("sharee sigo-client");
my $size = $ua->max_size;
my $bytes = 1000;
$ua->max_size( $bytes );
$ua->default_header( 'x-api-key' => $apikeyconf{sigo}->{api_key} );
my $json = JSON->new->allow_nonref;
my %varenv = $cf->envonline();
my $response_in = {};
my $dbh = "";
my $owner = 169;
open(FILE,">>$varenv{logdir}/APIsigo_client.log");
print FILE "\n*** $now_dt 'sigo client' \n";
sub get_bikes {
my $self = shift;
my $endpoint = "https://sigo.dev.sigo.green/api/v1/bikes";
print "$endpoint\n";
my $rest_json = "";
my $ret_json = get_sigo("","$endpoint",$rest_json);
eval {
$response_in = decode_json($ret_json);
print "<--- get_bikes response_in:\n" . Dumper($response_in);
};
if ($@){
print "<--- failure get_bikes raw response_in:\n" . Dumper($ret_json) . "\n";
warn $@;
}
}
#main GET
sub get_sigo {
my $self = shift;
my $endpoint = shift || "";
my $rest_json = shift || "";
my $sigo_request = "$endpoint";
print FILE "===> GET sigo >> " . $sigo_request . "\n" . $rest_json . "\n";
my $req = HTTP::Request->new(GET => "$sigo_request");
$req->content_type('application/json');
$req->content($rest_json);
my $res = $ua->request($req);
if ($res->is_success) {
#print $res->content;
return $res->content;
print $res->status_line, "\n";
}else {
print $res->status_line, "\n";
}
}
sub post_sigo {
my $self = shift;
my $endpoint = shift || "";
my $rest_json = shift || "";
my $sigo_request = "$endpoint";
print FILE "===> POST sigo >> " . $sigo_request . "\n" . $rest_json . "\n";
my $req = HTTP::Request->new(POST => "$sigo_request");
$req->content_type('application/json');
$req->content($rest_json);
my $res = $ua->request($req);
if ($res->is_success) {
#print $res->content;
return $res->content;
print $res->status_line, "\n";
}else {
print $res->status_line, "\n";
}
}
close(FILE);
1;

View file

@ -155,9 +155,10 @@ sub sharee_pricing(){
$return->{request_time} = "$ctpos->{itime}";
$return->{start_time} = "$ctpos->{start_time}";
$return->{end_time} = "$computed_end_time";
$return->{system} = "Ilockit" || "";#FIXME
$return->{system} = "Ilockit" if($ctpos->{int11} && $ctpos->{int11} == 2);
$return->{system} = "sigo" if($ctpos->{int11} && $ctpos->{int11} == 3);
if($ctpos->{int11} eq "2"){
if($ctpos->{int11}){
#$return->{gps} = "$ctpos->{txt06}";#end_gps
($return->{gps}->{latitude},$return->{gps}->{longitude}) = split(/,/,$ctpos->{txt06});
@ -172,8 +173,8 @@ sub sharee_pricing(){
$return->{tariff_description}->{track_info} = "Ich stimme der Speicherung (Tracking) meiner Fahrstrecke zwecks wissenschaftlicher Auswertung und Berechnung der CO2-Einsparung zu!" if($ctpos->{int25});
$return->{tariff_description}->{operator_agb} = "Mit der Mietrad Anmietung wird folgender Betreiber <a href='$varenv{wwwhost}/site/agb.html' target='_blank'>AGB</a> zugestimmt (als Demo sharee AGB)." if($ctpos->{ca_id} == 1842 || $ctpos->{ca_id} == 5781);
$return->{Ilockit_GUID} = "$ctpos->{txt17}";
$return->{Ilockit_ID} = "$ctpos->{txt18}";
$return->{Ilockit_GUID} = "$ctpos->{txt17}" if($ctpos->{int11} == 2);
$return->{Ilockit_ID} = "$ctpos->{txt18}" if($ctpos->{int11} == 2);
#$return->{gps} = "$ctpos->{txt06}";#start_gps
($return->{gps}->{latitude},$return->{gps}->{longitude}) = split(/,/,$ctpos->{txt06});
$return->{lock_state} = "locked" if($ctpos->{int20} == 1);

View file

@ -240,7 +240,7 @@ sub tpl(){
my ($key,$des,$size) = split /=/,$_;
if($key =~ /time/){
$size="10px";
print $q->textfield(-id=>'datepicker1',-class=>'etxt',-name=>"start_$key",-default=>"$start_date_time",-size=>"$size",-maxlength=>20), "-", $q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"end_$key",-default=>"$end_date_time",-size=>"$size",-maxlength=>20),"\n";
print $q->textfield(-id=>'datepicker1',-class=>'etxt',-name=>"start_$key",-override=>'1', -default=>"$start_date_time",-size=>"$size",-maxlength=>20), "-", $q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"end_$key",-override=>'1',-default=>"$end_date_time",-size=>"$size",-maxlength=>20),"\n";
}
elsif($key =~ /owner/){
print $but->selector_class("$key","eselect","width:80px;",$R::owner,@_users),"\n";

View file

@ -0,0 +1,35 @@
#!/usr/bin/perl
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
# sudo su www-data -c "./src/scripts/sigo_client.pl shareedms-fr01 get_bikes"
#
use vars qw($syshost);
BEGIN {
$syshost = $ARGV[0] || die 'syshost not defined';
}
use lib "/var/www/copri-bike/$syshost/src";
use strict;
use warnings;
use POSIX;
use CGI;
use Mod::APIsigoclient;
use Data::Dumper;
my $q = new CGI;
my $cf = new Config;
my $si = new APIsigoclient;
my $bw = new Basework;
my $lang = "de";
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
my $todo = $ARGV[1];
if($todo eq "get_bikes"){
$si->get_bikes();
}